Skip to main content

 

 

 

 
Language:
 
 
 
OutSystems

モバイルアプリ生成のトラブルシューティング

この記事では、モバイルアプリをネイティブプラットフォームに生成するときの問題のトラブルシューティングに役立つ情報を提供しています。

注記:

一般的な問題

このセクションでは、モバイルアプリ生成のトラブルシューティング向けに、よくある問題とそのソリューションを紹介します。

プラグインのバージョンと互換性がないためビルドが失敗する

アプリ内のプラグインのバージョンとMABSに必要なプラグインのバージョンとの間に不一致がある場合、ビルドは失敗し、以下のメッセージが表示されます。

In Android on [date] at [time] - Generation failed due to plugin version incompatibility with MABS.We recommend that you review the following plugin(s) and retry building the app:

[plugin name] version [version detected] must be equal or greater than [version required]
(...)

Forgeからプラグインを最新バージョンに更新して、ビルドエラーを修正します。

エラーメッセージには以下の情報が含まれています。

  • プラグイン名。gitリポジトリで識別されたプラグインの名前。これはForgeでの名前と似ています。
  • バージョン。バージョン情報とは、OutSystemsがプラグインのビルドに使用するOutSystems gitリポジトリとタグを指します。プラグインのForgeバージョンではありません

iOS 13でQRコードを使用したインストール中のエラー

SafariでQRコードをスキャンしてアプリケーションをインストールするとき、OSがiOS 13の場合にエラーが発生します。

この問題を解決するには、Platform Serverをバージョン10.0.1016または11.0.539に更新します。

Platform Serverの更新を選択できない場合の回避策として、Safariの[Disable Web SQL]機能をオフにする方法があります。

1.[Settings > Safari Options]に移動します。**

1.[Advanced > Experimental Features]に移動します。

![](images/error-installing-via-qr-code-in-ios-13.png?width=300)

1.最後に、[Disable Web SQL]というオプションをオフにします。

iOS 13のiPadOSでIPAをインストールできない

新しいiPadOSを使用している場合、OutSystemsストアからIPAをインストールすることができません。iOS 13のiPadOSではSafariでのダウンロードの処理方法が変わり、デバイスにIPAをインストールするのではなくIPAのダウンロードのみを行うようになりました。これは、デバイスのSafariがデスクトップブラウザとして機能するようになったためです。これにより、デスクトップブラウザと同じ動作になります。詳細については、こちらのリンクをご覧ください

この問題を解決するには、[Request Mobile Website]を実行します(以下の画像を参照)。すると、以前のiPadOSと同じ動作にすることができます。

AppleStoreに提出する際のUIWebViewの警告

MABS 6.0以前で構築されたアプリをApple Storeにパブリッシュすると、以下のメッセージが表示されます。

Apple will stop accepting submissions of apps that use UIWebView APIs.

これが発生するのは、AppleがUIWebViewを非推奨にしているためです。Appleは2020年12月まで、この警告がある状態でのアプリのアップデート提出を受け付けます。ただし2020年4月以降、新規でのアプリ提出は受け付けられなくなります。

これを回避するには、以下の3点を行う必要があります。

1.MABS 6.1以降に切り替えます。 1.すべてのForgeコンポーネントを最新バージョンに更新します。サポート対象のForgeコンポーネントはすべて更新され、UIWebView参照が削除されています。さらにコミュニティでは、よく使用されるコンポーネントの多くも更新されました。 1.その他のプラグインに残っているUIWebViewの参照を見つけて、それらを削除します。

MABS 6.1以降に切り替えた後もこのメッセージが表示される理由は、アプリの提出後、Appleでのコード解析によって残りのUIWebView参照が検出されたためです。

たとえば、アプリがCordovaプラグインを使用している場合、そのアプリにはUIWebViewへの参照が含まれている可能性があります。プラグインのソースコードで`UIWebView`を検索すると、そうした参照を見つけることができます(macOSでは、`grep -ri UIWebView [plugin folder]`で検索できます)。プラグインライブラリ(CocoaPodsなど)で参照を検出するには、参照を検索する前に[空のCordovaアプリ](#reproduce-in-a-clean-cordova-project)を使用する必要があります。もしくは、該当するライブラリのドキュメントをご覧ください。

無効なiOS証明書を使用している

iOS証明書に問題があるためにモバイルアプリの生成がブロックされる場合があります。ログファイルを確認すると、以下のいずれかの状況が発生している可能性があります。

  • Service Studioで入力された証明書に、同様にService Studioで導入されたプロビジョニングプロファイルとの互換性がありません。
    こちらの記事の手順を実行することを推奨します。

  • 証明書がコード署名として有効ではありません。
    証明書が取り消されたり、期限切れになったりしていないかを確認します。

ターゲットのネイティブSDKのバージョンが正しくない

iOSとAndroidのいずれの場合も、モバイルアプリの生成に使用される各MABSバージョンは特定のネイティブSDKバージョンをターゲットにしています。このとき、プラグインはこれらのネイティブSDKの異なるバージョンに依存している可能性があります。

以下の例(モジュールの拡張構成)では、Cordovaの設定を使用してアプリのネイティブSDKを変更し、ターゲットをAndroid SDK 22にしています。

この場合、MABS 5.0を使用しており、そのMABSバージョンの仕様によると、Android SDKはバージョン28である必要があります。そのため、Playストアにアプリを提出できるようにvalueをバージョン28に変更する必要があります。

ネイティブSDKのバージョンを強制的に適用するCordovaの設定がありますが、プラグインを調整してMABSの仕様のターゲットSDKバージョンに合わせる方法が最適です。

プラグインのタグ付けしたバージョンを使用していない

プラグインのタグ付けしたバージョンを使用することが推奨されています。使用していない場合、常にマスターブランチディレクトリの最新バージョンを使用します。この場合は開発者がメインブランチの変更を絶えずプッシュしている可能性があるため、不安定なバージョンのコードを利用することになります。

たとえば、GitHubリポジトリでは、<GitHubLink>#<TagVersion>を以下のモジュールの拡張構成の例で示されているように使用する必要があります。

プラグインのタグ付けしたバージョンの依存関係を使用していない

プラグインの依存関係がライブラリの特定のバージョンをターゲットにしていない場合、そのライブラリの最新バージョンが取得されるため、ネイティブの生成で不整合が発生します。

たとえば、Google Analyticsプラグインはplay-services-analyticsを使用しますが、任意のバージョンを使用することができます。これは、plugin.xmlファイルの以下のセクションでわかります。

「+」記号があると、アプリを生成する際に最新バージョンを使用することができますが、play-services-analyticsに大きな変更が加えられた場合、MABS要件やその他のプラグインとの互換性がなくなる可能性があります。

これらのエントリを有効なバージョンで維持することで、結果が予測可能になります。

これはほんの一例ですが、仕様で「+」を使用して(プラグインの依存関係を取得するという)同じ目的で使用されるエントリがこのほかにもあります。たとえば、dependencyエントリ(同じplugin.xmlファイル内)やdependencyブロック(Gradleファイル内)などです。

同じメタデータタグを複数定義している

メタデータタグが異なる値で複数定義される場合があります。プラグインでこれがよく発生するのは、AndroidManifest.xmlファイルを作成または変更して、同じキーのメタデータタグの値を再定義したり上書きしたりする場合です。

たとえば、以下のログファイルは、独自のライブラリによって文字列リソースとしてすでに定義されているSOME_APP_KEYメタデータタグの値をプラグインが上書きすることによって衝突が発生していることを示しています。

* What went wrong:
> Manifest merger failed : Attribute meta-data#SOME_APP_KEY@value value=(1234567890) from AndroidManifest.xml:18:54-130
    is also present at [com.some.some:library:1.2.3] AndroidManifest.xml:22:13-47 value=(@string/some_app_key).
    Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:18:9-133 to override.

この場合の解決策は、プラグインの実装を確認して、メタデータタグの値の上書きを修正することです。

AndroidXサポートライブラリとの衝突

AndroidXサポートライブラリを使用するプラグイン(またはプラグインの依存関係)を含むアプリを作成する場合、サポートライブラリにMABSバージョンとの互換性がないことがあります。

このタイプの問題では、ログファイルには、以下のような内容が含まれます。

* What went wrong:
Execution failed for task ':app:processReleaseManifest'.
> Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91
    is also present at [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
    Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:5:5-20:19 to override.

この問題を解決するには、アプリのAndroidXを有効にします。これはMABS 6.3以降で使用できます。AndroidXを有効にするには、「AndroidXでアプリを構築する」をご覧ください。

または、プラグインの実装を確認して、AndroidXを使用する可能性のあるGradleの依存関係を探します。

以下の例のように、バージョンがロックされていない場合、Googleへの依存関係によってこのような状況が発生する場合もあります。

implementation "com.google.android.gms:play-services-maps:+"`

この場合は最新バージョンが使用され、そのバージョンがAndroidXである可能性があります。 このような問題を解決するには、AndroidXに依存しているプラグインを特定してバージョンをロックし、AndroidX以外のバージョンを使用するようにします。

動作にAndroidXが必要なプラグインのバージョンを使用している場合は、AndroidXを使用しないバージョンへのアップグレードまたはダウングレードを検討します。

Androidサポートライブラリ間に互換性がない

異なるバージョンをターゲットとするAndroidサポートライブラリの依存関係を使用するアプリを作成すると、モバイル生成に関する問題が発生する場合があります。

以下のログメッセージの例は、バージョンが異なる複数のサポートライブラリが使用されており、それらによって異なるandroid.support.VERSIONメタデータタグの値が定義されている場合のものです。

* What went wrong:
> Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(25.4.0) from [com.android.support:exifinterface:25.4.0] AndroidManifest.xml:25:13-35
    is also present at [com.android.support:support-v4:26.1.0] AndroidManifest.xml:28:13-35 value=(26.1.0).
    Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:23:9-25:38 to override.

この問題を解決するには、互換性がない原因となっている可能性のあるプラグインをアップグレード(またはダウングレード)します。または、MABSのバージョンを変更し、MABSのビルトインプラグインが使用するAndroidサポートライブラリとの互換性が確保されるようにします。

問題が続く場合は、プラグインの実装を変更し、問題のある依存関係のバージョンの互換性が確保されるようにします。

Googleサービス構成ファイルに関する問題

Googleサービスを使用するアプリは、特定のJSON(Androidの場合)構成ファイルまたはPlist(iOSの場合)構成ファイルを正しいディレクトリ内に配置して適切に構成する必要があります。Googleサービスを使用するプラグインでは、Service Studioのリソースとして追加された構成ファイルが必要です。

たとえば、Googleサービスプラグインを使用しているときにgoogle-services.jsonファイルが正しいディレクトリ内にない場合、ログメッセージは以下のようになります。

Execution failed for task ':app:processDebugGoogleServices'.
> File google-services.json is missing.The Google Services Plugin cannot function without it.

別の例として、google-services.jsonは正しいディレクトリ内にあるものの、その中にあるJSONのパッケージ名がアプリケーションのパッケージ名と一致していない場合、ログメッセージは以下のようになります。

Execution failed for task ':app:processDebugGoogleServices'.
> No matching client found for package name 'com.some.some'

この問題を解決するには、以下の手順を実行します。

  • プラグインに関するオンラインヘルプを参照し、プラグインが適切に構成されていることを確認します。
  • JSONファイルまたはPlistファイルに正しい情報が含まれていることを確認します。

問題が続く場合:

ForgeコミュニティのプラグインであるPushWooshの場合に限り、Android用のJSON構成ファイルを含むZIPファイルが必要です。詳細については、プラグインに関するオンラインヘルプをご覧ください。

Google Playサービスのバージョンに互換性がない

Google Playサービスの依存関係を複数使用するアプリを作成する場合、それらのバージョンが衝突し合い、アプリの生成時に問題が発生する場合があります。

この例のログファイルには、互換性のないGoogle Playサービスライブラリの依存関係を2つ以上使用するプラグインを含むアプリを生成する際のエラーメッセージが含まれます。

Failed to capture fingerprint of input files for task ':app:preDebugBuild' property 'compileManifests' during up-to-date check.
> In project 'app' a resolved Google Play services library dependency depends on another at an exact version (e.g. "[11.0.
  0]", but isn't being resolved to that version.Behavior exhibited by the library will be unknown.

この問題を解決するには、プラグインを更新し、互換性のあるGoogle Playサービスライブラリバージョンを使用するバージョンにします。

さらに問題が続く場合は、プラグインを変更し、互換性のある依存関係のバージョンを強制的に適用します。

欠落しているXMLノードの編集に関する問題

一部のプラグインは、AndroidManifest.xmlファイルを変更しようとします。編集しようとしているノードが存在しない場合、ビルドは失敗します。この構成は、plugin.xmlファイルの値に応じて変わります。

MABS 6は、使用されているCordova-androidバージョンを8.0.0から8.1.0に引き上げます。これにより、AndroidManifest.xmlファイルからuses-sdk要素が削除されます。そのため、この構成を編集しようとするプラグインを備えたアプリは、MABS 6でビルドできません。MABS 6でビルドが失敗する原因となる変更の例を以下に示します。

<edit-config file="AndroidManifest.xml" target="/manifest/uses-sdk" mode="merge">
    <uses-sdk android:minSdkVersion="19" />
</edit-config>

ログファイルには、以下のようなエラーがあります。

> Error: Unable to graft xml at selector "/manifest/uses-sdk" from ".../platforms/android/app/src/main/AndroidManifest.xml" during config install

または:

> Error: Unable to graft xml at selector "/manifest/application/some-tag" from ".../platforms/android/app/src/main/AndroidManifest.xml" during config install

この問題を解決するには、プラグインを最新バージョンに更新してみます。これで解決しない場合は、plugin.xmlファイルでedit-configタグを探します。疑わしいタグを見つけた場合は、変更または削除します。特にuses-sdkタグは、MABS 5またはMABS 6には必要ありません。

アプリをAndroid 7.1以前にインストールできない

大文字で始まるapplicationIdを持つアプリ(たとえば、MyCompany.Appなど)は、Android 7.1以前にインストールできません。 これは、以前のバージョンのOSで見つかったAndroidの問題です。

以下は、この問題に対処するための代替手段です。

  • 何もせずに、このようなAndroidバージョンのサポートをやめる
  • または、applicationIdを変更するapplicationIdによってアプリを一意に識別するため、その変更は慎重に検討する必要があります。詳細については、Androidの公式ドキュメントをご覧ください。

トラブルシューティングの手法

このセクションでは、モバイル生成に関する問題のトラブルシューティングにおいて役立つ手法をいくつか説明しています。

ログを確認する

トラブルシューティングの手法の1つとして、ログファイルで問題を探します。

1.ログファイルを取得する

OutSystems logs the generation steps of a mobile app package, including the stack trace with additional details in case of error.

To get this mobile app package generation log, do the following:

  1. If you are in Service Studio, go to the details page of the mobile app and click Application Management... to open the mobile app's page in Service Center console. The page opens in a separate browser.

    Otherwise, open the Service Center console of the environment (https://<your_server>/ServiceCenter), go to Factory » Applications, and click the mobile app name to go to the app details page.

  2. Go to the Native Platforms tab. You will see the information about the latest mobile app package generation for each mobile platform.

  3. Click the Log File icon to save the file.

If you are getting this log by request of OutSystems Support, fetch the file you saved from the local download folder and attach it to your support case.

2.ログファイルで問題を探す

ログファイルを開き、エラーがある行を探します。検索を絞り込むため、エラーが発生した時刻に近いタイムスタンプの行を探します。

2つのトラブルシューティングの例を以下に示します。

ログによるトラブルシューティングの例

例1:

モバイルアプリの生成中に「Error fetching Cordova plugin」エラーが発生しました。

ログを確認したところ、以下の詳細メッセージがありました。

これは、プラグインで定義されている1.5.0タグがGitHubに存在しないことを示しています。

プラグインの実装を確認して適切なタグを使用する必要があります。

例2:

前の例と同様に、「Error fetching Cordova plugin」エラーが発生しました。

ログを確認したところ、以下の詳細メッセージがありました。

この場合のログは、PushWooshプラグインの構成のアーカイブがないことを示しています。プラグインに関する指示で、「google-services」アーカイブを含める必要があることが示されており、これは失敗したCordovaフックの名前に関連しています。

プラグインを確認する

モバイルアプリでプラグインを使用する場合、プラグインが問題の原因になる場合があります。このセクションでは、プラグインに関連する可能性のある問題のトラブルシューティングの方法に関するガイドラインを提供しています。

プラグインとMABSの適合を確認する

プラグインを使用する場合、プラグインの実装がMABSのバージョン要件に適合していることを確認します。適合していない場合、それが問題の原因になる可能性があります。

たとえば、plugin.xmlファイルに以下の画像のようなエンジンエントリが含まれている場合、これらにCordova CLIまたはAndroid/iOSエンジンとの互換性があることを確認します。

問題の原因になっているプラグインを特定する

プラグインを含むアプリをトラブルシューティングする場合、まず、問題の根本的な原因になっているプラグインを特定します。1つのプラグインに注目すると、分析が容易になります。

このセクションでは、問題の原因になっているプラグインを特定するための手法をいくつか説明します。

クリーンなOutSystemsアプリで再現する

これはプラグインに関する問題の再現を試みるときのローコードによる手法です。通常、問題の原因となっているプラグインに関して有力なヒントがあるときにこれを使用します。

以下の手順を実行し、クリーンなアプリを作成してプラグインを追加します。

1.Service Studioで新しいモバイルアプリを作成します。

2.そのアプリにプラグインを追加し、モバイルアプリを生成します。

3.問題が再現された場合は中止し、ログを使用して問題をトラブルシューティングします。

4.別のプラグインを追加し、手順2以降を繰り返します。

クリーンなCordovaプロジェクトで再現する

この方法では、Cordovaプロジェクトでの作業と若干の設定作業に関する知識が必要になります。しかし、主にこの方法ではモバイルアプリをすばやく生成できるため、複数のプラグインを使用している場合や問題の原因に関するヒントがない場合に、前の方法よりも適切に解明することができます。

以下の手順を実行し、Cordovaプロジェクトを作成してプラグインを追加します。

1.MABSのバージョン要件で示されたCordova CLIバージョンのCordovaの手順に従って、Cordova環境を設定します。
注記: iOSの場合は、macOS環境を使用する必要があります。

1.Cordovaプロジェクトを作成します。

    cordova create <アプリ名>

1.Cordovaプロジェクトフォルダに移動してコマンドを実行します。

    cd <アプリ名>

1.プラットフォームを追加します。

    cordova platform add <プラットフォーム>@<エンジンのバージョン>

ここでは、以下のようになります。    
`<プラットフォーム>`: 「android」または「ios」。    
`<エンジンのバージョン>`: [MABSバージョンで要求される](https://success.outsystems.com/Support/Release_Notes/Mobile_Apps_Build_Service_Versions)エンジンのバージョン。

1.プラグインを追加してプロジェクトを作成します。

    cordova plugin add <プラグインリポジトリのURL>

    cordova build <プラットフォーム>

1.問題が再現された場合は中止し、ログを使用して問題のトラブルシューティングを行います。

1.問題が再現されなかった場合は、手順5以降を繰り返します。

この方法では、MABSバージョンのCordova Android/iOSエンジンに対してプラグインをテストすることができます。しかし、OutSystemsにより生成されたモバイルアプリには、OutSystemsが内部で使用するビルトインプラグインを持つネイティブシェルがあります。この場合はそれらがインストールされていないため、プラグインとビルトインプラグインに互換性がないことを検出できません。

プラグインを削除してから生成し直す

問題の原因になっているプラグインを特定する別の手法は、プラグインを1つずつ削除し、削除するたびにアプリを生成することです。問題が解消された時点で、そのプラグインが問題の原因であったことがわかります。

まだ問題がある場合

このドキュメントに問題のトラブルシューティングに役立つ手法がなかった場合は、サポートケースをオープンしてOutSystems Supportのサポートを受けることを検討してください。