📌 対象:App Store 審査で
ITMS-91061: Missing privacy manifest
エラーが出て困っている人
🧑🎓 高校生でもわかるように会話形式で解説します!🧩 本記事では、SDWebImage と SVProgressHUD という代表的なライブラリを例に解説しています。
🎬 登場人物
- 👨🏫 先生:Xcodeの達人。親切だけど時々厳しい。
- 🧑🎓 生徒:iOS開発に挑戦中の高校3年生。SDK審査エラーに悩んでいる。
🗨️ Scene 1:審査エラーに立ち向かう
生徒
「先生ー!App Store に提出したら
ITMS-91061
ってエラーが出たんですけど…!」
先生
「どのSDKを使っているか見せてごらん?」
生徒
「
SDWebImage
とSVProgressHUD
です!」
先生
「それらは“よく使われるサードパーティSDK”だから、Appleからプライバシーマニフェストを求められるんだよ。」
🧩 Step 1:PrivacyInfo.xcprivacy を作成する
先生
「まずは、以下の内容で
.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>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
</array>
</dict>
</plist>
🔍 ポイント:アクセスされるAPIカテゴリと理由を正しく書くこと。
🛠️ Step 2:Run ScriptでFrameworkにコピーする
生徒
「作ったファイルをどうやってアプリに含めるんですか?」
先生
「XcodeのBuild PhasesでRun Scriptフェーズを追加して、ビルド後に各フレームワークへコピーするんだ。」
# 自作の .xcprivacy ファイルをビルド後にコピー
SOURCE_PRIVACY_FILE="${PROJECT_DIR}/PrivacyInfo.xcprivacy"
DESTINATION_DIR="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
echo "📦 Embedding PrivacyInfo.xcprivacy to Frameworks..."
cp "${SOURCE_PRIVACY_FILE}" "${DESTINATION_DIR}/SDWebImage.framework/PrivacyInfo.xcprivacy"
cp "${SOURCE_PRIVACY_FILE}" "${DESTINATION_DIR}/SVProgressHUD.framework/PrivacyInfo.xcprivacy"
echo "✅ Done embedding privacy manifests."
🔐 Appleは「フレームワーク内に
.xcprivacy
があるか」をチェックするよ。
🔍 Step 3:ビルド&検証する
- Product > Archive でアーカイブ
- Organizerで Validate を実行
-
ITMS-91061
エラーが出なければ完了!🎉
✅ 補足:実際に含まれているか確認する方法
cd ~/Library/Developer/Xcode/Archives/<日付>/YourApp.xcarchive/Products/Applications/YourApp.app/Frameworks
ls SDWebImage.framework
ls SVProgressHUD.framework
→ それぞれのフレームワークフォルダ内に PrivacyInfo.xcprivacy
があればOK。
🎓 おわりに
生徒
「先生!無事に審査通りましたー!!」
先生
「よしよし、これで古いSDKでも怖くないね。次はプライバシーラベル登録も忘れずに!」