ANTIGRAVITY LABEN
記事一覧/アプリ開発
アプリ開発/2026-04-05中級

AntigravityでiOSプライバシーマニフェストを自動生成・管理する実践ガイド

iOS 17以降で必須となったプライバシーマニフェスト(PrivacyInfo.xcprivacy)をAntigravityで自動生成・管理する方法を徹底解説。APIアクセス理由の記述からApp Store審査通過まで、実践的なワークフローを紹介します。

ios35swift9privacy3app-dev47xcode4antigravity436

取り組みの背景:なぜプライバシーマニフェストが必要なのか

2024年5月以降、App Storeへの新規申請・アップデートには**プライバシーマニフェスト(PrivacyInfo.xcprivacy)**の提出が義務付けられましました。これは、アプリが使用するAPIの目的やデータ収集の内容をAppleに申告するための仕組みです。

プライバシーマニフェストの設定を怠ると、App Store審査でリジェクトされるだけでなく、ITMS-91053などのエラーメールが届くことがあります。しかし、正確な設定は複雑で、どのAPIがどのカテゴリに該当するかを手動で調べるのは時間がかかります。

この記事で学べること:

  • プライバシーマニフェストの基礎知識と必須項目
  • AntigravityによるAPIスキャンの自動化
  • PrivacyInfo.xcprivacyの自動生成ワークフロー
  • App Store審査を通過するための確認チェックリスト

対象読者は、iOSアプリ開発の基礎知識があり、プライバシーマニフェスト対応を効率化したい方です。Antigravityの基本操作については、AntigravityでiOSアプリを作る入門ガイドも合わせてご参照ください。


プライバシーマニフェストの基礎知識

対象となるAPIカテゴリ

Appleが指定する「Required Reason API」は、主に以下のカテゴリに分類されます。

  • File timestamp APIs — ファイルの作成日時・更新日時へのアクセス
  • System boot time APIs — デバイスの起動時間の取得
  • Disk space APIs — ディスク容量・空き容量の取得
  • Active keyboard APIs — 現在使用中のキーボード情報の取得
  • User defaults APIsUserDefaultsを使ったデータの読み書き

これらのAPIを使用する場合、その「理由コード(Reason Code)」をマニフェスト内に記述する必要があります。理由コードはAppleが定めた固定の文字列で、たとえばUserDefaultsを設定の保存目的で使う場合はCA92.1などが該当します。

PrivacyInfo.xcprivacyのファイル構造

マニフェストファイルはXML形式のプロパティリスト(plist)で、以下のような構造になっています。

<?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>NSPrivacyCollectedDataTypes</key>
  <array>
    <dict>
      <key>NSPrivacyCollectedDataType</key>
      <string>NSPrivacyCollectedDataTypeDeviceID</string>
      <key>NSPrivacyCollectedDataTypeLinked</key>
      <false/>
      <key>NSPrivacyCollectedDataTypeTracking</key>
      <false/>
      <key>NSPrivacyCollectedDataTypePurposes</key>
      <array>
        <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
      </array>
    </dict>
  </array>
  <!-- APIアクセスの理由 -->
  <key>NSPrivacyAccessedAPITypes</key>
  <array>
    <dict>
      <key>NSPrivacyAccessedAPIType</key>
      <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
      <key>NSPrivacyAccessedAPITypeReasons</key>
      <array>
        <string>CA92.1</string>
      </array>
    </dict>
  </array>
  <!-- トラッキング -->
  <key>NSPrivacyTracking</key>
  <false/>
  <key>NSPrivacyTrackingDomains</key>
  <array/>
</dict>
</plist>

この構造を手動で記述するのは煩雑です。特にサードパーティライブラリを多数使用している場合、各ライブラリのマニフェストとの整合性を保つのが難しくなります。


Step 1:Antigravityでプロジェクトをスキャンする

エージェントへの指示

Antigravityのエディタを開き、以下のようにエージェントに指示します。

以下の作業を行ってください:

1. このXcodeプロジェクト内で使用されている
   Required Reason APIをすべてスキャンしてください。
   対象:UserDefaults, FileManager, ProcessInfo,
   UIDevice, UITextInputMode など

2. 各APIの使用箇所(ファイル名・行番号)を一覧化してください

3. Apple公式の理由コードに基づき、適切なNSPrivacyAccessedAPITypeReasons
   を提案してください

4. PrivacyInfo.xcprivacyファイルの内容を生成してください

自動スキャンの結果例

Antigravityはプロジェクト内のSwiftファイルを解析し、以下のようなレポートを返してくれます。

スキャン結果:

[UserDefaults]
  - AppSettings.swift:23 - ユーザー設定の保存・読み込み
  - OnboardingManager.swift:45 - オンボーディング完了フラグ
  → 推奨理由コード: CA92.1(アプリの設定保存)

[FileManager.attributesOfItem]
  - CacheManager.swift:67 - キャッシュファイルのタイムスタンプ確認
  → 推奨理由コード: C617.1(ファイル管理)

[ProcessInfo.systemUptime]
  - AnalyticsHelper.swift:89 - セッション時間の計算
  → 推奨理由コード: 35F9.1(セッション分析)

このように、コードベース全体を俯瞰してAPIの使用状況を把握できます。


Step 2:PrivacyInfo.xcprivacyを自動生成する

生成コマンドの例

スキャン結果をもとに、Antigravityに生成を依頼します。

スキャン結果をもとに、以下の条件でPrivacyInfo.xcprivacyを生成してください:

- NSPrivacyTracking: false(広告トラッキングなし)
- NSPrivacyTrackingDomains: 空配列
- NSPrivacyCollectedDataTypes: デバイスIDなし、クラッシュデータあり
- 検出されたAPIすべての理由コードを含める
- Xcode 15以降の形式に準拠する

生成されたファイルの確認

Antigravityが生成したファイルは、/YourApp/YourApp/PrivacyInfo.xcprivacyとして出力されます。

<?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>
    <!-- UserDefaults: アプリ設定の保存 -->
    <dict>
      <key>NSPrivacyAccessedAPIType</key>
      <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
      <key>NSPrivacyAccessedAPITypeReasons</key>
      <array>
        <string>CA92.1</string>
      </array>
    </dict>
    <!-- FileManager: キャッシュ管理 -->
    <dict>
      <key>NSPrivacyAccessedAPIType</key>
      <string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
      <key>NSPrivacyAccessedAPITypeReasons</key>
      <array>
        <string>C617.1</string>
      </array>
    </dict>
    <!-- ProcessInfo: セッション計測 -->
    <dict>
      <key>NSPrivacyAccessedAPIType</key>
      <string>NSPrivacyAccessedAPICategorySystemBootTime</string>
      <key>NSPrivacyAccessedAPITypeReasons</key>
      <array>
        <string>35F9.1</string>
      </array>
    </dict>
  </array>
  <key>NSPrivacyCollectedDataTypes</key>
  <array>
    <dict>
      <key>NSPrivacyCollectedDataType</key>
      <string>NSPrivacyCollectedDataTypeCrashData</string>
      <key>NSPrivacyCollectedDataTypeLinked</key>
      <false/>
      <key>NSPrivacyCollectedDataTypeTracking</key>
      <false/>
      <key>NSPrivacyCollectedDataTypePurposes</key>
      <array>
        <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
      </array>
    </dict>
  </array>
  <key>NSPrivacyTracking</key>
  <false/>
  <key>NSPrivacyTrackingDomains</key>
  <array/>
</dict>
</plist>

Step 3:Xcodeプロジェクトへの組み込み

ファイルの追加手順

生成したファイルをXcodeプロジェクトに追加するには、以下の手順を踏みます。

Xcodeで以下の手順を案内してください:

1. PrivacyInfo.xcprivacyをメインターゲットのフォルダにドラッグ&ドロップ
2. "Add to targets" でメインアプリターゲットを選択
3. ターゲットの "Build Phases → Copy Bundle Resources" に追加されているか確認
4. 追加後にビルドエラーがないか確認するコマンドを教えてください

Antigravityはターミナルコマンドも提案してくれます。

# プロジェクトをビルドして警告・エラーを確認
xcodebuild -project YourApp.xcodeproj \
  -scheme YourApp \
  -configuration Debug \
  build 2>&1 | grep -E "(error:|warning:|ITMS)"

サードパーティライブラリの確認

使用しているライブラリが独自のプライバシーマニフェストを持っているかも確認が必要です。

以下の処理を行ってください:

1. Package.resolved または Podfile.lock を解析して
   使用中のサードパーティライブラリを一覧化する

2. 各ライブラリが PrivacyInfo.xcprivacy を提供しているか確認する
   (GitHubの最新リリースページを参照)

3. 提供されていないライブラリについては、手動追加が必要な
   APIアクセスコードを検出してリストアップする

Step 4:App Store Connect での検証

Privacy Nutrition Labels との整合性チェック

プライバシーマニフェストの内容は、App Store Connectで設定するPrivacy Nutrition Labelsと一致している必要があります。

以下の検証を行ってください:

1. PrivacyInfo.xcprivacyのNSPrivacyCollectedDataTypesを解析する
2. App Store Connectで申告すべきデータタイプの一覧を生成する
3. 不整合が生じそうな箇所にコメントを追記する

よくあるリジェクト原因と対策

Antigravityに以下を尋ねることで、審査通過の可能性を高められます。

# ITMS-91053エラーの原因を特定するスクリプト例
#!/bin/bash
 
echo "=== プライバシーマニフェスト検証 ==="
 
# plistファイルの存在確認
if [ ! -f "YourApp/PrivacyInfo.xcprivacy" ]; then
  echo "❌ PrivacyInfo.xcprivacy が見つかりません"
  exit 1
fi
 
# XMLの妥当性確認
plutil -lint "YourApp/PrivacyInfo.xcprivacy"
if [ $? -eq 0 ]; then
  echo "✅ XMLフォーマット: 正常"
else
  echo "❌ XMLフォーマット: エラーがあります"
fi
 
# NSPrivacyTrackingの確認
TRACKING=$(plutil -extract NSPrivacyTracking raw "YourApp/PrivacyInfo.xcprivacy" 2>/dev/null)
echo "📋 NSPrivacyTracking: $TRACKING"
 
echo "=== 検証完了 ==="

期待する出力:

=== プライバシーマニフェスト検証 ===
✅ XMLフォーマット: 正常
📋 NSPrivacyTracking: 0
=== 検証完了 ===

よくあるエラーと対処法

エラー①:ITMS-91053 Missing Privacy Manifest

原因: PrivacyInfo.xcprivacyがバンドルに含まれていません。

対処法: XcodeのBuild Phases → Copy Bundle Resourcesにファイルが含まれているか確認してください。Antigravityに「ITMS-91053エラーが出ています、PrivacyInfo.xcprivacyの配置を確認してください」と尋ねると、確認手順を案内してもらえます。

エラー②:理由コードの不一致

原因: 使用しているAPIに対応する理由コードが指定されていない、または誤っています。

対処法: Antigravityに「NSPrivacyAccessedAPICategoryUserDefaultsの有効な理由コードをすべて教えてください」と質問し、Appleのドキュメントに基づいた最新の理由コードを確認しましょう。

エラー③:サードパーティライブラリのマニフェスト未対応

原因: 使用しているライブラリが古いバージョンでプライバシーマニフェストを提供していません。

対処法: Antigravityに「[ライブラリ名]のプライバシーマニフェスト対応状況と代替策を調べてください」と依頼してください。最新バージョンへのアップデートや、そのライブラリの代替手段を提案してもらえます。


応用:CI/CDパイプラインへの統合

継続的にマニフェストを検証するには、GitHub Actionsなどに組み込むのが効果的です。

# .github/workflows/privacy-manifest-check.yml
name: Privacy Manifest Validation
 
on:
  pull_request:
    paths:
      - '**/*.swift'
      - '**/PrivacyInfo.xcprivacy'
 
jobs:
  validate:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
      - name: Validate Privacy Manifest
        run: |
          # マニフェストの存在確認
          if [ ! -f "YourApp/PrivacyInfo.xcprivacy" ]; then
            echo "::error::PrivacyInfo.xcprivacy が見つかりません"
            exit 1
          fi
          # XML妥当性チェック
          plutil -lint "YourApp/PrivacyInfo.xcprivacy"
          echo "✅ プライバシーマニフェスト: 検証OK"

このワークフローをAntigravityで設定する方法については、Antigravity × Xcode 26 × iOS 26 — WWDC 2026 に備えるiOS開発完全ガイドも参考にしてください。


まとめ

iOSアプリのプライバシーマニフェスト対応は、Antigravityを活用することで大幅に効率化できます。手動でAPIを洗い出す手間が省け、理由コードの選定ミスも防ぐことができます。

主なポイントをまとめると、Antigravityによる自動スキャンでRequired Reason APIの使用状況を把握できること、スキャン結果をもとにPrivacyInfo.xcprivacyを自動生成できること、CI/CDパイプラインに組み込むことで継続的な品質管理が可能なこと、の3点が挙げられます。

プライバシーマニフェスト対応が完了したら、次のステップとして非同期処理の最適化も検討してみてください。より複雑なiOSアプリ開発を目指す方には、Antigravity × Swift Concurrency 完全マスターガイドで async/await や Actor の実践的な使い方を深掘りしています。

シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

アプリ開発2026-06-15
新 iPhone が出るたびに三項演算子を増やすのをやめる — 解像度分岐をテーブル駆動に寄せた設計
iPhone Air・17 Pro など新解像度が増えるたびに、画面サイズ判定の三項演算子を29箇所も書き足していました。端末ではなくプロファイルで考えるテーブル駆動の設計に寄せ直し、次の端末追加を1行で終わらせるまでの具体的な手順を、壁紙アプリの実装コードとともにまとめます。
アプリ開発2026-05-20
Localizable.xcstrings の8言語翻訳を Antigravity に2週間任せた運用メモ
Localizable.xcstrings に追加した新規キーの8言語翻訳を、Antigravity に2週間下書きさせて運用した記録です。任せた範囲と最終判断に残した範囲、想定外だった挙動、既訳資産との突き合わせ方を率直に書きました。
アプリ開発2026-05-13
AntigravityでGoogle ML Kitを試したら、公式ドキュメントより速く動いた — でも1つだけ詰まった
Google ML KitをAntigravityでiOS/Androidアプリに統合する実践ガイド。テキスト認識・顔検出の実装コードとXcode 15バグ回避策、個人開発での使いどころをまとめています。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →