appstore-prep
A 5-skill bundle that captures the gnarly pre-submission failure modes — Apple Distribution + 3rd Party Mac Developer Installer signing, Swi
Open source Repository Open in the app JSON README (API)
About
A 5-skill bundle that captures the gnarly pre-submission failure modes — Apple Distribution + 3rd Party Mac Developer Installer signing, SwiftPM nested-bundle 409 fix, AppIcon white-border detection, OAuth Guideline 4.5/4.8 review-rejection prevention, and offline ASO metadata audit (keywords / subtitle / screenshots). Complements Blitz — Blitz handles ASC operations, this handles the artifact preparation.
Details
- Kind
- Plugins
- Topic
- Security & identity
- Publisher
- kevin-wei-sudo
- Origin
- marketplace
- Category
- ferramentas
- Forks
- 1
- Last push
- 2026-04-28T03:31:23Z
- Repository state
- ativo
- Language
- Shell
- License
- NOASSERTION
- Added
- 2026-08-30 01:48:58
- Updated
- 2026-08-30 01:48:58
- Origin id
kevin-wei-sudo/appstore-prep/appstore-prep
README
# appstore-prep
A Claude Code plugin that captures the gnarly pre-submission steps of shipping iOS / macOS / Android apps to App Store Connect and Google Play. Distills hard-won failure modes (signing, packaging, asset hygiene) into skills that Claude can invoke automatically.
## Positioning
[**Blitz**](https://blitz.dev) is the right tool for *App Store Connect operations* — submit for review, manage versions, upload screenshots, attach IAPs, control TestFlight. ~35 MCP tools, native macOS GUI, polished.
**appstore-prep complements Blitz**, covering the part *before* the .pkg / .ipa is ready for upload:
| | appstore-prep | Blitz |
|---|---|---|
| OAuth-flow review-rejection scanner (Guideline 4.5/4.8) | ✅ | ❌ |
| `PrivacyInfo.xcprivacy` audit + Required Reason API detection (ITMS-91053) | ✅ | ❌ |
| iOS archive + upload, with train-closed and duplicate-build detection | ✅ | ❌ |
| Mac App Store .pkg signing (Apple Distribution + 3rd Party Mac Developer Installer) | ✅ | ❌ |
| SwiftPM nested-bundle 409 fix | ✅ | ❌ |
| AppIcon white-border / full-bleed validation | ✅ | ❌ |
| AccentColor.colorset 90546 fix | ✅ | ❌ |
| Android Play Store keystore + AAB packaging | (planned) | ❌ |
| ASO (keywords, subtitle, screenshots) | (planned) | ❌ |
| Cross-platform analytics SDK integration | (planned) | ❌ |
| ASC operations (versions, IAPs, TestFlight, screenshots upload) | ❌ | ✅ |
Use appstore-prep to produce a clean artifact, hand off to Blitz to submit it.
## Skills
### `privacy-manifest`
Audit and generate `PrivacyInfo.xcprivacy`. Catches the two ITMS-91053 enforcement issues that block new App Store submissions in 2026: (1) Required Reason APIs used without a declared reason — `UserDefaults`, `systemUptime`, file timestamps, `volumeAvailableCapacity`, `UITextInputMode.activeInputModes`; (2) flagged third-party SDKs (AppsFlyer, FBSDKCoreKit/Meta, Firebase, Google, OneSignal, etc) embedded without their own privacy manifest. Generator emits a valid starter manifest from a code scan.
Triggers when the user is preparing App Store submission, hits ITMS-91053, or integrates a flagged SDK.
### `oauth-review-check`
Static-scan an iOS / macOS Swift codebase for OAuth flows that App Store review will reject under Guideline 4.5 / 4.8 — `UIApplication.shared.open(authURL)` (kicks to Safari), `WKWebView` for OAuth (phishing risk), `NSWorkspace.shared.open` for auth (macOS). Recommends `ASWebAuthenticationSession` (OAuth with callback) or `SFSafariViewController` (view-only auth pages). Heuristic scoring: HIGH near a real OAuth URL, MED near auth-looking variable names, suppressible with `// oauth-review-check: ok`.
Triggers when the user is preparing for App Store submission, hit a Guideline 4 rejection, or asks if their login flow is App Store compliant.
### `release-ios`
Archive, export, and upload an iOS app to App Store Connect with one command. Generates a correct manual-signing `ExportOptions.plist`, optionally bumps `CFBundleVersion` in `project.yml` or `Info.plist` before archiving, and post-mortems the upload — if it fails with "train version closed for new build submissions" or "build N already exists", the script tells you exactly which version field to bump.
Triggers when the user wants to ship/archive/export/upload to App Store Connect or TestFlight, or hits errors about closed trains, duplicate build numbers, missing profiles, or `errSecInternalComponent`.
### `release-mac`
Package and sign a macOS Swift / SwiftPM app for the Mac App Store. Handles the whole `.pkg` flow including the SwiftPM nested-bundle fix, the AccentColor catalog hack, and the Apple Distribution → 3rd Party Mac Developer Installer signing distinction.
Triggers when the user is about to ship, or hits errors 409 / 90236 / 90546 / signing identity issues.
### `icon-check`
Validate an `AppIcon.appiconset` directory before submission. Catches the white-border bug (icon designed with built-in rounded corners — iOS applies its own squircle mask on top, leaving white pixels at the corners), missing required sizes, alpha on the 1024 marketing icon, and pixel-dimension mismatches.
Triggers when the user is about to upload, sees a halo on the home screen icon, or hits error 90236.
## Install
This is a [Claude Code plugin](https://docs.claude.com/en/docs/claude-code/plugins). Run inside Claude Code:
```
/plugin marketplace add Kevin-Wei-sudo/appstore-prep
/plugin install appstore-prep@kevin-wei-sudo
```
Once installed, the skills auto-load every session — Claude invokes `release-ios`, `release-mac`, `icon-check`, `aso-audit`, or `oauth-review-check` automatically when the conversation matches their triggers (e.g. "I want to ship to App Store", "is my OAuth flow compliant", "validate my AppIcon").
### Local clone install
If you want to hack on the plugin while using it:
```sh
git clone https://github.com/Kevin-Wei-sudo/appstore-prep ~/dev/appstore-prep
```
Then in `.claude/settings.json`:
```json
{
"plugins": ["~/dev/appstore-prep"]
}
```
## Run a script directly
You don't need Claude Code to use the scripts — they're self-contained:
```sh
# Validate an icon set
./skills/icon-check/scripts/check-icons.sh ios/MyApp/Assets.xcassets/AppIcon.appiconset
# Preflight signing setup
./skills/release-mac/scripts/preflight.sh
# Sign and package a macOS .app
./skills/release-mac/scripts/sign-and-package.sh \
--app /path/to/MyApp.app \
--entitlements /path/to/MyApp.entitlements \
--profile ~/Library/MobileDevice/Provisioning\ Profiles/MyApp_Mac_App_Store.provisionprofile \
--distribution-identity "Apple Distribution: Name (TEAMID)" \
--installer-identity "3rd Party Mac Developer Installer: Name (TEAMID)" \
--output /path/to/MyApp.pkg
```
Requires macOS (uses `sips`, `swift`, `codesign`, `productbuild`, `PlistBuddy`). Xcode Command Line Tools is sufficient — full Xcode is not required.
## Roadmap
- `release-android` — Play Console keystore setup, AAB build, fastlane metadata template
- `integrate-analytics` — wire AppsFlyer + Meta SDK into iOS/Android with the right ATT + SKAdNetwork plumbing
Not in scope: anything Blitz already does well (ASC operations, TestFlight, IAPs).
## License
Apache-2.0