Communityライティング&編集github.com

erberkk/privacy-and-declarations

App StoreプライバシーとGoogle Playアプリコンテンツ宣言の記入・監査に使用します。Apple App Privacyラベル、Playデータセーフティ(CSVインポート)、ヘルスケアアプリ宣言とHealth Connectパーミッション、広告識別子、PrivacyInfo.xcprivacyと必須理由API、輸出コンプライアンス(ITSAppUsesNonExemptEncryption)、年齢評価、アカウント削除(アプリ内、Web URL、再認証)、AI機能の同意と開示、ヘルスデータに関するルールをカバーします。コードとSDKスキャンからすべての回答を導き出すため、フォーム、プライバシーポリシー、アプリ内テキストの内容が一致します。

privacy-and-declarations とは?

このスキルは、Apple App StoreとGoogle Playストアにおけるプライバシー関連のフォーム記入とコンプライアンス監査を自動化します。コードベースとSDKロックファイルをスキャンしてデータインベントリを構築し、Apple App Privacy、Google Playデータセーフティ、ヘルスケアアプリ宣言、Health Connectパーミッション、プライバシーマニフェスト(PrivacyInfo.xcprivacy)、必須理由APIの使用、輸出コンプライアンス、年齢評価、アカウント削除、AI機能の開示、ヘルスデータの取り扱いなど、すべての宣言を一貫性のある形で導き出します。特に重要なのは、各回答がコードから得られた証拠に基づいており、プライバシーポリシー、ストアのフォーム、アプリ内の同意テキスト間の矛盾を防止する点です。人間の承認が必要な判断ポイント(輸出コンプライアンス分類、年齢評価、AIプロバイダの選定など)も明確に示されています。主にiOSとAndroidアプリの開発者を対象とし、Claude Code、Cursor、CodexなどのAIエージェントと連携してプライバシーコンプライアンス作業を効率化します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/erberkk/mobile-app-launch-skills/tree/HEAD/skills/privacy-and-declarations

Installed? Explore more ライティング&編集 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

プライバシーと宣言

目的

両ストアで真実で一貫性のあるプライバシー回答を、コードからの証拠に基づいて提供します。プライバシー関連の却下のほとんどは不整合が原因です。ポリシーが一つのことを言い、アプリが別のことをし、フォームがさらに別のことを言っています。

前提条件

  • ソースコードへのアクセス(アプリとバックエンド)およびロックファイル(pubspec.lock、Podfile.lock、Gradle依存関係、package.json)。
  • 現在のプライバシーポリシーと利用規約。
  • ユーザーデータを受け取るすべてのバックエンドエンドポイントとサードパーティサービスの把握。

1. データインベントリの構築(記憶ではなくコードから)

リポジトリルートで scripts/scan-sdks.mjs を実行します。これはロックファイルから既知のSDKとそれらが通常扱うデータカテゴリをリストアップし、必須理由APIの使用、パーミッション文字列、広告IDおよびトラッキングAPIをgrepします。その後、ネットワークレイヤーとバックエンドを読み込んでインベントリを完成させます。

データソース(画面/SDK)デバイス外に送信?誰に?ユーザーにリンク?目的保持期間オプション?

ルール:

  • 「デバイス上でのみ処理」とは、自社サーバーを含め、決して送信されないことを意味します。バックエンドに同期される場合は収集されます。
  • プロセッサ(ホスティング、指示に従って行動するAIプロバイダ、決済SDK)への送信も「収集」に該当します。これが「共有」とみなされるかどうかはストアによって異なります(以下を参照)。
  • 匿名のクラッシュレポートと使用回数も収集され(診断データ/使用状況データ)、通常は「リンクなし」です。

インベントリを docs/privacy-inventory.md として保存します。以下のすべての回答はインベントリの行を引用します。

2. Apple App Privacy(App Store Connect › App Privacy)

  • インベントリの各行をAppleのカテゴリ(連絡先情報、健康とフィットネス、ユーザーコンテンツ、識別子、購入、使用状況データ、診断データ…)、目的、リンクあり vs リンクなし、トラッキングにマッピングします。
  • トラッキングとは、ターゲット広告や広告測定のためにデータを第三者データとリンクすること、またはデータブローカーと共有することです。広告SDKやデータブローカーがなければ、通常は「トラッキングなし」であり、ATTプロンプトは不要です。
  • オプション開示は、Appleの条件をすべて満たす場合にのみ適用されます(頻度が少ない、オプション、ユーザーが毎回開始、トラッキング/広告ではない)。アプリの機能にはほとんど適用されません。
  • ドキュメント:App privacy details。

3. Google Play データセーフティ(ポリシー › アプリコンテンツ › データセーフティ)

  • 同じインベントリをPlayの分類(個人情報、健康とフィットネス、写真と動画、メッセージ、アプリのアクティビティ、アプリの情報とパフォーマンス、デバイスまたはその他のID、財務情報…)にマッピングします。
  • 共有は、代理で処理するサービスプロバイダへの転送を除外します。クロスカスタマー広告プロファイルを構築するSDKは共有に該当します。
  • 一時的:メモリ内でのみ処理され、保存されず、リアルタイムのリクエストのためだけに使用されます(例:分析後破棄される写真)。
  • CSVへのエクスポート / CSVからのインポートを使用します。CSVをリポジトリ(store/data-safety.csv)に保持することで、変更はコードと同様にレビューされます。インポートはすべての回答を上書きします。
  • ドキュメント:Data safety。

4. その他のPlay宣言

  • ヘルスケアアプリ宣言:すべてのアプリが完了する必要があります。ヘルス機能がない場合でも同様です。ドキュメント。
  • Health Connect:パーミッションごとに1つの正当化が必要です。可視機能が使用するパーミッションのみをリクエストします。ポリシーにリンクする理由説明アクティビティ(ACTION_SHOW_PERMISSIONS_RATIONALE)が必要です。Playからフローのスクリーンレコーディングを求められる場合があります。
  • 広告識別子:使用するかどうかを宣言します。広告/アトリビューションSDKがない場合は「いいえ」と宣言し、依存関係がcom.google.android.gms.permission.AD_IDを追加していないことを確認します(マージされたマニフェストを確認し、追加されている場合はtools:node="remove"で削除します)。
  • ターゲットオーディエンス、コンテンツレーティング(IARC)、広告、アプリアクセス、ニュース、金融機能、政府:インベントリから回答します。一部がログインの背後にある場合は、アプリアクセスにレビュー担当者の認証情報を提供します。
  • アカウント削除:セクション8を参照してください。

5. プライバシーマニフェスト(iOS)

  • PrivacyInfo.xcprivacy をアプリターゲットに追加します(テンプレート:templates/PrivacyInfo.xcprivacy)。
  • NSPrivacyTracking、NSPrivacyTrackingDomains、NSPrivacyCollectedDataTypes(App Privacyと一致)および、アプリの独自コードが使用する必須理由APIのカテゴリごとに NSPrivacyAccessedAPITypes を宣言します:ファイルタイムスタンプ、システム起動時間、ディスク容量、アクティブなキーボード、UserDefaults。Appleのリストから承認された理由コードを選択します。Flutterアプリは shared_preferences などのプラグインを介してUserDefaultsを使用します。各プラグインが独自のマニフェストを提供しているか確認し、独自コードとマニフェストがないプラグインが使用するものを追加します。
  • ビルド後、App Store Connectのメール / ビルド警告で不足しているマニフェスト理由がないか確認します。
  • ドキュメント:Privacy manifest files、Required reason API。

6. 輸出コンプライアンス(iOS)

  • Info.plistの ITSAppUsesNonExemptEncryption:暗号化を使用しないか、免除される暗号化のみを使用する場合(例:OS経由のHTTPS、アプリの主機能がセキュリティではないアプリでユーザーのデータを保護するためだけに使用される標準アルゴリズム)は false が適切です。これを設定すると、ビルドごとの質問がスキップされます。
  • 独自の暗号化を実装またはバンドルする場合、または暗号化が主要機能である場合は、代わりに質問に回答し、文書化または年次の自己分類レポートが必要かどうかを確認します。
  • これは法的な分類です。不明な場合は、貿易コンプライアンスアドバイザーに相談してください。ドキュメント:Complying with encryption export regulations。

7. 年齢評価

  • 現在のAppleの質問票とPlayのIARC質問票に正直に回答します。健康/ウェルネストピック、AIチャットまたは生成コンテンツ、ユーザー生成コンテンツ、制限のないWebアクセスに関する質問を含みます。
  • レーティングを利用規約の最低年齢およびアプリ内の年齢ゲートと一致させます。質問票の結果が利用規約の最低年齢よりも低い場合は、不一致を残さずにストアのオプションを使用してより高いレーティングを設定します。

8. アカウント削除

  • アプリ内:ユーザーがアカウントを作成できる場合は、アプリ内(アカウント設定)で削除を開始できるようにします。無効化だけでは十分ではありません。ゲスト/自動生成アカウントも同様です。再認証または確認は許可されていますが、不必要に難しいものであってはなりません。Apple:Offering account deletion。
  • Web URL(Play):アプリやログインなしでアクセス可能なページで、リスト上のアプリ名を記載し、削除リクエスト方法、削除されるものと保持されるもの(およびその理由)、および事前の手順(サブスクリプションのキャンセルなど)を説明します。ドキュメント:Play account deletion。
  • サブスクリプション:アカウントを削除してもストアのサブスクリプションはキャンセルされません。削除シートで警告し、ストアのサブスクリプション管理にリンクします。
  • Sign in with Apple:削除時にSign in with Apple REST APIを介してユーザーのトークンを無効にします。
  • サードパーティ:プロセッサでもユーザーを削除します(例:RevenueCatの顧客、分析/クラッシュ識別子、メーリングリスト)。
  • 再認証の展開:削除エンドポイントに再認証要件を追加する場合は、バックエンドの変更と同時に新しい応答を処理するアプリをリリースするか、古いアプリバージョンでは以前の動作を維持します。
  • パス(アプリ、ポリシー、ストアフォーム、Webページ)では同じ表現を使用します。例:「プロフィール › アカウントを削除」。

9. AI機能

  • Apple 5.1.2(i):個人データが第三者(第三者AIを含む)と共有される場所を開示し、事前に明示的な許可を得ます。
  • AI機能の初回使用前:プロバイダと役割を記載した短い同意シート(「回答を生成するために <AIプロバイダ> が処理します」)、送信される内容、モデルのトレーニングに使用されないこと(プロバイダの利用規約が該当するプランでそう述べている場合のみ)、保持期間(プロバイダと自社の両方)を表示します。設定に取り消し用のスイッチを設けます。
  • ポリシーの文言:AIプロバイダはあなたの指示に従って行動するプロセッサ/サービスプロバイダとして機能します。所在地と保持期間とともにリストします。
  • ストアフォーム:AIへの入力(メッセージ、写真、テキスト)は収集データ(ユーザーコンテンツ)です。プロバイダがプロセッサである場合、通常Playでは「共有」されません。
  • 考慮事項:健康や金融に関するAI回答には「専門的なアドバイスではありません」という一文を追加し、危機的なトピックに対する定義された安全な応答を用意します。

10. ヘルスデータ

  • HealthKit / Health ConnectのデータをAIプロバイダやその他の第三者に決して送信しないでください。 Apple(5.1.3)はヘルスデータの使用と開示を制限しています。Health Connectのポリシーも転送を制限しています。最もシンプルな準拠設計:Apple Health / Health Connectから読み取られたデータはデバイス上に留まるか(または開示されたユーザー自身のアカウントストレージのみに保存され)、AIを呼び出す機能はユーザーがアプリに入力したデータのみを使用します。
  • ヘルスデータを広告やマーケティングに使用しないでください。iCloudに保存しないでください。
  • Info.plistの使用文字列(NSHealthShareUsageDescription、NSHealthUpdateUsageDescription)は実際の使用を述べなければなりません。文字列が「第三者と共有されることはありません」と述べている場合、コードはそれを保証しなければなりません。
  • コードで強制します:AI呼び出しのリクエストビルダーは明示的な許可リストのフィールドを受け取り、ヘルスソースのフィールドがAIペイロードに現れた場合に失敗するテストを追加します。

人間の承認が必要な判断ポイント

すべてのフォームの最終回答(アカウント所有者が法的責任を負います)、輸出コンプライアンス分類、年齢評価、AIプロバイダとそのデータ利用規約、デバイスから送信されるヘルスデータの変更。

検証

  • すべてのフォーム回答はインベントリの行を引用し、インベントリはコードを引用します。
  • 差分チェック:プライバシーポリシー ↔ App Privacy ↔ データセーフティCSV ↔ アプリ内同意テキスト ↔ Info.plist文字列。矛盾がないことを確認します。
  • テスト:テストアカウントを削除し、バックエンドの行、プロセッサのレコード、認証ユーザーが削除されていることを確認します。Web削除ページがログアウト状態でアクセス可能であることを確認します。
  • ビルドにプライバシーマニフェストの警告が表示されないことを確認します。

よくある落とし穴

  • 同期やAI機能がデータを送信しているにもかかわらず、ポリシーで「データがデバイスから送信されることはありません」と述べている。
  • 自社の匿名クラッシュ/使用状況レポートをフォームに記載し忘れる。
  • 依存関係が静かにAD_IDパーミッションを追加する。
  • 「私たちが知っているすべて」を含む「コンテキスト」ビルダーを通じてヘルスデータがAIプロンプトに流れ込む。
  • 削除パスの名前がアプリ、ポリシー、ストアフォームで異なっている。
  • 年齢評価が4+である一方、利用規約が16+と述べている。

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

erberkk/review-readiness

Use before submitting an app version or a first subscription for App Store or Google Play review, or after receiving a rejection. Runs a go/no-go checklist and writes a report - demo account that signs in with a password (no email one-time code), filled with data and premium unlocked; review notes; in-app purchases visible and purchasable (guideline 2.1(b)); iPad compatibility mode for iPhone-only apps; no placeholders or "coming soon"; metadata matching the app; live privacy URLs; crash-free cold start - and gives a playbook for replying in Resolution Center and deciding when to appeal.

erberkk/social-publishing

Use when setting up scheduled publishing of an app's marketing content to Instagram (Reels, carousels, Stories), Threads, X and TikTok through official APIs - self-hosting Postiz in Docker behind a Cloudflare Tunnel, creating the Meta app with the newer use-case flow (business portfolio, Facebook Page linked to the Instagram professional account, Threads tester invite), X developer pay-per-use credits and spend cap, TikTok and YouTube audit limits, safe OAuth account selection when one browser holds personal and brand accounts, resource limits, and phasing a posting calendar around real launch events.

erberkk/store-screenshots

Use when producing or updating App Store and Google Play screenshots and the Play feature graphic - planning a connected "panorama" story across frames, capturing real in-app screens with the app's own test/screenshot harness at each device's logical size and pixel ratio, covering the full device matrix (iPhone 6.9", the required medium Dynamic Island slot, iPhone Duo outer and inner displays, iPad 13" if the app runs on iPad, Play phone, 7" and 10" tablets, 1024x500 feature graphic), checking for alpha channels and wrong sizes, and uploading in order via the App Store Connect and Google Play APIs.

erberkk/web-presence-and-seo

Use when building, checking or deploying the website that a mobile app needs for its store listings and launch - privacy policy, terms, support and web account-deletion pages that work signed-out; hosting apple-app-site-association and assetlinks.json; invite/referral pages (/i/<code>) that open the app or fall back to the store with the Play install referrer; a landing page with store badges and honest per-country prices filled at the edge; Open Graph images; technical SEO (hreflang, canonical, sitemap, robots.txt, JSON-LD); Search Console, Bing Webmaster and IndexNow; AI crawler policy and llms.txt; and a Cloudflare Worker deploy with a production approval gate. Includes a site checker and an IndexNow ping script.

関連スキル