Compartir vía


Publicar una aplicación iOS mediante la línea de comandos

Para publicar la aplicación desde la línea de comandos en un equipo Mac, abre un terminal y ve a la carpeta del proyecto de la aplicación .NET Multi-platform App UI (.NET MAUI). Ejecuta el comando dotnet publish, proporcionando los siguientes parámetros:

Parámetro Valor
-f o --framework .NET Framework de destino, que es net8.0-ios.
-c o --configuration La configuración de compilación, que es Release.

Advertencia

El intento de publicar una solución de .NET MAUI tendrá como resultado que el comando dotnet publish intente publicar cada proyecto de la solución de forma individual, lo que puede causar problemas cuando hayas agregado otros tipos de proyecto a tu solución. Por lo tanto, el comando dotnet publish debe tener como ámbito tu proyecto de aplicación de .NET MAUI.

Se pueden especificar parámetros de compilación adicionales en la línea de comandos, si no se proporcionan en <PropertyGroup> en tu archivo de proyecto. En la tabla siguiente se enumeran algunos de los parámetros comunes:

Parámetro Valor
-p:ApplicationTitle El nombre visible del usuario para la aplicación.
-p:ApplicationId El identificador único de la aplicación, como com.companyname.mymauiapp.
-p:ApplicationVersion La versión de la compilación que identifica una iteración de la aplicación.
-p:ApplicationDisplayVersion El número de versión de la aplicación.
-p:RuntimeIdentifier El identificador de tiempo de ejecución (RID) del proyecto. Use ios-arm64.
-p:ArchiveOnBuild Un valor booleano que indica si se va a generar el archivo de la aplicación. Usa true para producir el .ipa.
-p:CodesignKey Nombre de la clave de firma de código.
-p:CodesignProvision El nombre del perfil de aprovisionamiento que se va a usar para firmar el lote de aplicaciones.
-p:CodesignEntitlements Ruta de acceso al archivo de "entitlements" que especifica los derechos que requiere tu aplicación.

Para obtener una lista completa de las propiedades de compilación, consulta Propiedades del archivo de proyecto.

Importante

Los valores de estos parámetros no tienen que proporcionarse en la línea de comandos. También se pueden proporcionar en el archivo del proyecto. Cuando se proporciona un parámetro en la línea de comandos y en el archivo del proyecto, el parámetro de línea de comandos tiene prioridad. Para obtener más información sobre cómo proporcionar propiedades de compilación en el archivo de proyecto, consulta Definición de propiedades de compilación en el archivo de proyecto.

Por ejemplo, usa el siguiente comando para compilar y firmar un .ipa en un equipo Mac:

dotnet publish -f net8.0-ios -c Release -p:ArchiveOnBuild=true -p:RuntimeIdentifier=ios-arm64 -p:CodesignKey="Apple Distribution: John Smith (AY2GDE9QM7)" -p:CodesignProvision="MyMauiApp"

Nota:

En .NET 8, el comando dotnet publish tiene como valor predeterminado la configuración Release. Por lo tanto, la configuración de compilación se puede omitir desde la línea de comandos. Además, el comando dotnet publish también tiene como valor predeterminado el ios-arm64 RuntimeIdentifier. Por lo tanto, RuntimeIdentifier también se puede omitir desde la línea de comandos.

La publicación crea y firma la aplicación y luego copia el archivo .ipa en la carpeta bin/Release/net8.0-ios/ios-arm64/publish/. El canal de distribución de la aplicación se especifica en el certificado de distribución contenido en el perfil de aprovisionamiento. Para obtener información sobre cómo crear perfiles de aprovisionamiento para los distintos canales de distribución, consulta Publicación de una aplicación para iOS para su distribución en la App Store, Publicación de una aplicación de iOS para distribución ad hoc y Publicación de una aplicación de iOS para distribución interna.

Para obtener más información sobre el comando dotnet publish, consulta Dotnet publish.

Definición de propiedades de compilación en el archivo de proyecto

Una alternativa a especificar parámetros de compilación en la línea de comandos es especificarlos en el archivo del proyecto en <PropertyGroup>. En la tabla siguiente se enumeran algunas de las propiedades de compilación comunes:

Propiedad Valor
<ApplicationTitle> El nombre visible del usuario para la aplicación.
<ApplicationId> El identificador único de la aplicación, como com.companyname.mymauiapp.
<ApplicationVersion> La versión de la compilación que identifica una iteración de la aplicación.
<ApplicationDisplayVersion> El número de versión de la aplicación.
<RuntimeIdentifier> El identificador de tiempo de ejecución (RID) del proyecto. Use ios-arm64.
<ArchiveOnBuild> Un valor booleano que indica si se va a generar el archivo de la aplicación. Usa true para producir el .ipa.
<CodesignKey> Nombre de la clave de firma de código.
<CodesignProvision> El nombre del perfil de aprovisionamiento que se va a usar para firmar el lote de aplicaciones.
<CodesignEntitlements> Ruta de acceso al archivo de "entitlements" que especifica los derechos que requiere tu aplicación.

Para obtener una lista completa de las propiedades de compilación, consulta Propiedades del archivo de proyecto.

Importante

Los valores de estas propiedades de compilación no tienen que proporcionarse en el archivo del proyecto. También se pueden proporcionar en la línea de comandos al publicar la aplicación. Esto te permite omitir valores específicos del archivo de proyecto.

En el ejemplo siguiente se muestra un grupo de propiedades típico para compilar y firmar la aplicación iOS con el perfil de aprovisionamiento:

<PropertyGroup Condition="$(TargetFramework.Contains('-ios')) and '$(Configuration)' == 'Release'">
  <CodesignKey>Apple Distribution: John Smith (AY2GDE9QM7)</CodesignKey>
  <CodesignProvision>MyMauiApp</CodesignProvision>
  <ArchiveOnBuild>true</ArchiveOnBuild>
</PropertyGroup>

En este ejemplo, <PropertyGroup> agrega una comprobación de condición, lo que impide que se procese la configuración a menos que se supere la comprobación de condición. La comprobación de condición busca dos elementos:

  1. La marco de trabajo de destino se establece en algo que contiene el texto -ios.
  2. La configuración de compilación se establece en Release.

Si se produce un error en cualquiera de estas condiciones, la configuración no se procesa. Lo más importante es que las configuraciones <CodesignKey> y <CodesignProvision> no estén establecidas, lo que impide que la aplicación se firme.

Publicación de una aplicación para iOS desde Windows

Compilar aplicaciones nativas de iOS mediante .NET MAUI requiere acceso a las herramientas de compilación de Apple, que solo se ejecutan en equipos Mac. Por ello, Visual Studio 2022 debe conectarse a un Mac con acceso a la red para crear aplicaciones para iOS de .NET MAUI. Para obtener más información, consulta Emparejar con Mac para el desarrollo de iOS.

Nota:

La primera vez que Emparejar con Mac inicia sesión en un host de compilación de Mac desde Visual Studio 2022, configura las claves SSH. Con estas claves, no se necesitará el nombre de usuario ni la contraseña en los futuros inicios de sesión.

Para publicar la aplicación desde la línea de comandos en Windows, abre un terminal y ve a la carpeta del proyecto de la aplicación .NET MAUI. Ejecuta el comando dotnet publish, proporciona los mismos parámetros de línea de comandos o compila propiedades en el archivo de proyecto, que proporcionarías al publicar desde un equipo Mac. Además, debes proporcionar los siguientes parámetros de línea de comandos:

Parámetro Valor
-p:ServerAddress La dirección IP del host de compilación de Mac.
-p:ServerUser El nombre de usuario que se usará al iniciar sesión en el host de compilación de Mac. Use el nombre de usuario del sistema en lugar del nombre completo.
-p:ServerPassword La contraseña del nombre de usuario que se usa para iniciar sesión en el host de compilación de Mac.
-p:TcpPort El puerto TCP que se va a usar para comunicarse con el host de compilación de Mac, que es 58181.
-p:_DotNetRootRemoteDirectory La carpeta del host de compilación de Mac que contiene el .NET SDK. Use /Users/{macOS username}/Library/Caches/Xamarin/XMA/SDKs/dotnet/.

Importante

Los valores de estos parámetros también se pueden proporcionar en el archivo de proyecto como propiedades de compilación. Sin embargo, los valores de <ServerAddress>, <ServerUser>, <ServerPassword> y <_DotNetRootRemoteDirectory> normalmente se proporcionarán en la línea de comandos por motivos de seguridad.

Por ejemplo, usa el siguiente comando para compilar y firmar un .ipa desde Windows:

dotnet publish -f net8.0-ios -c Release -p:ArchiveOnBuild=true -p:RuntimeIdentifier=ios-arm64 -p:CodesignKey="Apple Distribution: John Smith (AY2GDE9QM7)" -p:CodesignProvision="MyMauiApp" -p:ServerAddress={macOS build host IP address} -p:ServerUser={macOS username} -p:ServerPassword={macOS password} -p:TcpPort=58181 -p:_DotNetRootRemoteDirectory=/Users/{macOS username}/Library/Caches/Xamarin/XMA/SDKs/dotnet/

Nota:

En .NET 8, el comando dotnet publish tiene como valor predeterminado la configuración Release. Por lo tanto, la configuración de compilación se puede omitir desde la línea de comandos. Además, el comando dotnet publish también tiene como valor predeterminado el ios-arm64 RuntimeIdentifier. Por lo tanto, RuntimeIdentifier también se puede omitir desde la línea de comandos.

Nota:

Si se omite el parámetro ServerPassword de una invocación de compilación de la línea de comandos, Emparejar con Mac intenta iniciar sesión en el host de compilación de Mac mediante las claves SSH guardadas.

La publicación compila y firma la aplicación y, a continuación, copia el .ipa en la carpeta bin\Release\net8.0-ios\ios-arm64\publish en el equipo de Windows. El canal de distribución de la aplicación se especifica en el certificado de distribución contenido en el perfil de aprovisionamiento. Para obtener información sobre cómo crear perfiles de aprovisionamiento de distribución para los distintos canales de distribución, consulta Publicación de una aplicación para iOS para su distribución en la App Store, Publicación de una aplicación de iOS para distribución ad-hoc y Publicación de una aplicación de iOS para distribución interna

Durante el proceso de publicación es posible que sea necesario permitir que codesign se ejecute en el equipo Mac emparejado:

Permitir que codesign firme la aplicación en el equipo Mac emparejado.

Solución de problemas de una compilación remota

Si no se especifica RuntimeIdentifier al compilar de forma remota desde la línea de comandos en Windows, se usará la arquitectura del equipo Windows. Esto ocurre porque RuntimeIdentifier debe establecerse al principio del proceso de compilación, antes de que la compilación pueda conectarse al equipo Mac para derivar su arquitectura.

Si no se especifica RuntimeIdentifier al compilar de forma remota mediante Visual Studio en Windows, el IDE detectará la arquitectura del equipo Mac remoto y lo establecerá en consecuencia. La invalidación del valor predeterminado se puede lograr estableciendo la propiedad de compilación $(ForceSimulatorX64ArchitectureInIDE):

<PropertyGroup Condition="'$(Configuration)' == 'Release' And '$(TargetFramework)' == 'net8.0-ios'">
    <ForceSimulatorX64ArchitectureInIDE>true</ForceSimulatorX64ArchitectureInIDE>
</PropertyGroup>

Distribuir la aplicación

El archivo .ipa se puede distribuir con uno de los métodos siguientes:

  • Las aplicaciones ad hoc se pueden distribuir mediante Apple Configurator. Para obtener más información, consulta Apple Configurator user guide en support.apple.com. |
  • Las aplicaciones para la App Store se pueden cargar en la App Store a través de una aplicación como Transporter. Esto requerirá que hayas creado un registro para la aplicación en App Store Connect y para crear una contraseña específica de la aplicación. Para obtener más información, consulta Create an app record en developer.apple.com y Sign in to apps with your Apple ID using app-specific passwords en support.apple.com.
  • Las aplicaciones internas se pueden distribuir a través de un sitio web seguro o a través de la administración de dispositivos móviles (MDM). Ambos enfoques requieren que la aplicación esté preparada para su distribución, lo que incluye la preparación de un manifiesto. Para obtener más información, consulta Distribuir apps internas propias a dispositivos Apple en support.apple.com.