mcpField
A
app-store-review

app-store-review

github.com/safaiyehテスト・品質4061.6k 回インストール2 週間前に更新
リポジトリ

app-store-review について

app-store-reviewは、Apple App Store Review Guidelinesに照らしてSwift、Objective-C、React Native、Expoアプリを確認するスキルです。ガイドラインの項目とリスク別に説明を整理し、提出前レビューや機能監査向けのチェックリストと例を備えています。

主な機能

  1. 01Appleガイドライン各項目の網羅
  2. 02リスク別のリジェクト例
  3. 03SwiftとReact Nativeの例
  4. 04提出前コンプライアンスチェックリスト
  5. 05プライバシー、決済、安全性の確認

活用シーン

  1. 01App Store提出前のアプリ監査
  2. 02決済やプライバシー関連の変更確認
  3. 03ユーザー生成コンテンツの安全要件の評価

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/safaiyeh/app-store-review-skill --skill app-store-review

インストール後、Claude Code で/app-store-reviewを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
metadata.json
README.md
.gitignore
.agents/plugins/
marketplace.json
.claude-plugin/
marketplace.json
plugin.json
.codex-plugin/
plugin.json
.github/ISSUE_TEMPLATE/
skill-feedback.yml
agents/
openai.yaml
rules/
4-design.md
3-business.md
1-safety.md
5-legal.md
2-performance.md

詳細

App Store 審査ガイドラインチェッカー

iOS、macOS、tvOS、watchOS、visionOS アプリのコードを、Apple の App Store 審査ガイドラインに照らして評価するための包括的なガイドです。このスキルでは、提出前に潜在的な却下につながる問題を特定できるよう、すべてのガイドライン項目を網羅しています。

対応対象: Swift、Objective-C、React Native、Expo アプリ

ガイドラインの最新情報: Apple の2026 年 10 月 16 日付 App Review Guidelines の更新を反映し、現行の英語版ガイドラインと照合済みです。AI によるコンテンツ作成および同意のない親密な画像への対策(1.2)、クリエイティブアセット(2.3.14)、隠し機能(2.5.19)、改訂された購入リンクのエンタイトルメント(3.1.1(a))、代替配信に関する執行(5)が含まれています。また、ソーシャルメディアの年齢レーティングに関する質問、韓国の年齢レーティングの変更、ブラジルおよび EU における代替決済・配信の条件も扱います。

適用するタイミング

次のような場合に、このスキルを使用してください。

  • App Store への提出に向けてアプリを準備するとき
  • コードにコンプライアンス上の問題がないか確認するとき
  • 審査で懸念事項となる可能性がある機能を実装するとき
  • 既存のアプリにガイドライン違反がないか監査するとき
  • 決済、ユーザーデータ、機微なコンテンツを扱う機能を開発するとき

ガイドラインのセクション

詳しい説明、チェックリスト、コード例については、各ルールのファイルを参照してください。

セクションファイル主なトピック
1. 安全性rules/1-safety.md問題のあるコンテンツ、UGC と AI コンテンツの対策、キッズカテゴリ、身体的危害、データセキュリティ
2. パフォーマンスrules/2-performance.mdアプリの完全性、メタデータとクリエイティブアセット、ハードウェア互換性、ソフトウェア要件、隠し機能
3. ビジネスrules/3-business.mdアプリ内課金、サブスクリプション、暗号通貨、その他のビジネスモデル
4. デザインrules/4-design.md模倣アプリ、最低限の機能、スパム、エクステンション、Apple のサービス、ログイン
5. 法務rules/5-legal.mdプライバシー、データ収集、知的財産、ギャンブル、VPN、MDM、開発者行動規範

カテゴリ別のリスクレベル

リスクレベルカテゴリセクションよくある却下理由
CRITICALプライバシーとデータ5.1プライバシーポリシーの欠如、許可されていないデータ収集
CRITICAL決済3.1アプリ内課金の回避、価格が不明瞭
HIGH安全性1.x問題のあるコンテンツ、不十分な UGC モデレーション
HIGHパフォーマンス2.xクラッシュ、未完成の機能、非推奨 API
MEDIUMデザイン4.x模倣アプリ、最低限の機能に関する問題
MEDIUM法務5.x知的財産権の侵害、ライセンスのないギャンブル

クイックリファレンス:却下につながる高リスクのパターン

ATT に関する所見については、SDK の設定と実際のデータ使用を確認してください。アカウント削除については、遷移先とフローを確認してください。ログについては、公開されるデータと、そのマスキングの有無を調べてください。こうした根拠を確認できない場合は、API 呼び出し、SDK のインポート、URL だけを根拠に却下と断定せず、確認が必要な事項を報告してください。

決済については、外部リンクやチェックアウトを問題として指摘する前に、ストアフロント、プラットフォーム、適用される例外を確認してください(3.1.1(a) および 3.1.3 を参照)。

重大な問題(即時却下)

Swift:

// 🔴 Private API usage
let selector = NSSelectorFromString("_privateMethod")

// 🔴 Hardcoded secrets
let apiKey = "sk_live_xxxxx"

// 🔴 External payment for digital goods where IAP is required
func purchaseDigitalContent() {
    openStripeCheckout() // Use StoreKit instead
}

React Native / Expo:

// 🔴 Hardcoded secrets in JS bundle
const API_KEY = 'sk_live_xxxxx'; // REJECTION

// 🔴 External payment for digital goods where IAP is required
Linking.openURL('https://stripe.com/checkout'); // Use react-native-iap

// 🔴 Dynamic code execution
eval(downloadedCode); // REJECTION

// 🔴 Major feature changes via CodePush/expo-updates
// OTA updates for bug fixes only, not new features!
高リスクの問題

Swift:

// 🟡 Starting Apple-defined tracking without ATT authorization
// Illustrative helper: links user data across companies for ad targeting
enableCrossCompanyAdTracking() // Called before ATT authorization

// 🟡 Account creation without deletion
func createAccount() { } // But no way to initiate deletion in the app

React Native / Expo:

// 🟡 Starting Apple-defined tracking without ATT authorization
// Illustrative helper: SDK links user data across companies for ad targeting
initializeTrackingAdSDK(); // Called before ATT authorization

// ✅ First-party analytics alone does not require ATT
// Assumes no IDFA access, cross-company advertising use, or data broker sharing
import analytics from '@react-native-firebase/analytics';
analytics().logEvent('event');

// 🟡 Delete Account button opens instructions with no deletion flow
Linking.openURL('https://example.com/help'); // Verified instructions-only page
// ✅ An in-app button may link directly to a page that completes deletion
Linking.openURL('https://example.com/delete-account');

// 🟡 Sensitive data exposed in production logs (1.6 / 5.1)
console.log('Access token:', accessToken); // Remove the secret or redact it

// 🟡 Social login without a privacy-preserving alternative (4.8)
<GoogleSigninButton /> // Also offer a login meeting 4.8 criteria
                       // (Sign in with Apple is the simplest option)

// 🟡 Pre-permission button that asks for the grant (5.1.1(iv))
<Button title="Enable Location" onPress={requestLocation} /> // Use "Continue" or "Next"

// 🟡 UGC terms checkbox pre-checked, or no terms before sign-up/login (1.2)
const [agreed, setAgreed] = useState(true); // Start unchecked; gate sign-up on it

// 🟡 "Free" in screenshots, including text in the captured app screen (2.3.7)
<Text>Get Started (Free)</Text> // Pricing information when shown in a screenshot

// 🟡 Custom review prompts (5.6.1)
showCustomAlert('Rate us 5 stars!'); // Use StoreReview.requestReview()
中リスクの問題
// 🟠 Vague purpose strings in Info.plist
"This app needs camera access" // Be specific!

// 🟠 WebView-only app (insufficient native functionality)
const App = () => <WebView source={{ uri: 'https://site.com' }} />;

// 🟠 References to Android in iOS app
const text = "Also available on Android"; // REJECTION

提出前チェックリスト

プライバシー(セクション 5.1)
  • App Store Connect にプライバシーポリシーへのリンクがある
  • アプリ内からプライバシーポリシーにアクセスできる
  • すべての目的説明文が具体的かつ正確である
  • App Store Connect の「アプリのプライバシー」の詳細が入力されている
  • Apple が定義するトラッキングまたは IDFA へのアクセスの前に ATT の許可を取得する(5.1.2 を参照)。ファーストパーティの分析のみであれば ATT は不要
  • アプリがアカウント作成に対応している場合、アプリ内から削除を開始できる。ウェブ上で削除を完了するための直接リンクを設置することも可能
  • データの最小化 — 必要な権限のみを要求する
  • 権限の確認を求める前に表示するカスタム画面には、システムの確認画面を開く、中立的なラベル(例:「続ける」または「次へ」)のボタンを 1 つだけ配置する。「許可」/「有効にする」という表現や、「キャンセル」/「閉じる」アクションは使用しない(5.1.1(iv) を参照)
  • データ収集の前にユーザーの同意を得る
支払い(セクション 3.1)
  • 適用されるストアフロント、エンタイトルメント、または 3.1.3 の例外によって別の方法が認められている場合を除き、デジタルコンテンツの購入には StoreKit を使用する
  • 購入の復元機能を実装する
  • サブスクリプションの条件を明確に表示する
  • 該当する場合、ルートボックスの確率を開示する
  • 購入リンクには、適用される地域別の規約で許可されたリンク先を使用する(3.1.1(a))。米国のストアフロントではエンタイトルメントは不要
  • クレジット/通貨に有効期限を設けない
安全性(セクション 1.x)
  • 不適切なコンテンツがない
  • UGC および AI コンテンツ作成アプリには、作成/生成のフローも含め、モデレーション機能(フィルタリング、報告、ブロック、問い合わせ先)を実装する(1.2 を参照)
  • AI 生成画像を含む、同意のない親密な画像を事前に防止し、削除するための保護策を講じる
  • UGC の違反コンテンツを速やかに削除でき、是正計画を用意している
  • UGC:新規ユーザーが新規インストール時に見るフロー内で、サインアップ/ログイン前に、不適切なコンテンツおよび虐待的なユーザーに対するゼロトレランスを定めた規約(EULA)にユーザーが同意するようにする。チェックボックスは未選択の状態にし、または明示的なボタンを使用する(1.2 を参照)
  • UGC:報告を 24 時間以内に処理し、コンテンツを削除して違反したユーザーを退出させる
  • UGC:ブロックが行われたら開発者に通知し、ブロックされたユーザーのコンテンツをフィードから直ちに削除する
  • UGC:App Review から求められた場合、サインアップ/ログイン前の規約への同意、コンテンツへのフラグ付け、ユーザーのブロックを示す、実機での画面収録を提出する。求められた場合は、今後の提出時のメモにも記載する
  • 子どもや 10 代のユーザーがアプリ内で年齢に適した体験を得られる
  • キッズカテゴリのアプリにはペアレンタルゲートを設ける
  • 虚偽の情報やいたずらを目的とした機能がない
  • 該当する場合、医療に関する免責事項を記載する
  • 物質の使用を促進しない
パフォーマンス(セクション 2.x)
  • 年齢評価の質問票にあるソーシャルメディア機能に関する質問に回答している(2026 年 9 月以降の提出では必須です。ソーシャルフィードを備えたアプリには「ソーシャルメディア」の記述子と「利用時間制限」のカテゴリが適用されます)
  • クラッシュやバグがない
  • iPhone と iPad の両方でテスト済み — App Review は現在、iPad Air 11-inch (M3) と iPhone 17 Pro Max で審査しています(2026 年 8 月時点)
  • すべての機能が完成しており、正常に動作する
  • プレースホルダーのコンテンツがない
  • 新機能、機能性、製品の変更点を「審査メモ」に明記し、審査担当者が確認できるようにしている(2.3.1)
  • 審査中に隠され、承認後に有効化される機能も含め、隠された機能、休止中の機能、文書化されていない機能がない(2.5.19 を参照)
  • 製品ページのヘッダーと検索結果に使用するクリエイティブアセットが 2.3.14 に準拠している
  • アプリ名、サブタイトル、キーワード、スクリーンショット、プレビューに「無料」などの価格を表す語句を使用していない。キャプチャしたアプリ画面内のテキストも対象です(2.3.7 を参照)
  • IPv6 のテストが完了しており、正常に動作する
  • 必要に応じてデモアカウントを提供している
  • 公開 API のみを使用している
  • 非推奨 API を使用していない
  • バックグラウンドモードを適切に使用している
デザイン(セクション 4.x)
  • 十分なネイティブ機能がある(単なるウェブラッパーではない)
  • 模倣に関する懸念がない
  • 独自のアプリ名とブランディングを使用している
  • Bundle ID の重複登録によるスパムや、競合の多いカテゴリにおける粗雑なクローンがない
  • Live Activities、プッシュ通知、Game Center をスパム、フィッシング、または未承諾メッセージに使用していない
  • 拡張機能がガイドラインに準拠している
  • ソーシャルログインを使用する場合、ログイン方法の代替手段がある
  • 組み込み機能を収益化していない
法務(セクション 5.x)
  • 人身売買や児童搾取を助長するコンテンツや機能がない。セクション 5 により、App Store からの削除と代替配信のブロックが求められます
  • ライセンスのないサードパーティコンテンツがない
  • Apple の商標を適切に使用している
  • 該当する場合、ギャンブルのライセンスを取得している(実際の位置情報に基づく地域制限を適用している)
  • VPN が NEVPNManager API を使用している
  • 子どもを対象とする場合、COPPA/GDPR に準拠している
  • レビューのリクエストにはシステム API のみを使用している(独自のリクエスト画面は使用しない)
  • レビュー、ランキング、検索、紹介の操作をしていない(5.6)

スキルに関する問題の報告(フィードバック)

このスキルは、ユーザーからの報告を通じて改善されます。セッション中にこのスキルがユーザーの役に立たなかったと気づいた場合は、セッションごとに一度、メンテナーへの報告を提案してください。

次のいずれかに気づいた場合は、フィードバックを提案してください。 カテゴリー名を分類に使用してください。課題のタイトルに [Feedback] <category>: <short description> として含めます。

正確性

  • 誤検知 — 実際には準拠しているコードをスキルが問題として指摘した(ガイダンスが厳しすぎる)
  • 見逃し — スキルが確認したものの問題として指摘しなかった事項が原因で、ユーザーのアプリが却下された
  • 引用の誤り — 実際の問題ではあるが、誤ったガイドラインのセクションに関連付けられている、または誤ったリスクレベルが付けられている
  • 情報が古い — ここにあるルールが、Apple の現在公開されているガイドラインと矛盾している

有用性

  • ノイズが多すぎる — 価値の低い、または重複した指摘が大量にあり、重要なものが埋もれてしまった
  • 対応方法が不明確 — 指摘に、対応に必要な詳細、コードへの言及、または具体的な修正方法が不足していた
  • 修正案が不適切 — 提案された修正が誤っている、非推奨である、機能しない、またはそれ自体が却下される可能性がある(Swift と React Native/Expo の違いを含む)

網羅性

  • ルールの不足 — このスキルが対象としていない審査シナリオ、API、またはストアフロント固有の要件(EU、ブラジル、韓国、米国など)
  • 矛盾 — このスキルの複数箇所で内容が食い違っている

動作

  • 起動/負荷 — 無関係なときにスキルが起動した、本来起動すべきときに起動しなかった、または過剰なコンテキストを消費した
  • わかりにくい — ユーザーがガイダンスを理解しにくい、曖昧、または適用しにくいと感じた

より軽微な兆候も対象になります。同じ種類の指摘をユーザーが繰り返し無視する、スキルの助言を覆して結果的に正しかったと判明する、またはチェックリストの項目を明らかに回避している場合も、報告を提案する価値があります。小さな不便も、誤ったルールと同じくらい貴重なフィードバックです。

同意に関するルール — すべて必須で、例外はありません:

  1. まず確認してください。 たとえば、「これは app-store-review スキル自体の見落としのようです。メンテナーが修正できるよう、GitHub の課題を作成しましょうか?」と尋ねてください。ユーザーが断った場合は、そのセッション中は再度提案しないでください。
  2. 送信前に、草案の全文を表示してください(正確なタイトルと本文)。
  3. ユーザーのコード、アプリ名、バンドル ID、ファイルパス、認証情報、または専有情報を決して含めないでください。 報告するのはこのスキルのルールについてであり、ユーザーのアプリについてではありません。ユーザーが草案に明示的に記載した場合に限り、こうした情報を含めてください。
  4. ユーザーが正確な文面を承認してから、gh issue create --repo safaiyeh/app-store-review-skill --title "..." --body "..." を使って送信してください。gh を利用できない、または認証されていない場合は、ユーザー自身が報告できるよう、このリンクを案内してください:https://github.com/safaiyeh/app-store-review-skill/issues/new?template=skill-feedback.yml
  5. フィードバックを無断で、自動的に、または別のタスクの副次的な処理として送信しないでください。 許可を求めて断られた場合は「いいえ」として扱い、再度尋ねたり、別の方法を探したりしないでください。

課題の内容: スキルのバージョン(上記のフロントマターから取得)、フィードバックのカテゴリー、該当するルールのセクション(例:「3.1.1」)、スキルが何を述べたか、代わりにどうすべきだったか、今日の日付。それ以外は、ユーザーが追加しない限り含めないでください。

参考資料

コメント