Lanzamiento de macOS
Lanzamiento de OpenClaw para macOS (Sparkle)
Sección titulada «Lanzamiento de OpenClaw para macOS (Sparkle)»Esta aplicación ahora incluye actualizaciones automáticas de Sparkle. Las compilaciones de lanzamiento deben estar firmadas con el ID de desarrollador, comprimidas y publicadas con una entrada de appcast firmada.
Requisitos previos
Sección titulada «Requisitos previos»- Certificado de ID de desarrollador de aplicación instalado (ejemplo:
Developer ID Application: <Developer Name> (<TEAMID>)). - Ruta de la clave privada de Sparkle establecida en el entorno como
SPARKLE_PRIVATE_KEY_FILE(ruta a tu clave privada ed25519 de Sparkle; clave pública integrada en Info.plist). Si falta, verifica~/.profile. - Credenciales de notaría (perfil de llavero o clave API) para
xcrun notarytoolsi deseas distribución DMG/zip segura para Gatekeeper.- Usamos un perfil de llavero llamado
openclaw-notary, creado a partir de variables de entorno de clave API de App Store Connect en tu perfil de shell:APP_STORE_CONNECT_API_KEY_P8,APP_STORE_CONNECT_KEY_ID,APP_STORE_CONNECT_ISSUER_IDecho "$APP_STORE_CONNECT_API_KEY_P8" | sed 's/\\n/\n/g' > /tmp/openclaw-notary.p8xcrun notarytool store-credentials "openclaw-notary" --key /tmp/openclaw-notary.p8 --key-id "$APP_STORE_CONNECT_KEY_ID" --issuer "$APP_STORE_CONNECT_ISSUER_ID"
- Usamos un perfil de llavero llamado
- Dependencias de
pnpminstaladas (pnpm install --config.node-linker=hoisted). - Las herramientas de Sparkle se obtienen automáticamente a través de SwiftPM en
apps/macos/.build/artifacts/sparkle/Sparkle/bin/(sign_update,generate_appcast, etc.).
Compilar y empaquetar
Sección titulada «Compilar y empaquetar»Notas:
APP_BUILDse asigna aCFBundleVersion/sparkle:version; manténlo numérico y monótono (sin-beta), o Sparkle lo comparará como igual.- Si se omite
APP_BUILD,scripts/package-mac-app.shderiva un valor predeterminado seguro para Sparkle a partir deAPP_VERSION(YYYYMMDDNN: estable usa por defecto90, las versiones preliminares usan un canal derivado del sufijo) y usa el valor más alto entre ese y el recuento de confirmaciones de git. - Aún puedes anular
APP_BUILDexplícitamente cuando la ingeniería de lanzamientos necesita un valor monótono específico. - Para
BUILD_CONFIG=release,scripts/package-mac-app.shahora se predetermina a universal (arm64 x86_64) automáticamente. Aún puedes anular esto conBUILD_ARCHS=arm64oBUILD_ARCHS=x86_64. Para las compilaciones locales/de desarrollo (BUILD_CONFIG=debug), se predetermina a la arquitectura actual ($(uname -m)). - Usa
scripts/package-mac-dist.shpara los artefactos de lanzamiento (zip + DMG + notarización). Usascripts/package-mac-app.shpara el empaquetado local/de desarrollo.
# From repo root; set release IDs so Sparkle feed is enabled.# This command builds release artifacts without notarization.# APP_BUILD must be numeric + monotonic for Sparkle compare.# Default is auto-derived from APP_VERSION when omitted.SKIP_NOTARIZE=1 \BUNDLE_ID=ai.openclaw.mac \APP_VERSION=2026.3.13 \BUILD_CONFIG=release \SIGN_IDENTITY="Developer ID Application: <Developer Name> (<TEAMID>)" \scripts/package-mac-dist.sh
# `package-mac-dist.sh` already creates the zip + DMG.# If you used `package-mac-app.sh` directly instead, create them manually:# If you want notarization/stapling in this step, use the NOTARIZE command below.ditto -c -k --sequesterRsrc --keepParent dist/OpenClaw.app dist/OpenClaw-2026.3.13.zip
# Optional: build a styled DMG for humans (drag to /Applications)scripts/create-dmg.sh dist/OpenClaw.app dist/OpenClaw-2026.3.13.dmg
# Recommended: build + notarize/staple zip + DMG# First, create a keychain profile once:# xcrun notarytool store-credentials "openclaw-notary" \# --apple-id "<apple-id>" --team-id "<team-id>" --password "<app-specific-password>"NOTARIZE=1 NOTARYTOOL_PROFILE=openclaw-notary \BUNDLE_ID=ai.openclaw.mac \APP_VERSION=2026.3.13 \BUILD_CONFIG=release \SIGN_IDENTITY="Developer ID Application: <Developer Name> (<TEAMID>)" \scripts/package-mac-dist.sh
# Optional: ship dSYM alongside the releaseditto -c -k --keepParent apps/macos/.build/release/OpenClaw.app.dSYM dist/OpenClaw-2026.3.13.dSYM.zipEntrada de Appcast
Sección titulada «Entrada de Appcast»Usa el generador de notas de lanzamiento para que Sparkle renderice notas HTML con formato:
SPARKLE_PRIVATE_KEY_FILE=/path/to/ed25519-private-key scripts/make_appcast.sh dist/OpenClaw-2026.3.13.zip https://raw.githubusercontent.com/openclaw/openclaw/main/appcast.xmlGenera notas de lanzamiento HTML desde CHANGELOG.md (vía scripts/changelog-to-html.sh) y las incrusta en la entrada del appcast.
Confirma el appcast.xml actualizado junto con los activos de lanzamiento (zip + dSYM) al publicar.
Publicar y verificar
Sección titulada «Publicar y verificar»- Sube
OpenClaw-2026.3.13.zip(yOpenClaw-2026.3.13.dSYM.zip) al lanzamiento de GitHub para la etiquetav2026.3.13. - Asegúrate de que la URL del appcast sin procesar coincida con el feed preparado:
https://raw.githubusercontent.com/openclaw/openclaw/main/appcast.xml. - Comprobaciones de cordura:
curl -I https://raw.githubusercontent.com/openclaw/openclaw/main/appcast.xmldevuelve 200.curl -I <enclosure url>devuelve 200 después de subir los activos.- En una compilación pública anterior, ejecuta “Buscar actualizaciones…” desde la pestaña Acerca de y verifica que Sparkle instale la nueva compilación correctamente.
Definición de terminado: la aplicación firmada + el appcast están publicados, el flujo de actualización funciona desde una versión instalada anterior y los activos de lanzamiento están adjuntos al lanzamiento de GitHub.