Skip to content

TestFlight archive/export/upload pipeline (T-020) - #27

Merged
Skeyelab merged 3 commits into
mainfrom
chore/testflight-pipeline
Jul 16, 2026
Merged

Skeyelab merged 3 commits into
mainfrom
chore/testflight-pipeline

Conversation

@Skeyelab

Copy link
Copy Markdown
Member

Ship the app to a device owner (Dan) via TestFlight. Bundle ID + team were already in
project.yml; this adds the missing distribution pipeline and the two Info.plist keys App
Store ingestion requires. Verified end to end — build 45 uploaded to App Store Connect
successfully.

What's here

  • Tools/build-testflight.sh — xcodegen → archive (Release, generic/iOS) → export the
    App Store .ipa → optional --upload via altool + an App Store Connect API key. Build
    number = git commit count (unique + monotonic without editing project.yml).
    -allowProvisioningUpdates mints the distribution cert/profile on first run.
  • Tools/ExportOptions.plist — app-store-connect, team 5HR8E5CWR7, automatic signing,
    manageAppVersionAndBuildNumber=false so our build number ships.
  • docs/testflight.md — one-time App Store Connect setup, build/upload, inviting a tester
    (internal vs external + public link), and the gotchas (90-day build expiry, the Local
    Network permission prompt).
  • project.yml — two ingestion-required Info.plist keys:
    • UISupportedInterfaceOrientations (+ ~ipad) — an iPad-capable bundle must declare
      orientations or ingestion rejects it (error 90474).
    • ITSAppUsesNonExemptEncryption: false — the app uses only plain HTTP + the OS's TLS
      (both exempt), so this pre-answers the export-compliance question on every future build.

Verification

Ran the pipeline against a real account: ARCHIVE SUCCEEDED, EXPORT SUCCEEDED, and
altool UPLOAD SUCCEEDED (build 45, Delivery UUID recorded). The build processed cleanly in
App Store Connect (icon, orientations, encryption compliance all accepted).

https://claude.ai/code/session_01F7YsQgso3KNpeXbP5vNVj6

Ship the app to a device owner (Dan) via TestFlight. Bundle ID + team were already in
project.yml; this adds the missing distribution pipeline:

  Tools/build-testflight.sh   xcodegen -> archive (Release, generic/iOS) -> export the App
                              Store .ipa. Build number = git commit count (unique + monotonic
                              without editing project.yml). -allowProvisioningUpdates mints the
                              distribution cert/profile on first run. Optional --upload via
                              altool + an App Store Connect API key.
  Tools/ExportOptions.plist   method app-store-connect, team 5HR8E5CWR7, automatic signing,
                              manageAppVersionAndBuildNumber=false so our build number ships.
  docs/testflight.md          one-time App Store Connect setup, build/upload, inviting Dan
                              (internal vs external + public link), and the gotchas (90-day
                              build expiry, the Local Network permission prompt).

Verified as far as the account allows: ARCHIVE SUCCEEDED and signs. Export is currently blocked
on two account-side steps (accept the updated Program License Agreement; register the app record
in App Store Connect) -- documented, not code.

Claude-Session: https://claude.ai/code/session_01F7YsQgso3KNpeXbP5vNVj6
…90474)

An iPad-capable bundle (TARGETED_DEVICE_FAMILY 1,2) must declare orientations or App Store
ingestion rejects it for iPad multitasking. iPhone gets portrait + both landscapes; iPad all four.

Claude-Session: https://claude.ai/code/session_01F7YsQgso3KNpeXbP5vNVj6
…ompt)

The app uses only plain HTTP to local devices + the OS's standard TLS, both export-exempt.
ITSAppUsesNonExemptEncryption=false pre-answers App Store Connect's compliance question so
each build processes without manual intervention.

Claude-Session: https://claude.ai/code/session_01F7YsQgso3KNpeXbP5vNVj6
@Skeyelab
Skeyelab merged commit b281e0b into main Jul 16, 2026
1 check passed
Skeyelab added a commit that referenced this pull request Aug 23, 2026
TestFlight archive/export/upload pipeline (T-020)
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.

2 participants