アヒルのある日

株式会社AHIRUの社員ブログです。毎週更新!社員が自由に思いついたことを書きます。

Unityで作成したiOS AppをiTunes Connectに提出した際にITMS-90809のメールが来たので対応した話

こんにちは、みえないプログラマです。

普段は名前の通り裏方の開発を行っていることが多いです。でも最近はアプリなど表の開発を行うことも増えてきました。

今回は真面目な話ですが、これから色々趣味の話も書けたらなと思っています。

TL;DR

  • アプリの内部でUIWebViewという非推奨APIを使っているという警告
  • Unityの場合、外部のプラグインで使っている場合が多いので、プラグインの最新のRelease Notesをチェックして必要に応じてアップデートする
  • UnityのバージョンによってはUnity本体でも使っているのでUnity本体のバージョンアップが必須

ITMS-90809って?

提出したApp内で非推奨APIのUIWebViewが使用されている、ということである。Appleは近々このAPIを利用しているAppの新規の承認をしなくなるらしい。

この記事で詳しく解説されている。 審査に出したiOSアプリが ITMS-90809 としてAppleから問題を指摘される話

何をしたか?

まず、ソースコード内で利用されている箇所をチェック

これは上記の記事でも書かれている内容で、Unityから吐き出されたソースコード内をUIWebViewで検索する。

Unityの場合、大抵他のライブラリやプラグインで利用されているのでそれぞれのライブラリについてチェックする。

全部消したはずなのに…

UnityのライブラリもUIWebView対策済みのものにアップデートしたし大丈夫だろうと思っていたらまたメールが来た。

調べると、コンパイル済みのライブラリ内で利用されている場合があるらしい。ということで、Unityから吐き出されたXCodeプロジェクト内のコンパイル済みの静的ライブラリのシンボル情報を確認してみた。

for l in `find . -name "*.a"`; do
    echo $l
    nm $l | grep UIWebView
done

ここで、次のようにファイルパスの下にgrepの結果がヒットしていたらその静的ライブラリで使われている。

(省略)
./Libraries/libiPhone-lib.a
         U _OBJC_CLASS_$_UIWebView
-------- W l_OBJC_LABEL_PROTOCOL_$_UIWebViewDelegate
-------- W l_OBJC_PROTOCOL_$_UIWebViewDelegate
                 U _OBJC_CLASS_$_UIWebView
---------------- W l_OBJC_LABEL_PROTOCOL_$_UIWebViewDelegate
---------------- W l_OBJC_PROTOCOL_$_UIWebViewDelegate
./Libraries/libil2cpp.a
(省略)

libiPhone-lib.aはUnityのランタイムである。つまり、Unity自体がUIWebViewを使用していた(!)

Unityのバージョンを更新する

こうなるとUnityのバージョンを更新するしかない。この問題は、

  • 2019.2.7f2
  • 2018.4.9f1
  • 2017.4.33f1

で解消されている。そのため、解消済みバージョンにUnityを更新した。

それでもダメ(な場合がある)らしい

外部のプラグインも入れていないし、適切なUnityバージョンにアップデートしたのにまだ怒られる場合があるらしい。

この場合、プロジェクトを作成した時点で最初から入っているUnity Adsプラグインが悪さをしているので、3.3.0まで更新するか利用していないなら削除してしまう。