Skip to content

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が未対応のバージョンを使用している
  • アプリ拡張機能に対して宣言が不足している

解決方法

基本対応:プライバシーマニフェストの作成

  1. Xcodeで新規ファイルを作成:「File」>「New」>「File...」
  2. 「Resource」セクションから「App Privacy」を選択
  3. ファイル名を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カテゴリ推奨理由コード使用目的
UserDefaultsCA92.1ユーザーデバイス上の設定保存
FileTimestampC617.1ファイル管理機能の実施
SystemBootTime35F9.1経過時間の正確な計測
DiskSpaceE174.1ストレージ残量チェックと最適化

絶対にコピーアンドペーストせずApple公式ドキュメントで実際の用途に合った理由コードを選択してください。

警告

無関係な理由コードを追加すると審査が拒否される可能性があります。

フレームワーク別対応策

1. Flutterアプリケーション

  • ios/Runner/ディレクトリにPrivacyInfo.xcprivacyファイルを配置
  • Xcodeでファイルをプロジェクトに追加し、ターゲットをRunnerに設定

2. Xamarin/MAUIアプリケーション

  • プライバシーマニフェストファイルを作成
  • ビルドアクションをBundleResourceに設定
    xml
    <BundleResource Include="PrivacyInfo.xcprivacy" />

3. Reactive Native/Expo

サードパーティSDK対応

依存ライブラリが原因の場合の対応:

  1. ライブラリのバージョンアップデート

    bash
    pod update [ライブラリ名]
  2. 手動でプライバシーマニフェストを追加

    • SDK用に個別のPrivacyInfo.xcprivacyファイルを作成
    • ターゲットをSDK名に設定(例:Alamofire)
  3. 互換性チェックツールの活用

よくある落とし穴と解決策

  1. 警告が消えない場合

    • 全てのアプリ拡張機能(Notification Extension等)に個別のPrivacyInfo.xcprivacyが必要
    • ファイルのターゲット設定が正しいか再確認 ターゲット設定確認
  2. Objective-Cライブラリの見落とし

    • 下記フィルタでAppleドキュメントを検索: Objective-C API検索
  3. プライバシーレポートの生成

    • Xcode Organizerで「Generate Privacy Report」を実行
    • 未宣言のAPIを特定

ベストプラクティス

  1. 早期対応:警告が出た時点ですぐに修正
  2. 定期的なスキャン:新しい依存関係追加時にプライバシーチェック
  3. 理由の適切性確認:アプリの実際の機能と理由コードを一致させる
  4. マルチプラットフォーム対応:iOSとiPadOSで別々のチェックが必要

公式WWDC解説動画(Get started with privacy manifests)も参考にしてください。必要な宣言を適切に行えば、この警告は恒久的に解決できます。