テクノモンキーのアプリ開発日記

テクノモンキーの開発ブログです。iOS、Android、Unity、Cocos2d-xなどアプリ開発関連のTipsやアプリ開発に役立つ情報を発信します。

【iOS】ITMS-90683: Missing Purpose String in Info.plistのエラーの対処法

最近、ビルドしたアプリをApp Store Connectにアップロードしたところ、アップロードは成功したのですが、しばらくしてAppleから「ITMS-90683: Missing Purpose String in Info.plist」という内容のメールが届きました。

今回はこの対処法についてメモとして残しておきたいと思います。

 

ITMS-90683: Missing Purpose String in Info.plist」のエラー

Appleから以下のようなメールが届きました。

Dear Developer,
We identified one or more issues with a recent delivery for your app, "アプリ名". Your delivery was successful, but you may wish to correct the following issues in your next delivery:
ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSBluetoothAlwaysUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data are required to include a purpose string. If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).
After you’ve corrected the issues, you can use Xcode or Application Loader to upload a new binary to App Store Connect.
Best regards,
The App Store Team 

 

以下Google翻訳です。

親愛なる開発者、
アプリの最近の配信「アプリ名」に関する1つ以上の問題を特定しました。配信は成功しましたが、次の配信で次の問題を修正することができます。
ITMS-90683:Info.plistに目的の文字列がありません-アプリのコードが、機密ユーザーデータにアクセスする1つ以上のAPIを参照しています。アプリのInfo.plistファイルには、アプリがデータを必要とする理由を明確かつ完全に説明するユーザー向けの目的の文字列を持つNSBluetoothAlwaysUsageDescriptionキーが含まれている必要があります。 2019年春以降、ユーザーデータにアクセスするApp Storeに送信されるすべてのアプリには、目的の文字列を含める必要があります。外部ライブラリまたはSDKを使用している場合、目的の文字列を必要とするAPIを参照する場合があります。アプリはこれらのAPIを使用しないかもしれませんが、目的の文字列は依然として必要です。ライブラリまたはSDKの開発者に連絡して、APIを含まないバージョンのコードのリリースを依頼することができます。詳細(https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy)。
問題を修正したら、XcodeまたはApplication Loaderを使用して、新しいバイナリをApp Store Connectにアップロードできます。
宜しくお願いします、
App Storeチーム 

 

どうやら2019年4月から外部ライブラリやSDKが必要とするパーミッションをユーザーに許可してもらうようにしなきゃいけなくなったようです。

今まで気づきませんでしたが、おそらく前からアプリをアップロードする度にメールがきていたと思われます。

 

今までアップロードも審査も問題なかったのですが、調べてみると、上記のエラーが理由でリジェクトされたという話もあるので、対応しておくに越したことはなさそうです。

 

ITMS-90683: Missing Purpose String in Info.plist」のエラーの対処法

 

今回の指摘ではBluetoothの使用をユーザーに許可してもらう際の説明用のキー「NSBluetoothAlwaysUsageDescription」が抜けているためエラーとなっていたようです。

 

ですが、アップロードしたアプリでは、Bluetoothを使用していないはずなので、なぜこのような指摘があったのか疑問です。

 

Bluetooth関連のライブラリが含まれているかプロジェクトを調べてみると、iOSBluetooth関連のフレームワーク「CoreBluetooth」を参照しているのを確認しました。

 

「CoreBluetooth」をいれた覚えはないので、おそらく組み込んでいるSDKか、cocos2d-xで作ったので、cocos2d-xプロジェクトが「CoreBluetooth」を参照していると思われます。

 

とりあえずプロジェクトから「CoreBluetooth」の参照を解除してビルドしなおしたらエラーメールが来なくなりました。

 

なのでITMS-90683の対処法としては、

Appleから指摘のあったパラメータをInfo.plistに含める、もしくはライブラリ参照を見直せばよさそうです。

 

見落としがちですが、Appleからのメールはちゃんと読んだ方がよさそうですね。