Compilar en macOS
En macOS, pyzed build crea un paquete de app, dist/Shop.app: una carpeta que Finder muestra como una sola app,
con Python, Pyzed y tu código dentro.
Crear la .app
Sección titulada «Crear la .app»-
Instala uv si no lo tienes:
Ventana de terminal curl -LsSf https://astral.sh/uv/install.sh | sh -
En la carpeta del proyecto, compila:
Ventana de terminal uv run pyzed buildVentana de terminal source .venv/bin/activatepyzed build # o: python -m pyzed build -
Pruébala:
Ventana de terminal open dist/Shop.app
Icono e identificador de paquete
Sección titulada «Icono e identificador de paquete»macOS usa un icono .icns. Cada app de Mac tiene además un identificador de paquete, un dominio invertido como
com.acme.shop que macOS usa para guardar sus ajustes y permisos. Fija ambos en pyproject.toml; el identificador
llega a PyInstaller con args:
[tool.pyzed.build]icon = "assets/icon.icns"args = ["--osx-bundle-identifier", "com.acme.shop"]Mira Iconos y metadatos para crear un .icns a partir de un PNG.
Firmar y notarizar
Sección titulada «Firmar y notarizar»Gatekeeper revisa las apps descargadas de internet. Una app sin firmar ni notarizar queda bloqueada (“No se puede abrir Shop porque Apple no puede comprobar si contiene software malicioso”). La gente puede abrirla igual con clic derecho → Abrir, o en Ajustes del Sistema → Privacidad y seguridad → Abrir igualmente, pero para una versión real, fírmala y notarízala.
Necesitas una membresía del Apple Developer Program, un certificado Developer ID Application en tu llavero y una contraseña específica de app para tu Apple ID.
-
Firma el paquete con el runtime reforzado y una marca de tiempo:
Ventana de terminal codesign --force --deep --options runtime --timestamp \--sign "Developer ID Application: Tu Nombre (TEAMID)" dist/Shop.app -
Comprímelo con
ditto(conserva los enlaces simbólicos y la firma del paquete) y envíalo al servicio de notarización de Apple:Ventana de terminal ditto -c -k --keepParent dist/Shop.app Shop.zipxcrun notarytool submit Shop.zip --wait \--apple-id tu@ejemplo.com --team-id TEAMID --password "$APPLE_APP_PASSWORD" -
Grapa el ticket a la app, para que abra incluso sin conexión:
Ventana de terminal xcrun stapler staple dist/Shop.app
Comprueba el resultado con spctl --assess --verbose dist/Shop.app (“accepted, source=Notarized Developer ID”).
Una imagen de disco (.dmg)
Sección titulada «Una imagen de disco (.dmg)»Los usuarios de Mac esperan un .dmg con la app y un acceso directo a Aplicaciones para arrastrarla.
mkdir -p build/dmgditto dist/Shop.app build/dmg/Shop.appln -s /Applications build/dmg/Applicationshdiutil create -volname Shop -srcfolder build/dmg -fs HFS+ -format UDZO -ov Shop-macos-arm64.dmgcodesign --force --timestamp --sign "Developer ID Application: Tu Nombre (TEAMID)" Shop-macos-arm64.dmgNotariza y grapa el .dmg igual que el zip de arriba. Así se crea el .dmg de Pyzed Design (mira macos_dmg en
scripts/build_designer.py).
A tener en cuenta
Sección titulada «A tener en cuenta»- Dónde vive: la gente arrastra la app a
/Applications, donde pueden escribir los usuarios administradores, así que la app puede actualizarse sola ahí. - Cuarentena: una app descargada lleva una marca de cuarentena hasta que el primer arranque pasa Gatekeeper. Para
tus propias pruebas puedes quitarla con
xattr -dr com.apple.quarantine dist/Shop.app; no se lo pidas a tus usuarios. - Permisos: si la app necesita la cámara, el micrófono u otros recursos protegidos, macOS pregunta al usuario.
Añade las descripciones de uso al
Info.plistdel paquete con las opciones del archivo spec de PyInstaller;pyzed buildno las fija por ti.