
App Storeの審査で拒否されると、修正→再提出→再審査のサイクルで数日から数週間のロスが発生します。プライバシーポリシーの不備、必須APIの説明不足、禁止されたAPIの使用など、拒否理由は多岐にわたり、事前に気づくのは困難です。
Greenlight は、提出前にこれらの拒否リスクをローカル環境で検知するオープンソースのCLIツールです。ソースコード、プライバシーマニフェスト、IPAバイナリ、App Store Connectのメタデータを解析し、Appleの審査ガイドラインに違反する可能性のある問題を事前に発見します。
Greenlightとは?
Greenlightは、RevylAI が開発したApp Store提出前のコンプライアンススキャナーです。主な特徴は以下の通りです。
- 完全オフライン動作: アカウント登録不要、ファイルのアップロード不要
- 包括的なスキャン: コード、プライバシーマニフェスト、バイナリ、メタデータを一括検査
- 高速: 1秒以内に全スキャン完了
- CI/CD統合: JSON/JUnit形式の出力でパイプラインに組み込み可能
- AI連携: Claude Code/Codexスキルとして、問題の自動修正が可能
インストール
前提条件
手順
Homebrewを使用する場合(macOS)、以下のコマンドでRevylAIのtapからGreenlightをインストールします。
| |
インストール後、greenlight --versionでバージョンを確認できます。
Go経由でインストールする場合:
| |
ソースからビルドする場合:
| |
基本的な使い方
すべてのスキャンを一度に実行
preflightコマンドで、すべてのスキャナーを並列実行します。
| |
このコマンドは、以下の4つのスキャナーを実行します。
| スキャナー | 検査内容 |
|---|---|
| metadata | app.json / Info.plist: アプリ名、バージョン、バンドルID形式、アイコン、プライバシーポリシーURL、目的文字列 |
| codescan | 30種類以上のコードパターン: プライベートAPI、シークレット、決済違反、ATT(App Tracking Transparency、アプリ追跡の透明性)欠落、ソーシャルログイン、プレースホルダー |
| privacy | PrivacyInfo.xcprivacy の完全性、Required Reason APIs、トラッキングSDK vs ATT実装 |
| ipa | バイナリ: Info.plistキー、起動ストーリーボード、アプリアイコン、アプリサイズ、フレームワークのプライバシーマニフェスト |
コードスキャンのみ実行
ソースコードのみをスキャンする場合は、codescanコマンドを使用します。
| |
このコマンドは、Swift、Objective-C、React Native、Expoプロジェクトを対象に、以下のような問題を検出します。
- プライベートAPIの使用(§2.5.1)— CRITICAL
- ハードコードされたシークレット/APIキー(§1.6)— CRITICAL
- デジタル商品の外部決済(§3.1.1)— CRITICAL
- 動的コード実行(§2.5.2)— CRITICAL
- 暗号通貨マイニング(§3.1.5)— CRITICAL
- ソーシャルログイン使用時のSign in with Apple欠落(§4.8)
- IAP(In-App Purchase、アプリ内課金)使用時のRestore Purchases欠落(§3.1.1)
- 広告/トラッキングSDK使用時のATT(App Tracking Transparency)欠落(§5.1.2)
- アカウント作成時の削除オプション欠落(§5.1.1)
- 文字列内のプレースホルダーコンテンツ(§2.1)
- 競合プラットフォームへの言及(§2.3)
- ハードコードされたIPv4アドレス(§2.5)
- 安全でないHTTP URL(§1.6)
- 曖昧なInfo.plist目的文字列(§5.1.1)
- Expo設定の問題(§2.1)
プライバシーマニフェストの検証
プライバシー関連のコンプライアンスのみをスキャンする場合:
| |
このコマンドは、以下を検証します。
- PrivacyInfo.xcprivacy (プライバシーマニフェストファイル)の存在と適切な設定
- コード内で検出されたRequired Reason APIとマニフェストの宣言の一致
- トラッキングSDKの検出とATT実装の有無
- すべての項目を自動的にクロスリファレンス
IPAバイナリの検査
ビルド済みのIPAファイルを検査する場合:
| |
このコマンドは、以下を検査します。
- PrivacyInfo.xcprivacyの存在
- Info.plistの完全性と目的文字列の品質
- App Transport Securityの設定
- アプリアイコンの存在とサイズ
- 起動ストーリーボードの存在
- アプリサイズ(200MBのセルラーダウンロード制限との比較)
- 埋め込まれたフレームワークのプライバシーマニフェスト
App Store Connectのチェック
App Store Connectに登録済みのアプリをAPIで検査する場合:
| |
このコマンドは、以下をチェックします。
- メタデータの完全性(説明、キーワード、URL)
- 必須デバイスサイズのスクリーンショット検証
- ビルド処理ステータス
- 年齢制限と暗号化コンプライアンス
- コンテンツ分析(プラットフォーム言及、プレースホルダー)
応用例: CI/CDパイプラインへの統合
GitHub Actionsでの使用例:
| |
JUnit形式での出力(scanコマンドのみ対応):
| |
Claude Code/Codexスキルとの連携
Greenlightは、Claude CodeやCodexのスキルとして使用でき、AIが問題を自動修正します。
Claude Codeでの設定
プロジェクトの.claude/ディレクトリにスキルファイルを配置します。
| |
その後、Claudeに以下のように指示します。
Run greenlight preflight and fix everything until it passes
Claudeは以下の手順を実行します。
greenlight preflight .を実行- すべての検出結果を読み取り
- 各問題を修正(CRITICAL → WARN → INFOの順)
- 再実行し、GREENLITになるまで繰り返し
Codexでの設定
Codex-native スキルパッケージを使用する場合:
| |
Codexで以下のように呼び出します。
Use $app-store-preflight-compliance to run Greenlight preflight and fix all findings until GREENLIT.
注意点
以下の点に注意が必要です。
- App Store Connect APIの使用:
greenlight scanコマンドは、App Store Connect APIキーまたはApple IDが必要です - オフライン動作の制限:
preflight、codescan、privacy、ipaコマンドは完全オフラインですが、scanコマンドはネットワーク接続が必要です - 検出精度: 静的解析のため、実行時にのみ発生する問題は検出できません
- ガイドライン更新: Appleの審査ガイドラインは頻繁に更新されるため、Greenlightも定期的にアップデートする必要があります
まとめ
Greenlightは、App Store提出前の拒否リスクを事前に検知する強力なツールです。完全オフラインで動作し、1秒以内に包括的なスキャンを完了します。CI/CDパイプラインへの統合やAIとの連携により、開発フローに組み込むことで、審査の手戻りを大幅に削減できます。
iOSアプリ開発者の方は、ぜひ試してみてください。