Skip to content

build(ios): TestFlight release pipeline (xcodebuild + ASC API key)#134

Merged
oratis merged 1 commit into
mainfrom
feat/ios-testflight
Jun 20, 2026
Merged

build(ios): TestFlight release pipeline (xcodebuild + ASC API key)#134
oratis merged 1 commit into
mainfrom
feat/ios-testflight

Conversation

@oratis

@oratis oratis commented Jun 20, 2026

Copy link
Copy Markdown
Owner

A TestFlight release pipeline for Lisa Pocket, modeled on the Markup-derived release-mac-apps.yml pattern (secret-gated Apple signing on macos-latest). Lisa Pocket is native SwiftUI, not Expo, so this uses xcodebuild archive + -exportArchive (destination: upload) with an App Store Connect API key (automatic provisioning + upload in one step) rather than eas submit.

What

  • packaging/ios-companion/testflight.sh — one command: xcodegen generate → flip aps-environment to production → archive (automatic signing via the API key) → export+upload to TestFlight. Build number defaults to a timestamp.
  • .github/workflows/release-ios-testflight.ymlpocket-v* tag / manual dispatch; imports an Apple Distribution cert + the ASC .p8 from secrets, runs the script; no-op (green) when secrets are absent.
  • RELEASE.md — the one-time Apple-account setup (App Store Connect app record + API key) and the secrets table. Team 9LH9NBX7P4, bundle id ai.meetlisa.pocket.

Verification

bash -n, workflow YAML, and the generated ExportOptions plist all lint clean; simulator ./build.sh still BUILD SUCCEEDED.

Honest limit

The actual upload authenticates to your Apple account — it can't run without an ASC API key + the app record (account actions). So the signed archive/upload is not exercised here; everything up to it is scripted and verified. Once you create the key + app record, it's one command (./testflight.sh) or one tag.

🤖 Generated with Claude Code

…ct API key)

Lisa Pocket is native SwiftUI, not Expo, so Markup's `eas submit` doesn't apply;
this is the equivalent — `xcodebuild archive` + `-exportArchive` (destination:
upload) driven by an App Store Connect API key (automatic provisioning + the
upload in one go). Mirrors the secret-gated, ephemeral-keychain style of
release-mac-apps.yml (itself lifted from Markup).

- packaging/ios-companion/testflight.sh — one-command local archive+upload;
  flips aps-environment to production for the archive; build number defaults to
  a timestamp.
- .github/workflows/release-ios-testflight.yml — tag (pocket-v*) / dispatch;
  imports an Apple Distribution cert + the ASC .p8 from secrets and runs the
  script; no-op (stays green) when the secrets are absent.
- RELEASE.md — the one-time Apple-account setup (app record + ASC API key) and
  the secrets list. gitignore the archive/export output.

Inert without your Apple credentials (an ASC API key + an App Store Connect app
record) — those are account actions only you can do. Verified here: bash + YAML
+ plist lint, simulator build still BUILD SUCCEEDED; the signed archive/upload
can't run without the account, so it isn't exercised here.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@oratis oratis merged commit 3377652 into main Jun 20, 2026
1 check passed
@oratis oratis deleted the feat/ios-testflight branch June 20, 2026 14:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant