Publicación de aplicaciones Xamarin.iOS en el App Store

Para publicar una aplicación en el App Store, en primer lugar, un desarrollador de aplicaciones debe enviarla junto con capturas de pantalla, una descripción, iconos y otra información a Apple para su revisión. Tras aprobar la aplicación, Apple la coloca en el App Store, donde los usuarios pueden comprarla e instalarla directamente desde sus dispositivos iOS.

En esta guía se describen los pasos que se deben seguir para preparar una aplicación para el App Store y enviarla a Apple para su revisión. En concreto, se describe cómo hacer lo siguiente:

  • Seguir las directrices de revisión del App Store
  • Configurar un identificador de aplicación y los derechos
  • Proporcionar un icono del App Store e iconos de la aplicación
  • Configurar un perfil de aprovisionamiento del App Store
  • Actualizar la configuración de compilación de versión
  • Configurar la aplicación en iTunes Connect
  • Compilar la aplicación y enviarla a Apple

Importante

Apple ha comunicado que, a partir de marzo de 2019, las aplicaciones y actualizaciones que se envíen al App Store deberán haberse compilado con el SDK de iOS 12.1 o posterior, incluido en Xcode 10.1 y versiones posteriores. Las aplicaciones también deberán admitir los tamaños de pantalla del iPhone XS y el iPad Pro de 12.9".

Directrices del App Store

Antes de enviar una aplicación para su publicación en el App Store, asegúrese de que cumple los estándares definidos en el documento App Store Review Guidelines (Directrices de revisión del App Store) de Apple. Al enviar una aplicación al App Store, Apple la revisa para asegurarse de que cumple estos requisitos. Si no los cumple Apple la rechazará, de modo que tendrá que solucionar los problemas citados y volver a enviarla. Por lo tanto, es recomendable que se familiarice con las directrices lo antes posible durante el proceso de desarrollo.

Aquí se muestran un par de cosas que debe tener en cuenta a la hora de enviar una aplicación:

  1. Asegúrese de que la descripción de la aplicación coincide con su funcionalidad.
  2. Compruebe que la aplicación no se bloquea con un uso normal. Esto incluye el uso en cada dispositivo iOS que admita.

También puede echar un vistazo a los recursos relacionados con el App Store que proporciona Apple.

Configurar un identificador de aplicación y los derechos

Todas las aplicaciones iOS tienen un identificador de aplicación único, que tiene asociado un conjunto de servicios de aplicación, denominados derechos. Los derechos permiten que las aplicaciones realicen operaciones diversas, como recibir una notificación de inserción, tener acceso a características de iOS, como HealthKit, y mucho más.

Para crear un identificador de aplicación y seleccionar los derechos necesarios, visite el Portal para desarrolladores de Apple y siga estos pasos:

  1. Inicie sesión en el Portal para desarrolladores de Apple. Si aún no tiene ningún identificador de Apple, primero cree uno.
  2. Vaya a la sección Certificates, IDs & Profiles (Certificados, identificadores y perfiles) y, tras ello, a la sección Identifiers (Identificadores).
  3. Haga clic en el botón + situado junto al encabezado Identifiers (Identificadores) en la parte superior de la página.
  4. Seleccione App IDs (Id. de aplicación) y haga clic en Continuar.
  5. Seleccione Add (Agregar) y, luego, Continue (Continuar).
  6. Rellene los campos Description (Descripción) y Bundle ID (Identificador de paquete) de la nueva aplicación y seleccione en Capabilities (Capacidades) aquellas capacidades que la aplicación Xamarin.iOS va a necesitar. Los servicios de aplicación se describen con más detalle en la guía Trabajar con funcionalidades en Xamarin.iOS. Cuando termine de realizar todas las selecciones, haga clic en Continue (Continuar).
  7. Haga clic en el botón Register (Registrar) para completar el proceso de creación del identificador de aplicación.

Además de seleccionar y configurar los servicios de aplicación necesarios al definir el identificador de aplicación, debe configurar el identificador de aplicación y los derechos en el proyecto de Xamarin.iOS. Para ello, edite los archivos Info.plist y Entitlements.plist. Para más información, eche un vistazo a la guía Trabajar con derechos en Xamarin.iOS, en la que se describe cómo se crea un archivo Entitlements.plist y qué significan las distintas configuraciones de derechos que contiene.

Incluir un icono del App Store

Al enviar una aplicación a Apple, asegúrese de que incluye un catálogo de recursos que contenga un icono del App Store. Para más información sobre cómo hacerlo, vea la guía Iconos del App Store en Xamarin.iOS.

Establecer los iconos de aplicaciones y las pantallas de inicio

Para que Apple ponga una aplicación iOS a disposición en el App Store, debe tener iconos y pantallas de inicio adecuados para todos los dispositivos iOS en los que se puede ejecutar. Para más información sobre cómo configurar iconos de aplicación y pantallas de inicio, lea las guías siguientes:

Crear e instalar un perfil de aprovisionamiento del App Store

iOS usa perfiles de aprovisionamiento para controlar cómo puede implementarse una compilación de aplicación determinada. Estos son archivos que contienen información sobre el certificado que se ha usado para firmar una aplicación, el identificador de aplicación y el lugar en el que puede instalarse la aplicación. Para el desarrollo y la distribución ad hoc, el perfil de aprovisionamiento también incluye la lista de dispositivos permitidos en los que se puede implementar la aplicación. En cambio, para la distribución en el App Store, solo se incluye información del identificador de aplicación y del certificado, ya que el único mecanismo para la distribución pública es el App Store.

Para crear e instalar un perfil de aprovisionamiento del App Store, siga estos pasos:

  1. Inicie sesión en el Portal para desarrolladores de Apple.
  2. Vaya a la sección Certificates, IDs & Profiles (Certificados, identificadores y perfiles) y, tras ello, a la sección Profiles (Perfiles).
  3. Haga clic en el botón +, seleccione iOS App Development (Desarrollo de aplicaciones iOS) y App Store y, después, haga clic en Continue (Continuar).
  4. Seleccione el Identificador de aplicación en la lista y haga clic en Continuar.
  5. Seleccione un certificado de firma y haga clic en Continuar.
  6. Seleccione los dispositivos que quiera incluir en este perfil y haga clic en Continue (Continuar).
  7. Escriba un nombre de perfil de aprovisionamiento en Provisioning Profile Name y haga clic en Generate (Generar) para crear el perfil.
  8. Use las herramientas de administración de cuentas de Apple de Xamarin para descargar el perfil de aprovisionamiento recién creado en el equipo Mac. Si está trabajando con un equipo Mac, también puede descargar el perfil de aprovisionamiento directamente desde el Portal para desarrolladores de Apple y hacer doble clic en él para instalarlo.

Para obtener instrucciones detalladas, vea Creación de un perfil de distribución y Selección de un perfil de distribución en un proyecto de Xamarin.iOS.

Actualizar la configuración de compilación de versión

Los nuevos proyectos Xamarin.iOS se establecen automáticamente en las configuraciones de compilación de depuración y versión. Para configurar correctamente la compilación de versión, siga estos pasos:

  1. En el Panel de solución, abra el archivo Info.plist que hay dentro del proyecto de iOS.

  2. Asegúrese de que está en la vista Aplicación. Para establecer esto, haga clic en la opción correspondiente en la barra de navegación inferior.

  3. Seleccione Aprovisionamiento manual como opción de firma. Guarde y cierre el archivo.

  4. Haga clic con el botón derecho en el nombre del proyecto en el Panel de solución, seleccione Opciones y vaya a la pestaña Compilación de iOS.

  5. Establezca Configuración en Versión y Plataforma en iPhone.

  6. Para compilar con un SDK de iOS específico, selecciónelo en la lista Versión del SDK. En caso contrario, deje este valor en Predeterminado.

  7. La vinculación reduce el tamaño total de la aplicación, ya que elimina el código no usado.

    • En la mayoría de los casos, la opción Comportamiento del enlazador debe establecerse en el valor predeterminado Vincular solo SDK de marco.
    • El uso de la opción No vincular puede hacer que Apple rechace la aplicación debido a la presencia de API de iOS no públicas en Xamarin.iOS, que se vincularían a la opción Vincular solo SDK de marco.
    • La opción Vincular todo debe usarse con cuidado, ya que eliminará el código de todos los ensamblados del proyecto, incluidas las bibliotecas de terceros. Podría quitar un código que la biblioteca de terceros solo puede usar a través de una reflexión que el vinculador no puede detectar, ya que realiza un análisis de código estático para determinar qué código de biblioteca se está usando. Por tanto, use Vincular todo con cuidado, ya que es posible que tenga que conservar manualmente algunas clases o métodos para evitar errores en tiempo de ejecución debido a que falta código.
    • Para obtener más información, vea la guía Vincular aplicaciones Xamarin.iOS.
  8. En el caso de iOS 11, seleccione una de las arquitecturas de dispositivo que admite ARM64. Para obtener más información sobre la compilación de dispositivos iOS de 64 bits, vea la sección Habilitar compilaciones de 64 bits de aplicaciones Xamarin.iOS de la documentación Consideraciones sobre las plataformas de 32 y 64 bits.

  9. Tal vez le interese usar el compilador LLVM para compilar código más rápido y más pequeño, pero esta opción aumenta los tiempos de compilación.

  10. Active Optimizar imágenes PNG para reducir aún más el tamaño de la aplicación.

  11. La depuración no debe habilitarse porque hará que la compilación sea innecesariamente grande.

  12. Teniendo en cuenta las necesidades de la aplicación, puede que también quiera ajustar el tipo de Recolección de elementos no usados que se está usando y la configuración de Internacionalización.

    Después de establecer las opciones anteriores, la configuración de compilación debería ser similar a la siguiente:

    iOS Build settings

    Vea también la guía Mecanismos de compilación de iOS, en la que se describe con más detalle la configuración de compilación.

  13. Vaya a la pestaña Firma del lote de iOS. Si estas opciones no son editables, asegúrese de que Aprovisionamiento manual está seleccionado en el archivo Info.plist.

  14. Asegúrese de que Configuración esté establecido en Versión y Plataforma en iPhone.

  15. Establezca Identidad de firma en Distribución (automática).

  16. Para Perfil de aprovisionamiento, seleccione el perfil de aprovisionamiento del App Store creado anteriormente.

    Las opciones de firma del lote del proyecto deberían parecerse a lo siguiente:

    iOS Bundle Signing

  17. Haga clic en Aceptar para guardar los cambios en las propiedades del proyecto.

Configurar la aplicación en iTunes Connect

iTunes Connect es un conjunto de aplicaciones de herramientas basadas en web para administrar aplicaciones iOS en el App Store. La aplicación Xamarin.iOS debe estar correctamente configurada en iTunes Connect para que se pueda enviar a Apple para su revisión y publicación en el App Store.

Para obtener información sobre cómo hacerlo, lea la guía Configuración de una aplicación en iTunes Connect.

Compilar y enviar la aplicación

Con la configuración de compilación establecida correctamente y iTunes Connect a la espera de su envío, ahora puede compilar la aplicación y enviarla a Apple.

  1. En Visual Studio para Mac, seleccione la configuración de compilación de versión y un dispositivo (no un simulador) para el que se va a compilar.

    Build configuration and platform selection

  2. En el menú Compilación, seleccione Archive for Publishing (Archivo para publicar).

  3. Una vez creado el archivo, se mostrará la vista Archivos. Haga clic en Sign and Distribute… (Firmar y distribuir…) para abrir el Asistente para la publicación.

    Screenshot of the Sign and Distribute button location in the Archives view.

    Nota:

    De forma predeterminada, la vista de Archivos solo muestra los archivos de la solución abierta. Para ver todas las soluciones que tienen archivos, active la casilla Show all archives (Mostrar todos los archivos). Es recomendable conservar los archivos antiguos para que la información de depuración que incluyen se puede usar para resolver los símbolos de los informes de bloqueo, si es necesario.

  4. Seleccione el canal de distribución del App Store. Haga clic en Next.

  5. Seleccione Cargar como destino. Haga clic en Next.

  6. En la ventana Perfil de aprovisionamiento, seleccione su identidad de firma, la aplicación y el perfil de aprovisionamiento. Haga clic en Next.

    Screenshot of the Provisioning profile wizard page showing a valid signing identity, app, and provisioning profile selection.

  7. En la ventana App Store Connect information (Información de App Store Connect), seleccione el nombre de usuario de un ID de Apple en el menú y escriba una contraseña específica de la aplicación. Haga clic en Next.

    Screenshot of the App Store Connect information wizard page showing an Apple ID user name selected.

  8. Compruebe los detalles del paquete y haga clic en Publicar. Después de seleccionar una ubicación en la que guardar el archivo .ipa, el asistente cargará la aplicación en App Store Connect.

    Nota:

    Apple puede rechazar aplicaciones con el archivo iTunesMetadata.plist incluido en el archivo .ipa, lo que produce un error como el siguiente:

    ERROR: ERROR ITMS-90047: "Disallowed paths ( "iTunesMetadata.plist" ) found at: Payload/iPhoneApp1.app"

    Para encontrar una solución a este error, eche un vistazo a esta publicación en los foros de Xamarin.

Estado de iTunes Connect

Para ver el estado del envío de la aplicación, inicie sesión en iTunes Connect y seleccione la aplicación. El estado inicial debería ser Waiting For Review (En espera de revisión), aunque podría aparecer temporalmente Upload Received (Carga recibida) mientras se está procesando.

Waiting For Review

Sugerencias y trucos

Personalización de la ubicación del archivo .ipa

Una propiedad de MSBuild, IpaPackageDir, hace que sea posible personalizar la ubicación de salida del archivo .ipa. Si IpaPackageDir está establecido en una ubicación personalizada, el archivo .ipa se colocará en esa ubicación en lugar de en el subdirectorio predeterminado con marca de tiempo. Esto puede ser útil durante la creación automatizada de compilaciones que se basan en una ruta de acceso del directorio específica para funcionar correctamente, como las que se usan para las compilaciones de integración continua (CI).

Hay varias formas de usar la nueva propiedad. Por ejemplo, para la salida del archivo .ipa en el directorio predeterminado anterior (como en Xamarin.iOS 9.6 y versiones anteriores), puede establecer la propiedad IpaPackageDir en $(OutputPath) mediante uno de los métodos siguientes. Ambos métodos son compatibles con todas las compilaciones de Xamarin.iOS de Unified API, incluidas las compilaciones del IDE, así como las de la línea de comandos en las que se usa msbuild o mdtool:

  • La primera opción se basa en establecer la propiedad IpaPackageDir de un elemento <PropertyGroup> en un archivo MSBuild. Por ejemplo, puede agregar el siguiente elemento <PropertyGroup> en la parte inferior del archivo .csproj del proyecto de la aplicación de iOS, justo antes de la etiqueta de cierre </Project>:

    <PropertyGroup>
      <IpaPackageDir>$(OutputPath)</IpaPackageDir>
    </PropertyGroup>
    
  • Un método mejor consiste en agregar un elemento <IpaPackageDir> en la parte inferior del elemento <PropertyGroup> existente que corresponde a la configuración usada para compilar el archivo .ipa. Esta opción es mejor porque preparará el proyecto para la futura compatibilidad con una configuración prevista en la página de propiedades del proyecto de Opciones IPA para iOS (iOS IPA Options). Si actualmente usa la configuración de Release|iPhone para compilar el archivo .ipa, el grupo completo de propiedades actualizadas puede ser similar al siguiente:

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone'">
       <Optimize>true</Optimize>
       <OutputPath>bin\iPhone\Release</OutputPath>
       <ErrorReport>prompt</ErrorReport>
       <WarningLevel>4</WarningLevel>
       <ConsolePause>false</ConsolePause>
       <CodesignKey>iPhone Developer</CodesignKey>
       <MtouchUseSGen>true</MtouchUseSGen>
       <MtouchUseRefCounting>true</MtouchUseRefCounting>
       <MtouchFloat32>true</MtouchFloat32>
       <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
       <MtouchLink>SdkOnly</MtouchLink>
       <MtouchArch>ARMv7, ARM64</MtouchArch>
       <MtouchHttpClientHandler>HttpClientHandler</MtouchHttpClientHandler>
       <MtouchTlsProvider>Default</MtouchTlsProvider>
       <BuildIpa>true</BuildIpa>
       <IpaPackageDir>$(OutputPath)</IpaPackageDir>
    </PropertyGroup>
    

Una técnica alternativa para las compilaciones de las líneas de comandos msbuild consiste en agregar un argumento de línea de comandos /p: para establecer la propiedad IpaPackageDir. Observe que, en este caso, msbuild no expande expresiones $() que pasan a la línea de comandos, por lo que no es posible utilizar la sintaxis $(OutputPath). En su lugar, debe proporcionar un nombre de ruta de acceso completa.

msbuild /p:Configuration="Release" /p:Platform="iPhone" /p:ServerAddress="192.168.1.3" /p:ServerUser="macuser" /p:IpaPackageDir="%USERPROFILE%\Builds" /t:Build SingleViewIphone1.sln

O al siguiente en Mac:

msbuild /p:Configuration="Release" /p:Platform="iPhone" /p:IpaPackageDir="$HOME/Builds" /t:Build SingleViewIphone1.sln

Una vez que se ha creado y archivado su compilación de distribución, ahora está listo para enviar su aplicación a iTunes Connect.

Resumen

En este artículo se describe cómo configurar, compilar y enviar una aplicación iOS para su publicación en el App Store.