Wrenlift

macOS

Native arm64 and x86_64 binaries, with notes on shipping AOT-compiled programs through Gatekeeper. The installer picks the right architecture for your machine; for distribution you ship both and let users pick.

Install

curl -fsSL https://wrenlift.com/install.sh | bash

The installer detects your architecture and pulls the matching binary. ~/.local/bin ships on the default PATH on recent macOS shells; older bash users may need to add it manually.

Apple Silicon vs Intel

Both architectures are first-class. The release page ships separate binaries:

AssetUse on
wlift-aarch64-apple-darwin.tar.gzM1, M2, M3, M4 (all Apple Silicon).
wlift-x86_64-apple-darwin.tar.gzPre-2020 Intel Macs.

Verify which one you're running:

$ file $(which wlift)
wlift: Mach-O 64-bit executable arm64

Build an AOT binary

wlift my_app.wren --aot ./my_app
./my_app

Output is a regular Mach-O. Inspect with file / otool -L. AOT binaries link the WrenLift runtime statically; they don't depend on libwren_lift being installed on the target machine.

Code-sign & notarize

Distributing an AOT binary outside the App Store? Gatekeeper will quarantine it unless it's signed and notarized.

  1. Sign with hardened runtime:
    codesign --force --options runtime \
             --sign "Developer ID Application: Your Name (TEAMID)" \
             ./my_app
  2. Zip + submit for notarization:
    ditto -ckV --rsrc --keepParent ./my_app ./my_app.zip
    xcrun notarytool submit ./my_app.zip \
          --apple-id you@example.com \
          --team-id TEAMID \
          --password "@keychain:notary-pw" \
          --wait
  3. Staple the ticket back onto the binary:
    xcrun stapler staple ./my_app

Build a universal binary

Ship one fat binary that runs on both architectures by building each variant separately and gluing them together with lipo:

wlift my_app.wren --aot ./my_app-arm64    # on Apple Silicon
wlift my_app.wren --aot ./my_app-x86_64   # on Intel (or cross-compile)
lipo -create -output ./my_app ./my_app-arm64 ./my_app-x86_64
lipo -info ./my_app
// Architectures in the fat file: ./my_app are: arm64 x86_64