





















@@ -56,17 +56,21 @@ Prereqs:
5656- `xcodegen`
5757- `fastlane`
5858- Apple account signed into Xcode for the canonical OpenClaw team (`FWJYW4S8P8`)
59-- Xcode account permissions to create Apple Distribution certificates, App IDs, and App Store provisioning profiles
59+- `asc` CLI authenticated for the canonical OpenClaw team
60+- Release-owner access to the encrypted signing repo password (`ASC_MATCH_PASSWORD`)
6061- App Store Connect app already created for `ai.openclawfoundation.app`
6162- App Store Connect API key set up in Keychain via `scripts/ios-asc-keychain-setup.sh` when auto-resolving a build number or uploading to App Store Connect
62636364Release behavior:
64656566- Local development uses the canonical `ai.openclawfoundation.app*` bundle IDs when the OpenClaw team is available, and unique `ai.openclawfoundation.app.test.*` bundle IDs only for non-canonical fallback teams.
6667- App Store release uses canonical `ai.openclawfoundation.app*` bundle IDs through a temporary generated xcconfig in `apps/ios/build/AppStoreRelease.xcconfig`.
67-- App Store release uses automatic signing with `Apple Distribution` and `-allowProvisioningUpdates`, so Xcode can create missing distribution certificates/profiles for the canonical team when the signed-in account has permission.
68+- App Store release uses manual `Apple Distribution` signing with profile names pinned in `apps/ios/Config/AppStoreSigning.json`.
69+- `asc` owns one-time Developer Portal setup and encrypted signing sync. Fastlane owns release handling after those assets exist.
6870- App Store release also switches the app to `OpenClawPushTransport=relay`, `OpenClawPushDistribution=official`, `OpenClawPushAPNsEnvironment=production`, and a production `aps-environment` entitlement.
69-- App Store screenshots use `pnpm ios:screenshots`, which drives Fastlane Snapshot through a deterministic connected screenshot fixture instead of a live gateway.
71+- `pnpm ios:release:upload` generates App Store screenshots and uploads release notes before archiving and uploading the IPA.
72+- `pnpm ios:release` remains a compatibility alias for `pnpm ios:release:upload`; prefer the explicit upload command in new release docs and automation.
73+- App Review submission is manual in App Store Connect. The release lane uploads a build and metadata, but does not submit for review.
7074- The release flow does not modify `apps/ios/.local-signing.xcconfig` or `apps/ios/LocalSigning.xcconfig`.
7175- `apps/ios/version.json` is the pinned iOS release version source.
7276- `apps/ios/CHANGELOG.md` is the iOS-only changelog and release-note source.
@@ -79,10 +83,27 @@ Release behavior:
79838084Relay behavior for App Store builds:
818582-- Beta builds default to `https://ios-push-relay.openclaw.ai`.
86+- Release builds default to `https://ios-push-relay.openclaw.ai`.
8387- Optional custom relay override: `OPENCLAW_PUSH_RELAY_BASE_URL=https://relay.example.com`
8488 This must be a plain `https://host[:port][/path]` base URL without whitespace, query params, fragments, or xcconfig metacharacters.
858990+Signing setup commands:
91+92+```bash
93+pnpm ios:release:signing:plan
94+pnpm ios:release:signing:check
95+pnpm ios:release:signing:setup
96+ASC_MATCH_PASSWORD=... pnpm ios:release:signing:sync:push
97+ASC_MATCH_PASSWORD=... pnpm ios:release:signing:sync:pull
98+```
99+100+Release-owner secrets:
101+102+- App Store Connect API auth uses Keychain for private key material plus non-secret `apps/ios/fastlane/.env` variables.
103+- The encrypted signing repo password lives outside this repo in the release-owner vault and is exposed locally as `ASC_MATCH_PASSWORD`.
104+- Apple Distribution private keys, certificates, provisioning profiles, and decrypted signing sync output stay under `apps/ios/build/` or Keychain and are gitignored.
105+- Rotating release signing means revoking/replacing the Developer Portal certificate or profile with `asc`, then pushing a fresh encrypted sync state.
106+86107Prepare the generated release xcconfig/project without archiving:
8710888109```bash
@@ -98,13 +119,13 @@ pnpm ios:release:archive
98119Archive and upload to App Store Connect:
99120100121```bash
101-pnpm ios:release
122+pnpm ios:release:upload
102123```
103124104125If you need to force a specific build number:
105126106127```bash
107-pnpm ios:release -- --build-number 7
128+pnpm ios:release:upload -- --build-number 7
108129```
109130110131### Maintainer Quick Release Checklist
@@ -136,6 +157,8 @@ This should create `apps/ios/fastlane/.env` with the non-secret ASC variables wh
136157- `ai.openclawfoundation.app.watchkitapp`
137158- `ai.openclawfoundation.app.watchkitapp.extension`
138159160+ Use `pnpm ios:release:signing:setup` for the initial portal setup, then `ASC_MATCH_PASSWORD=... pnpm ios:release:signing:sync:push` to publish encrypted signing assets to the shared private repo.
161+1391624. Optional: set a custom official relay URL for the build. If unset, the release flow uses `https://ios-push-relay.openclaw.ai`.
140163141164```bash
@@ -151,16 +174,19 @@ pnpm ios:version:pin -- --from-gateway
1511746. Upload the build:
152175153176```bash
154-pnpm ios:release
177+pnpm ios:release:upload
155178```
1561791571807. Expected behavior:
158181- Fastlane reads `apps/ios/version.json`
159182- verifies synced iOS versioning artifacts
160183- resolves the next App Store Connect build number for that short version
184+- generates deterministic App Store screenshots
185+- uploads release notes and screenshots to the editable App Store version
161186- generates `apps/ios/build/AppStoreRelease.xcconfig`
162187- archives `OpenClaw`
163188- uploads the IPA to App Store Connect for TestFlight/App Review use
189+- leaves App Review submission for a maintainer to complete manually
1641901651918. Expected outputs after a successful run:
166192- `apps/ios/build/app-store/OpenClaw-<version>.ipa`
@@ -193,7 +219,7 @@ Recommended flow:
1932191. Keep `apps/ios/version.json` pinned to the current train version.
1942202. Update `apps/ios/CHANGELOG.md`, usually under `## Unreleased` while iterating.
1952213. Run `pnpm ios:version:sync` after changelog changes.
196-4. Upload more TestFlight builds with `pnpm ios:release`.
222+4. Upload more TestFlight builds with `pnpm ios:release:upload`.
1972235. Let Fastlane bump only the numeric build number.
198224199225### Starting the next production release train
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。