feat(ios): add local beta release flow#42991
Conversation
🔒 Aisle Security AnalysisWe found 2 potential security issue(s) in this PR:
1. 🔵 Xcode build-setting injection via unsanitized TEAM_ID in generated BetaRelease.xcconfig
Description
Vulnerable code (excerpt): TEAM_ID="${IOS_DEVELOPMENT_TEAM:-}"
...
write_generated_file "${BETA_XCCONFIG}" <<EOF
OPENCLAW_DEVELOPMENT_TEAM = ${TEAM_ID}
OPENCLAW_IOS_SELECTED_TEAM = ${TEAM_ID}
EOFRecommendationValidate and normalize
Example fix: TEAM_ID="$(printf '%s' "${TEAM_ID}" | tr -d '\r\n' | xargs)"
if [[ ! "${TEAM_ID}" =~ ^[A-Z0-9]{10}$ ]]; then
echo "Invalid Apple Team ID '${TEAM_ID}'. Expected 10 uppercase letters/digits." >&2
exit 1
fiThis prevents newline-based xcconfig injection and ensures the generated build settings are well-formed. 2. 🔵 Potential build setting injection via optional include of gitignored apps/ios/build/Version.xcconfig
Description
Because xcconfig files can define arbitrary Xcode build settings, a tampered or stale
Mitigations exist (the new generator script overwrites this file and rejects symlinks), but the include still creates an implicit trust boundary around a gitignored, workspace-local artifact that may persist across builds or be influenced by CI cache/workspace reuse. Vulnerable code: RecommendationReduce the implicit trust in workspace-local build artifacts. Options (choose one):
Example approach: generate to a temp file and use TMP_XCCONFIG="$(mktemp -t OpenClawVersion.XXXXXX.xcconfig)"
./scripts/ios-write-version-xcconfig.sh --build-number "$BUILD_NUMBER" >"$TMP_XCCONFIG"
XCODE_XCCONFIG_FILE="$TMP_XCCONFIG" xcodebuild ...This prevents unexpected overrides from stale or tampered Analyzed PR: #42991 at commit Last updated on: 2026-03-11T10:48:19Z |
Greptile SummaryThis PR introduces a complete local Fastlane-based iOS beta release flow covering prepare, archive, and TestFlight upload stages, along with version stamping, watch app icon fix, and bundle ID corrections. The end-to-end flow has been verified with a successful TestFlight upload. Key changes:
Confidence Score: 4/5
Last reviewed commit: 824d720 |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6ad9645a4b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
6e4f061 to
82b38fe
Compare
|
Merged via squash.
Thanks @ngutman! |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 82b38fe93b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| needs_api_key = require_api_key || beta_build_number_needs_asc_auth? | ||
| api_key = needs_api_key ? asc_api_key : nil |
There was a problem hiding this comment.
Load Fastlane .env before preparing explicit beta archives
When IOS_BETA_BUILD_NUMBER is provided for beta_archive, prepare_beta_context skips asc_api_key, but asc_api_key is currently the only place that calls load_env_file("fastlane/.env"). That means values like IOS_DEVELOPMENT_TEAM in .env are never loaded in this path, so scripts/ios-beta-prepare.sh can fail team resolution on machines without usable Xcode/keychain team discovery even though the team is configured in .env. This regresses the documented explicit-build archive flow in environments that rely on .env for team configuration.
Useful? React with 👍 / 👎.
Merged via squash. Prepared head SHA: 82b38fe Co-authored-by: ngutman <[email protected]> Co-authored-by: ngutman <[email protected]> Reviewed-by: @ngutman
Merged via squash. Prepared head SHA: 82b38fe Co-authored-by: ngutman <[email protected]> Co-authored-by: ngutman <[email protected]> Reviewed-by: @ngutman
* main: (49 commits) fix(agents): add nodes to owner-only tool policy fallbacks fix(gateway): propagate real gateway client into plugin subagent runtime fix(gateway): enforce caller-scope subsetting in device.token.rotate fix(terminal): stabilize skills table width across Terminal.app and iTerm (openclaw#42849) fix(models): guard optional model input capabilities (openclaw#42096) macOS/onboarding: prompt for remote gateway auth tokens (openclaw#43100) fix(macos): use foundationValue when serializing browser proxy POST body (openclaw#43069) feat(ios): add local beta release flow (openclaw#42991) docs(changelog): update context pruning PR reference fix(context-pruning): cover image-only tool-result pruning fix(context-pruning): prune image-containing tool results instead of skipping them (openclaw#41789) fix(agents): include azure-openai in Responses API store override (openclaw#42934) fix(telegram): fall back on ambiguous first preview sends fix(telegram): prevent duplicate messages with slow LLM providers (openclaw#41932) Providers: add Opencode Go support (openclaw#42313) fix(sandbox): sanitize Docker env before marking OPENCLAW_CLI (openclaw#42256) macOS: add chat model selector and persist thinking (openclaw#42314) fix: clear pnpm prod audit vulnerabilities fix(build): restore full gate fix(gateway): split conversation reset from admin reset ...
Merged via squash. Prepared head SHA: 82b38fe Co-authored-by: ngutman <[email protected]> Co-authored-by: ngutman <[email protected]> Reviewed-by: @ngutman
Merged via squash. Prepared head SHA: 82b38fe Co-authored-by: ngutman <[email protected]> Co-authored-by: ngutman <[email protected]> Reviewed-by: @ngutman
Merged via squash. Prepared head SHA: 82b38fe Co-authored-by: ngutman <[email protected]> Co-authored-by: ngutman <[email protected]> Reviewed-by: @ngutman
Merged via squash. Prepared head SHA: 82b38fe Co-authored-by: ngutman <[email protected]> Co-authored-by: ngutman <[email protected]> Reviewed-by: @ngutman
Merged via squash. Prepared head SHA: 82b38fe Co-authored-by: ngutman <[email protected]> Co-authored-by: ngutman <[email protected]> Reviewed-by: @ngutman
Summary
Verification
pnpm ios:beta:prepare -- --version 2026.3.9-beta.1 --build-number 7pnpm ios:beta:archive -- --version 2026.3.9-beta.1 --build-number 7pnpm ios:beta -- --version 2026.3.9-beta.12026.3.9 (1)to verify the end-to-end flow