やりたかったこと
iOS向けのアプリケーション作成に手を出しはじめたのですが、admobによる広告表示を実機で確認しようとしたとき、
下記のエラーに見舞われましたが、なんとか表示まで持っていけたという話です。
公式のスタートガイド(https://developers.google.com/admob/ios/banner?hl=ja) に従い進めたところ、
シミュレータでのテスト広告表示まで問題なく確認できたが、実機(iPad mini 4)でのテストで躓いた部分を書きます。
前提/背景
admobによる広告表示のため、Xcodeのプロジェクトを作成した後に、CocoaPodsを用いてGoogle-Mobile-Ads-SDK
をインポートしました。
公式ガイドの通りに実装をしてiPhoneSE, iPhone8のシミュレータでテスト広告の表示まで順調に確認できてました。
実機でのテストにおけるランタイムエラー
しかし、いざ実機でアプリケーションを動かそうとしたときに問題が発生しました。
ビルドは成功するのだが、実行時エラーでアプリケーションが落ちてしまう事象に遭遇しました。
- エラーメッセージは下記の通りです(一部)。
dyld: Library not loaded: @rpath/GoogleUtilities.framework/GoogleUtilities
Referenced from 〜以下略
原因
iOS 13.3.1 以降はfree developerの作成したアプリでは、ダイナミックフレームワークを拒否するようで、実行時にエラーが起きるらしいです。
詳しく理解できていないのですが、Googleの提供するフレームワークはOSアップデートにより、開発用アカウントの作成したアプリでは動かないみたいです。
対応
Podfileの下記部分を変更し、pod update
を行ったところ無事実機での動作を確認できました。
target 'xxx' do
# Comment the next line if you don't want to use dynamic frameworks
-use_frameworks!
+use_modular_headers!
記事作成時に気がついたんですが、思いっきり該当するコメントありますね...
# Comment the next line if you don't want to use dynamic frameworks
もしかしたら上記の変更ではなく、コメントアウトだけで動作するのかもしれないですね。
開発者登録していないアカウント(下記参照先の原文におけるfree developer)で起こる事象のようなので、
きちんと年貢を納めていれば起こらないエラーなのでしょうね。
多分事象が起こる対象が限定されることから、日本語記事があまり見つかりませんでした。
私のような駆け出しの方が躓くようなことがあった時に助けになれば幸いです。
環境
- Xcode: Version 11.3.1
- iPad mini 4: システムバージョン 13.3.1
参照先
- https://stackoverflow.com/questions/60249693/application-crash-when-calling-method-firebaseapp-configure-in-a-real-device/60303927#60303927
- https://github.com/firebase/firebase-ios-sdk/issues/4723