0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Expoでexpo.ios.infoPlistの設定が反映されない問題と解決策

Posted at

:writing_hand: 3行まとめ

  • expo.ios.infoPlistに設定を追加しても、ビルド後のInfo.plistに反映されない場合があるよ
  • expo/config-pluginswithInfoPlistを使うことで、追加設定が正しく反映されるようになるよ
  • 問題が発生した際は、app.config.tsの設定が上書きされていないか確認し、必要に応じてwithInfoPlistを使用するといいかも

発生した問題の詳細

Expoを使用して、EAS Buildとexpo-dev-clientでiOSアプリをビルドしていました。アドサーバーとしてApplovinを利用し、Admobをメディエーションとして接続する必要がありました。公式ドキュメントに従い、AppLovinMediationGoogleAdapterをPodからインストールし、app.config.tsexpo.ios.infoPlistGADApplicationIdentifierを追加しました。

ところが、ビルド後にアプリを起動すると起動時にクラッシュするという問題が発生。調査を進めた結果、Google Mobile Ads SDKのバージョン7.42.0以降では、Info.plistGADApplicationIdentifierが正しく設定されていないとクラッシュするようです。

調査と解決方法

問題が発生した原因を探るため、まず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に追加され、アプリは無事にクラッシュせずに起動するようになりました:raised_hands:

まとめ

Expoでexpo.ios.infoPlistを使用してiOSのInfo.plistに設定を追加している際、設定が反映されない問題に直面した場合は、withInfoPlistを使用することを検討してください。expo.ios.infoPlist経由の編集では設定が上書きされる可能性があるため、公式プラグインであるexpo/config-pluginswithInfoPlistを活用すると確実に反映されます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?