You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
ios build never provisions the pinned Xcode/iOS workload, so PR-validation jobs still need toolchain YAML (iOS plan §4/§6) #184
What changes is that the Xcode selection, workload pin, selective restore, frameworks check, signing, archive, and upload all move out of the workflow and into KtsuBuild
What exists today
KtsuBuild/Ios/IosService.csProvisionToolchainAsync (around L308) selects Xcode and installs the workload from IOS_XCODE_VERSION / IOS_WORKLOAD_VERSION. The values are read in BuildConfigurationProvider.cs:200-201.
Its only caller is IosService packaging (L77), which runs just before signing setup. That means the pins are applied only on the signed ios package path.
The unsigned ios build path does not provision. Neither does the ci auto-run of the iOS build on macOS (IosBuildService and the ios build handler).
CLAUDE.md ("iOS Pull-Request Validation", around L372-377) still says: "The macOS runner, Xcode selection, and iOS workload pin still live in the consumer workflow for now (toolchain provisioning is a later phase)".
Why it matters
A consumer's PR-validation job has to keep its own xcode-select and dotnet workload install --from-rollback-file steps, so the pins are maintained in two places. A PR build and a release build can then use different Xcode or workload versions. That is exactly the drift the plan set out to remove, and MeltdownMonitor already had to chase it.
Acceptance criteria
On a macOS host, ios build, and the ci iOS auto-run, call ProvisionToolchainAsync with the configured pins before building. When the pins are empty it does nothing, as today.
A workload that can't be installed fails the command with a clear error. The plan's "fail loudly" requirement applies.
Unit tests with a mocked IProcessRunner assert the Xcode and workload commands issued on the build path, and assert that nothing is issued when the pins are unset.
The CLAUDE.md iOS PR-validation sample job drops its toolchain steps, and the "later phase" note is removed.
Dependencies
None. It reuses the existing IosService helpers. It is related to #176 (host-filtered restore and build), but that is independent of this change.
Category: Improvement (unfinished work from the iOS plan)
Priority: Medium. Nothing breaks today, but consumers still have to keep the Xcode and workload pins in their own PR-validation YAML. PR and release builds can therefore drift apart, which the plan set out to prevent.
Area / suggested assignment: iOS: Ios/IosService.ProvisionToolchainAsync, IosBuildService, the ios build handler, CLAUDE.md "iOS Pull-Request Validation". @matt-edmondson
Notes: This depends on nothing else. It fits naturally alongside #176, since both change what the macOS ci iOS auto-run does. Consumer workflows such as MeltdownMonitor can drop their toolchain steps only after a release ships with this change.
Activity
matt-edmondson commentedon Sep 28, 2026
Triage
Ios/IosService.ProvisionToolchainAsync,IosBuildService, theios buildhandler, CLAUDE.md "iOS Pull-Request Validation". @matt-edmondsonios packagemakes build.keychain the default keychain and never tears it down, so a second run on the same Mac fails (iOS plan security requirement) #177 (keychain teardown),ios packagestamps a prerelease version like1.4.3-pre.1into CFBundleShortVersionString, which App Store Connect rejects #181 (prerelease CFBundleShortVersionString).Notes: This depends on nothing else. It fits naturally alongside #176, since both change what the macOS
ciiOS auto-run does. Consumer workflows such as MeltdownMonitor can drop their toolchain steps only after a release ships with this change.Generated by Claude Code