Found while shipping 0.9.4 (#163). Neither cause is in app code — 0.9.4 compiles and archives; Build - iOS succeeded on Xcode Cloud build #96.
The last real delivery was build 90, on 2026-07-27 23:10
v90 uploaded=2026-07-27T23:10 VALID minOS=27.0 <- last one
v89 uploaded=2026-07-27T22:06 VALID minOS=27.0
v88 uploaded=2026-07-27T14:47 VALID minOS=27.0
Two release cycles have run since and neither reached TestFlight.
1. 0.9.2 failed to upload and the pipeline went green
Its upload was rejected:
ENTITY_ERROR.ATTRIBUTE.INVALID.DUPLICATE
The bundle version must be higher than the previously uploaded version: '90'
previousBundleVersion = 90
and the workflow swallowed it:
App Store Connect already accepted build 90; continuing to TestFlight verification.
So Xcode Cloud production trigger reported success for 0.9.2 while delivering
nothing — it treated "this exact bundle version already exists" as equivalent to
"our build was accepted". Those are only the same thing on a genuine re-run; here
it masked a release that never shipped. A release pipeline should not fail open.
Contributing: CURRENT_PROJECT_VERSION = 1 is a constant in Base.xcconfig, and
scripts/sync-ios-version.mjs only rewrites MARKETING_VERSION. Nothing in the
repo derives a monotonic CFBundleVersion, so uniqueness depends entirely on
Xcode Cloud's own build numbering.
2. 0.9.4 is blocked by Apple's beta-SDK policy
90534: Unsupported SDK or Xcode version. Your app was built with an SDK or version
of Xcode that isn't supported. Although you can use beta versions of SDKs and
Xcode to build and upload apps to App Store Connect, you need to use the latest
Release Candidates (RC) for SDKs and Xcode to submit the app.
The deployment target is iOS 27.0 and every shipped build carries minOS=27.0.
Uploads against that SDK worked through 07-27 and are now refused, so this is an
Apple-side tightening rather than a repo change. Until the iOS 27 SDK reaches RC
or release, no build can be distributed — the options are pinning Xcode Cloud to
an RC Xcode, or lowering the deployment target.
Also worth fixing
wait-for-xcode-cloud.mjs concatenates warnings and errors into one digest, which
is how a single real compile error in 0.9.3 arrived buried in thirteen deprecation
notices. Related: #164.
Found while shipping 0.9.4 (#163). Neither cause is in app code — 0.9.4 compiles and archives;
Build - iOSsucceeded on Xcode Cloud build #96.The last real delivery was build 90, on 2026-07-27 23:10
Two release cycles have run since and neither reached TestFlight.
1. 0.9.2 failed to upload and the pipeline went green
Its upload was rejected:
and the workflow swallowed it:
So
Xcode Cloud production triggerreported success for 0.9.2 while deliveringnothing — it treated "this exact bundle version already exists" as equivalent to
"our build was accepted". Those are only the same thing on a genuine re-run; here
it masked a release that never shipped. A release pipeline should not fail open.
Contributing:
CURRENT_PROJECT_VERSION = 1is a constant inBase.xcconfig, andscripts/sync-ios-version.mjsonly rewritesMARKETING_VERSION. Nothing in therepo derives a monotonic CFBundleVersion, so uniqueness depends entirely on
Xcode Cloud's own build numbering.
2. 0.9.4 is blocked by Apple's beta-SDK policy
The deployment target is iOS 27.0 and every shipped build carries
minOS=27.0.Uploads against that SDK worked through 07-27 and are now refused, so this is an
Apple-side tightening rather than a repo change. Until the iOS 27 SDK reaches RC
or release, no build can be distributed — the options are pinning Xcode Cloud to
an RC Xcode, or lowering the deployment target.
Also worth fixing
wait-for-xcode-cloud.mjsconcatenates warnings and errors into one digest, whichis how a single real compile error in 0.9.3 arrived buried in thirteen deprecation
notices. Related: #164.