◉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-07-08上級

自コードの Required Reason API 申告漏れを Claude Code で棚卸しする

PrivacyInfo.xcprivacy の理由コードは、依存ライブラリだけでなく自分のコードにも必要です。個人開発の壁紙アプリで申告漏れを見つけた経験から、Swift ソースを走査して該当 API と理由コードを突き合わせる Claude Code ワークフローをまとめます。

Claude Code265iOS26App Store9プライバシー個人開発130

✦ プレミアム記事

昨年の春、壁紙アプリの一本を更新して App Store に提出したところ、数時間後に「ITMS-91053: Missing API declaration」という通知が届きました。依存ライブラリのマニフェストは整えていたはずなのに、なぜ弾かれたのか。原因は自分のコードでした。設定値の保存に何気なく使っていた UserDefaults が、Apple の言う Required Reason API に該当していたのです。

Required Reason API の議論は、どうしても SDK 側の追従に寄りがちです。けれど申告が必要なのは、あなた自身が書いたコードも同じです。ここでは自コードの走査に的をしぼり、Claude Code を使って申告漏れを棚卸しし、PrivacyInfo.xcprivacy に理由コードを埋めるまでの流れを書きます。依存ライブラリ側の追従については別記事の依存ライブラリの追従漏れを防ぐ実装に譲ります。

なぜ「自コード」が見落とされるのか

Required Reason API は、名前が仰々しい割に、日常的に使う地味な API の集まりです。設定の保存に使う UserDefaults、ファイルの更新日時を読む modificationDate、空き容量を確認する volumeAvailableCapacityKey、端末の稼働時間を測る systemUptime。どれも「プライバシー」という言葉から連想する派手さがありません。だからこそ、宣言が要るという意識が働かないまま、コードの奥に沈んでいます。

私の場合、申告漏れは3箇所ありました。オンボーディングの完了フラグを保存する UserDefaults、キャッシュ画像の鮮度を判定する modificationDate、ダウンロード前に空き容量を見る volumeAvailableCapacityForImportantUsageKey です。いずれも数年前に書いたコードで、当時はまだこの制度が存在しませんでした。手作業で全ソースを追う気力はなく、機械的に洗い出す仕組みが要ると感じました。

対象となる4カテゴリと理由コード

自コードで踏みやすいのは、次の4カテゴリです。それぞれに Apple が定めた理由コードがあり、.xcprivacy にはカテゴリと理由コードの両方を書きます。

カテゴリ(NSPrivacyAccessedAPIType)踏みやすい API個人開発でよく使う理由コード
UserDefaultsUserDefaults / NSUserDefaultsCA92.1(自アプリ・App Group 内のみで利用)
FileTimestampmodificationDate / creationDate / statC617.1(ユーザーに表示)/ 3B52.1(自コンテナ内)
DiskSpacevolumeAvailableCapacity… / systemFreeSize85F4.1(ユーザーに表示)/ E174.1(空き不足回避のための書き込み)
SystemBootTimesystemUptime / mach_absolute_time35F9.1(端末内でのイベント間計測)

理由コードは似た文言が並ぶため、機械的に「一つに決める」ことはできません。スクリプトはあくまで候補を提示するところまでを担い、最終的にどの理由が実態に合うかは開発者が選びます。正確な一覧はApple の Required Reason API ドキュメントで必ず確認してください。

✦

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

この記事の続きを読む

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

この記事で得られること
✦UserDefaults・ファイル日時・ディスク容量など4カテゴリの Required Reason API を自コードから検出する Python スクリプト
✦検出したシンボルを .xcprivacy の理由コードへ突き合わせ、審査却下メール(ITMS-91053)を未然に防ぐ手順
✦Claude Code に走査と差分チェックを任せ、リリースのたびに申告漏れを再発させない運用設計
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 の遅延など、公式ドキュメントが触れない運用の詰まりどころも扱います。