A partir de Xojo 2025r1 podrás publicar tus apps macOS y iOS al sitio web de la App Store Connect directamente desde el IDE de Xojo.
App Store Connect es el portal en el que los desarrolladores han de crear los registros de sus apps como parte del proceso para que finalmente sean enviadas al Proceso de Revisión realizado por parte de Apple para su posterior publicación tanto en la Mac App Store como en la App Store de iOS. Una vez que los registros de las apps estén creados en App Store Connect, cada nueva compilación de la app (nueva versión) se podrá subir a la App Store Connect directamente desde el IDE de Xojo, sin requerir de herramientas adicionales.
Primero, ¡lo primero!
Pero antes de que echemos un vistazo sobre cómo utilizar la nueva característica Publish desde el IDE de Xojo, veamos cuáles son algunos de los requisitos y procesos previos para comprender en mejor medida cómo funciona todo ello.
Es probable que ya cumplas con dichos requerimientos, pero siempre es buena idea revisarlos:
- Has de contar con una membresía de pago en el programa Apple Developer (en torno a los 100€ anuales).
- Xcode ha de estar instalado en tu Mac, preferiblemente la última versión (en el momento de escribir este artículo se trata de Xcode 16.2, lo que significa que tendrás instalado macOS Sequoia 15.2 o posterior en tu ordenador); aunque también funcionará utilizando versiones anteriores, como por ejemplo Xcode 13 sobre macOS Ventura.
- Tienes los certificados Developer ID Application, Apple Distribution y 3rd Party Mac Developer instalados en el Llavero de tu Mac.
- Se ha creado un App ID (Identificador) explícito para tu app en developer.apple.com.
- Se ha creado un Perfil de Aprovisionamiento (Provisioning Profile) en developer.apple.com, de modo que la compilación que subas de la app esté disponible para que los usuarios la puedan probar con TestFlight.
- Verifica que no tengas ningún acuerdo o contrato pendientes tanto en developer.apple.como como en appstoreconnect.apple.com
Gestión de los Certificados
La mejor forma de asegurarte de que los Certificados necesarios estén instalados en el Llavero de tu Mac es gestionarlos desde el propio Xcode. Abre Xcode, dirígete a Preferences > Accounts y asegúrate de que estés logado utilizando tus credenciales de developer.apple.com:
Luego, haz clic en el botón “Manage Certificates…” y una nueva ventana te mostrará los Certificados que ya están instalados (incluyendo también los expirados o aquellos cuya clave privada no esté presente, por ejemplo). Dicha ventana también te permitirá descargar los certificados que falten entre los listados… o bien los que requerimos para publicar nuestras apps en la App Store Connect.
Una vez que los certificados requeridos estén instalados en tu Mac, y para mantener el Llavero lo más “limpio” posible, te sugiero que abras la app Llavero y borres de tu ordenador todos los certificados instalados que se hayan revocado, así como los expirados o bien aquellos en los que no se encuentre presente la clave privada, por ejemplo.
Gestionar el App ID
El App ID, Identificador (Identifier) o bien “Bundle Identifier” de la app es algo con lo que ya estás familiarizado cada vez que creas un nuevo proyecto de app para macOS o iOS en el IDE de Xojo:
Pero hemos de crear el mismo App ID en developer.apple.com; de modo que utiliza tus credenciales de Apple Developer para acceder al portal developer.apple.com. Luego, haz clic en la entrada “Identifiers” bajo la cabecera “Certificates, IDs & Profiles”:
NOTA: ¡Recuerda! Has de crear un nuevo App ID y seguir estos mismos pasos para cada nueva app de macOS o iOS que quieras distribuir a través de la Mac o iOS App Store.
- En la página mostrada como resultado de la acción anterior, haz clic en el botón “+” situado justo al lado de la cabecera Identifiers para registrar un nuevo Identificador.
- En la página siguiente, asegúrate de que esté seleccionada la opción “App IDs” y haz clic en el botón “Continue”.
- En la nueva página, asegúrate de que esté seleccionada la opción “App” y haz clic en el botón “Continue”.
- Por último, llegarás a la parte realmente interesante donde has de introducir el Bundle ID explícito y que coincida con el que hayas utilizado en el apartado Application Identifier a la hora de crear el proyecto en el IDE de Xojo. También es importante asegurarse de que el valor App ID Prefix coincide con el valor de Team ID correspondiente al certificado instalado en el Llavero de tu Mac mediante Xcode.
- Por supuesto, selecciona cada una de las Capacidades (Capability) y/o App Services (Servicios de App) que tu app pueda precisar. Para el propósito de nuestro ejemplo, no se ha seleccionado ninguno de estos.
- A continuación, haz clic en el botón “Continue”. Esta acción te mostrará una página de resumen en la que podrás revisar todos los datos introducidos y las Capabilities/App Services seleccionados. Si todo es correcto, haz clic en el botón “Register”.
Una vez registrado, el nuevo Identificador aparecerá listado entre los disponibles bajo la sección Identifiers:
Gestión de los Provisioning Profiles
TestFlight es el Servicio de Apple que permite a los desarrolladores Apple obtener retroalimentación de los usuarios de sus apps (y/o compañeros de equipo) cuando una app aun se encuentra en desarrollo, antes de que esté disponible de forma pública en la Mac/iOS App Store. Por tanto, cuando se publica una nueva compilación (versión) de la app desde el IDE de Xojo, esta también estará disponible para su uso en el servicio TestFlight.
Pero para que eso tenga lugar, la app ha de tener embebido lo que se conoce como un Perfil de Aprovisionamiento (Provisioning Profile), y dichos perfiles de aprovisionamiento han de crearse en el sitio web developer.apple.com, del mismo modo que también hicimos en la sección anterior correspondiente al App ID.
Hay dos tipos de perfiles de aprovisionamiento principales: Development y Distribution. De forma simplificada, la principal diferencia entre estos es que los perfiles del tipo Development incluyen información sobre los dispositivos sobre los que se puede instalar la app, de modo que se suelen utilizar a la hora de probar la app sobre los propios dispositivos y/o equipos del usuario.
En este artículo nos centraremos en la creación de un “Distribution Provisioning Profile”, de modo que las apps publicadas desde el IDE estén disponibles para TestFlight cuando se suban a la App Store Connect desde el IDE de Xojo.
- Una vez logado en el sitio web developer.apple.com, selecciona la entrada “Profiles” bajo la sección “Certificates, IDs & Profiles”. Luego, haz clic en el botón “+” situado junto a la cabecera Profiles de la página resultante:
- En la siguiente página, asegúrate de seleccionar la opción “Mac App Store Connect” bajo la cabecera Distribution, dado que en este caso vamos a crear un perfil para una app de ejemplo macOS (en el caso de iOS deberás de seleccionar la opción “App Store Connect”, destacada en azul en la captura de pantalla). Luego, haz clic en el botón “Continue”:
- En la página siguiente, asegúrate de seleccionar el App ID creado en la anterior sección (en nuestro ejemplo se corresponde con “com.aprendexojo.chess”). Observa que el App ID cuenta con el prefijo correspondiente al Team ID utilizado durante la creación del App ID propiamente dicho (en nuestro ejemplo, este es “BW7PU32485”). Es decir: BW7PU32485.com.aprendexojo.chess. De igual modo, asegúrate de que la opción “Mac” esté seleccionada bajo “Profile Type”, en vez de “Mac Catalyst”:
- Haz clic en el botón “Continue” y, en la página siguiente, asegúrate de seleccionar el mismo certificado de distribución (Distribution Certificate) que emplearemos cuando la app de Xojo se compile (es decir, el Apple Distribution Profile instalado en tu Mac).
- Haz clic en el botón “Continue” y, en la página resultante, escribe un nombre significativo para el perfil de aprovisionamiento, de modo que puedas distinguirlo con facilidad posteriormente de entre todos los que hayas o vayas a crear:
- Cuando esté hecho, haz clic en el botón “Generate” y, tras un par de segundos, verás el resumen del Perfil de Aprovisionamiento con el botón “Download” activado. Haz clic sobre dicho botón para descargar el perfil de aprovisionamiento a tu Mac.
NOTA: Perfiles de Aprovisionamiento para iOS: cuando se trata de las apps para iOS, tendrás que crear tanto perfiles de aprovisionamiento Development como Distribution. Cuando crees el perfil de aprovisionamiento Development, asegúrate de incluir todos los dispositivos registrados que quieras utilizar para instalar y probar la app directamente desde Xojo (mediante la opción Run On Device del IDE). Igualmente, una vez que dichos perfiles de aprovisionamiento se hayan descargado a tu Mac, haz doble clic sobre ellos de modo que Xcode los instale en la ubicación correcta (en el momento de escribir este artículo la ruta de instalación es: Library > Developer > Xcode > User Data > Provisioning Profiles).
Añadir el Perfil de Distribución a tu Proyecto Xojo
Mueve el perfil Distribution Provisioning Profile de macOS recién descargado a una mejor ubicación que esté relacionada con tu proyecto Xojo, y cambia el nombre del archivo a “embedded.provisionprofile”. Luego, abre el proyecto de Xojo y añade un nuevo paso “Copy Files” seleccionado el elemento macOS situado bajo Build Settings, y utiliza el menú contextual para seleccionar la opción “Add to ‘Build Settings’ > Build Step > Copy Files”:
Luego, utiliza el botón “Add File” disponible en la barra de herramientas de Copy Files para seleccionar el archivo “embedded.provisionprofile”, utilizando a continuación los siguientes valores en el panel Inspector asociado:
- Name: Distribution Profile
- Applies To: Release
- Architecture: Any
- Destination: Contents Folder
NOTA: En los proyectos Xojo de iOS los perfiles de aprovisionamiento se aplicarán automáticamente cuando se compila o publica la app, de entre aquellos instalados por Xcode cuando hacemos doble-clic sobre ellos una vez los hemos creado y descargado a nuestro Mac desde developer.apple.com.
App Store Connect: Crear un Registro para la App
Has de crear un registro de aplicación para cada app macOS o iOS que vayas a distribuir en la Mac o iOS App Store. Para que podamos subir la app desde el IDE de Xojo no es crucial que rellenemos todos los campos requeridos en cada una de las secciones (puedes hacerlo a tu propio ritmo); pero sí lo es, como mínimo, contar con un registro creado para la app. Para ello has de utilizar tus credenciales de desarrollador para acceder al sitio web appstoreconnect.apple.com.
- Una vez estés logado, selecciona el icono App y haz clic en el botón “+” disponible en la página resultante. Luego, selecciona la opción “New App” para crear un nuevo registro de aplicación:
La anterior acción mostrará un diálogo en el que has de introducir la información esencial para la aplicación, de modo que se pueda crear el registro:
- Platforms: Selecciona la opción “macOS”.
- Name: Asegúrate de introducir el mismo nombre empleado en el proyecto Xojo para la app (Build Settings > macOS > Mac App Name). Apple puede ser “quisquillosa” sobre este particular durante el proceso de revisión de la app.
Bundle ID: Selecciona el App ID creado para la app cuando seguiste los pasos descritos en la sección “Gestionar el App ID”. - SKU: Introduce cualquier valor SKU arbitrario que tenga sentido para ti, de forma que puedas hacer un seguimiento único de la app.
- User Access: Si eres el único desarrollador de tu equipo, no importa realmente la opción que decidas escoger. Si no es el caso, entonces puedes tener más control sobre los miembros del equipo de desarrollo que tengan acceso a la app seleccionando la opción “Limited Access”.
Una vez que estés convencido con la información proporcionada, haz clic en el botón “Create” de modo que se cree el registro para la app. (Es probable que obtengas algún mensaje de error en el caso de que otro desarrollador ya hubiese utilizado el mismo nombre para su app. Si es así, has de cambiar el nombre para tu app).
NOTA: Los valores correspondientes al registro de la app, como App Name y Bundle ID pueden cambiarse posteriormente en caso necesario desde la sección General > App Information en la página correspondiente al registro de la app.
Una vez que se ha creado el registro de la app, encontrarás que debes de proporcionar mucha más información antes de que la aplicación pueda enviarse al proceso de revisión como paso previo a su publicación en la App Store; pero, como se ha dicho anteriormente, esto es algo que puedes hacer a tu propio ritmo, y no tienes por qué completarlo del tirón. Lo importante, por ahora, es que una vez que el registro esté creado… ya tendrás todo lo necesario para comenzar a subir tu app (y siguientes versiones) a la App Store Connect desde el IDE de Xojo.
Publicar Apps macOS desde el IDE de Xojo
Información General
Abre tu proyecto Xojo Desktop en el IDE y selecciona Build Settings > macOS. Luego, asegúrate de que tienes los valores adecuados/esperados en el panel Inspector asociado para los siguientes campos:
- Mac App Name: ha de corresponderse con el introducido en el Registro de la App creado en appstoreconnect.apple.com.
- Bundle Identifier: ha de corresponderse con el App ID creado para la app.
- Category: selecciona la categoría que mejor encaje con tu app de entre las disponibles.
Configuración de App Store Connect
Para que el IDE pueda subir la app a la App Store Connect, este requiere del uso de una contraseña específica de aplicación. Puedes añadirla haciendo clic en el botón App Store Connect > Setup. Si ya hubieses creado dicha contraseña específica de aplicación en una versión anterior de Xojo (desde Build Settings > Sign > Notarization > Setup), entonces no es preciso que vuelvas a repetir el proceso. ¡Y recuerda! sólo has de realizar este proceso una vez y estará disponible para todos tus proyectos Desktop (macOS) y iOS.
Firma y Sandboxing
Selecciona Build Settings > macOS > Sign en el navegador de proyecto para acceder al panel Inspector asociado:
- Developer ID: escribe (o pega, si previamente lo has copiado desde el Llavero) la cadena completa correspondiente al certificado de Distribución instalado en tu Mac. En este ejemplo sería (sin las comillas): “Apple Distribution: Francisco Javier Rodriguez Menendez (BW7PU32485)”. De igual modo, este certificado ha de corresponderse con el que se hubiese seleccionado durante la creación del Perfil de Aprovisionamiento, y el Team ID (el valor entre paréntesis) ha de corresponderse con el mismo seleccionado cuando se creó el App ID (Identificador) para la app en developer.apple.com.
- Sandboxing: las apps subidas a la App Store Connect han de tener activada la característica de Sandboxing. Por tanto, activa dicha opción y haz clic en el botón “Edit” asociado para activar las características de Sandboxing precisadas por tu app para su correcto funcionamiento. En nuestro ejemplo sólo hemos activado la capacidad de leer/escribir los archivos seleccionados por el usuario.
Ajustes Compartidos
Selecciona Build Settings > Shared en el navegador de proyecto para acceder al panel Inspector asociado:
Si vas a publicar la versión final (release) de tu app, una vez que la hayas probado a conciencia, entonces probablemente querrás ajustar el valor Stage Code a “Final”. De igual modo, asegúrate de introducir la cadena correspondiente a la versión corta en el campo Version, y también la información asociada con el campo Copyright.
NOTA: ¿Has olvidado algo? Cada vez que haces clic en el botón Publish (o selecciones el item de menú equivalente “Build and Publish to App Store Connect” desde el menú Project), el IDE ejecutará una “lista de comprobación”, de modo que si se detectase algún requerimiento no satisfecho este se mostrará en el Panel de Errores del IDE para que puedas corregirlo antes de proceder a enviar la app a la App Store Connect.
Icono de App
Nada novedoso sobre este particular a diferencia de lo que se pueda esperar a la hora de compilar una app para macOS normal o para su distribución a través de tu propia web en comparación con la App Store. Es decir, tu app necesita una imagen de icono con todos los tamaños requeridos. Pero cuando se trata de publicar la app a la Mac/iOS App Store, dicho requerimiento es incluso más restrictivo y lo comprobaremos antes incluso de que puedas compilar y subir la app. Por tanto, asegúrate de añadir todos los tamaños de icono seleccionando el item App en el Navegador de proyecto, y haciendo luego clic en la opción Appearance > Icon del panel Inspector asociado.
La anterior acción abrirá el Editor de Icono donde podrás arrastrar y soltar los diferentes archivos de imagen para cada uno de los tamaños requeridos.
¡Publicar!
Haz clic en el botón Publish. Una vez que se haya ejecutado la “lista de comprobación” sin errores, verás un diálogo de confirmación. Haz clic en el botón “OK” para iniciar el proceso y subir la nueva compilación (versión) de tu app a la App Store Connect.
Si el proceso se ha completado correctamente, verás el diálogo “Success” una vez finalizado el proceso. En caso contrario, si se hubiese producido algún error durante los diversos pasos involucrados en el proceso, se mostrará un diálogo con el mensaje de error detectado y se devolverá el control al IDE.
En ambos casos, tanto si la nueva compilación de tu app se ha publicado correctamente en la App Store Connect, como si no, encontrarás que se ha creado un archivo de registro en la misma carpeta que contiene la app compilada. Así, en el caso de que se hayan producido errores, podrás abrir dicho archivo de registro para acceder a todos los detalles asociados con los errores producidos, de modo que te resulte más fácil identificarlos y solucionarlos antes de realizar un nuevo intento. Por ejemplo:
2025-01-23 12:54:35.030 *** Error: [ContentDelivery.Uploader.6000028E01C0] The provided entity includes an attribute with a value that has already been used (-19232) The bundle version must be higher than the previously uploaded version: ‘1.0.6’. (ID: d422b9bf-049f-4263-af43-8357c2fe5f00)
En este caso el archivo de registro nos está indicando que hemos intentado publicar una nueva compilación en el que se utiliza el mismo número de versión que el de una versión ya subida previamente y disponible en la App Store Connect. Por tanto, si esta nueva compilación se correspondiese ciertamente con una nueva versión, la forma de solucionar el error consistirá en incrementar simplemente su número de versión (e igualmente la cadena correspondiente a la versión corta).
Probar la app con TestFlight
Cuando creas un nuevo registro de app en la App Store Connect y accedes a él, verás que una de las pestañas en la parte superior de la página es “TestFlight”. Haz clic sobre dicha pestaña y verás todas las versiones de tu app que se hayan subido y que estén disponibles para que otras personas las puedan probar mediante TestFlight:
Como puedes ver, hay un icono de advertencia asociada con una de las apps que hemos subido (A). Esto se debe a que Apple requiere un poco de información adicional por tu parte para saber si la app cumple con el requerimiento de las Regulaciones de Exportación de Encriptación. Haz clic en el enlace “Manage” asociado para acceder al diálogo donde podrás realizar tu selección sobre este particular:
Una vez que se haya completado el requerimiento, el estado de la build cambiará a “Ready to Submit” y, como puedes ver aquí, también nos estará indicando que dicha build está disponible para tus testers durante los próximos 90 días, antes de que expire. Probablemente una cantidad de tiempo suficiente antes de que les envíes una nueva build para probar, en cualquier caso.
NOTA: Utiliza el nuevo Editor de Lista de Propiedades incluido en el IDE de Xojo con el siguiente par Clave/Valor, así no tendrás que realizar manualmente el proceso correspondiente a Encryption Export Regulations:
- Key: ITSAppUsesNonExemptEncryption
- Value: False
Puedes crear tantos grupos de testers como precises por cada una de tus apps. Inicialmente sólo verás una entrada: “Internal Testing”. Aquí puedes crear los grupos para añadir a los miembros de tu equipo de desarrollo. Haz clic en el icono “+” para crear el primero de dichos grupos.
Introduce un nombre para el grupo y desactiva la casilla correspondiente a “Enable automatic distribution”. Luego, haz clic en el botón “Create”.
Una vez que se ha creado tu grupo de testers internos, podrás asignar cualquiera de las builds de tu app que hayas subido (y que no hayan expirado), así como añadir los miembros para dicho grupo (recuerda, aquellos de tu mismo equipo Apple Developer):
Pero el hecho de contar con grupos de testers internos no es de mucha utilidad cuando eres el único miembro del equipo de desarrollo o bien es un equipo pequeño. La buena noticia es que, tan pronto como hayas creado el primer grupo interno obligatorio, aparecerá una nueva opción en la barra lateral de TestFlight: External Testing:
En este caso podrás invitar a un máximo de 10.000 miembros para que prueben tu app. Probablemente la principal diferencia en comparación con los grupos internos sea que, una vez que selecciones la build a probar en cualquiera de los grupos externos, tu app ha de pasar por el proceso Beta App Review. Es decir, no estará disponible de forma inmediata para tus testers hasta que se haya completado el proceso de revisión. La parte positiva es que dicho proceso sólo se requiere para la primera build de la app, de modo que las sucesivas estarán disponibles de form inmediata, tal y como ocurre con las de los grupos internos.
Dispondrás de varias opciones para invitar a los miembros de los grupos externos, desde crear y publicar un enlace público hasta añadirlos manualmente, o bien importar dichos contactos a partir de un archivo con formato .csv.
En cualquier caso, tus testers podrán descargar, instalar y comenzar a probar y enviar informes sobre tu app.
Conclusión
La nueva característica Publish simplifica el proceso de enviar tus apps macOS y iOS a la App Store Connect y, por tanto, hacer que estén disponibles en la Mac App Store y App Store directamente desde el IDE de Xojo, sin necesidad de tener que emplear cualquier otra herramienta externa (como por ejemplo Transporter).