◉CLAUDE LABEN
●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/Claude Code
⟐ Claude Code/2026-05-18上級

Apple Privacy Manifest を個人開発で取り回す — 依存ライブラリの追従漏れを Claude Code で防ぐ実装

Apple Privacy Manifest(PrivacyInfo.xcprivacy)の運用は、個人開発者が依存ライブラリのバージョンアップに振り回されやすい領域です。累計5,000万ダウンロードの iOS アプリ群を運用してきた経験から、Claude Code を使った追従漏れ検出・申請拒否対応・CI 組み込みまでの実装をまとめます。

Claude Code265Apple Privacy ManifestPrivacyInfo.xcprivacyiOS26個人開発130App Store9依存ライブラリ

✦ プレミアム記事

2014年から個人で iOS アプリを作り続けて12年目に入り、累計5,000万ダウンロードを超えるあたりからは、Apple のポリシー変更に振り回される時間が機能開発と同じくらいの比重を占めるようになりました。中でも 2024 年に必須化された Apple Privacy Manifest(PrivacyInfo.xcprivacy)は、個人開発者にとって厄介な領域です。理由は単純で、自分のコードだけでなく、依存している SDK の側にも対応版が揃っていないと申請が通らないからです。

Beautiful HD Wallpapers のように長期運用しているアプリでは、AdMob・Firebase Analytics・RevenueCat といった SDK が混在しています。あるとき AdMob を一段上のバージョンに上げたら、ストア申請で「Privacy Manifest に必要な NSPrivacyAccessedAPITypes が宣言されていない」と返ってきました。同じ更新を、別の癒し系アプリでは半年前に通しているのに、です。差分は一目では分からず、結局 1 日を Privacy Manifest の比較に溶かしました。本記事はその経験を踏まえ、Claude Code に追従作業をどこまで任せられるかを、運用中のワークフローと差分つきで書きます。

なぜ個人開発者ほど Privacy Manifest に振り回されるのか

Privacy Manifest は、Apple が 2024 年春以降のリリースで段階的に必須化した宣言ファイルです。アプリ本体だけでなく、Apple が指定する「commonly used APIs」を呼ぶ SDK にも、対応する宣言ファイルの同梱が求められました。個人開発者にこれが重く感じられる理由は、構造的に三つあります。

ひとつ目は、依存ライブラリの数に対して、各 SDK の対応速度が一律ではないこと。一般的な iOS アプリは AdMob、Firebase、Sign in with Apple、SwiftLint、Reachability 系ユーティリティ……と、すぐに 20 を超えます。個人開発では、これら全てを朝のメール 1 通で監視する仕組みを持っていない場合がほとんどです。

ふたつ目は、追加した瞬間は問題ない依存が、半年後の更新で突然 required reasons を要求してくること。Apple のリストはじわじわ拡張されており、UserDefaults・fileTimestamp・systemBootTime・diskSpace 等が後発で対象に加わりました。これらは古い個人開発アプリほど無意識に使っています。

みっつ目は、申請拒否時にメッセージが断片的なこと。リジェクト本文には「NSPrivacyAccessedAPITypes に対応する宣言が見当たりません」とだけ書かれるパターンが多く、どの SDK が原因で、どの API カテゴリに対する宣言が足りないのか、自分で照合する必要があります。

この 3 つを毎月の運用に組み込むには、AI に「監視と差分案の生成」を任せる仕組みが現実的です。

Privacy Manifest と Required Reasons API の関係を最短で整理する

ここから先の章のために、最低限の語彙だけ揃えておきます。

PrivacyInfo.xcprivacy には大きく 4 つのキーを宣言します。NSPrivacyTracking はトラッキングの有無、NSPrivacyTrackingDomains はトラッキングを行う通信先、NSPrivacyCollectedDataTypes はアプリが収集するデータの種類、そして NSPrivacyAccessedAPITypes が今回の主役で、Apple が指定する「commonly used APIs」を使う場合の理由を宣言する配列です。

Required Reasons API として現時点で対象となっているのは、File timestamp APIs・System boot time APIs・Disk space APIs・Active keyboard APIs・User defaults APIs などのカテゴリです。各カテゴリにはあらかじめ用意された理由コード(例: User Defaults APIs には CA92.1・1C8F.1・C56D.1・AC6B.1 といった ID)が割り当てられ、複数を配列で宣言できます。

実際のファイルはこういう形になります。

<!-- 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>NSPrivacyTracking</key>
  <true/>
  <key>NSPrivacyTrackingDomains</key>
  <array>
    <string>googleads.g.doubleclick.net</string>
  </array>
  <key>NSPrivacyCollectedDataTypes</key>
  <array/>
  <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>NSPrivacyAccessedAPICategoryFileTimestamp</string>
      <key>NSPrivacyAccessedAPITypeReasons</key>
      <array>
        <string>C617.1</string>
      </array>
    </dict>
  </array>
</dict>
</plist>

注意したいのは、NSPrivacyAccessedAPITypeReasons の値は理由コードであって、自由記述ではないという点です。User Defaults APIs の場合は CA92.1(同じアプリ内での読み書き)、AC6B.1(管理者からの設定取得)など、ユースケースごとに ID が決まっています。Claude Code に生成してもらうときは、後述するように Apple 公式の理由コード一覧をプロンプトに含めておくのがコツです。

✦

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

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦Apple Privacy Manifest と Required Reasons API の関係を、個人開発者が現場で必要な粒度だけ抜き出して整理できます
✦依存ライブラリの追加・更新時に Privacy Manifest の追従漏れを検出する Claude Code ワークフローを、実コマンドつきで持ち帰れます
✦App Store Connect の申請拒否ログから差分パッチを生成し、Privacy Manifest を更新して再申請するまでの導線を再現できます
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

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

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

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

関連記事

⟐ Claude Code2026-10-12
SPM に移したら、起動した瞬間にアプリが落ちるようになりました — dyld の一行を Claude Code と読み解いた記録
CocoaPods から Swift Package Manager へ移した直後、ビルドは通るのに起動した瞬間に落ちました。dyld の一行から原因を切り分け、直し方と確認コマンドまでをまとめます。
⟐ Claude Code2026-09-04
Claude Code に project.pbxproj だけは直接触らせていません
Xcode のプロジェクトファイルは、開けなくなる壊れ方より開けてしまう壊れ方のほうが高くつきました。直接編集をやめてスクリプト経由に寄せるまでに測ったことと、いま引いている線を書き残します。
⟐ Claude Code2026-04-15
Claude Code と作る StoreKit 2 × SwiftUI の課金実装 — 審査を通る最小構成と運用の落とし穴
Claude Code を設計パートナーにした StoreKit 2 × SwiftUI の課金実装を、PurchaseManager・サーバー検証・ペイウォールUIまで通しで組み立てます。Ask to Buy や Transaction.updates の遅延など、公式ドキュメントが触れない運用の詰まりどころも扱います。