home / skills / tristanmanchester / agent-skills / auditing-appstore-readiness

auditing-appstore-readiness skill

/auditing-appstore-readiness

This skill audits iOS App Store readiness in Swift/JS projects and outputs a clear pass/warn/fail report with a publish checklist.

This is most likely a fork of the auditing-appstore-readiness skill from openclaw
npx playbooks add skill tristanmanchester/agent-skills --skill auditing-appstore-readiness

Review the files below or copy the command above to add this skill to your agents.

Files (8)
SKILL.md
5.8 KB
---
name: auditing-appstore-readiness
description: Audit an iOS app repo (Swift/Xcode or React Native/Expo) for App Store compliance and release readiness; output a pass/warn/fail report and publish checklist.
metadata: {"openclaw":{"emoji":"🧾","requires":{"bins":["git"]}}}
---

# App Store Readiness Audit

This skill reviews an app repository and produces a release readiness report for iOS **App Store** / **TestFlight** submission.

It supports:
- Native iOS (Swift/Obj‑C, Xcode project/workspace)
- React Native (bare)
- Expo (managed or prebuild)

## Quick start (recommended)

Run the read‑only audit script from the repo root:

{ "tool": "exec", "command": "node {baseDir}/scripts/audit.mjs --repo . --format md" }

If you want JSON output as well:

{ "tool": "exec", "command": "node {baseDir}/scripts/audit.mjs --repo . --format md --json audit.json" }

If the repo is a monorepo, point at the app directory:

{ "tool": "exec", "command": "node {baseDir}/scripts/audit.mjs --repo apps/mobile --format md" }

## Output contract

Always return:
- Overall verdict: **PASS** / **WARN** / **FAIL**
- Detected project flavour and key identifiers (bundle id, version, build)
- A list of checks with evidence and remediation steps
- A **Publish checklist** the developer can tick off

Use: [references/report-template.md](references/report-template.md)

## Safety rules (don’t break the repo)

Default to **read‑only** commands. Do not run commands that modify the workspace unless:
- the user explicitly asks, **or**
- the fix is trivial and clearly desired (then explain what will change first)

Examples of mutating commands:
- dependency installs (`npm i`, `yarn`, `pnpm i`, `pod install`)
- config generation (`expo prebuild`)
- signing automation (`fastlane match`)
- archiving (`xcodebuild archive`, `eas build`) — creates artefacts and may require signing

If you must run a mutating command, label it clearly as **MUTATING** before running.

## Main workflow

### 1) Identify the repo and project flavour

Prefer scripted detection (`audit.mjs`). If doing manually:

- Expo likely: `package.json` contains `expo` and `app.json` / `app.config.*` exists
- React Native (bare): `package.json` contains `react-native` and `ios/` exists
- Native iOS: `*.xcodeproj` or `*.xcworkspace` exists

If multiple apps exist, pick the one matching the user’s intent; otherwise pick the directory with:
- a single `ios/<AppName>/Info.plist`, and
- exactly one `.xcodeproj` or `.xcworkspace` near the root.

### 2) Run static compliance checks (works everywhere)

Run these checks even without Xcode:

- Repo hygiene: clean git status; obvious secrets not committed
- iOS identifiers: bundle id, version, build number
- App icons: includes an App Store (1024×1024) icon
- Launch screen present
- Privacy & permissions:
  - Privacy manifest present (`PrivacyInfo.xcprivacy`) or explicitly accounted for
  - Permission usage strings present when relevant (camera, location, tracking, etc.)
  - Avoid broad ATS exemptions (`NSAllowsArbitraryLoads`)
- Third‑party SDK hygiene: licences, privacy manifests, tracking disclosures
- Store listing basics: privacy policy URL exists somewhere in repo/docs; support/contact info

The script outputs PASS/WARN/FAIL for these.

### 3) Run build‑accuracy checks (macOS + Xcode, optional but high confidence)

Only if you have **Xcode** available (local macOS gateway or a paired macOS node).

Recommended sequence (creates build artefacts):

1) Show Xcode + SDK versions:
{ "tool": "exec", "command": "xcodebuild -version" }

2) List schemes (project/workspace as detected):
{ "tool": "exec", "command": "xcodebuild -list -json -workspace <path>.xcworkspace" }
or
{ "tool": "exec", "command": "xcodebuild -list -json -project <path>.xcodeproj" }

3) Release build for simulator (fast, avoids signing):
{ "tool": "exec", "command": "xcodebuild -workspace <...> -scheme <...> -configuration Release -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15' build" }

4) If you need a distribution artefact (**MUTATING / signing**):
- Prefer Fastlane if already configured
- Otherwise `xcodebuild archive` + `xcodebuild -exportArchive`

If build checks aren’t possible, the report must explicitly say so and keep the verdict at **WARN** (unless there are definite FAIL items).

### 4) Produce the final readiness report

- Use [references/report-template.md](references/report-template.md)
- Include a “Go / No‑Go” recommendation:
  - **FAIL** → must fix before submitting
  - **WARN** → submission may work, but risk areas remain
  - **PASS** → ready to submit; remaining items are administrative

## Manual checks the agent cannot fully verify

Always include these as a final checklist section (even if automated checks pass):

- App Store Connect metadata: screenshots, description, keywords, age rating, pricing, categories
- Privacy Nutrition Labels match actual behaviour
- Export compliance (encryption) answers are correct
- Content/IP rights: licences, third‑party assets, trademarks
- Account / regional requirements (e.g. EU trader status if applicable)
- In‑app purchases / subscriptions configured if used

See: [references/manual-checklist.md](references/manual-checklist.md)

## When the user asks “make it compliant”

Switch to fix mode:
1) Identify failing items that can be fixed safely in‑repo (Info.plist strings, `PrivacyInfo.xcprivacy` template, ATS exceptions tightening, etc.)
2) Propose minimal patches and apply with `apply_patch`
3) Re‑run `audit.mjs` and update the report

## Quick search

- Permissions mapping: [references/permissions-map.md](references/permissions-map.md)
- Expo‑specific checks: [references/expo.md](references/expo.md)
- React Native iOS checks: [references/react-native.md](references/react-native.md)
- Native iOS checks: [references/native-ios.md](references/native-ios.md)

Overview

This skill audits an iOS app repository (Swift/Xcode, React Native bare, or Expo) for App Store and TestFlight release readiness. It produces a clear PASS/WARN/FAIL verdict, a list of checks with evidence and remediation, and a publish checklist developers can follow. The audit is read‑only by default and includes optional build checks when macOS/Xcode are available.

How this skill works

The auditor detects project flavour (Expo, React Native, or native iOS) and extracts key identifiers (bundle id, version, build). It runs static compliance checks across repo hygiene, icons, launch screens, privacy/permission strings, ATS settings, third‑party SDK hygiene, and store listing basics. Optionally, when Xcode is available, it runs non‑signed simulator builds and (with explicit consent) distribution/archive steps to validate buildability and signing.

When to use it

  • Before submitting a build to App Store Connect or TestFlight
  • When preparing a release to verify privacy and permission disclosures
  • On CI or pre‑release gates to catch App Store policy regressions early
  • When converting between Expo, React Native bare, and native iOS to validate platform settings
  • After dependency or configuration changes that might affect signing, entitlements, or privacy behaviour

Best practices

  • Run the audit from the repository root or point to the app subdirectory in monorepos
  • Keep the audit read‑only unless you explicitly request fixes or apply trivial in‑repo patches
  • Address FAIL items before attempting submission; treat WARN items as risky but sometimes acceptable
  • If you need build accuracy, run the optional Xcode checks on macOS to catch signing or SDK issues early
  • Maintain a privacy policy URL and permission usage strings in the repo to avoid late rejections

Example use cases

  • Pre‑release sweep to catch missing App Store icon, launch screen, or required Info.plist strings
  • CI job that runs static readiness checks on pull requests to prevent regression of privacy or ATS settings
  • Migration check when moving an Expo app to bare RN or native iOS to confirm identifiers and entitlements
  • Run build accuracy checks on a macOS runner to validate simulator and archived builds before submission
  • Automated report generation for QA or release notes including a tickable publish checklist

FAQ

Will the audit change my repository?

No. By default the audit runs read‑only checks. I will only propose or apply in‑repo fixes if you explicitly ask or accept trivial automated patches.

What happens if I can’t run Xcode build checks?

The script will still perform static checks and return WARN for build accuracy. The report will call out which build checks were skipped and why, and recommend running them on macOS for higher confidence.