[Unity] AppStoreConnectへのUpload時のITMS-90809問題


概要

iOS AppをAppStoreConnectにアップロード後、審査結果で下記のような事由でリジェクト。

ITMS-90809: Deprecated API Usage - New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability. Learn more (https://developer.apple.com/documentation/uikit/uiwebview).

Deprecated(非推奨)扱いになった『UIWebView』というAPIの呼び出しが検知されたため、とのこと。

この記事を読んでいる方はUnityユーザの方が多いと思うので、基本的には直接UIWebViewを呼び出して使っているわけではなく、UIWebViewを利用するライブラリを利用しているものと思われます。

この記事ではそのライブラリの調査方法と、私が遭遇したケースにおける解決方法を記載します。
※調査方法はMaxユーザ向けのため、Windowsユーザは読み替えが必要です

調査方法

まずUIWebViewを利用しているライブラリを見つける必要があります。
XCodeのProjectフォルダの直下でgrepすればあたりがつけられます。

実行コマンド

grep -r "UIWebView" .

実行結果

Binary file ./Libraries/libiPhone-lib.a matches
Binary file ./Pods/Google-Mobile-Ads-SDK/Frameworks/GoogleMobileAdsFramework-Current/GoogleMobileAds.framework/GoogleMobileAds matches

今回の私のケースだと上記2件がヒットしました。
上記2件を手がかりに、個別に解決方法を探っていきます。

1行目のlibiPhone-lib.aに関しては、Unityが生成したライブラリの模様。

2行目のGoogle-Mobile-Adsについては、アプリでリワード広告を表示するために利用しているAdmob用のSDKがヒットしているようです。

解決方法

1. libiPhone-lib.a

結論を先に書くと、UnityのVersionをあげるしか回避方法は見つかりませんでした。
かなり幅広いバージョンが該当するようです。
[IOS] APPLE THROWS DEPRECATED API USAGE WARNING...
上記の再現バージョンには書かれていませんが、2018.3.14でも再現しました。

2018.3と2018.4だと差分が多く移行が大変なので避けたかったですが。。。やむを得ません。
こう言ったことは今後も発生する可能性が高いので、このタイミングでLTS版に上げることにしました。

2019.4(LTS)にバージョンを上げたところ、grep結果にlibiPhone-lib.aは引っ掛からなくなりました。

2. GoogleMobileAds SDK

下記を参考に、Google Mobile AdsのSDKを最新化しました。
ITMS-90809: Deprecated API Usage (UIWebView APIを使用したアプリアップデート) 対策でGoogle-Mobile-Ads-SDKを更新

また、併せてGoogleMobileAdsのUnityプラグインを最新化しました。

  1. 公式からMobileAdsSDKforUnityをDL
  2. Unityプロジェクト内の下記を一度プロジェクト外に退避(コピーではなく移動) Assets/GoogleMobileAds, Assets/PlayServicesResolver, Assets/Plugins/Android, Assets/Plugins/iOS
  3. DLしたMobileAdsSDKforUnityを開き、プラグインをインポート
  4. UnityでAssets > Google Mobile Ads > settingsからID等を設定
  5. Build実行

実施した対策は以上です。

注意したいのが、上記を行っても grep結果にはGoogleMobileAdsがヒットします
キチンとバージョンが上がっていれば、審査も問題なく通過します。
(これに気づかず、「アップデートしたのにUIWebViewへの参照が消えない・・・」としばらく悩みこんでしました。。)

まとめ

上記をもって、無事AppStoreConnectへのアップロード後の審査がOKになりました。

開発期間が長期化するとこう言った問題は必ず付きまといますが、UnityVersionはその時点で最新のLTS版を選択していくのが安全だと感じました。

補足事項などあればコメント頂けると幸いです。