ITMS-91053警告の解決方法:必須API宣言の追加
問題の説明
2024年3月以降、多くの開発者がAppleから次の警告メッセージを受けるようになりました:
ITMS-91053: Missing API declaration - Your app’s code references one or more APIs that require reasons...
この警告は2024年5月1日以降必須となり、主に以下のAPIカテゴリに関するものです:
NSPrivacyAccessedAPICategoryFileTimestamp
NSPrivacyAccessedAPICategorySystemBootTime
NSPrivacyAccessedAPICategoryDiskSpace
NSPrivacyAccessedAPICategoryUserDefaults
この問題は、Appleが強化したプライバシー保護政策によるものです。特定のAPIを使用する際は、その利用理由をプライバシーマニフェストファイルで宣言する必要があります。
重要
2024年5月1日以降はこの対応が必須となり、適切な宣言がないとアプリの更新や新規提出が拒否されます。
根本原因
- アプリまたは依存ライブラリがAppleの「理由が必要なAPI」を使用している
PrivacyInfo.xcprivacy
ファイルが存在しない、または適切に設定されていない- サードパーティSDKが未対応のバージョンを使用している
- アプリ拡張機能に対して宣言が不足している
解決方法
基本対応:プライバシーマニフェストの作成
- Xcodeで新規ファイルを作成:「File」>「New」>「File...」
- 「Resource」セクションから「App Privacy」を選択
- ファイル名を
PrivacyInfo.xcprivacy
とし、ターゲットをメインアプリに設定
画像ガイド
宣言内容の追加例
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string> <!-- 設定値の保存/読み込み -->
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>35F9.1</string> <!-- 経過時間の計算 -->
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>E174.1</string> <!-- ストレージ最適化 -->
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string> <!-- ファイル管理 -->
</array>
</dict>
</array>
</dict>
</plist>
理由コードの適切な選択方法
APIカテゴリ | 推奨理由コード | 使用目的 |
---|---|---|
UserDefaults | CA92.1 | ユーザーデバイス上の設定保存 |
FileTimestamp | C617.1 | ファイル管理機能の実施 |
SystemBootTime | 35F9.1 | 経過時間の正確な計測 |
DiskSpace | E174.1 | ストレージ残量チェックと最適化 |
絶対にコピーアンドペーストせず、Apple公式ドキュメントで実際の用途に合った理由コードを選択してください。
警告
無関係な理由コードを追加すると審査が拒否される可能性があります。
フレームワーク別対応策
1. Flutterアプリケーション
ios/Runner/
ディレクトリにPrivacyInfo.xcprivacy
ファイルを配置- Xcodeでファイルをプロジェクトに追加し、ターゲットを
Runner
に設定
2. Xamarin/MAUIアプリケーション
- プライバシーマニフェストファイルを作成
- ビルドアクションを
BundleResource
に設定xml<BundleResource Include="PrivacyInfo.xcprivacy" />
3. Reactive Native/Expo
- 公式ドキュメントに従い設定
app.json
でネイティブモジュールのプライバシー情報を設定
サードパーティSDK対応
依存ライブラリが原因の場合の対応:
ライブラリのバージョンアップデート:
bashpod update [ライブラリ名]
手動でプライバシーマニフェストを追加:
- SDK用に個別の
PrivacyInfo.xcprivacy
ファイルを作成 - ターゲットをSDK名に設定(例:Alamofire)
- SDK用に個別の
互換性チェックツールの活用:
- William-Weng/PrivacyInfoDemoなどで依存関係をスキャン
よくある落とし穴と解決策
警告が消えない場合:
- 全てのアプリ拡張機能(Notification Extension等)に個別の
PrivacyInfo.xcprivacy
が必要 - ファイルのターゲット設定が正しいか再確認
- 全てのアプリ拡張機能(Notification Extension等)に個別の
Objective-Cライブラリの見落とし:
- 下記フィルタでAppleドキュメントを検索:
- 下記フィルタでAppleドキュメントを検索:
プライバシーレポートの生成:
- Xcode Organizerで「Generate Privacy Report」を実行
- 未宣言のAPIを特定
ベストプラクティス
- 早期対応:警告が出た時点ですぐに修正
- 定期的なスキャン:新しい依存関係追加時にプライバシーチェック
- 理由の適切性確認:アプリの実際の機能と理由コードを一致させる
- マルチプラットフォーム対応:iOSとiPadOSで別々のチェックが必要
公式WWDC解説動画(Get started with privacy manifests)も参考にしてください。必要な宣言を適切に行えば、この警告は恒久的に解決できます。