anz blog

Firebase In-App MessagingをCocoaPodsで導入するとビルドエラーになる

2022-06-20 #Firebase #CocoaPods

既存のプロジェクトに Firebase In-App Messaging を導入してみようということで、CocoaPods 経由で SDK を入れてみてビルドしたところエラーになって右往左往しつつも、原因とその解決策が分かったのでそこらの話し。

環境

  • Xcode v13.4
  • CocoaPods v1.11.3
  • Firebase v9.1

詳細

CocoaPods での導入自体は特に変わったことなくいつものとおり、Podfile にこちらのページを参考して記入するだけです。
こんな感じ。

platform :ios, '13.0'

target 'LocariMagazine' do
  use_frameworks!
  pod 'FirebaseAnalytics'
  pod 'FirebaseCrashlytics'
  pod 'FirebaseInAppMessaging' # これを追加
end

既存のプロジェクトに追加したので、他にもいくつか記載されてますけれど、In-App Messaging に限って言うと FirebaseInAppMessaging が対象です。
ここからいつものように pod install をたたけば完了です。
その状態からビルドをすると下記のようなエラーがでます。

'FirebaseCore/FIRLogger.h' file not found

'FirebaseCore/FIRLogger.h' file not found

いつもなら、Podsでなにかビルドエラーが出た場合、Clean & Build とか Xcode 再起動とか DerivedData 配下を削除などで解決できたりするのですけれど、今回はそのいずれも全然だめでした。

原因

この状態で Podfile.lock(あるいは pod install のログ)をみるとわかるのですが、FirebaseInAppMessaging のバージョンが 0.13.0 というかなり古そうなものが入っていることに気づけます。
そこで、リポの FirebaseInAppMessaging.podspecのバージョン をみてみると 9.1.0-beta とあって、あきらかに全然ちがう物が入ってきていることがわかりました。

なぜこの最新バージョンが入ってこないのだろう?ということなのですけど、この beta という記述が問題になっていそうです。
CocoaPods 側のドキュメント等で見つけられなかったのですが、おそらくですがバージョンで beta などと suffix 指定がある場合は、プレリリース扱いとなり最新バージョンとして扱われなくてインストールしないという挙動になっていそうです。
なので、Podfile でバージョン明示がなく最新をいれようとすると、beta など suffix 指定がないもので最新ということで、0.x のバージョンが入ってきているという感じです。
(0.xも0.26とかあるのですけど、多分ほかとの依存関係の問題でそれが入ってきているだけかと)
実際、 FirebaseInAppMessaging.podspec をさかのぼっていくと、0.x のバージョンは suffix はとくになく、メジャーバージョンが上がってからは suffix に beta がつくようになってます。(多分途中でbetaの扱い方が内部で変わったのでしょう)

ということでまとめると、FirebaseInAppMessaging が beta バージョンであること、CocoaPods がプレリリースは自動では入れない仕様というのがあっての今回のエラーが発生してそうだということに。

解決策

なので、解決策は簡単で、Podfileで入れたいバージョンを明示してあげるということです。
こういう感じです。

platform :ios, '13.0'

target 'LocariMagazine' do
  use_frameworks!
  pod 'FirebaseAnalytics'
  pod 'FirebaseCrashlytics'
  pod 'FirebaseInAppMessaging', '~> 9.1.0-beta'
end

これで入れ直してあげると、ちゃんとそのバージョンが入ってきて無事にビルドもできるようになります 🎉

参考