Resumen operativo para publicar NexoSign fuera de la Mac de desarrollo. Detalle normativo: Apple notarization.
- Cuenta Apple Developer Program.
- En Xcode / Certificates crear Developer ID Application (no “Apple Development” para fuera de App Store).
- Instala el certificado y la cadena en Keychain Access de la máquina que firma.
Tras npm run tauri build, firma el .app y los binarios internos según la guía Tauri (bundle ya estructura Contents/MacOS/…). Ejemplo genérico:
codesign --deep --force --options runtime \
--sign "Developer ID Application: TU NOMBRE (TEAM_ID)" \
"target/release/bundle/macos/NexoSign.app"Sustituye la cadena de firma por la que muestra security find-identity -v -p codesigning.
Usa contraseña de app específica o perfil de API según la práctica actual de Apple:
xcrun notarytool submit NexoSign.zip --apple-id "tu@correo.com" \
--team-id TEAMID --password "@keychain:AC_PASSWORD" --wait(O el archivo que envíes: .dmg, .zip del .app, según tu flujo.)
xcrun stapler staple "NexoSign.app"Sin staple, Gatekeeper puede comportarse distinto offline.
La app carga bibliotecas PKCS#11 externas (.dylib del fabricante). Con hardened runtime, enlazar plugins puede requerir entitlements adicionales según el middleware:
- Algunos tokens necesitan
com.apple.security.cs.disable-library-validationpara cargar.dylibno firmados por Apple (valorar el riesgo; idealmente el proveedor distribuye bibliotecas firmadas).
Define entitlements en un .plist y pásalos a codesign con --entitlements. Valida siempre con el driver PKCS#11 real que usen tus usuarios.
Este repo no incluye un entitlements.plist único universal porque depende del proveedor del token.
Para notarizar desde GitHub Actions u otro CI:
| Secreto típico | Uso |
|---|---|
Certificado exportado (.p12) + passphrase |
Firma (preferible firma en runner efímero + borrar) |
| Apple ID + contraseña de app | notarytool |
| Team ID | --team-id |
No commitees credenciales; usa variables secretas del sistema de CI.