Apple App Store Reviewer
Simulate a skeptical App Review team using reproducible evidence. Review the exact release candidate, not a development branch or mock build. The objective is to remove every observable rejection trigger before submission; Apple makes the final decision, so never promise approval.
Non-negotiable rules
- Treat current Apple documentation as authoritative. Use community reports only as weak signals for reviewer behavior, never as policy.
- Run
scripts/check_policy_freshness.py --network when current network access is permitted. If the official guideline update date is newer than this skill's baseline, stop the readiness decision, refresh the policy references, and label the review POLICY STALE.
- Never mark a check
PASS unless the relevant artifact or runtime path was actually observed. Missing evidence is SKIPPED or NEEDS_REVIEW, not a pass.
- Do not upload source, archives, screenshots, prompts, credentials, or user data to third parties without explicit permission. The bundled scripts are local-first and read-only.
- Use release configuration, production-like backend settings, a fresh install, and reviewer-safe demo credentials. Scrub secrets from reports.
- Distinguish direct violations from heuristics. A deterministic mismatch can be a
BLOCKER; a source-code signal that needs context is normally HIGH or MEDIUM with NEEDS_REVIEW.
- Do not infer legal compliance. Require licenses, regulatory approvals, terms, or counsel confirmation as evidence when a regulated branch applies.
Evidence to request or locate
Create an evidence manifest before reviewing. Prefer all of the following:
- Release source tree and lockfiles.
- For Capacitor apps:
package.json, the authoritative resolved lockfile, capacitor.config.*, post-sync iOS project, generated and bundled Capacitor config, source/native/final web-asset trees, Package.resolved or Podfile.lock, final plugin/privacy inventory, and trusted cap doctor / cap ls ios output when available.
.xcarchive, exported .app, or .ipa built for submission.
review-input.json based on assets/review-input.example.json.
- App Store Connect metadata export or
metadata.json per locale.
- Final screenshots grouped by locale and device family.
- App Privacy answers,
PrivacyInfo.xcprivacy, entitlements, and Info.plist files.
- In-App Purchase and subscription records, including review screenshots and submission status.
- A non-expiring demo account or approved full-featured demo mode.
- Review notes, privacy policy, terms/EULA, support page, and any regulatory evidence.
- For AI: provider/data-flow map, consent copy, retention/training settings, safety policy, age-rating rationale, and test adapter if available.
Record absent artifacts explicitly. Do not delay a useful partial audit, but the final gate cannot be READY FOR SUBMISSION while mandatory evidence is absent.
Core procedure
1. Establish scope and policy freshness
Read references/policy-baseline.md. Determine:
- Platforms and device families actually enabled by the binary.
- New app versus update, storefronts, locales, category, age target, and release date.
- Business model and whether value is digital, physical, person-to-person, enterprise, reader, or multiplatform.
- Feature branches: account creation, social login, AI, UGC/chat, creator content, subscriptions, ads/tracking, sensitive permissions, health, finance, kids, gambling, crypto, VPN/MDM, browsers, remote desktop, extensions, mini apps, or regulated services.
Run:
python3 scripts/check_policy_freshness.py --output review-output/policy.json
# Add --network only when network access is permitted.
The August 25, 2026 baseline expects App Review Guidelines last updated June 8, 2026 and the Xcode 26 / platform SDK 26 upload minimum effective April 28, 2026. September 2026 social-media age-rating questions are a near-term warning until their effective date.
2. Validate intake and run deterministic preflight
Copy and complete assets/review-input.example.json. Keep reviewer passwords in environment variables, not committed JSON.
python3 scripts/review_app.py \
--config review-input.json \
--output-dir review-output
For a release gate, rerun on macOS with the final archive and use --network only for URL and policy checks:
python3 scripts/review_app.py \
--config review-input.json \
--output-dir review-output \
--network \
--strict
Inspect every script diagnostic. TOOL_UNAVAILABLE means the associated check is unverified; it is not a failure by itself, but may prevent a ready gate.
3. Review deterministic findings
The orchestrator checks, when artifacts are available:
- Metadata lengths, required URLs, placeholders, keywords, demo access, IAP records, and subscription disclosures.
- Source/config signals for permissions, privacy, accounts, login, purchases, AI providers, UGC controls, web-wrapper risk, staging code, secrets, tracking, private APIs, and dynamic code.
- Capacitor release-line alignment, production configuration, plugin privacy requirements, live-update signals, and the Capacitor 8.5 UIScene migration.
- Bundle identity, versions, SDK/Xcode metadata, device families, usage descriptions, ATS settings, privacy manifests, listed third-party SDK manifests, architectures, signatures, entitlements, and linked frameworks.
- Screenshot file count, exact accepted dimensions, transparency, duplicates, blank/title-card signals, locale/device coverage, and contact-sheet creation.
- URL reachability and basic content only when
--network is explicitly enabled.
Reproduce each BLOCKER before reporting it. Downgrade false-positive heuristics and explain why.
4. Take and visually evaluate screenshots
When macOS/Xcode and a simulator build are available, create a capture plan from assets/capture-plan.example.json, then run:
python3 scripts/capture_simulator.py \
--app path/to/App.app \
--bundle-id com.example.app \
--plan capture-plan.json \
--output-dir review-output/captured-screenshots \
--normalize-status-bar
Capture the core journey, purchase screens, permissions, AI consent, account deletion, error/empty states, and any path mentioned in metadata. For paths not reachable by deep link, use an XCUITest based on assets/AppReviewUITests.swift and then inspect the generated images.
Run deterministic image checks:
python3 scripts/inspect_screenshots.py \
--screenshots review-output/captured-screenshots \
--config review-input.json \
--output review-output/screenshots.json \
--contact-sheets review-output/contact-sheets
Then use vision to inspect each original image and each contact sheet. Read references/screenshot-review.md. Evaluate actual app use, current UI, device/locale consistency, clipped or untranslated text, real personal data, misleading claims, prices and trials, other-platform branding, objectionable content, fake system UI, login/splash-only sets, and feature claims not reproducible in the build. Do not use OCR as the default substitute for visual inspection.
5. Execute the reviewer journey
Read references/runtime-review.md. Test on a clean install and, where relevant, an upgrade install:
- Cold launch on the newest shipping OS and supported hardware classes; repeat with no network, slow network, denied permissions, revoked permissions, and backend errors.
- Reach useful functionality without unnecessary registration. Exercise account creation, login/logout, credential recovery, social login, and in-app account deletion.
- Buy, cancel, upgrade/downgrade, restore, and re-open every IAP/subscription path in Sandbox. Confirm products are separately submitted and visible to review.
- Verify deep links, universal links, notifications, background behavior, extensions, widgets, camera/microphone/location flows, external hardware, and orientation/multitasking where declared.
- Compare every reviewer-visible fact with metadata, privacy answers, screenshots, age rating, review notes, and the production backend.
- Save reproducible evidence: exact steps, device/OS, build number, timestamps, screenshots, logs, crash reports, and expected versus actual behavior.
For detected or declared Capacitor apps, read references/capacitor-ios.md and references/capacitor-release-integrity.md. The qualified line is >=8.5.0 <9.0.0; a future major is FRAMEWORK BASELINE UNVERIFIED until requalified. Also test cold and warm custom URLs, universal links, App.getLaunchUrl(), appUrlOpen, JavaScript pause/resume, bundled-asset launch with the development host unavailable, native plugin denial/revocation, bridge isolation, upgrade storage, and applicable live-update rollback. Missing source/generated/submitted parity evidence prevents a ready gate.
Run configured XCUITests with:
python3 scripts/run_xcode_tests.py --config review-input.json --output-dir review-output/runtime
6. Apply the AI overlay
If the app uses AI, read references/ai-review.md and references/privacy-security.md.
Required review:
- Map every user/device datum from collection to app, backend, model provider, subprocessors, logs, training, retention, deletion, and output destination.
- If personal data is sent to a third-party AI, verify an informed explicit-permission event occurs before the first transmission. The disclosure must identify the data categories, recipient/provider, purpose, and relevant retention or training behavior; privacy-policy text alone is not a conservative substitute.
- Confirm denial leaves the app in a coherent state and that consent can be withdrawn where applicable.
- Verify App Privacy answers and the privacy policy match actual provider SDK/server behavior.
- Review whether the app is a chatbot or offers software not embedded in the binary under Guideline 4.7, including filtering, reporting, blocking, per-instance permission sharing, indexing, universal links, IAP, and age restrictions where applicable.
- Assess the worst reasonably reachable AI output for age rating and content safety. Do not rate only intended prompts.
- For medical, legal, financial, employment, education, insurance, or other high-impact outputs, require bounded claims, qualified human oversight, escalation, and applicable licenses. A disclaimer does not cure unsafe functionality.
- If using Apple's Foundation Models framework, apply the current acceptable-use requirements and preserve platform safeguards.
- Check AI transparency, user control, feedback/correction, provenance, hallucination handling, prompt injection, data exfiltration, cross-user leakage, output sharing, abuse reporting, and rate/age controls.
Generate or execute the bundled deterministic safety suite:
python3 scripts/run_ai_safety_suite.py \
--suite assets/ai-safety-test-cases.json \
--emit review-output/ai-prompts.jsonl
# Optional local adapter: receives one JSON object on stdin and returns JSON.
python3 scripts/run_ai_safety_suite.py \
--suite assets/ai-safety-test-cases.json \
--command ./assets/ai-adapter.example.py \
--output review-output/ai-results.json
The runner checks response contracts when possible; semantic safety remains a manual/agent review. Never send production personal data in red-team prompts.
7. Apply app-type and storefront branches
Read references/app-type-branches.md for every matched feature. Read references/business-payments.md for any monetization or external purchase path. Do not assume the United States external-link treatment applies to other storefronts. For regional entitlements, licenses, age assurance, or local-law declarations, verify the exact storefront and current official terms.
For low-value, template-generated, web-wrapper, aggregator, or saturated-category risk, require a concrete “native value dossier”:
- Unique user problem and target audience.
- Native capabilities and workflows unavailable from a simple website.
- Original content/data rights and meaningful differentiation from existing apps.
- Retention/utility evidence, offline or device integration where relevant.
- A reviewer note that points to these features without marketing exaggeration.
This is mandatory when Guideline 4.2 or 4.3 risk is plausible, including many thin AI wrappers.
For a Capacitor project, apply references/capacitor-ios.md in addition to the ordinary WebView/minimum-functionality branch. Treat Capacitor as a native runtime architecture, not an automatic 4.2 violation. Require evidence of useful app behavior, correct bridge boundaries, synchronized bundled assets, and release-safe native configuration.
8. Cross-consistency review
Build a claim matrix with rows for each material feature/data/payment claim and columns for:
- Binary/source behavior.
- Runtime observation.
- App Store description and promotional text.
- Screenshots/previews.
- App Privacy answers and privacy policy.
- Age rating.
- IAP/subscription records and paywall.
- Review notes and demo account.
Any material contradiction is at least HIGH; a directly misleading price, hidden feature, broken URL, or undisclosed data flow can be a BLOCKER.
9. Report, fix, and re-verify
For requested Capacitor implementation fixes, the optional companion agentic-capacitor covers web conversion, native configuration, UIScene and lifecycle work. Pass finding IDs, exact build evidence and acceptance checks; return here to audit the changed candidate. Follow the handoff boundaries in references/capacitor-ios.md; the companion's checks do not replace this review's gate or authorize mutations during an audit.
Use the report schema in assets/review-report.schema.json. Every finding must contain:
- Stable ID, status, severity, confidence, category, and guideline.
- Exact evidence with file/path/screen/steps.
- Why Apple may reject it.
- Minimal safe fix plus any product-level alternative.
- Deterministic or manual verification steps.
- Official source; community source only when labeled as anecdotal.
Gate rules:
NOT READY: one or more open BLOCKER findings.
CONDITIONALLY READY: no blockers, but open HIGH findings, mandatory NEEDS_REVIEW items, stale policy, or missing release evidence.
READY FOR SUBMISSION: no open blocker/high findings, all mandatory paths observed, policy current, and report validation passes.
After fixes, rerun only affected checks first, then rerun the complete release audit. Validate the report:
python3 scripts/validate_report.py review-output/report.json --strict
Draft App Review notes from assets/review-notes-template.md. Include exact navigation, demo credentials via secure delivery, unusual business-model explanation, AI provider/consent path, IAP locations, hardware requirements, and attachments. Never hide a feature from review.
Before distributing or materially changing the skill itself, run:
python3 scripts/validate_skill.py .
python3 -m unittest discover -s tests -p 'test_*.py' -v
Use evals/evals.json for isolated with-skill versus baseline agent evaluations after policy or workflow changes.
Severity calibration
BLOCKER: current, directly applicable requirement is observably unmet; upload/review is expected to fail or the app presents material safety/legal risk.
HIGH: strong rejection likelihood but context or runtime confirmation is still needed.
MEDIUM: reviewer friction, quality issue, or plausible policy concern.
LOW: quality hardening or weak community signal.
INFO: verified fact or non-actionable context.
Confidence is separate from severity. Use CERTAIN only for direct evidence, HIGH for strong deterministic inference, MEDIUM for contextual inference, and LOW for anecdotal or weak heuristics.
Progressive references
- Read
references/policy-baseline.md on every review.
- Read
references/rule-matrix.md to map evidence to Apple guideline sections.
- Read
references/screenshot-review.md whenever screenshots or previews exist.
- Read
references/runtime-review.md before manual or simulator testing.
- Read
references/ai-review.md for any AI/ML, generated content, chatbot, or Foundation Models feature.
- Read
references/privacy-security.md for any data collection, permissions, tracking, third-party SDK, or account feature.
- Read
references/business-payments.md for purchases, subscriptions, credits, external links, physical goods, services, or reader apps.
- Read
references/app-type-branches.md for specialized categories and regional/storefront branches.
- Read
references/community-signals.md only after official-policy review; use it to add tests, not rules.
- Read
references/reviewer-notes-and-appeals.md when drafting notes, responding to rejection, or deciding fix versus appeal.
- Read
references/capacitor-ios.md whenever @capacitor/ios, capacitor.config.*, CAPBridgeViewController, or a Capacitor/Cordova bridge is present.
- Read
references/capacitor-release-integrity.md for every detected or declared Capacitor app; it defines safe inspection, source/generated/submitted parity, dependency/plugin contracts, required checks, and gate semantics.
- Read
references/capacitor-live-updates.md only when an OTA/live-update package, remote web bundle, asset-path switcher, or custom update bootstrap is detected.
- Use
references/source-index.md and references/source-catalog.json to refresh the baseline.
Output package
Return or save:
report.json and report.md.
- Evidence manifest and tool/skipped-check inventory.
- Screenshot findings, visual-review queue, and contact sheets.
- AI safety prompts/results and manual semantic verdicts when applicable.
- Claim-consistency matrix.
- Prioritized remediation plan with verification commands.
- Reviewer journey log and final App Review notes draft.
- Final gate with explicit limitations; never state that approval is guaranteed.
1---2name: apple-app-store-reviewer3description: Audit Apple-platform apps before App Store submission or resubmission. Use for iOS, iPadOS, macOS, tvOS, watchOS, and visionOS release reviews involving source code, archives or IPAs, App Store Connect metadata, screenshots, subscriptions, login, privacy manifests, AI features, UGC, age ratings, review notes, or an Apple rejection. Produces evidence-backed findings, deterministic preflight results, screenshot review queues, runtime test plans, remediation steps, and a submission-readiness gate.4license: MIT5---67# Apple App Store Reviewer89Simulate a skeptical App Review team using reproducible evidence. Review the exact release candidate, not a development branch or mock build. The objective is to remove every observable rejection trigger before submission; Apple makes the final decision, so never promise approval.1011## Non-negotiable rules12131. Treat current Apple documentation as authoritative. Use community reports only as weak signals for reviewer behavior, never as policy.142. Run `scripts/check_policy_freshness.py --network` when current network access is permitted. If the official guideline update date is newer than this skill's baseline, stop the readiness decision, refresh the policy references, and label the review `POLICY STALE`.153. Never mark a check `PASS` unless the relevant artifact or runtime path was actually observed. Missing evidence is `SKIPPED` or `NEEDS_REVIEW`, not a pass.164. Do not upload source, archives, screenshots, prompts, credentials, or user data to third parties without explicit permission. The bundled scripts are local-first and read-only.175. Use release configuration, production-like backend settings, a fresh install, and reviewer-safe demo credentials. Scrub secrets from reports.186. Distinguish direct violations from heuristics. A deterministic mismatch can be a `BLOCKER`; a source-code signal that needs context is normally `HIGH` or `MEDIUM` with `NEEDS_REVIEW`.197. Do not infer legal compliance. Require licenses, regulatory approvals, terms, or counsel confirmation as evidence when a regulated branch applies.2021## Evidence to request or locate2223Create an evidence manifest before reviewing. Prefer all of the following:2425- Release source tree and lockfiles.26- For Capacitor apps: `package.json`, the authoritative resolved lockfile, `capacitor.config.*`, post-sync iOS project, generated and bundled Capacitor config, source/native/final web-asset trees, `Package.resolved` or `Podfile.lock`, final plugin/privacy inventory, and trusted `cap doctor` / `cap ls ios` output when available.27- `.xcarchive`, exported `.app`, or `.ipa` built for submission.28- `review-input.json` based on `assets/review-input.example.json`.29- App Store Connect metadata export or `metadata.json` per locale.30- Final screenshots grouped by locale and device family.31- App Privacy answers, `PrivacyInfo.xcprivacy`, entitlements, and Info.plist files.32- In-App Purchase and subscription records, including review screenshots and submission status.33- A non-expiring demo account or approved full-featured demo mode.34- Review notes, privacy policy, terms/EULA, support page, and any regulatory evidence.35- For AI: provider/data-flow map, consent copy, retention/training settings, safety policy, age-rating rationale, and test adapter if available.3637Record absent artifacts explicitly. Do not delay a useful partial audit, but the final gate cannot be `READY FOR SUBMISSION` while mandatory evidence is absent.3839## Core procedure4041### 1. Establish scope and policy freshness4243Read `references/policy-baseline.md`. Determine:4445- Platforms and device families actually enabled by the binary.46- New app versus update, storefronts, locales, category, age target, and release date.47- Business model and whether value is digital, physical, person-to-person, enterprise, reader, or multiplatform.48- Feature branches: account creation, social login, AI, UGC/chat, creator content, subscriptions, ads/tracking, sensitive permissions, health, finance, kids, gambling, crypto, VPN/MDM, browsers, remote desktop, extensions, mini apps, or regulated services.4950Run:5152```bash53python3 scripts/check_policy_freshness.py --output review-output/policy.json54# Add --network only when network access is permitted.55```5657The August 25, 2026 baseline expects App Review Guidelines last updated June 8, 2026 and the Xcode 26 / platform SDK 26 upload minimum effective April 28, 2026. September 2026 social-media age-rating questions are a near-term warning until their effective date.5859### 2. Validate intake and run deterministic preflight6061Copy and complete `assets/review-input.example.json`. Keep reviewer passwords in environment variables, not committed JSON.6263```bash64python3 scripts/review_app.py \65 --config review-input.json \66 --output-dir review-output67```6869For a release gate, rerun on macOS with the final archive and use `--network` only for URL and policy checks:7071```bash72python3 scripts/review_app.py \73 --config review-input.json \74 --output-dir review-output \75 --network \76 --strict77```7879Inspect every script diagnostic. `TOOL_UNAVAILABLE` means the associated check is unverified; it is not a failure by itself, but may prevent a ready gate.8081### 3. Review deterministic findings8283The orchestrator checks, when artifacts are available:8485- Metadata lengths, required URLs, placeholders, keywords, demo access, IAP records, and subscription disclosures.86- Source/config signals for permissions, privacy, accounts, login, purchases, AI providers, UGC controls, web-wrapper risk, staging code, secrets, tracking, private APIs, and dynamic code.87- Capacitor release-line alignment, production configuration, plugin privacy requirements, live-update signals, and the Capacitor 8.5 UIScene migration.88- Bundle identity, versions, SDK/Xcode metadata, device families, usage descriptions, ATS settings, privacy manifests, listed third-party SDK manifests, architectures, signatures, entitlements, and linked frameworks.89- Screenshot file count, exact accepted dimensions, transparency, duplicates, blank/title-card signals, locale/device coverage, and contact-sheet creation.90- URL reachability and basic content only when `--network` is explicitly enabled.9192Reproduce each `BLOCKER` before reporting it. Downgrade false-positive heuristics and explain why.9394### 4. Take and visually evaluate screenshots9596When macOS/Xcode and a simulator build are available, create a capture plan from `assets/capture-plan.example.json`, then run:9798```bash99python3 scripts/capture_simulator.py \100 --app path/to/App.app \101 --bundle-id com.example.app \102 --plan capture-plan.json \103 --output-dir review-output/captured-screenshots \104 --normalize-status-bar105```106107Capture the core journey, purchase screens, permissions, AI consent, account deletion, error/empty states, and any path mentioned in metadata. For paths not reachable by deep link, use an XCUITest based on `assets/AppReviewUITests.swift` and then inspect the generated images.108109Run deterministic image checks:110111```bash112python3 scripts/inspect_screenshots.py \113 --screenshots review-output/captured-screenshots \114 --config review-input.json \115 --output review-output/screenshots.json \116 --contact-sheets review-output/contact-sheets117```118119Then use vision to inspect each original image and each contact sheet. Read `references/screenshot-review.md`. Evaluate actual app use, current UI, device/locale consistency, clipped or untranslated text, real personal data, misleading claims, prices and trials, other-platform branding, objectionable content, fake system UI, login/splash-only sets, and feature claims not reproducible in the build. Do not use OCR as the default substitute for visual inspection.120121### 5. Execute the reviewer journey122123Read `references/runtime-review.md`. Test on a clean install and, where relevant, an upgrade install:1241251. Cold launch on the newest shipping OS and supported hardware classes; repeat with no network, slow network, denied permissions, revoked permissions, and backend errors.1262. Reach useful functionality without unnecessary registration. Exercise account creation, login/logout, credential recovery, social login, and in-app account deletion.1273. Buy, cancel, upgrade/downgrade, restore, and re-open every IAP/subscription path in Sandbox. Confirm products are separately submitted and visible to review.1284. Verify deep links, universal links, notifications, background behavior, extensions, widgets, camera/microphone/location flows, external hardware, and orientation/multitasking where declared.1295. Compare every reviewer-visible fact with metadata, privacy answers, screenshots, age rating, review notes, and the production backend.1306. Save reproducible evidence: exact steps, device/OS, build number, timestamps, screenshots, logs, crash reports, and expected versus actual behavior.131132For detected or declared Capacitor apps, read `references/capacitor-ios.md` and `references/capacitor-release-integrity.md`. The qualified line is `>=8.5.0 <9.0.0`; a future major is `FRAMEWORK BASELINE UNVERIFIED` until requalified. Also test cold and warm custom URLs, universal links, `App.getLaunchUrl()`, `appUrlOpen`, JavaScript `pause`/`resume`, bundled-asset launch with the development host unavailable, native plugin denial/revocation, bridge isolation, upgrade storage, and applicable live-update rollback. Missing source/generated/submitted parity evidence prevents a ready gate.133134Run configured XCUITests with:135136```bash137python3 scripts/run_xcode_tests.py --config review-input.json --output-dir review-output/runtime138```139140### 6. Apply the AI overlay141142If the app uses AI, read `references/ai-review.md` and `references/privacy-security.md`.143144Required review:145146- Map every user/device datum from collection to app, backend, model provider, subprocessors, logs, training, retention, deletion, and output destination.147- If personal data is sent to a third-party AI, verify an informed explicit-permission event occurs before the first transmission. The disclosure must identify the data categories, recipient/provider, purpose, and relevant retention or training behavior; privacy-policy text alone is not a conservative substitute.148- Confirm denial leaves the app in a coherent state and that consent can be withdrawn where applicable.149- Verify App Privacy answers and the privacy policy match actual provider SDK/server behavior.150- Review whether the app is a chatbot or offers software not embedded in the binary under Guideline 4.7, including filtering, reporting, blocking, per-instance permission sharing, indexing, universal links, IAP, and age restrictions where applicable.151- Assess the worst reasonably reachable AI output for age rating and content safety. Do not rate only intended prompts.152- For medical, legal, financial, employment, education, insurance, or other high-impact outputs, require bounded claims, qualified human oversight, escalation, and applicable licenses. A disclaimer does not cure unsafe functionality.153- If using Apple's Foundation Models framework, apply the current acceptable-use requirements and preserve platform safeguards.154- Check AI transparency, user control, feedback/correction, provenance, hallucination handling, prompt injection, data exfiltration, cross-user leakage, output sharing, abuse reporting, and rate/age controls.155156Generate or execute the bundled deterministic safety suite:157158```bash159python3 scripts/run_ai_safety_suite.py \160 --suite assets/ai-safety-test-cases.json \161 --emit review-output/ai-prompts.jsonl162163# Optional local adapter: receives one JSON object on stdin and returns JSON.164python3 scripts/run_ai_safety_suite.py \165 --suite assets/ai-safety-test-cases.json \166 --command ./assets/ai-adapter.example.py \167 --output review-output/ai-results.json168```169170The runner checks response contracts when possible; semantic safety remains a manual/agent review. Never send production personal data in red-team prompts.171172### 7. Apply app-type and storefront branches173174Read `references/app-type-branches.md` for every matched feature. Read `references/business-payments.md` for any monetization or external purchase path. Do not assume the United States external-link treatment applies to other storefronts. For regional entitlements, licenses, age assurance, or local-law declarations, verify the exact storefront and current official terms.175176For low-value, template-generated, web-wrapper, aggregator, or saturated-category risk, require a concrete “native value dossier”:177178- Unique user problem and target audience.179- Native capabilities and workflows unavailable from a simple website.180- Original content/data rights and meaningful differentiation from existing apps.181- Retention/utility evidence, offline or device integration where relevant.182- A reviewer note that points to these features without marketing exaggeration.183184This is mandatory when Guideline 4.2 or 4.3 risk is plausible, including many thin AI wrappers.185186For a Capacitor project, apply `references/capacitor-ios.md` in addition to the ordinary WebView/minimum-functionality branch. Treat Capacitor as a native runtime architecture, not an automatic 4.2 violation. Require evidence of useful app behavior, correct bridge boundaries, synchronized bundled assets, and release-safe native configuration.187188### 8. Cross-consistency review189190Build a claim matrix with rows for each material feature/data/payment claim and columns for:191192- Binary/source behavior.193- Runtime observation.194- App Store description and promotional text.195- Screenshots/previews.196- App Privacy answers and privacy policy.197- Age rating.198- IAP/subscription records and paywall.199- Review notes and demo account.200201Any material contradiction is at least `HIGH`; a directly misleading price, hidden feature, broken URL, or undisclosed data flow can be a `BLOCKER`.202203### 9. Report, fix, and re-verify204205For requested Capacitor implementation fixes, the optional companion [agentic-capacitor](https://github.com/CodeAlive-AI/vibe-stack/blob/main/skills/agentic-capacitor/SKILL.md) covers web conversion, native configuration, UIScene and lifecycle work. Pass finding IDs, exact build evidence and acceptance checks; return here to audit the changed candidate. Follow the handoff boundaries in `references/capacitor-ios.md`; the companion's checks do not replace this review's gate or authorize mutations during an audit.206207Use the report schema in `assets/review-report.schema.json`. Every finding must contain:208209- Stable ID, status, severity, confidence, category, and guideline.210- Exact evidence with file/path/screen/steps.211- Why Apple may reject it.212- Minimal safe fix plus any product-level alternative.213- Deterministic or manual verification steps.214- Official source; community source only when labeled as anecdotal.215216Gate rules:217218- `NOT READY`: one or more open `BLOCKER` findings.219- `CONDITIONALLY READY`: no blockers, but open `HIGH` findings, mandatory `NEEDS_REVIEW` items, stale policy, or missing release evidence.220- `READY FOR SUBMISSION`: no open blocker/high findings, all mandatory paths observed, policy current, and report validation passes.221222After fixes, rerun only affected checks first, then rerun the complete release audit. Validate the report:223224```bash225python3 scripts/validate_report.py review-output/report.json --strict226```227228Draft App Review notes from `assets/review-notes-template.md`. Include exact navigation, demo credentials via secure delivery, unusual business-model explanation, AI provider/consent path, IAP locations, hardware requirements, and attachments. Never hide a feature from review.229230Before distributing or materially changing the skill itself, run:231232```bash233python3 scripts/validate_skill.py .234python3 -m unittest discover -s tests -p 'test_*.py' -v235```236237Use `evals/evals.json` for isolated with-skill versus baseline agent evaluations after policy or workflow changes.238239## Severity calibration240241- `BLOCKER`: current, directly applicable requirement is observably unmet; upload/review is expected to fail or the app presents material safety/legal risk.242- `HIGH`: strong rejection likelihood but context or runtime confirmation is still needed.243- `MEDIUM`: reviewer friction, quality issue, or plausible policy concern.244- `LOW`: quality hardening or weak community signal.245- `INFO`: verified fact or non-actionable context.246247Confidence is separate from severity. Use `CERTAIN` only for direct evidence, `HIGH` for strong deterministic inference, `MEDIUM` for contextual inference, and `LOW` for anecdotal or weak heuristics.248249## Progressive references250251- Read `references/policy-baseline.md` on every review.252- Read `references/rule-matrix.md` to map evidence to Apple guideline sections.253- Read `references/screenshot-review.md` whenever screenshots or previews exist.254- Read `references/runtime-review.md` before manual or simulator testing.255- Read `references/ai-review.md` for any AI/ML, generated content, chatbot, or Foundation Models feature.256- Read `references/privacy-security.md` for any data collection, permissions, tracking, third-party SDK, or account feature.257- Read `references/business-payments.md` for purchases, subscriptions, credits, external links, physical goods, services, or reader apps.258- Read `references/app-type-branches.md` for specialized categories and regional/storefront branches.259- Read `references/community-signals.md` only after official-policy review; use it to add tests, not rules.260- Read `references/reviewer-notes-and-appeals.md` when drafting notes, responding to rejection, or deciding fix versus appeal.261- Read `references/capacitor-ios.md` whenever `@capacitor/ios`, `capacitor.config.*`, `CAPBridgeViewController`, or a Capacitor/Cordova bridge is present.262- Read `references/capacitor-release-integrity.md` for every detected or declared Capacitor app; it defines safe inspection, source/generated/submitted parity, dependency/plugin contracts, required checks, and gate semantics.263- Read `references/capacitor-live-updates.md` only when an OTA/live-update package, remote web bundle, asset-path switcher, or custom update bootstrap is detected.264- Use `references/source-index.md` and `references/source-catalog.json` to refresh the baseline.265266## Output package267268Return or save:2692701. `report.json` and `report.md`.2712. Evidence manifest and tool/skipped-check inventory.2723. Screenshot findings, visual-review queue, and contact sheets.2734. AI safety prompts/results and manual semantic verdicts when applicable.2745. Claim-consistency matrix.2756. Prioritized remediation plan with verification commands.2767. Reviewer journey log and final App Review notes draft.2778. Final gate with explicit limitations; never state that approval is guaranteed.