TestFlight from iPhone: Practical Path
The realistic version of “TestFlight from iPhone” is this: iPhone triggers, Mac executes. The phone should be the control plane; the Mac should remain the build/distribution engine.
Execution split
- iPhone: select thread/project, trigger deploy, monitor status, retry/fallback
- Mac:
xcodebuild archive/export, upload, distribute, report results - Integration: App Store Connect automation (
asc) + structured status back to phone
Why this works
It respects where tooling actually lives. Certificates, provisioning, archives, and upload credentials stay where they belong: on the Mac execution host.
Current state in my stack
- Direct device deploy and OTA path are operational now
- TestFlight settings persistence is done in app
- One-tap TestFlight publish path is the next major release slice
Important: if you optimize only for “remote trigger” and ignore observability/error surfacing, you get a fragile experience. Status UX matters as much as pipeline logic.