3行まとめ
-
expo.ios.infoPlist
に設定を追加しても、ビルド後のInfo.plist
に反映されない場合があるよ -
expo/config-plugins
のwithInfoPlist
を使うことで、追加設定が正しく反映されるようになるよ - 問題が発生した際は、
app.config.ts
の設定が上書きされていないか確認し、必要に応じてwithInfoPlist
を使用するといいかも
発生した問題の詳細
Expoを使用して、EAS Buildとexpo-dev-client
でiOSアプリをビルドしていました。アドサーバーとしてApplovinを利用し、Admobをメディエーションとして接続する必要がありました。公式ドキュメントに従い、AppLovinMediationGoogleAdapter
をPodからインストールし、app.config.ts
のexpo.ios.infoPlist
にGADApplicationIdentifier
を追加しました。
ところが、ビルド後にアプリを起動すると起動時にクラッシュするという問題が発生。調査を進めた結果、Google Mobile Ads SDKのバージョン7.42.0以降では、Info.plist
にGADApplicationIdentifier
が正しく設定されていないとクラッシュするようです。
調査と解決方法
問題が発生した原因を探るため、まずexpo prebuild
を使って生成されたInfo.plist
の内容を確認しました。すると、app.config.ts
で指定したはずのGADApplicationIdentifier
が反映されていないことがわかりました。
Expoの公式ドキュメントによると、expo.ios.infoPlist
を使った設定の編集は、結合時に他の設定に上書きされてしまうことがあるとのことです。
この問題を回避するため、expo/config-plugins
が提供するwithInfoPlist
を使って、Info.plist
の内容をプラグインを通じて直接編集する方法に切り替えました。具体的には以下のようなコードをapp.config.ts
に追加しました。
import { withInfoPlist } from 'expo/config-plugins';
output = withInfoPlist(output, (config) => {
config.modResults.GADApplicationIdentifier = "ca-app-pub-xxxxxxxxxxxxxxxxxxx";
return config;
});
この変更により、GADApplicationIdentifierが正しくInfo.plistに追加され、アプリは無事にクラッシュせずに起動するようになりました
まとめ
Expoでexpo.ios.infoPlist
を使用してiOSのInfo.plist
に設定を追加している際、設定が反映されない問題に直面した場合は、withInfoPlist
を使用することを検討してください。expo.ios.infoPlist
経由の編集では設定が上書きされる可能性があるため、公式プラグインであるexpo/config-plugins
のwithInfoPlist
を活用すると確実に反映されます。