Xcode Cloud only checks out the repo, so ci_post_clone.sh installs swiftlint, xcodegen and bun, downloads the prebuilt core (vnidrop.xcframework + Vnidrop.swift) from the matching GitHub Release asset, and generates the project via localization, version/app config codegen and xcodegen. Rust is never built on Xcode Cloud.
Xcode Cloud CI scripts
Xcode Cloud runs the scripts in this directory around each build. Only
ci_post_clone.sh is used today; add ci_pre_xcodebuild.sh /
ci_post_xcodebuild.sh here if later steps are needed.
What ci_post_clone.sh does
The Xcode project (apple/VniDrop.xcodeproj) and its generated inputs are not
committed — they are produced by XcodeGen, localization, and the Rust core build.
Since Xcode Cloud only checks out the repository, the post-clone script:
- installs
swiftlint,xcodegen, andbun; - downloads the prebuilt core (
vnidrop.xcframework+Vnidrop.swift) from the matching GitHub Release assetVnidropCore-<version>.zip— Xcode Cloud never builds Rust; - runs localization + version/app config codegen and
xcodegen generate(equivalent tomake apple-projectwithout theapple-corestep).
The core asset for version X.Y.Z must be published on the vX.Y.Z release
before an Xcode Cloud build for that version runs (see
apple/scripts/package-core.sh and .github/workflows/apple-release.yml).
Overrides (env vars, optional)
| Variable | Default | Purpose |
|---|---|---|
VNIDROP_CORE_REPO |
sudosylabs/vnidrop |
Release repository to download the core from |
VNIDROP_CORE_TAG |
v<product-version> |
Release tag holding the core asset |
Workflow configuration (App Store Connect)
The workflow itself (product, scheme, triggers, actions) is configured in App Store Connect, not in the repository. Point it at:
- Project:
apple/VniDrop.xcodeproj(generated by the post-clone script) - Scheme:
VniDrop(App Store / TestFlight target; shared, seeapple/project.yml)
Archive actions use the release Rust profile via the published core asset; build and test actions reuse the same prebuilt core.