Continuando con nuestra serie de artículos sobre apps macOS, ya vimos como prepararlas para su distribución, cómo enviarlas a AppStore Connect (esto es, el paso previo requerido antes de que la app esté disponible en la Mac App Store)… y ahora veremos como utilizar los Provisioning Profiles requeridos para que dichas apps puedan ser probadas por otros desarrolladores y usuarios mediante la app TestFlight.
Existen dos tipos de Provisioning Profiles: Development y Distribution. Los perfiles de aprovisionamiento de desarrollo son los necesarios para aquellas compilaciones de la app enviadas a AppStore Connect pero que no queremos hacer públicas en la Mac App Store, sino simplemente que estén disponibles para que otras personas puedan probarlas de modo que nos reporten bugs, comentarios, etc. En este caso, asegúrate de que el valor de Stage Code en el IDE de Xojo (bajo Build Settings > Shared) se corresponda con “Devlopment”, “Alpha” o bien “Beta”.
Por otra parte, los perfiles de aprovisionamiento de distribución son los requeridos para aquellas apps enviadas a la AppStore Connect, que serán publicadas en la Mac App Store (tras pasar el correspondiente proceso de revisión por parte de Apple), y que también queremos que estén disponibles para que puedan ser probadas por otras personas mediante TestFlight. En este caso, asegúrate de que el valor de Stage Code se corresponda con “Final” en el IDE de Xojo bajo Build Settings > Shared.
Como crear Perfiles de Aprovisionamiento
Tanto si quieres crear un perfil de aprovisionamiento de Desarrollo como de Distribución, esto ha de llevarse a cabo desde el sitio web Apple Developer (por supuesto, necesitarás contar con una membresía de desarrollador Apple de pago).
En este ejemplo crearemos un perfil de Aprovisionamiento de Distribución.
- Utiliza tus credenciales para acceder a la web de Desarrolladores de Apple.
- Selecciona la opción Profiles ubicada bajo la sección “Certificates, IDs & Profiles”.
- Haz clic en el icono “+” situado a la derecha de la cabecera “Profiles”.
- A continuación, selecciona la opción “Mac AppStore Connect” situada bajo la sección Distribution, y haz clic en el botón “Continue”.
- Selecciona la opción “Mac” bajo la sección Profile Type, y selecciona el valor App ID de entre los disponibles en el menú desplegable asociado. Asegúrate de que el seleccionado (sin el valor entre paréntesis) se corresponde con el introducido bajo Build Settings > macOS > Bundle Identifier. A continuación, haz clic en el botón “Continue”.
Por ejemplo, el seleccionado en la captura de pantalla (esto es, BW7PU32485.com.aprendexojo.vcardtoqr) se corresponde con el utilizado en el campo Bundle Identifier para la app en el IDE de Xojo (com.aprendexojo.vcardtoqr).
- A continuación, selecciona el certificado de “Distribución” que se incluirá en el perfil de aprovisionamiento generado. El certificado seleccionado debe de ser el mismo introducido en el campo Developer ID cuando se compila la app desde el IDE de Xojo (Build Settings > macOS > Sign). Por ejemplo, en mi caso utilizaré el valor (sin las comillas) “Apple Distribution: Francisco Javier Rodriguez Menendez (BW7PU32485)” como valor de Developer ID en Xojo, de modo que seleccionaré el mismo certificado de Distribución aquí. A continuación, haz clic en el botón “Continue”.
- Da nombre al perfil de aprovisionamiento utilizando un nombre significativo, de modo que puedas distinguirlo fácilmente de entre todos los generados. A continuación, haz clic en el botón “Generate” para que se genere el perfil de aprovisionamiento y se descargue a tu Mac (probablemente en la carpeta Descargas).
- El archivo de perfil de aprovisionamiento descargado tendrá el mismo nombre que el introducido en el paso anterior. Selecciónalo y utiliza las opciones del Finder para cambiar su nombre a “embedded.provisionprofile”.
Añadir el Perfil de Aprovisionamiento al proyecto
Los perfiles de aprovisionamiento de macOS han de añadirse a la carpeta Contents del bundle de la app, y esto es algo que podemos hacer muy fácilmente desde el IDE de Xojo.
- Abre el proyecto de tu aplicación en el IDE de Xojo en el caso de que no estuviese ya abierto, y añade un nuevo paso de compilación Copy Files bajo Build Settings > MacOS.
- Añade el archivo “embedded.provisionprofile” al paso de compilación CopyFile recién añadido.
- Selecciona la opción “Contents Folder” en el menú desplegable Destination correspondiente al Panel Inspector asociado para el paso de compilación Copy Files.
- Selecciona la opción “Release” en el menú desplegable correspondiente a “Applies To” en el Panel Inspector asociado con el paso de compilación CopyFiles; de esta forma, el archivo sólo se copiará a la carpeta Contents cuando la app se compile como aplicación independiente (esto es, cuando no se ejecute desde el IDE).
Añadir nuevas entradas al archivo Entitlements
Para que el Perfil de Aprovisionamiento sea reconocido por TestFlight cuando se envíe el paquete de la app a la AppStore Connect hemos de añadir un par de entradas adicionales a nuestro archivo Entitlements (por favor, vuelve a consultar el artículo “Como subir tus macOS apps a la AppStore Connect“).
- Identificador de Aplicación Completo. Utiliza la clave “com.apple.application-identifier” para la nueva entrada. El valor debe ser el identificador Application Bundle (en nuestro ejemplo, com.aprendexojo.vcardtoqr) precedido con el valor del Team ID del Certificado que hemos utilizado tanto para firmar nuestra app como el propio perfil de aprovisionamiento. En nuestro ejemplo, dicho valor sería BW7PU32485. Por tanto el valor de tipo “string” para esta clave sería BW7PU32485.com.aprendexojo.vcardtoqr
- Team ID. Realmente simple. Hemos de utilizar la clave “com.apple.developer.team-identifier” para esta entrada, cuyo valor (siguiendo con nuestro ejemplo) es simplemente el Team ID del certificado: BW7PU32485.
Es decir, el archivo Entitlements final tendría el siguiente aspecto para la app de ejemplo:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.security.app-sandbox</key> <true/> <key>com.apple.security.files.user-selected.read-write</key> <true/> <key>com.apple.application-identifier</key> <string>BW7PU32485.com.aprendexojo.vcardtoqr</string> <key>com.apple.developer.team-identifier</key> <string>BW7PU32485</string> </dict> </plist>
Esto es: Sandboxing activado, más la capacidad de que nuestra app pueda leer y escribir los archivos seleccionados por el usuario, más las dos entradas requeridas para que el perfil de aprovisionamiento sea reconocido por TestFlight cuando se envíe el paquete a la AppStore Connect.
Guarda los cambios en el archivo de entitlements modificado (en nuestro ejemplo, con el nombre “myEntitlements.entitlements”).
Re-Firmar, re-empaquetar y subir el paquete
Si has seguido los dos artículos previos, probablemente ya hayas adivinado lo que toca ahora. ¡Efectivamente!, dado que hemos modificado nuestro archivo “myEntitlements.entitlements”, hemos de volver a firmar el bundle de la app, empaquetarlo de nuevo y subirlo a la AppStore Connect.
Por tanto, para volver a firmar, teclea lo siguiente en una nueva ventana del Terminal:
codesign --force --timestamp --entitlements path-to-your-myEntitlements.entitlements-file -s "Apple Distribution: whatever-name-you-use (BZXXXXXXX)" path-to-the-bundle-of-the-compiled-app.app
Para volver a crear el paquete a partir del bundle de la app, teclea el siguiente comando desde el Terminal:
productbuild --sign "3rd Party Mac Developer Installer: whatever-name-you-use (BZXXXXXXX)" --component path-to-the-bundle-of-the-compiled-app.app /Applications path-to-the-generated-package-file.pkg
Y para volver a subir el paquete a la AppStore Connect, teclea el siguiente comando en la ventana del Terminal:
xcrun altool --upload-package path-to-the-package-file.pkg -u your-apple-developer-login-id-goes-here -p "your-app-specific-password-goes-here" --type osx -apple-id "6111111111" --bundle-id "com.yourcomany.yourIdentifier" --bundle-short-version-string "current-short-value" --bundle-version "current-version-value"
Si todo ha ido bien, abre tu navegador Web favorito y dirígete al sitio web http://appstoreconnect.apple.com, selecciona tu app en la sección Apps y hac clic en el apartado TestFlight. Deberías de poder ver la build recién subida, lista para testear.
Conclusiones
Como hemos visto, añadir los Perfiles de Aprovisionamiento a las apps macOS enviadas a la AppStore Connect, de modo que puedan ser probadas por otras personas mediante TestFlight, sólo requiere de un poco de preparación previa para la generación del perfil de aprovisionamiento propiamente dicho, copiar dicho archivo en el proyecto de Xojo utilizando un paso de compilación CopyFiles y, luego, añadir un par de entradas adicionales al archivo de Entitlements.
Una vez que se ha hecho todo lo anterior, tus beta-testers podrán utilizar la app de macOS TestFlight para descargar y probar tus nuevas versiones, de modo que puedan reportar informes sobre bugs, informes de cuelgues de la app, y otro tipo de comentarios sobre ella… antes de que sea pública en la Mac App Store.