termio-device
See and drive the sibling agent sessions running alongside you on this machine via the…
Ship a new TestFlight build of the iOS companion (TermioMobile) — resolve the next build number against App Store Connect, archive, sign, export, upload, write the What to Test notes, and distribute. Invoke when the user says 'ship a testflight build', 'update testflight',
$ npx -y skills add termio-sh/termio --skill testflight-release --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/testflight-releaseContext preview
The summary Claude sees to decide when to auto-load this skill.
Ship a new TestFlight build of the iOS companion (TermioMobile) — resolve the next build number against App Store Connect, archive, sign, export, upload, write the What to Test notes, and distribute. Invoke when the user says 'ship a testflight build', 'update testflight',
name: testflight-release description: Ship a new TestFlight build of the iOS companion (TermioMobile) — resolve the next build number against App Store Connect, archive, sign, export, upload, write the What to Test notes, and distribute. Invoke when the user says 'ship a testflight build', 'update testflight', 'upload to testflight', 'new beta build', 'push the ios app to testers', '发一个 TestFlight', '更新 TestFlight', or '上传测试版'.
Cuts a TestFlight build of `TermioMobile` by hand. Unlike the Mac app, **this is not automated**: `.github/workflows` has no upload step, so nothing happens when a PR merges. Every TestFlight build is a local archive + upload.
Use the `asc` skill for anything beyond this path (crash triage, App Store submission, metadata). This skill is only the beta-build pipeline, with the repo-specific facts that `asc` cannot know.
| Thing | Value | | --- | --- | | App ID | `6790142237` (`sh.termio.mobile`, "Termio: Agentic Terminal") | | Bundle ID resource | `97KQ9JGYL8` | | Team | `5Y27G7B6D8`, from `ios/Signing.xcconfig` — **not** the project file | | Internal group | `7b62f012-b166-40df-ba19-e43c3a0b2c88` | | Public Beta group | `fe170244-643a-4c73-9c94-84ab44c254f9` (external, public link) | | Signing assets | `~/Library/Developer/asc-signing/termio/` (mode 700, outside the repo) |
`CURRENT_PROJECT_VERSION` in `ios/TermioMobile.xcodeproj/project.pbxproj` sits at an old value (285 at the time of writing) while App Store Connect is in the 700s. That is deliberate: the bump is applied for the archive and then thrown away.
**Never commit the bump.** Resolve it against ASC, build, upload, revert:
cd ios
asc xcode version edit --next-build-number --app 6790142237 --platform IOS \
--project TermioMobile.xcodeproj --output json
# ... archive, export, upload ...
git checkout -- TermioMobile.xcodeproj/project.pbxprojUploading a build number at or below the highest one in ASC is rejected, so never guess it from the repo.
Run from a clean worktree on the commit you want to ship (normally `main`).
1. **Bump** — the command above. It reports the number it chose.
2. **Archive** (Release, signed for distribution):
cd ios
asc xcode archive \
--project TermioMobile.xcodeproj --scheme TermioMobile \
--configuration Release --clean \
--archive-path .asc/artifacts/TermioMobile.xcarchive \
--xcodebuild-flag=-destination --xcodebuild-flag=generic/platform=iOS \
--xcodebuild-flag=-allowProvisioningUpdates --output json3. **Export.** Automatic signing does *not* work on this Mac — Xcode's stored account token is broken (`missing Xcode-Token`), so `asc xcode export` fails with `No signing certificate "iOS Distribution" found`. Export manually against the profile instead, with `ios/.asc/ExportOptions.plist`:
<key>method</key> <string>app-store-connect</string> <key>teamID</key> <string>5Y27G7B6D8</string> <key>signingStyle</key> <string>manual</string> <key>signingCertificate</key> <string>iPhone Distribution: Jiwei Yuan (5Y27G7B6D8)</string> <key>provisioningProfiles</key> <dict><key>sh.termio.mobile</key><string>Termio iOS App Store</string></dict>
xcodebuild -exportArchive \
-archivePath .asc/artifacts/TermioMobile.xcarchive \
-exportPath .asc/artifacts/export \
-exportOptionsPlist .asc/ExportOptions.plistIt still logs the `DVTDeveloperAccountManager` credential error; with manual signing that is noise, not a failure. Check for `** EXPORT SUCCEEDED **`.
4. **Upload** and wait for processing:
asc builds upload --app 6790142237 --ipa .asc/artifacts/export/TermioMobile.ipa --wait
5. **What to Test** — required for external testers, good manners for internal:
asc builds test-notes create --build-id "BUILD_ID" --locale en-US \
--whats-new "..."Note the subcommand is `create`; `update` only edits notes that already exist. One paragraph, concrete, no AI attribution.
6. **Distribute.**
automatically — `asc builds add-groups` on the Internal group fails with "Cannot add internal group to a build." Confirm instead: `asc testflight distribution view --build-id "BUILD_ID"` → `Internal State: IN_BETA_TESTING`.
`externalBuildState` before doing anything: `READY_FOR_BETA_SUBMISSION` means it still needs submitting, `WAITING_FOR_BETA_REVIEW` means it is already in Apple's queue and there is nothing to do but wait, and `BETA_TESTING` means it is live on the public link. **Ask the user before submitting** — that ships to real testers.
It takes **two** commands, and the first one alone looks like it worked:
asc builds add-groups --build-id "BUILD_ID" --group fe170244-643a-4c73-9c94-84ab44c254f9
asc testflight review submit --build-id "BUILD_ID" --confirmAdding the group reports success and changes nothing — `externalBuildState` stays `READY_FOR_BETA_SUBMISSION` until the build is actually submitted. This holds even for a marketing version that has already cleared review: 1.1 build 951 still had to be submitted on 2026-08-28, having been told here that it would skip the step. What that version buys is the *wait*, not the submission — the state went `WAITING_FOR_REVIEW` → `IN_BETA_TESTING` within a minute rather than hours.
7. **Revert** the pbxproj bump and delete `ios/.asc/` (untracked build artifacts, ~10 MB IPA plus the archive).
The account has one iOS Distribution certificate (`M92KPZPT43`, expires 2027-08-12) and the `Termio iOS App Store` profile (`R3N9335442`).
A terminal-first agentic development environment for agentic coding. Build for CLI/TUI agent. Runtime for Coding Agent, Tmux alternative
Repo: termio-sh/termio
See and drive the sibling agent sessions running alongside you on this machine via the…
See and drive the sibling agent sessions running alongside you in this Termio project via the…
Reverse-lookup glossary that turns a vague description of a web animation or motion effect…
Drive the running termio app via AppleScript / System Events to reach a UI state (focus the…
Apple's approach to interface design and fluid, physical motion, translated for the web. Use…
Drive App Store Connect from the terminal with the `asc` CLI — TestFlight builds, groups,…