Compilación de aplicaciones de Xamarin para iOS

Importante

Visual Studio App Center está programado para retirarse el 31 de marzo de 2025. Aunque puede seguir usando Visual Studio App Center hasta que se retire por completo, hay varias alternativas recomendadas a las que puede considerar la posibilidad de migrar.

Obtenga más información sobre las escalas de tiempo y las alternativas de soporte técnico.

Nota

Las versiones y requisitos admitidos de App Center admiten proyectos portables de biblioteca de clases (PCL) y .NET Standard . Consulte Cloud Build Machines para ver las versiones de .NET Standard. App Center no admite componentes del almacén de componentes de Xamarin y se recomienda usar paquetes NuGet siempre que esté disponible. Si usa un componente que no se puede reemplazar, póngase en contacto con nosotros. Consulte la ayuda y los comentarios.

Para empezar a compilar la primera aplicación de Xamarin iOS, deberá:

  1. Conéctese a la cuenta de servicio del repositorio (GitHub, Bitbucket, VSTS, Azure DevOps).
  2. Seleccione un repositorio y una rama donde reside la aplicación.
  3. Configure el proyecto o el área de trabajo de la compilación y el esquema que desea compilar.

Nota

Para que la aplicación se ejecute en un dispositivo real, la compilación debe estar firmada con un perfil de aprovisionamiento válido y un certificado.

1. Vinculación del repositorio

Si no se ha conectado previamente a la cuenta de servicio del repositorio, debe conectarla. Una vez conectada la cuenta, seleccione el repositorio donde se encuentra el proyecto de iOS. Para configurar una compilación para un repositorio, necesita permiso de administrador y extracción para él.

2. Selección de una rama

Después de seleccionar un repositorio, seleccione la rama que desea compilar. De forma predeterminada, se mostrarán todas las ramas activas.

3. Configuración de la primera compilación

Antes de la primera compilación, es necesario configurar el proyecto de Xamarin.

3.1. Proyecto o solución

App Center detecta automáticamente los archivos de solución y proyecto en el repositorio si se encuentran dentro del intervalo de análisis. Seleccione el .sln o .csproj/.fsproj que desea compilar.

Nota

Para obtener el mejor rendimiento, el análisis se limita actualmente a dos niveles de directorio para .sln y cuatro niveles de directorio para .csproj/fsproj , incluida la raíz del repositorio.

3.1.1. Compilación a partir del archivo de solución (.sln)

En el código, asegúrate de deshabilitar los proyectos de Android y UWP para las configuraciones de compilación diseñadas para compilaciones de iOS: entra en las asignaciones de configuración de la solución y para todas las asignaciones destinadas a iPhone y iPhoneSimulator, desactiva todos los proyectos destinados a otras plataformas. Este cambio garantizará que, cuando se compila el .sln , no intentará compilar los demás proyectos. Hay más información de asignación de configuraciones de soluciones que puede leer.

3.1.2. Compilación desde el archivo del proyecto (.csproj/.fsproj)

Para compilar desde un archivo .csproj/.fsproj , todos los proyectos a los que se hace referencia (por ejemplo, el proyecto PCL) deben contener la configuración con el mismo nombre que el del proyecto de iOS de origen. Por lo tanto, si ejecuta la configuración de depuración para el simulador en App Center, el proyecto de PCL debe tener la configuración Debug|iPhoneSimulator . En caso de que no existan y para evitar errores adicionales, agreguemos estas configuraciones antes de compilar los proyectos. Esas configuraciones tienen valores predeterminados básicos solo para Depurar y Liberar.

3.2. Configuración

Seleccione la configuración con la que desea compilar. Las configuraciones se detectan automáticamente en función del archivo de origen seleccionado en el paso anterior.

3.3. Versión mono

App Center permite usar diferentes entornos mono agrupados con el SDK de Xamarin.iOS respectivo para que la compilación mantenga la compatibilidad con versiones anteriores al publicar una compatibilidad con nuevas características. El mono predeterminado para una nueva configuración de rama será el estable más reciente. Puede optar por usar uno de los entornos mono anteriores para crear versiones anteriores de marcos o bibliotecas. Al elegir una versión de Mono diferente, verá la versión del SDK de Xamarin.iOS que se incluye con ella. Para realizar un seguimiento de las actualizaciones de la versión del SDK de Xamarin, puede leer entradas en el blog de la versión de Xamarin.

3.3.1. Versión de .NET

La versión correcta de .NET se seleccionará automáticamente en función de la versión de Xamarin.iOS usada para la compilación y no se pueda sobrescribir. Puede ver la asignación de Xamarin.iOS a .NET que usan nuestros servicios en la tabla siguiente:

Xamarin.iOS .NET
13.20 3.1.401
14,0 3.1.401
14,2 3.1.401
14.4 3.1.401
14.6 5.0.100
14.8 5.0.100
14.10 5.0.100
14,14 5.0.100
14.16 5.0.100
14,20 5.0.100
15 5.0.100
15.2 5.0.100
15,4 5.0.100
15,6 5.0.100
15.8 5.0.100
15.10 5.0.100
15.12 5.0.100
16.0 5.0.100
16.0 (.NET 6) 6.0.405
16.1 6.0.405
16,2 6.0.405

3.4. Versión de Xcode

Actualmente, las versiones compatibles de Xamarin requieren Xcode 11.7 o posterior

3.5. Desencadenadores de compilación

De forma predeterminada, se desencadena una nueva compilación cada vez que un desarrollador inserta en una rama configurada. Si prefiere desencadenar manualmente una nueva compilación, puede cambiar esta configuración en el panel de configuración.

3.6. Compilación del simulador

Las compilaciones del simulador solo se pueden ejecutar en simuladores y no se pueden instalar en el dispositivo, pero las compilaciones se completan más rápido que las compilaciones del dispositivo. Si la compilación no es una compilación del simulador, debe cargar los archivos de firma de código en el paso siguiente.

3.7. Incrementar el número de compilación

Cuando se habilita, CFBundleVersion en info.plist de la aplicación se incrementa automáticamente para cada compilación. El cambio se produce previamente a la compilación y no se confirmará en el repositorio.

3.8. Firma de código

Una compilación correcta del dispositivo generará un archivo IPA. Para instalar la compilación en un dispositivo, debe firmarse con un perfil de aprovisionamiento y un certificado válidos. Para firmar las compilaciones generadas desde una rama, habilite el inicio de sesión de código en el panel de configuración y cargue un perfil de aprovisionamiento () y un certificado válido (.mobileprovision.p12), junto con la contraseña del certificado. Puede obtener más información sobre la firma de código y el aprovisionamiento de dispositivos de aplicaciones de Xamarin iOS en la documentación de Xamarin.

Las aplicaciones con extensiones de app o watchOS requieren que se firme un perfil de aprovisionamiento adicional por extensión.

Nota

Hay un problema existente al ejecutarse nuget restore en proyectos que contienen aplicaciones watchOS de Xamarin. La creación de una aplicación watchOS en App Center sin una solución alternativa producirá un error:

Project <project> is not compatible with xamarinios10 (Xamarin.iOS,Version=v1.0) / win-x86. Project <project> supports: xamarinwatchos10 (Xamarin.WatchOS,Version=v1.0).

Para compilar aplicaciones watchOS en App Center, se requiere una solución alternativa. Dentro del proyecto de iOS contenedor, que hace referencia a la aplicación inspección, se debe incluir una línea adicional:

<ReferenceOutputAssembly>False</ReferenceOutputAssembly>

Ejemplo de referencia de WatchApp con solución alternativa:

    <ProjectReference Include="..\MyWatchApp\MyWatchApp.csproj">
      <Project>{59EB034F-3D29-43A5-B89F-124879504771}</Project>
      <Name>MyWatchApp</Name>
      <IsWatchApp>True</IsWatchApp>
      <ReferenceOutputAssembly>False</ReferenceOutputAssembly>
    </ProjectReference>

3.9. Inicio de la compilación correcta en un dispositivo real

Use el archivo .ipa recién generado para probar si la aplicación se inicia en un dispositivo real. La prueba de inicio agrega aproximadamente 10 minutos más al tiempo de compilación. Es posible que quiera comprobar una guía más completa sobre cómo probar las compilaciones.

3.10. NuGet restore

Si el archivo NuGet.config está protegido para el repositorio y se encuentra junto al .sln o al nivel raíz del repositorio, App Center restaura las fuentes de NuGet privadas cuando se agregan como se muestra en el ejemplo siguiente. Las credenciales se pueden agregar de forma segura mediante variables de entorno:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget" value="https://api.nuget.org/v3/index.json" />
    <add key="MyGet" value="https://www.myget.org/F/MyUsername/api/v2/index.json" />
    <add key="MyAuthNuget" value="https://nuget.example.com/v2/index.json" />
  </packageSources>
  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>
  <packageSourceCredentials>
    <MyAuthNuget>
      <add key="Username" value="$USER_VARIABLE" />
      <add key="ClearTextPassword" value="$PASSWORD_VARIABLE" />
    </MyAuthNuget>
  </packageSourceCredentials>
</configuration>

Si tiene configuraciones complejas y necesita más información, consulte Configuración del comportamiento de NuGet.

3.11. Distribuir a un grupo de distribución

Puede configurar cada compilación correcta desde una rama para distribuirla a un grupo de distribución creado anteriormente. Puede agregar un nuevo grupo de distribución desde la sección Distribuir. Siempre hay un grupo de distribución predeterminado denominado "Colaboradores" que incluye a todos los usuarios que tienen acceso a la aplicación.

Una vez guardada la configuración, se iniciará automáticamente una nueva compilación.

4. Generar resultados

Una vez desencadenada una compilación, puede estar en los siguientes estados:

  • en cola : la compilación está en una cola en espera de que los recursos se libere.
  • building : la compilación se está ejecutando y ejecutando las tareas predefinidas.
  • correcto: la compilación se completó correctamente.
  • failed : la compilación se detuvo debido a un error. Puede solucionar los problemas que se han producido al descargar e inspeccionar el registro de compilación.
  • cancelado: una acción de usuario canceló la compilación o agotó el tiempo de espera.

4.1. Registros de compilación

Para una compilación completada (correcta o errónea), descargue los registros para obtener más información sobre cómo se ha producido la compilación. App Center proporciona un archivo con los siguientes archivos:

|-- 1_build.txt (this is the general build log)
|-- build (this folder contains a separate log file for each build step)
    |-- <build-step-1> (e.g. 2_Get Sources.txt)
    |-- <build-step-2> (e.g. 3_Pod install.txt)
    |--
    |-- <build-step-n> (e.g. n_Post Job Cleanup.txt)

Los registros específicos del paso de compilación (ubicados en el build/ directorio del archivo) son útiles para solucionar problemas y comprender en qué paso y por qué se produjo un error en la compilación.

4.2. La aplicación (.ipa o .app)

.ipa es un archivo de archivo de aplicación de iOS que contiene la aplicación de iOS. Si la compilación se ha firmado correctamente, .ipa se puede instalar en un dispositivo real, correspondiente al perfil de aprovisionamiento usado al firmar. Hay más detalles sobre la firma y distribución de código con App Center.

Si la aplicación es una compilación del simulador, puede ejecutar el .app archivo en un simulador, pero no puede usarlo en un dispositivo real.

4.3. Los archivos de símbolos (.dsym)

Los archivos de símbolos solo se generan para compilaciones de dispositivos. Los archivos .dsym contienen los símbolos de depuración de la aplicación.

  • Si anteriormente integraba el SDK de App Center en la aplicación con el módulo de informes de bloqueo habilitado, el servicio de informes de bloqueos requiere este .dsym archivo para que una compilación muestre informes de bloqueos legibles (simbólicos) humanos.
  • Si anteriormente integraba otro SDK para informes de bloqueos en la aplicación (por ejemplo, SDK de HockeyApp), el servicio correspondiente requiere que el .dsym archivo muestre los informes de bloqueo legibles humanos.