App Release logo

App Release

Community
glebis
app-release

End-to-end pipeline for releasing an iOS / watchOS app to TestFlight and the App Store. Use when the user wants to publish, ship, or release an iOS/watchOS app, get a build onto TestFlight, archive and upload via xcodebuild, deploy a CloudKit schema to Production, set App Privacy or export compliance, mint a Distribution certificate, or work through App Store Connect / Apple Developer portal steps. Triggers on 'continue publishing', 'ship the app to TestFlight', 'release the iOS app', 'upload a build', 'deploy CloudKit to production', 'App Privacy labels', 'distribution signing', or any cryptic Apple upload error (cloud signing, 90057 missing CFBundleShortVersionString, 90474 orientation). macOS and Xcode only.

Overview

Publisherglebis
Repositoryclaude-skills
Skill nameapp-release
Stars
379
Forks
56
Bundled files
2
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 2 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by glebis on GitHub. Read the source before you install it.

Installation

Install the App Release AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/glebis/claude-skills.git /tmp/claude-skills
mkdir -p .claude/skills
cp -r /tmp/claude-skills/app-release .claude/skills/app-release
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable App Release in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads App Release on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so App Release is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

App Release (iOS / watchOS → TestFlight / App Store)

Drive an iOS/watchOS app from "production path unstarted" to a Distribution-signed build processing in TestFlight. The hard part is not any single step — it is that the release path spans three disconnected web portals (Apple Developer, App Store Connect, CloudKit Dashboard) plus CLI signing arcana, and each gate hides a silent failure discoverable only after the previous one passes. Treat the whole thing as an airlock checklist: each gate must verifiably seal before the next opens.

When to use

Releasing/publishing/shipping an iOS or watchOS app; getting a build to TestFlight; archiving + uploading; deploying CloudKit schema to Production; filling App Privacy or export compliance; distribution signing; or debugging an Apple upload rejection.

The gates (run in order; verify each before moving on)

Track every gate in the project's issue tracker. Do not assume a gate is closed because a portal shows green — verify the underlying artifact.

  1. Inventory the gates. List what is actually open (issue tracker, or derive from the steps below). Distinguish gates that block TestFlight from gates that block App Store submission — they are different.
  2. CloudKit → Production (if the app uses CloudKit). Development indexes/record types do not exist in Production until an explicit Deploy Schema Changes. Deploy via the dashboard and verify the record type appears in the Production environment. One-way action — confirm with the user first.
  3. Export compliance. Bake ITSAppUsesNonExemptEncryption: false into every shippable target (the app and the watch app), in the source of truth (e.g. XcodeGen project.yml info.properties), so TestFlight never prompts per build.
  4. App Privacy. Audit the code for analytics / third-party SDKs / external networking first. If the developer cannot access user data (e.g. data lives only in the user's private CloudKit), the honest label is Data Not Collected. Set it in App Store Connect. Leave Publish for submission time.
  5. Privacy Policy + Impressum. App Store requires a hosted privacy-policy URL; an EU/German operator also needs an Impressum. Add pages to the product site, deploy, paste the privacy URL into App Store Connect.
  6. Signing audit. With automatic signing, Xcode mints the Distribution cert + App Store profiles at archive/export — no manual portal work. Confirm the team id and CODE_SIGN_STYLE: Automatic.
  7. Archive. xcodebuild archive the iPhone scheme that embeds the Watch app, -allowProvisioningUpdates. (Archive signs with Apple Development; the Distribution cert is minted at the export step.)
  8. Export + upload to TestFlight. xcodebuild -exportArchive with method app-store-connect, automatic signing, and an App Store Connect API key. The key must be Admin role — a Developer-role key cannot cloud-sign and fails with "Cloud signing permission error / no iOS Distribution cert found."
  9. Hand off the device test. The final TestFlight verification (install the processed build, exercise the real feature loop on Production) is a human on-device step. Do not claim it as done.

Read references/pipeline.md for the exact commands, ExportOptions.plist, and verification one-liners for every gate above.

When any step fails with a cryptic Apple error, read references/gotchas.md first — it catalogs the silent failures from real releases (corrupted SwiftPM checkout, Developer-role API key, missing CFBundleShortVersionString, iPad-orientation 90474) with the exact fix.

Guardrails (non-negotiable)

  • Confirm before one-way production actions: CloudKit Deploy to Production and App Privacy Publish. They affect shipped users / the public product page.
  • Never print secret key values. Keep .p8 keys in ~/.appstoreconnect/; clean up any temp copies after use.
  • Use trash, never rm.
  • Drive logged-in portals via browser automation; never enter Apple credentials. Ask the user to log in once in the automation browser.
  • Leave the on-device feature-loop test and the final Publish / Submit-for-review to the human.
  • Commit only release-related changes in focused commits; never sweep unrelated branch WIP into a release commit.

Tooling notes

  • Portal work (CloudKit Dashboard, App Store Connect, Apple Developer) is best driven through a persistent logged-in browser (e.g. the browser-mate skill) so the user logs in once and the session persists.
  • The heavy build/sign/upload steps belong in the shell (xcodebuild), not GUI clicking — the CLI gives real error output instead of a progress bar. Reserve computer-use/GUI for steps that genuinely need it.
  • Run long xcodebuild steps in the background and poll for ARCHIVE SUCCEEDED / EXPORT SUCCEEDED / Upload succeeded markers.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the App Release AI skill do?

End-to-end pipeline for releasing an iOS / watchOS app to TestFlight and the App Store. Use when the user wants to publish, ship, or release an iOS/watchOS app, get a build onto TestFlight, archive and upload via xcodebuild, deploy a CloudKit schema to Production, set App Privacy or export compliance, mint a Distribution certificate, or work through App Store Connect / Apple Developer portal steps. Triggers on 'continue publishing', 'ship the app to TestFlight', 'release the iOS app', 'upload a build', 'deploy CloudKit to production', 'App Privacy labels', 'distribution signing', or any cry...

Why use App Release on TypingMind?

Because you install it once and use it with any model. App Release is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install App Release in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/glebis/claude-skills/tree/main/app-release. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use App Release?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with App Release?

As many as you like. As long as a model supports skills, you can use App Release with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the App Release AI skill free?

Yes. It is published on GitHub by glebis under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇