Skip to content

Commit 080481f

Browse files
committed
Require explicit iOS release versions
1 parent c1eee1a commit 080481f

33 files changed

Lines changed: 492 additions & 546 deletions

apps/ios/AGENTS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Root rules still apply. This file adds the iOS release guardrails.
55
## App Store Releases
66

77
- Agent-driven App Store uploads must use only `pnpm ios:release:upload`.
8+
- App Store uploads must include explicit release intent: `pnpm ios:release:upload -- --version <YYYY.M.D>` and `--build-number <n>` when a specific build has been chosen.
89
- If `pnpm ios:release:upload` exits non-zero, stop immediately and report the failing step.
910
- After a failed `pnpm ios:release:upload`, do not continue with `pnpm ios:release:archive`, `asc builds upload`, `asc release stage`, `asc publish appstore`, `asc review submit`, direct Fastlane lanes, or any manual App Store Connect mutation command.
1011
- Do not submit an iOS App Store version for App Review. App Review submission stays manual unless the user explicitly asks to submit a specific already-prepared version after the failed state has been reported.

apps/ios/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# OpenClaw iOS Changelog
22

3+
## 2026.6.11 - 2026-07-01
4+
5+
Maintenance update for the current OpenClaw beta release.
6+
7+
- Refreshed iOS 26 visual styling, Talk controls, Gateway recovery, localization, and App Store screenshots.
8+
39
## 2026.6.10 - 2026-06-21
410

511
Maintenance update for the current OpenClaw beta release.

apps/ios/Config/Version.xcconfig

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
// Shared iOS version defaults.
2-
// Source of truth: apps/ios/version.json
2+
// Source of truth: package.json or explicit release --version.
33
// Generated by scripts/ios-sync-versioning.ts.
44

5-
OPENCLAW_IOS_VERSION = 2026.6.10
6-
OPENCLAW_MARKETING_VERSION = 2026.6.10
5+
OPENCLAW_IOS_VERSION = 2026.6.11
6+
OPENCLAW_MARKETING_VERSION = 2026.6.11
77
OPENCLAW_BUILD_VERSION = 1
88

99
#include? "../build/Version.xcconfig"

apps/ios/README.md

Lines changed: 25 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,13 @@ Release behavior:
7474
- The release archive is validated before upload by inspecting the exported IPA's signed entitlements, embedded App Store profile, and push mode. The upload fails if the IPA is not an App Store production relay build.
7575
- App Review submission is manual in App Store Connect. The release lane uploads a build, public metadata, and the App Review PDF attachment, but it does not submit for review or upload the App Store Connect `Notes` field.
7676
- The release flow does not modify `apps/ios/.local-signing.xcconfig` or `apps/ios/LocalSigning.xcconfig`.
77-
- `apps/ios/version.json` is the pinned iOS release version source.
77+
- Release uploads require an explicit CalVer version passed with `--version`.
7878
- `apps/ios/CHANGELOG.md` is the iOS-only changelog and release-note source.
79-
- The pinned iOS version must use CalVer like `2026.4.10`.
80-
- That pinned value becomes:
79+
- The release version must use CalVer like `2026.4.10`.
80+
- That release value becomes:
8181
- `CFBundleShortVersionString = 2026.4.10`
8282
- `CFBundleVersion = next App Store Connect build number for 2026.4.10`
83-
- Changing the root gateway version does not change the iOS app version until you explicitly pin from the gateway.
83+
- Local defaults derive from root `package.json`; App Store uploads use the explicit `--version` value.
8484
- See `apps/ios/VERSIONING.md` for the full workflow.
8585

8686
Relay behavior for App Store builds:
@@ -110,13 +110,13 @@ Release-owner secrets:
110110
Prepare the generated release xcconfig/project without archiving:
111111

112112
```bash
113-
pnpm ios:release:prepare -- --build-number 7
113+
pnpm ios:release:prepare -- --version 2026.6.11 --build-number 7
114114
```
115115

116116
Archive without upload:
117117

118118
```bash
119-
pnpm ios:release:archive
119+
pnpm ios:release:archive -- --version 2026.6.11
120120
```
121121

122122
This command is for local archive validation only. It is not a fallback upload
@@ -125,13 +125,13 @@ path after `pnpm ios:release:upload` fails.
125125
Archive and upload to App Store Connect:
126126

127127
```bash
128-
pnpm ios:release:upload
128+
pnpm ios:release:upload -- --version 2026.6.11
129129
```
130130

131131
If you need to force a specific build number:
132132

133133
```bash
134-
pnpm ios:release:upload -- --build-number 7
134+
pnpm ios:release:upload -- --version 2026.6.11 --build-number 7
135135
```
136136

137137
### Maintainer Quick Release Checklist
@@ -166,25 +166,25 @@ This should create `apps/ios/fastlane/.env` with non-secret App Store Connect va
166166

167167
Use `pnpm ios:release:signing:setup` for the initial portal setup, then `MATCH_PASSWORD=... pnpm ios:release:signing:sync:push` to publish encrypted Fastlane match assets to the shared private repo.
168168

169-
4. If you are starting a brand-new production release train, pin iOS to the current gateway version first:
169+
4. If you are starting a brand-new production release train, add or update the matching iOS changelog section and sync generated metadata:
170170

171171
```bash
172-
pnpm ios:version:pin -- --from-gateway
172+
pnpm ios:version:sync -- --version 2026.6.11
173173
```
174174

175-
5. Upload the build:
175+
5. Upload the build with explicit release intent:
176176

177177
```bash
178-
pnpm ios:release:upload
178+
pnpm ios:release:upload -- --version 2026.6.11 --build-number 3
179179
```
180180

181181
6. If `pnpm ios:release:upload` fails, stop at that failure. Do not archive
182182
and upload the IPA through another command. Fix the failing release-lane
183183
step, then rerun `pnpm ios:release:upload`.
184184

185185
7. Expected behavior:
186-
- Fastlane reads `apps/ios/version.json`
187-
- verifies synced iOS versioning artifacts
186+
- Fastlane reads the explicit `--version` value
187+
- verifies synced iOS versioning artifacts for that version
188188
- resolves the next App Store Connect build number for that short version
189189
- generates deterministic App Store screenshots
190190
- uploads release notes, screenshots, and the App Review PDF attachment to the editable App Store version
@@ -203,7 +203,8 @@ pnpm ios:release:upload
203203

204204
## iOS Versioning Workflow
205205

206-
- Pinned iOS release version: `apps/ios/version.json`
206+
- Release upload version: explicit `--version`
207+
- Local default version: root `package.json`
207208
- iOS-only changelog: `apps/ios/CHANGELOG.md`
208209
- Generated checked-in artifacts:
209210
- `apps/ios/Config/Version.xcconfig`
@@ -213,33 +214,27 @@ pnpm ios:release:upload
213214
```bash
214215
pnpm ios:version
215216
pnpm ios:version:check
216-
pnpm ios:version:sync
217-
pnpm ios:version:pin -- --from-gateway
218-
pnpm ios:version:pin -- --version 2026.4.10
217+
pnpm ios:version -- --version 2026.6.11
218+
pnpm ios:version:sync -- --version 2026.6.11
219219
```
220220

221221
Recommended flow:
222222

223223
### TestFlight iteration on an existing train
224224

225-
1. Keep `apps/ios/version.json` pinned to the current train version.
225+
1. Choose the App Store train explicitly, for example `2026.6.11`.
226226
2. Update `apps/ios/CHANGELOG.md`, usually under `## Unreleased` while iterating.
227-
3. Run `pnpm ios:version:sync` after changelog changes.
228-
4. Upload more TestFlight builds with `pnpm ios:release:upload`.
227+
3. Run `pnpm ios:version:sync -- --version 2026.6.11` after changelog changes.
228+
4. Upload more TestFlight builds with `pnpm ios:release:upload -- --version 2026.6.11`.
229229
5. Let Fastlane bump only the numeric build number.
230230

231231
### Starting the next production release train
232232

233-
1. Pin iOS to the current gateway version:
234-
235-
```bash
236-
pnpm ios:version:pin -- --from-gateway
237-
```
238-
233+
1. Confirm the target gateway version in root `package.json`.
239234
2. Update `apps/ios/CHANGELOG.md` for the new release as needed.
240-
3. Run `pnpm ios:version:sync`.
241-
4. Submit the first App Store Connect build for that newly pinned version.
242-
5. Keep iterating on that same version until the release candidate is ready.
235+
3. Run `pnpm ios:version:sync -- --version <release-version>`.
236+
4. Submit the first App Store Connect build with `pnpm ios:release:upload -- --version <release-version>`.
237+
5. Keep iterating on that same explicit version until the release candidate is ready.
243238

244239
See `apps/ios/VERSIONING.md` for the detailed spec.
245240

0 commit comments

Comments
 (0)