Skip to content

fix(mac): default release app builds to universal binaries#33891

Merged
steipete merged 5 commits intoopenclaw:mainfrom
cgdusek:codex/fix-macos-release-universal-28877
Mar 8, 2026
Merged

fix(mac): default release app builds to universal binaries#33891
steipete merged 5 commits intoopenclaw:mainfrom
cgdusek:codex/fix-macos-release-universal-28877

Conversation

@cgdusek
Copy link
Copy Markdown
Contributor

@cgdusek cgdusek commented Mar 4, 2026

Summary

Why

Release artifacts were repeatedly built arm64-only from Apple Silicon hosts. This blocks Intel Macs at launch time. The fix hardens the build script so release builds are universal by default even when operators invoke package-mac-app.sh directly.

Local Validation

  • pnpm check
  • pnpm test

Both passed locally on this branch.

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Mar 4, 2026

Greptile Summary

This PR fixes a recurring regression where release builds of the macOS app were produced as arm64-only artifacts from Apple Silicon hosts, blocking Intel Mac users. It does this by hardening scripts/package-mac-app.sh to default BUILD_ARCHS to "all" (universal binary) when BUILD_CONFIG=release and no explicit BUILD_ARCHS override is provided. The documentation is also updated to reflect this new default and to correct the example command to use scripts/package-mac-dist.sh for release packaging.

Changes:

  • scripts/package-mac-app.sh: Adds a three-branch conditional that respects explicit BUILD_ARCHS, defaults to universal (arm64 x86_64) for BUILD_CONFIG=release, and falls back to the host architecture for debug builds. This correctly complements the existing export BUILD_ARCHS="${BUILD_ARCHS:-all}" already present in package-mac-dist.sh, providing a second line of defence when package-mac-app.sh is called directly.
  • docs/platforms/mac/release.md: Updates the build notes and primary code example. However, after switching the first example command from scripts/package-mac-app.sh to scripts/package-mac-dist.sh, the subsequent manual ditto and scripts/create-dmg.sh steps were left in place. Since package-mac-dist.sh already creates both the zip and the DMG internally, these steps are now redundant and could mislead release engineers into thinking extra manual steps are required.

Confidence Score: 3/5

  • Script changes are safe to merge; documentation redundancy should be cleaned up before release.
  • The script logic is minimal, correct, and well-scoped. The core shell script change is safe to merge. However, the documentation contains redundant manual artifact creation steps that could mislead release engineers, which should be addressed to ensure clarity and prevent wasted effort during release operations.
  • docs/platforms/mac/release.md — the manual artifact creation steps following the first package-mac-dist.sh invocation should be removed or clarified as conditional steps only needed if package-mac-app.sh is used directly.

Last reviewed commit: 54f86ec

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Mar 4, 2026

Additional Comments (1)

docs/platforms/mac/release.md, line 32
Stale documentation after script behavior change

This note still says "Defaults to the current architecture ($(uname -m)). For release/universal builds, set BUILD_ARCHS="arm64 x86_64" (or BUILD_ARCHS=all)." — but the PR has changed package-mac-app.sh so that BUILD_CONFIG=release now automatically defaults to BUILD_ARCHS=all without any manual override needed. The instruction to manually set BUILD_ARCHS for release builds is no longer accurate and may confuse operators into thinking it is still required.

- For `BUILD_CONFIG=release`, `package-mac-app.sh` defaults to universal (`arm64 x86_64`) automatically. You can still override with `BUILD_ARCHS=arm64` or `BUILD_ARCHS=x86_64`. For local/dev builds (`BUILD_CONFIG=debug`), defaults to the current architecture (`$(uname -m)`).

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 04679eb318

ℹ️ 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".

BUILD_CONFIG=release \
SIGN_IDENTITY="Developer ID Application: <Developer Name> (<TEAMID>)" \
scripts/package-mac-app.sh
scripts/package-mac-dist.sh
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep the basic release command from requiring notarization

This example now runs scripts/package-mac-dist.sh, but that script unconditionally enables notarization unless SKIP_NOTARIZE=1 is set, and scripts/notarize-mac-artifact.sh exits when no NOTARYTOOL_PROFILE or key-based auth is present. As a result, the first “Build & package” command now fails in setups that only have signing configured (or intentionally skip notarization), which makes the primary checklist path non-runnable unless extra undocumented env vars are added.

Useful? React with 👍 / 👎.

This comment was marked as spam.

@cgdusek

This comment was marked as spam.

@cgdusek

This comment was marked as spam.

@cgdusek cgdusek closed this Mar 4, 2026
@cgdusek cgdusek reopened this Mar 4, 2026
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Mar 4, 2026

Additional Comments (1)

docs/platforms/mac/release.md, line 52
Redundant artifact creation steps after package-mac-dist.sh

The first code block now calls scripts/package-mac-dist.sh, which already creates the zip (via ditto) and the DMG (via scripts/create-dmg.sh) internally (see scripts/package-mac-dist.sh lines 52–57). The two manual steps that follow are therefore redundant:

# Both of these are now no-ops — package-mac-dist.sh already produces them
ditto -c -k --sequesterRsrc --keepParent dist/OpenClaw.app dist/OpenClaw-2026.3.2.zip
scripts/create-dmg.sh dist/OpenClaw.app dist/OpenClaw-2026.3.2.dmg

In the notarized path this is merely wasteful, but it could actively mislead a release engineer into thinking extra manual steps are required, or cause confusion if the output files differ (e.g. a version mismatch in the filename). Consider removing or clearly marking these steps as "only needed if you ran package-mac-app.sh directly instead of package-mac-dist.sh".

@cgdusek

This comment was marked as spam.

@cgdusek

This comment was marked as spam.

@steipete steipete force-pushed the codex/fix-macos-release-universal-28877 branch from a524f3d to 68e8235 Compare March 8, 2026 14:14
@steipete steipete merged commit e2c07f8 into openclaw:main Mar 8, 2026
11 of 12 checks passed
@steipete
Copy link
Copy Markdown
Contributor

steipete commented Mar 8, 2026

Landed via temp rebase onto main.

Thanks @cgdusek!

mrosmarin added a commit to mrosmarin/openclaw that referenced this pull request Mar 8, 2026
* main: (70 commits)
  Refactor release hardening follow-ups (openclaw#39959)
  docs: clarify bot review conversation ownership (openclaw#39942)
  fix: harden talk silence timeout parsing (openclaw#39607) (thanks @danodoesdesign)
  talk: add configurable silence timeout
  transcript-policy: use named Set for anthropic signature-excluded providers
  transcript-policy: don't preserve thinking signatures for kimi-coding (openclaw#39798)
  fix: land mac universal release defaults (openclaw#33891) (thanks @cgdusek)
  Docs: clarify notarization handoff in mac release flow
  Docs: mark basic mac dist example as non-notarized
  Docs: clarify release build arch defaults for mac packaging
  macOS: default release app builds to universal binaries
  fix(issue-39839): address tool-call extra params parsing for kimi anthropic-messages
  docs: use alphabetical provider ordering
  fix: follow up openclaw#39321 and openclaw#38445 landings
  docs: note /landpr merge process
  fix: land Brave llm-context gaps (openclaw#33383) (thanks @thirumaleshp)
  feat: add Brave Search LLM Context API mode for web_search
  fix(feishu): restore @larksuiteoapi/node-sdk in root dependencies
  refactor: tighten codex inline api fallback follow-up
  macOS: set speech recognition taskHint for Talk Mode mic capture
  ...
@dhowe
Copy link
Copy Markdown

dhowe commented Mar 8, 2026

is there still no release that incorporates this? v3.7 still can't be installed

Saitop pushed a commit to NomiciAI/openclaw that referenced this pull request Mar 8, 2026
GordonSH-oss pushed a commit to GordonSH-oss/openclaw that referenced this pull request Mar 9, 2026
hugs42 pushed a commit to hugs42/openclaw that referenced this pull request Mar 10, 2026
jenawant pushed a commit to jenawant/openclaw that referenced this pull request Mar 10, 2026
sauerdaniel pushed a commit to sauerdaniel/openclaw that referenced this pull request Mar 11, 2026
dhoman pushed a commit to dhoman/chrono-claw that referenced this pull request Mar 11, 2026
senw-developers pushed a commit to senw-developers/va-openclaw that referenced this pull request Mar 17, 2026
V-Gutierrez pushed a commit to V-Gutierrez/openclaw-vendor that referenced this pull request Mar 17, 2026
dustin-olenslager pushed a commit to dustin-olenslager/ironclaw-supreme that referenced this pull request Mar 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: macos App: macos docs Improvements or additions to documentation scripts Repository scripts size: XS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: macOS app v2026.2.26 is arm64-only — regression vs v2026.2.25 (universal binary)

3 participants