apps/ios/VERSIONING.md
OpenClaw iOS release uploads use an explicit CalVer release version. The committed repo no longer has an iOS-only version manifest; release commands must name the App Store train they are uploading to.
Release uploads require a version argument:
pnpm ios:release:upload -- --version 2026.6.11
Use --build-number when the build number is known or has been verified from
App Store Connect:
pnpm ios:release:upload -- --version 2026.6.11 --build-number 3
The release version must use YYYY.M.D CalVer, for example 2026.4.6 or
2026.6.11.
When no explicit release version is supplied to the version helper, iOS derives
its default version from root package.json.version after stripping supported
release suffixes:
2026.4.10 -> iOS default 2026.4.102026.4.10-beta.3 -> iOS default 2026.4.102026.4.10-2 -> iOS default 2026.4.10Release version 2026.6.11 maps to:
CFBundleShortVersionString = 2026.6.11CFBundleVersion = numeric build number onlyFastlane can resolve the next build number by querying App Store Connect for the
explicit short version. Maintainers may still pass --build-number to make the
upload fully deterministic.
package.json
--version
apps/ios/CHANGELOG.md
apps/ios/VERSIONING.md
apps/ios/build/Version.xcconfig
apps/ios/SwiftSources.input.xcfilelist
apps/ios/CHANGELOG.md during metadata uploadscripts/lib/ios-version.ts
scripts/ios-version.ts
--version YYYY.M.D for explicit release queriesscripts/ios-sync-versioning.ts
scripts/ios-write-version-xcconfig.sh
apps/ios/build/Version.xcconfigscripts/ios-write-swift-filelist.mjs
scripts/ios-release-prepare.sh
--version and prepares App Store distribution signing and bundle settingsapps/ios/fastlane/Fastfile
producematchAgent-driven App Store uploads must use pnpm ios:release:upload as the only
release path. If that command fails, stop at the failing screenshot, metadata,
archive, validation, or upload step. Do not continue by archiving and uploading
manually with pnpm ios:release:archive, asc builds upload,
asc release stage, asc publish appstore, direct Fastlane lanes, or other App
Store Connect mutation commands.
When generating the temporary Fastlane release notes metadata, the tooling reads the first available changelog section in this order:
## 2026.6.11## UnreleasedBefore production upload, prefer a final ## <release version> section and
validate with the same version:
pnpm ios:version:check -- --version 2026.6.11
pnpm ios:version
pnpm ios:version -- --version 2026.6.11
pnpm ios:version:check
pnpm ios:filelist:gen
pnpm ios:release:upload -- --version 2026.6.11 --build-number 3
2026.6.11apps/ios/CHANGELOG.md under ## <release version> or ## Unreleasedpnpm ios:version:check -- --version <release version>pnpm ios:release:upload -- --version <release version> --build-number <next>This keeps the version decision at the release command instead of in a committed state file.
Successful App Store Connect uploads create a non-tag Git ref that records the source commit for the uploaded store build:
refs/openclaw/mobile-releases/ios/<CFBundleShortVersionString>-<CFBundleVersion>
Example:
refs/openclaw/mobile-releases/ios/2026.6.11-3
These refs are intentionally outside refs/tags/* and refs/heads/*. They do
not appear on GitHub release or tag pages, and they do not participate in the
core OpenClaw release machinery.
pnpm ios:release:upload checks the ref before archive/upload work and records
it only after the App Store Connect upload succeeds. Existing refs are
immutable: the same ref at the same SHA is accepted, while the same ref at a
different SHA fails.
Do not create this ref after a manual fallback upload. The ref is release-lane
evidence, not a repair mechanism for a failed pnpm ios:release:upload run.
Useful direct commands:
pnpm mobile:release:preflight -- --platform ios --version 2026.6.11 --build 3
pnpm mobile:release:resolve -- --platform ios --version 2026.6.11 --build 3
When you want the next production iOS release to align with the current gateway release:
node -e "console.log(require('./package.json').version)"
apps/ios/CHANGELOG.md for that releasepnpm ios:version:check -- --version 2026.6.11
pnpm ios:release:upload -- --version 2026.6.11 --build-number 3
App Store uploads must carry explicit version intent. Do not infer a release train from generated local files.
App Review submission remains manual. Automation may create/update the editable
App Store version, upload screenshots, upload release notes, upload the App
Review PDF attachment, and upload builds, but it should not upload the App
Store Connect Notes field or submit a build for review.
For agent-driven releases, a failed pnpm ios:release:upload is terminal for
that attempt. Agents must report the failed step and wait for maintainer
direction instead of switching to lower-level App Store Connect upload or
submission commands.