Versión macOS
Lista de verificación de versión macOS de OpenClaw (feed Sparkle, empaquetado, firma)
Esta app ahora envía actualizaciones automáticas Sparkle. Las compilaciones de versión deben estar firmadas con Developer ID, comprimidas en zip, y publicadas con una entrada appcast firmada.
Requisitos previos
- Certificado Developer ID Application instalado (ejemplo: ''Developer ID Application: <Nombre del Desarrollador> (<TEAMID>)'').
- Ruta de clave privada Sparkle establecida en el entorno como ''SPARKLE_PRIVATE_KEY_FILE'' (ruta a tu clave privada ed25519 de Sparkle; clave pública incluida en Info.plist). Si falta, revisa ''~/.profile''.
- Credenciales de notaría (perfil keychain o API key) para ''xcrun notarytool'' si quieres distribución DMG/zip compatible con Gatekeeper.
- Usamos un perfil Keychain llamado ''openclaw-notary'', creado desde variables de entorno de API key de App Store Connect en tu perfil de shell:
- ''APP_STORE_CONNECT_API_KEY_P8'', ''APP_STORE_CONNECT_KEY_ID'', ''APP_STORE_CONNECT_ISSUER_ID''
- ''echo "$APP_STORE_CONNECT_API_KEY_P8" | sed 's/\\\\n/\n/g' > /tmp/openclaw-notary.p8''
- ''xcrun notarytool store-credentials "openclaw-notary" --key /tmp/openclaw-notary.p8 --key-id "$APP_STORE_CONNECT_KEY_ID" --issuer "$APP_STORE_CONNECT_ISSUER_ID"''
- Dependencias ''pnpm'' instaladas (''pnpm install --config.node-linker=hoisted'').
- Las herramientas Sparkle se obtienen automáticamente vía SwiftPM en ''apps/macos/.build/artifacts/sparkle/Sparkle/bin/'' (''sign_update'', ''generate_appcast'', etc.).
Compilar y empaquetar
Notas:
- ''APP_BUILD'' mapea a ''CFBundleVersion''/''sparkle:version''; mantenlo numérico + monótono (sin ''-beta''), o Sparkle lo comparará como igual.
- Por defecto usa la arquitectura actual (''$(uname -m)''). Para compilaciones release/universal, establece ''BUILD_ARCHS="arm64 x86_64"'' (o ''BUILD_ARCHS=all'').
- Usa ''scripts/package-mac-dist.sh'' para artefactos de versión (zip + DMG + notarización). Usa ''scripts/package-mac-app.sh'' para empaquetado local/dev.
BUNDLE_ID=bot.molt.mac \
APP_VERSION=2026.1.27-beta.1 \
APP_BUILD="$(git rev-list --count HEAD)" \
BUILD_CONFIG=release \
SIGN_IDENTITY="Developer ID Application: '<Nombre del Desarrollador>' ('<TEAMID>')" \
scripts/package-mac-app.sh
ditto -c -k --sequesterRsrc --keepParent dist/OpenClaw.app dist/OpenClaw-2026.1.27-beta.1.zip
scripts/create-dmg.sh dist/OpenClaw.app dist/OpenClaw-2026.1.27-beta.1.dmg
NOTARIZE=1 NOTARYTOOL_PROFILE=openclaw-notary \
BUNDLE_ID=bot.molt.mac \
APP_VERSION=2026.1.27-beta.1 \
APP_BUILD="$(git rev-list --count HEAD)" \
BUILD_CONFIG=release \
SIGN_IDENTITY="Developer ID Application: '<Nombre del Desarrollador>' ('<TEAMID>')" \
scripts/package-mac-dist.sh
ditto -c -k --keepParent apps/macos/.build/release/OpenClaw.app.dSYM dist/OpenClaw-2026.1.27-beta.1.dSYM.zipEntrada Appcast
Usa el generador de notas de versión para que Sparkle renderice notas HTML formateadas:
SPARKLE_PRIVATE_KEY_FILE=/ruta/a/ed25519-private-key scripts/make_appcast.sh dist/OpenClaw-2026.1.27-beta.1.zip https://raw.githubusercontent.com/openclaw/openclaw/main/appcast.xml
Genera notas de versión HTML desde ''CHANGELOG.md'' (vía ''''scripts/changelog-to-html.sh'''') y las embebe en la entrada appcast.
Confirma el ''appcast.xml'' actualizado junto con los artefactos de versión (zip + dSYM) al publicar.
Publicar y verificar
- Sube ''OpenClaw-2026.1.27-beta.1.zip'' (y ''OpenClaw-2026.1.27-beta.1.dSYM.zip'') a la versión de GitHub para el tag ''v2026.1.27-beta.1''.
- Asegúrate que la URL raw del appcast coincida con el feed incluido: ''https://raw.githubusercontent.com/openclaw/openclaw/main/appcast.xml''.
- Verificaciones de sanidad:
- ''curl -I https://raw.githubusercontent.com/openclaw/openclaw/main/appcast.xml'' retorna 200.
- ''curl -I <enclosure url>'' retorna 200 después de subir los artefactos.
- En una versión pública anterior, ejecuta "Buscar Actualizaciones…" desde la pestaña Acerca de y verifica que Sparkle instala limpiamente la nueva versión.
Definición de terminado: app firmada + appcast publicados, flujo de actualización funciona desde una versión instalada más antigua, y artefactos de versión adjuntos a la versión de GitHub.