Skip to content

iOS release pipeline has not delivered a TestFlight build since 27 July, and reported success anyway #165

Description

@jjalangtry

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions