状況
.NET MAUIプロジェクトで発行したiOSの.IPAファイルをMacのアプリTransporterでアップロードすると、下記メールを受信しました。
メールタイトル: Action needed: The uploaded build for {アプリ名} has one or more issues.
メール本文:
Hello,
We noticed one or more issues with a recent delivery for the following app:
{アプリ名}
App Apple ID9999999999
Version 1.0.0
Build 1
Please correct the following issues and upload a new binary to App Store Connect.
ITMS-90683: Missing purpose string in Info.plist – Your app’s code references one or more APIs that access sensitive user data, or the app has one or more entitlements that permit such access. The Info.plist file for the “XXXXX.app” bundle should contain a NSCalendarsUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. 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. For details, visit: https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/requesting_access_to_protected_resources.
ITMS-90683: Missing purpose string in Info.plist – Your app’s code references one or more APIs that access sensitive user data, or the app has one or more entitlements that permit such access. The Info.plist file for the “XXXXX.app” bundle should contain a NSContactsUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. 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. For details, visit: https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/requesting_access_to_protected_resources.
ITMS-90683: Missing purpose string in Info.plist – Your app’s code references one or more APIs that access sensitive user data, or the app has one or more entitlements that permit such access. The Info.plist file for the “XXXXX.app” bundle should contain a NSMicrophoneUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. 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. For details, visit: https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/requesting_access_to_protected_resources.
ITMS-90683: Missing purpose string in Info.plist – Your app’s code references one or more APIs that access sensitive user data, or the app has one or more entitlements that permit such access. The Info.plist file for the “XXXXX.app” bundle should contain a NSAppleMusicUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. 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. For details, visit: https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/requesting_access_to_protected_resources.
ITMS-90683: Missing purpose string in Info.plist – Your app’s code references one or more APIs that access sensitive user data, or the app has one or more entitlements that permit such access. The Info.plist file for the “XXXXX.app” bundle should contain a NSSiriUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. 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. For details, visit: https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/requesting_access_to_protected_resources.
Though you are not required to fix the following issues, we wanted to make you aware of them:
ITMS-90683: Missing purpose string in Info.plist – Your app’s code references one or more APIs that access sensitive user data, or the app has one or more entitlements that permit such access. The Info.plist file for the “XXXXX.app” bundle should contain a NSLocationAlwaysAndWhenInUseUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. 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. For details, visit: https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/requesting_access_to_protected_resources.
ITMS-90683: Missing purpose string in Info.plist – Your app’s code references one or more APIs that access sensitive user data, or the app has one or more entitlements that permit such access. The Info.plist file for the “XXXXX.app” bundle should contain a NSLocationWhenInUseUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. 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. For details, visit: https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/requesting_access_to_protected_resources.
ITMS-90683: Missing purpose string in Info.plist – Your app’s code references one or more APIs that access sensitive user data, or the app has one or more entitlements that permit such access. The Info.plist file for the “XXXXX.app” bundle should contain a NSBluetoothAlwaysUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. 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. For details, visit: https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/requesting_access_to_protected_resources.
Apple Developer Relations
原因
ITMS-90683は、Info.plistに記載が必要なキーが不足しているエラーらしく、今回は下記が対象でした。
- エラー
- NSCalendarsUsageDescription
- NSContactsUsageDescription
- NSMicrophoneUsageDescription
- NSAppleMusicUsageDescription
- NSSiriUsageDescription
- 警告
- NSLocationAlwaysAndWhenInUseUsageDescription
- NSLocationWhenInUseUsageDescription
- NSBluetoothAlwaysUsageDescription
アプリ内部でカレンダーや連絡先などのアクセスするコードは記述していないのですが、外部ライブラリが関連APIにリンクしているだけで、これらのキーに説明文を追加する必要があるようです。
今回のアプリではAdMobを使用しており、おそらくこのライブラリが原因かと。
対応手順
Info.plistの編集
Platforms/iOS/Info.plistに追記します。
<key>NSCalendarsUsageDescription</key>
<string>This app may request access to the calendar for advertising purposes.</string>
<key>NSContactsUsageDescription</key>
<string>This app may request access to contacts for advertising purposes.</string>
<key>NSMicrophoneUsageDescription</key>
<string>This app may request access to the microphone for certain ad features.</string>
<key>NSAppleMusicUsageDescription</key>
<string>This app does not access Apple Music, but access may be required due to library dependencies.</string>
<key>NSSiriUsageDescription</key>
<string>This app does not use Siri, but access may be required due to library dependencies.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app may request location access to optimize advertising.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This app may request location access to optimize advertising.</string>
<key>NSBluetoothAlwaysUsageDescription</key>
<string>This app does not use Bluetooth, but access may be required due to library dependencies.</string>
表現として「使っていないが、SDKの都合上必要」とするのが無難です。
再アップロード
Visual Studioで.IPAファイルを発行し、再度Transporterでアップロードします。
コメント