Nota: Actualización para macOS 12/Monterey y Xcode 13. Para Xcode 12 y anteriores, consulte esta entrada del blog.
Con Monterey (macOS 12), es muy recomendable notarizar las aplicaciones distribuidas a través de una red pública. Un número importante de desarrolladores transfiere sus aplicaciones mediante un dispositivo de almacenamiento conectado o a través de archivos compartidos; la notarización no es necesaria en estos casos en los que el usuario ya confía en el desarrollador. La notarización tiene como objetivo garantizar a los usuarios que la aplicación no es maliciosa y sólo es necesaria para las aplicaciones descargadas desde un sitio web.
Utilizando nuestra función de firma incorporada al construir sus aplicaciones con 4D v18, su aplicación está lista para ser notariada. Este proceso se realiza fuera de 4D. Consiste en añadir una firma electrónica a su solicitud y enviar su solicitud firmada a un servicio de inspección automatizado. Aquí está todo lo que necesita saber:
PREREQUISITOS
XCODE
La notarización requiere Xcode 13 o posterior y macOS 12 o posterior.
Si tiene más de una versión de Xcode instalada en su Mac, puede utilizar la utilidad Xcode-select para elegir la versión adecuada:
sudo xcode-select -s /path/to/Xcode13.app
Aunque no suela utilizar Xcode directamente, debería lanzarlo al menos una vez. Si te avisa de que hay que descargar «Developer Tools», acéptalo.
Si te pide que confirmes las condiciones de la licencia, acéptalas.
No es mala idea repetir este paso después de instalar una nueva versión de Xcode. Por lo general, es necesario aceptar los cambios de licencia; de lo contrario, la notarización fallará.
En algunos casos, es necesario iniciar sesión en https://appleid.apple.com/account/home para aceptar las nuevas condiciones de la Apple Store; de lo contrario, la notarización podría fallar (incluso si no desea publicar en la App Store).
AUTENTICACIÓN DE DOS FACTORES
También necesitarás haber activado la autenticación de dos factores en tu ID de Apple.
Si no estás seguro de haber configurado la autenticación de dos factores, entra en la página de tu cuenta del ID de Apple, busca la opción de autenticación de dos factores en la sección de Seguridad y comprueba si la función está activada o desactivada.
Resumen del proceso
Se requiere una configuración para la notarización. Esto debe hacerse sólo una vez. Luego, para cada compilación, es necesario comprimir, cargar, esperar los resultados, sellar y volver a comprimir. Y esto se aplica a cada aplicación (Cliente, Servidor, Usuario Único, componente) y a cada compilación.
Esta entrada del blog describe primero cada paso en detalle para ayudar a entender el proceso y finalmente explica cómo utilizar un método 4D para automatizar completamente el trabajo.
Configuración de una sola vez
Usted necesitará lo siguiente para la notarización:
- Su cuenta de ID de Apple, normalmente su correo electrónico
- Su ID de equipo de la empresa Apple. Vea más abajo «Obtener team-ids» cómo recuperarlo
- Para una contraseña específica de la aplicación, vea abajo cómo recuperarla
Con estos datos, podemos registrar la contraseña en el llavero. Esto nos permitirá notarizar usando la línea de comandos (o automáticamente desde 4D) sin proporcionar la contraseña en texto claro.
Generar la contraseña específica de la aplicación
- Inicie sesión en apple.com.
- En la sección Inicio de sesión y seguridad, haz clic en Contraseñas específicas de la aplicación.
- Haz clic en Generar una contraseña específica para la aplicación o haz clic en «+», y luego sigue los pasos que aparecen en la pantalla.
- Quizá quieras nombrar la nueva contraseña como «notarytool».
- Copie el código mostrado.
Obtenga los ID de equipo
Ya deberías haber solicitado y registrado los certificados de Apple para codificar tu aplicación. Normalmente son dos (cuatro incluyendo iOS) cuando lo haces. Uno empieza con Apple Development: tu nombre(user-id), el otro con Developer ID Application: nombre de la empresa(team-id).
Inicia el llavero de Apple, selecciona los certificados y comprueba si ves Developer ID Application: company name. En caso afirmativo, el número entre paréntesis () es su id.
Si no es así, ejecuta lo siguiente en el Terminal:
xcrun altool --list-providers -u "AC_USERNAME" -p secret_2FA_password
sustituye AC_USERNAME por el nombre de usuario de tu cuenta de Apple tu dirección de correo electrónico, e introduce el código/2FA copiado de arriba.
El Terminal responderá con su ID de equipo.
Más detalles aquí.
Almacenar las credenciales
En el Terminal, ejecute lo siguiente:
xcrun notarytool store-credentials "notarytool" --apple-id "AC_USERNAME" --team-id <WWDRTeamID> --password <secret_2FA_password>
Mantén las comillas (sólo reemplaza el contenido), pero no uses los signos <>, sólo el id o la contraseña.
Construir / comprimir / notarizar / sellar
Ahora, después del proceso de preinstalación (una sola vez), es el momento de hacer el verdadero trabajo de construcción.
Utilice el comando o diálogo BUILD APPLICATION y construya su componente o aplicación. Utilice la función de certificación para firmar automáticamente la aplicación creada. Si la compilación falla debido a un error de firma, necesitas arreglar eso primero. La notarización fallará para las aplicaciones no firmadas.
Si el componente incluye ejecutables en la carpeta de recursos o la aplicación contiene componentes o plugins, deben ser válidos y estar firmados de antemano.
Zip
Una vez terminada la construcción, el siguiente paso es comprimir la aplicación:
En el Terminal, introduzca lo siguiente:
/usr/bin/ditto -c -k --keepParent "$APP_PATH" "$ZIP_PATH"
La forma más fácil de introducir las rutas correctas es copiarlas y pegarlas en el Terminal:
/usr/bin/ditto -c -k --keepParent "
Nota: Hay un espacio después de keepParent y el signo de comillas simples
Ahora arrastre y suelte la aplicación o el componente en la Terminal y añada otro carácter de comillas para obtener algo como
/usr/bin/ditto -c -k --keepParent "/Users/thomas/Documents/4D/Komponenten/FileTransfer_Curl_Build/Components/FileTransfer.4dbase"
Añade un espacio, un carácter de comillas, arrastra y suelta la carpeta de destino, luego escribe el nombre del zip solicitado, seguido de un espacio.
La línea final debería tener este aspecto:
/usr/bin/ditto -c -k --keepParent "/Users/thomas/Documents/4D/Komponenten/FileTransfer_Curl_Build/Components/FileTransfer.4dbase" "/Users/thomas/Documents/4D/Komponenten/FileTransfer_Curl_Build/Components/FileTransfer.zip"
Pulse Enter para ejecutar el comando y obtener el zip.
Importante: no haga esto con otras herramientas zip, incluyendo el Finder. Para que la notarización funcione, es necesario utilizar el comando ditto.
Cargar
En el Terminal, introduce lo siguiente (recordatorio: puedes arrastrar y soltar la ruta del archivo para hacerlo más fácil):
xcrun notarytool submit /Users/thomas/Documents/4D/Komponenten/FileTransfer_Curl_Build/Components/FileTransfer.zip --keychain-profile notarytool --wait
La respuesta que obtienes es la siguiente:
Realizando las comprobaciones previas al envío de FileTransfer.zip e iniciando la conexión con el servicio notarial de Apple…
ID de envío recibido
id: 2071ae83-6660-4d84-afaf-97ea34e945c5
Archivo cargado con éxito
id: 2071ae83-6660-4d84-afaf-97ea34e945c5
ruta: /Users/thomas/Documents/4D/Komponenten/FileTransfer_Curl_Build/Components/FileTransfer.zip
Esperando a que se complete el procesamiento.
Estado actual: Aceptado…………..
Procesamiento completo
id: 2071ae83-6660-4d84-afaf-97ea34e945c5
estado: Aceptado
Si el estado es «Inválido», puedes preguntar el motivo escribiendo
xcrun notarytool log fb4a2e8f-e2fe-4689-b38f-f6a840abfeb6 --keychain-profile "notarytool" developer_log.json
El número detrás del registro es el id de la respuesta enviada. El último nombre, developer_log.json, es el nombre o la ruta de un archivo de resultados en tu disco, elegido a tu gusto.
Responde con:
Registro de envío descargado con éxito
id: fb4a2e8f-e2fe-4689-b38f-f6a840abfeb6
ubicación: /Users/thomas/developer_log.json
Compruebe el motivo del fallo con:
cat /Users/thomas/developer_log.json
Automatizar el proceso
Este trabajo debe repetirse para cada compilación; tiene sentido automatizarlo. ¿No es así? Aquí está todo lo que necesitas para hacerlo:
- Copia y pega la clase «_build» en tu aplicación: https://github.com/ThomasMaul/Classes/blob/main/Project/Sources/Classes/_build.4dm
- Documentación: https: //github.com/ThomasMaul/Classes/blob/main/Documentation/Classes/_build.md
- Ejemplo de cómo usarlo para construir Cliente/Servidor: https: //github.com/ThomasMaul/Classes/blob/main/Project/Sources/Methods/Example_build.4dm
Otro caso de uso es la construcción de componentes. Los componentes compilados para los Macs de Silicio deben ser notariados, lo que hace incómoda la publicación de componentes a través de Github.
El componente: https: //github.com/ThomasMaul/FileTransfer_Class incluye un método «_buildComponent», que compila, construye, firma, notariza, grapa y cierra el componente. Todo ello es automático al ejecutarse.
El último paso es subir el zip como «Releases» a GitHub.
Espero que este consejo te ayude a notarizar tu próxima aplicación. No dude en contactarnos en el foro de 4D si necesita más ayuda.