Skip to content

Pass the team id and a gym-safe export method to fastlane lanes - #11

Open
adamXbot wants to merge 1 commit into
mainfrom
fix/fastlane-team-id
Open

Pass the team id and a gym-safe export method to fastlane lanes#11
adamXbot wants to merge 1 commit into
mainfrom
fix/fastlane-team-id

Conversation

@adamXbot

@adamXbot adamXbot commented Aug 9, 2026

Copy link
Copy Markdown
Collaborator

Two gaps in the fastlane path of ios-release.yml. Both fail a release after the signed archive has been built, which is the expensive place to fail.

1. The team id never reaches the lane

team_id feeds the pipeline's own xcodebuild steps and the ExportOptions plist it generates. In fastlane mode neither is used, so a lane has no way to learn it. Consequences seen while wiring three repos:

  • a dispatched signed archive aborts because the lane cannot resolve the team
  • a repo whose Release build needs DEVELOPMENT_TEAM set fails even the unsigned validate build

Now exported as TEAM_ID in both the validate and archive fastlane steps. It is an input, not a secret, so the validate job stays secret-free.

2. app-store-connect is not a valid gym export method

app-store-connect is Xcode 15.4+'s name for what fastlane still calls app-store. gym's allow-list (gym/lib/gym/options.rb) accepts only the old spelling and calls UI.user_error! otherwise. Because gym does Gym.config[:export_method] ||= hash[:method], it also picks the bad value up out of an ExportOptions plist that a lane passes it.

This workflow defaults export_method to app-store-connect, so any lane that forwards it — or that hands gym a modern plist — dies at export. GYM_EXPORT_METHOD now carries the translated spelling.

Worth knowing

AdamXweb/TrainieTalkie, the reference consumer, has the same latent problem: its committed Scripts/ExportOptions.plist declares app-store-connect and its archive lane passes it to gym without setting export_method. Its archive job has never run — no job matching "archive" appears in any recorded run — so this has never surfaced. Its ios-release.yml has also failed every run since it adopted the shared pipeline on 2026-08-06, which is worth a separate look.

Needs a v1 retag after merge, along with #9 and #10.

🤖 Generated with Claude Code

Two gaps that only affect the fastlane path, both of which fail a release
after the signed archive has already been built.

The team_id input fed the pipeline's own xcodebuild steps and the ExportOptions
plist it generates. In fastlane mode neither is used, so a lane had no way to
learn the team id at all — a repo whose signing needs it aborts on a dispatched
archive, and a repo whose Release build needs DEVELOPMENT_TEAM fails even the
unsigned validate build. It is an input rather than a secret, so exporting it
into the validate job keeps that job secret-free.

Separately, gym's allow-list still accepts only app-store; app-store-connect
is Xcode 15.4+'s name for the same method and this workflow defaults to it. A
lane passing EXPORT_METHOD to gym, or letting gym read a plist declaring the new
name, dies at export. GYM_EXPORT_METHOD carries the translated spelling so lanes
do not each have to know.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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