Monacaチームの小田川です。
ニフクラ mobile backendのサービス終了が発表された影響もあり、cordova-plugin-firebasexを使用したビルドが増えてきました。そのため、cordova-plugin-firebasexに関するビルドエラーも増えてきました。
今回は、cordova-plugin-firebasex特有のビルドエラーについて説明していきたいと思います。
Androidビルドエラー例
cordova-plugin-firebasexを使用した際に、以下のようなビルドエラーが発生する場合があります。
ERROR:[string/google_app_id] /tmp/download/platforms/android/app/src/main/res/values/strings.xml [string/google_app_id] /tmp/download/platforms/android/app/build/generated/res/google-services/debug/values/values.xml: Resource and asset merger: Duplicate resources
ERROR:[string/google_api_key] /tmp/download/platforms/android/app/src/main/res/values/strings.xml [string/google_api_key] /tmp/download/platforms/android/app/build/generated/res/google-services/debug/values/values.xml: Resource and asset merger: Duplicate resources
ERROR:[string/project_id] /tmp/download/platforms/android/app/src/main/res/values/strings.xml [string/project_id] /tmp/download/platforms/android/app/build/generated/res/google-services/debug/values/values.xml: Resource and asset merger: Duplicate resources
このエラーは、複数のCordovaプラグインで、エラーに出力されている設定が行われているために、設定の重複が発生したエラーになります。ニフクラ mobile backendのプッシュ通知を利用する際に使用するNIFCLOUD-mbaasとcordova-plugin-firebasexをMonacaプロジェクトにインポートしてAndroidビルドを実行した場合、上記のエラーが発生します。
cordova-plugin-firebasexを使用する場合は、MonacaクラウドIDEのメニュー、
から、NIFCLOUD-mbaasを無効にすることで、上記のエラーに対応することができます。
iOSビルドエラー例1
cordova-plugin-firebasex使用して、iOSビルドを実行した際に、以下のエラーが発生する場合があります。
/tmp/download/platforms/ios/Pods/FirebaseSessions/FirebaseSessions/Sources/SessionStartEvent.swift:220:56: error: cannot convert value of type 'UnsafeRawPointer' to expected argument type 'UnsafePointer<pb_byte_t>?' (aka 'Optional<UnsafePointer<UInt8>>')
var istream: pb_istream_t = pb_istream_from_buffer(bytes, transportBytes.count)
このエラーは、cordova-plugin-firebasex@16.1.0
以降を使用している場合、Xcode 14未満でビルドした際に発生します。Monacaでは、Cordova 11以降のMonacaプロジェクトでXcode 14以降に対応しています。Xcode 14未満を使用している場合は、MonacaプロジェクトをCordova 11以降にアップグレードし、MonacaクラウドIDEのメニュー、
- ビルド - ビルド環境の設定 - IOS - Xcode
から、Xcode 14以降を選択することで対応することができます。
iOSビルドエラー例2
MonacaクラウドIDEでは、MonacaプロジェクトにCordovaプラグインをインポートする際に、URLやZipファイルからインポートすることができます。過去にcordova-plugin-firebasexのmasterブランチのURLやZipファイルからインポートした場合、以下のエラーが発生するケースがありました。
/tmp/download/platforms/ios/ivydress/Plugins/cordova-plugin-firebasex/FirebasePlugin.h:3:9: fatal error: 'Firebase.h' file not found
#import "Firebase.h"
^~~~~~~~~~~~
1 error generated.
masterブランチに公開されているバージョンは、開発途中の場合があるため、上記のようなビルドエラーが発生する可能性があります。Monacaプロジェクトにcordova-plugin-firebasexをインポートする場合は、以下の例のように、リリースされているバージョンを指定する事をおすすめします。Zipファイルを使用する場合も同様に、masterブランチに公開されているバージョンではなく、リリースされているバージョンのZipファイルを使用する事をおすすめします。
cordova-plugin-firebasexのバージョン指定例:
URLの場合:
https://github.com/dpa99c/cordova-plugin-firebasex.git#16.1.0
パッケージ名の場合:
cordova-plugin-firebasex@16.1.0
他のCordovaプラグインの場合も、masterブランチのバージョンを使用した際に、ビルドエラーが発生した場合は、バージョン指定したCordovaプラグインを使用してみてください。
iOSビルドエラー例3
Monacaプロジェクトのアプリケーション名に日本語
を設定している場合、以下のようなエラーが発生する場合があります。
/tmp/download/platforms/ios/サンプルアプリ/Plugins/cordova-plugin-firebasex/FirebasePlugin.m:8:9: fatal error: module 'FirebaseAnalytics' not found
@import FirebaseAnalytics;
~~~~~~~^~~~~~~~~~~~~~~~~
エラーが出力されているMonacaプロジェクトのアプリケーション名には、サンプルアプリ
が設定されています。エラーにも出力されているように、アプリケーション名は、ビルドの際のフォルダー名やファイル名に使用されます。cordova-plugin-firebasexで利用されているCocoaPodsは、ビルドの際のファイルパスに日本語が含まれていると正しく処理ができないため、上記のようなエラーが発生します。
Monacaプロジェクトのアプリケーション名は、Monacaプロジェクトのルートフォルダーに配置されているconfig.xml
のname
ディレクティブに設定されています。nameディテクティブには、short
属性があり、このshort属性を使用することで、iOSおよびiPadOSのホーム画面に表示されるアプリケーション名を設定することができます。
上記のエラーに対応する場合は、下記の例のようにMonacaプロジェクトのアプリケーション名には、アルファベットの名前を設定し、short属性に日本語名のアプリケーション名を設定することで対応することができます。
<name short="サンプルアプリ">Sample App</name>
このCocoaPodsの問題は、CocoaPodsを使用しているCordovaプラグインで発生するため、cordova-plugin-firebasex特有の問題ではありませんが、他のCocoaPodsを使用しているCordovaプラグインで同様のエラーが発生した場合は、nameディテクティブのshort属性を試してみてください。
おわりに
今回は、cordova-plugin-firebasexに関するビルドエラーについて説明しました。Firebaseのプッシュ通知に対応する場合、cordova-plugin-firebasexは、多く利用されているCordovaプラグインになります。cordova-plugin-firebasexを使用してビルドエラーが発生した際に、今回説明した内容が当てはまる場合は、説明を参考に対応してみてください。