claude-skills / app-store-publish
app-store-publish v0.1.0
An end-to-end Mac App Store publishing pipeline for SwiftUI apps. Extracted from a real production release (Copied App by Magneton Labs) and rewritten as a reusable skill plus a stack of reference docs and drop-in templates.
Install
/plugin marketplace add YonedaAI/claude-skills
/plugin install app-store-publish@local-skills
Usage
Invoke the slash command and the skill will read your app's {{APP_NAME}},
{{BUNDLE_ID}}, {{TEAM_ID}},
{{ICLOUD_CONTAINER}}, and {{IAP_PRODUCT_ID}} from project state
(or prompt for them), then walk you through each phase, delegating to the reference docs
and drop-in templates as needed.
/app-store-publish
Phases
Seven sequential phases. Each one corresponds to a reference document in the plugin source.
Prerequisites
Apple Developer Program enrollment, App Store Connect app record creation, App Store Connect API key generation. Documents the access roles you need and the gotchas around team membership and API key permissions.
Fastlane setup
Gemfile, .env + .keys/ directory layout, and an asc_api_key helper that references the .p8 private key by path so it never leaves disk.
Certs and profiles
A single mas_setup lane that creates the Apple Distribution cert, the Mac Installer Distribution cert, and the Mac App Store provisioning profile via the App Store Connect API. Documents the Admin-role requirement, cert_id pinning, and the file-extension gotcha.
Sandbox entitlements
The MAS-vs-Developer-ID entitlement split, CloudKit under sandbox, AMFI's local-launch blocking, and a dev-signed mas_debug_build lane for sandbox compatibility testing without a TestFlight round-trip.
IAP integration
StoreKit 2 PurchaseManager pattern, SwiftData CloudKit's boot-time constraint, restart-prompt UX, the Transaction.updates listener, and a debug-only reconciliation bypass for local flag testing.
Metadata and screenshots
The fastlane/metadata/ directory layout, the required .txt files, and Retina-native screenshot capture using screencapture piped through sips for the App Store-required dimensions.
Submit and review
The mas_release lane, a review-notes template, and the one genuinely-manual step: creating IAP products in the App Store Connect web UI before they can be referenced by the build.
Drop-in templates
Each template uses placeholder substitution so it works for any SwiftUI MAS app.
Fastfile.template— all the lanes (mas_setup,mas_build,mas_debug_build,mas_release)MAS.entitlements.template— sandboxed variantPurchaseManager.swift.template— StoreKit 2 wrapperstorekit.template— local purchase simulationenv.example.template— required environment variables and where each value comes from
Why this exists
Shipping a sandboxed macOS app with IAP to the Mac App Store involves about fifteen non-obvious gotchas across Apple's tooling, fastlane's opinions, and SwiftData's quirks. This plugin captures them all in one place so the next app takes an afternoon, not a week.
Requirements
- macOS with Xcode
- Active Apple Developer Program membership
- App Store Connect record for the app
- App Store Connect API key (
.p8file, key ID, issuer ID) fastlanevia Bundler (Gemfilein templates)- XcodeGen (recommended;
project.ymlsample provided)