◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SONNET 4.5 — Claude API での提供終了は 11/30、残り27日。API 連携を足したアプリは移行先の確認を●SDK 58 — React Native 0.88 に更新されました。Android のリリース版で R8 が既定オンになり、iOS は SceneDelegate を生成します●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SONNET 4.5 — Claude API での提供終了は 11/30、残り27日。API 連携を足したアプリは移行先の確認を●SDK 58 — React Native 0.88 に更新されました。Android のリリース版で R8 が既定オンになり、iOS は SceneDelegate を生成します●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/開発ツール
⬡ 開発ツール/2026-06-19上級

Rork Max アプリが ITMS-91053 で二度と止まらないようにする — Privacy Manifest をリリースごとに証明する運用メモ

Rork Max アプリの ITMS-91053(Required Reason API 未宣言)は、一度直しても依存を足すたびに再発します。依存ツリーを棚卸しして申告を生成し、アップロード前に自分で弾くまでの運用手順を実装メモとしてまとめました。

Privacy Manifest4ITMS-91053Required Reason API4Rork Max235EAS Build25App Store審査10リリース自動化

✦ プレミアム記事

App Store Connect のバリデーションで ITMS-91053 が出たとき、本当に厄介なのは「一度直しても、また出る」ことです。PrivacyInfo.xcprivacy を一枚足してリジェクトを抜けても、次のリリースで便利そうなライブラリを一つ追加した瞬間、別の理由コードで同じ場所に戻されます。私自身、個人開発でいくつものアプリを App Store に出していますが、この往復は最初の数回で本当に時間を溶かしました。アップロードして、半日後にリジェクトメールを受け取り、原因を調べてビルドし直す——この1サイクルが平気で1日を奪います。

ですから本稿は「PrivacyInfo.xcprivacy の書き方」ではなく、ITMS-91053 を二度とアップロード後に踏まないための運用に振り切ってまとめます。やることは三つです。依存ツリーを棚卸しして対象 API を機械的に特定し、申告を取りこぼしなく集約し、アップロードする前に自分の手元で弾く。この三点を仕組みにしておけば、Rork Max のプロジェクトに新しいライブラリを足しても審査で止まらなくなります。

なぜ「一度直したのにまた出る」のか

Apple の Required Reason API ポリシーは、特定カテゴリの API(UserDefaults・ファイルのタイムスタンプ・空きディスク容量・システム起動時刻など)にアクセスするコードがバイナリに含まれるなら、その使用理由を PrivacyInfo.xcprivacy で申告することを求めます。重要なのは、呼んでいるのが自分のコードでなくても対象になるという点です。Rork Max が書き出すプロジェクトには、ストレージ・通知・解析・課金まわりのライブラリが多数バンドルされ、そのどれかが内部で対象 API に触れていれば申告義務が発生します。

つまり「一度直す」で消えるのは、その時点でバンドルされていたライブラリの分だけです。リリースのたびに依存ツリーは少しずつ変わります。新しいパッケージを足す、既存パッケージのメジャーを上げる、トランジティブ(間接)依存が差し替わる——どれもバイナリに含まれる API の集合を変えます。申告を「最初の提出時に一度書くもの」として扱っている限り、ずれは構造的に再発します。再発を止める唯一の方法は、申告を毎リリース再生成して検証する対象に格上げすることです。

ステップ1: どの依存が Required Reason API を引いているかを洗い出す

最初にやるのは犯人探しではなく、棚卸しです。Apple が定義する対象カテゴリは内部的に固定の識別子を持っており、ビルド成果物や各ライブラリ同梱の PrivacyInfo.xcprivacy を走査すれば、どのカテゴリが関係するかを機械的に拾えます。Rork Max が書き出した ios/ ディレクトリと node_modules を対象に、次のスクリプトを回します。

#!/usr/bin/env bash
# scan-required-reason.sh
# 依存ツリー内の Privacy Manifest と、対象APIカテゴリ参照を棚卸しする
set -euo pipefail
 
PROJECT_ROOT="${1:-.}"
 
echo "== ライブラリ同梱の PrivacyInfo.xcprivacy =="
find "$PROJECT_ROOT/node_modules" -name "PrivacyInfo.xcprivacy" 2>/dev/null \
  | while read -r f; do
      pkg=$(echo "$f" | sed -E 's#.*/node_modules/(@[^/]+/[^/]+|[^/]+)/.*#\1#')
      printf '%-45s %s\n' "$pkg" "$f"
    done
 
echo
echo "== ソース/設定に現れる対象APIカテゴリ =="
grep -rhoE "NSPrivacyAccessedAPICategory[A-Za-z]+" \
  "$PROJECT_ROOT/ios" "$PROJECT_ROOT/node_modules" 2>/dev/null \
  | sort | uniq -c | sort -rn

出力の上段で「自前のマニフェストを持っているライブラリ」が分かり、下段で「プロジェクト全体でどのカテゴリが何回参照されているか」が分かります。ここで頻出するカテゴリこそ、アプリ側マニフェストで確実に申告すべき対象です。Rork Max のプロジェクトでは、@react-native-async-storage/async-storage や react-native-mmkv が UserDefaults を、キャッシュ・同期系のライブラリがファイルのタイムスタンプを引いてくることが多い印象です。

リジェクトメール本文がある場合は、そこに記載された NSPrivacyAccessedAPICategory... を「最低限申告すべきカテゴリの確定リスト」として併用してください。スクリプトの棚卸し結果とメールの両方を突き合わせると、取りこぼしがほぼ無くなります。

✦

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

この記事の続きを読む

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

この記事で得られること
✦依存ツリーから Required Reason API を引いているライブラリを機械的に洗い出すシェルスクリプト
✦アプリ側マニフェストとライブラリ側マニフェストの優先順位を踏まえた申告の集約手順
✦アップロード前に ITMS-91053 を自分で検出して、審査待ちのロスをゼロにするローカル検証フロー
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ 開発ツール2026-05-23
Rork 生成 Expo アプリの Privacy Manifest を SDK 連鎖まで監査する — 提出前1日で洗い切る個人開発者の手順
Rork が生成する Expo アプリの依存 SDK を Privacy Manifest 観点で全数監査する手順です。Required Reason API の事前検出、ITMS-91053 と ITMS-91061 の切り分け、npm では見えない Pod を Podfile.lock から拾う照合まで、個人開発の運用としてまとめました。
⬡ 開発ツール2026-09-21
exit code 0 で止まるビルド — ログを黙らせていた設定と、空ファイルを通した存在チェック
eas build --local が exit code 0 but produced no further output で止まる件と、0 バイトのスタブが埋め込まれず dyld で落ちる件。どちらも原因は出力を減らす設定でした。自分のスクリプトを棚卸しする手順まで書き残します。
⬡ 開発ツール2026-09-07
.easignore を置くと .gitignore は読まれなくなります — EAS Build に上がるファイルを手元で数える
EAS Build がアップロードする範囲は .gitignore で決まり、.easignore を置いた時点で入れ替わります。同梱ファイルを送信前に数える手順と、親ディレクトリを除外すると感嘆符では戻せないという実測結果をまとめました。