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:
- La marco de trabajo de destino se establece en algo que contiene el texto
-ios
. - 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:
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.