Partilhar via


Publicar um aplicativo iOS usando a linha de comando

Para publicar seu aplicativo na linha de comando em um Mac, abra um terminal e navegue até a pasta do projeto de aplicativo .NET MAUI (Interface do Usuário de Aplicativo Multiplataforma do .NET). Execute o comando dotnet publish, fornecendo os seguintes parâmetros:

Parâmetro Valor
-f ou --framework A estrutura de destino, que é net8.0-ios.
-c ou --configuration A configuração do build, que é Release.

Aviso

A tentativa de publicar uma solução MAUI do .NET resultará na tentativa do comando dotnet publish de publicar cada projeto na solução individualmente, o que pode causar problemas quando você adicionou outros tipos de projeto à sua solução. Portanto, o comando dotnet publish deve ser definido como escopo para seu projeto de aplicativo MAUI do .NET.

Parâmetros de build adicionais podem ser especificados na linha de comando, se não forem fornecidos em um <PropertyGroup> em seu arquivo de projeto. A seguinte tabela lista alguns dos parâmetros comuns:

Parâmetro Valor
-p:ApplicationTitle O nome visível do usuário para o aplicativo.
-p:ApplicationId O identificador exclusivo do aplicativo, como com.companyname.mymauiapp.
-p:ApplicationVersion A versão de build que identifica uma iteração do aplicativo.
-p:ApplicationDisplayVersion O número de versão do aplicativo.
-p:RuntimeIdentifier O RID (identificador de runtime) para o projeto. Use ios-arm64.
-p:ArchiveOnBuild Um valor booliano que indica se o arquivo do aplicativo deve ser produzido. Use true para produzir o .ipa.
-p:CodesignKey O nome da chave de assinatura de código.
-p:CodesignProvision O perfil de provisão a ser usado ao assinar o pacote do aplicativo.
-p:CodesignEntitlements O caminho para o arquivo de direitos que especifica os direitos exigidos pelo aplicativo.

Para obter uma lista completa das propriedades de compilação, consulte as Propriedades de arquivo do Project.

Importante

Os valores desses parâmetros não precisam ser fornecidos na linha de comando. Eles também podem ser fornecidos no arquivo de projeto. Quando um parâmetro é fornecido na linha de comando e no arquivo de projeto, o parâmetro de linha de comando tem precedência. Para obter mais informações sobre como fornecer propriedades de build em seu arquivo de projeto, consulte Definir propriedades de build em seu arquivo de projeto.

Por exemplo, use o seguinte comando para criar e assinar um .ipa em um 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"

Observação

No .NET 8, o comando dotnet publish usa como padrão a configuração Release. Portanto, a configuração de build pode ser omitida da linha de comando. Além disso, o comando dotnet publish também tem como padrão o comando ios-arm64 RuntimeIdentifier. Portanto, o RuntimeIdentifier também pode ser omitido da linha de comando.

A publicação compila e assina o aplicativo e copia o .ipa para a pasta bin/Release/net8.0-ios/ios-arm64/publish/. O canal de distribuição do aplicativo é especificado no certificado de distribuição contido no perfil de provisão. Para obter informações sobre como criar perfis de provisão para os diferentes canais de distribuição, consulte Publicar um aplicativo iOS para distribuição do App Store, Publicar um aplicativo iOS para distribuição ad hoc e Publicar um aplicativo iOS para distribuição internamente.

Para obter mais informações sobre o comando dotnet publish, consulte dotnet publish.

Definir propriedades de build em seu arquivo de projeto

Uma alternativa para especificar parâmetros de build na linha de comando é especificá-los em seu arquivo de projeto em um <PropertyGroup>. A seguinte tabela lista algumas das propriedades de build comuns:

Propriedade Valor
<ApplicationTitle> O nome visível do usuário para o aplicativo.
<ApplicationId> O identificador exclusivo do aplicativo, como com.companyname.mymauiapp.
<ApplicationVersion> A versão de build que identifica uma iteração do aplicativo.
<ApplicationDisplayVersion> O número de versão do aplicativo.
<RuntimeIdentifier> O RID (identificador de runtime) para o projeto. Use ios-arm64.
<ArchiveOnBuild> Um valor booliano que indica se o arquivo do aplicativo deve ser produzido. Use true para produzir o .ipa.
<CodesignKey> O nome da chave de assinatura de código.
<CodesignProvision> O perfil de provisão a ser usado ao assinar o pacote do aplicativo.
<CodesignEntitlements> O caminho para o arquivo de direitos que especifica os direitos exigidos pelo aplicativo.

Para obter uma lista completa das propriedades de compilação, consulte as Propriedades de arquivo do Project.

Importante

Os valores dessas propriedades de build não precisam ser fornecidos no arquivo de projeto. Eles também podem ser fornecidos na linha de comando quando você publica o aplicativo. Isso permite omitir valores específicos do arquivo de projeto.

O exemplo a seguir mostra um grupo de propriedades típico para compilar e assinar seu aplicativo iOS com seu perfil de provisão:

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

Este <PropertyGroup> de exemplo adiciona uma verificação de condição, impedindo que as configurações sejam processadas, a menos que a verificação de condição passe. A verificação de condição procura dois itens:

  1. A estrutura de destino é definida como algo que contém o texto -ios.
  2. A configuração de build é definida como Release.

Se uma destas condições falhar, as configurações não serão processadas. Mais importante, as configurações <CodesignKey> e <CodesignProvision> não são definidas, impedindo que o aplicativo seja assinado.

Publicar um aplicativo iOS do Windows

A criação de aplicativos iOS nativos usando o .NET MAUI requer acesso às ferramentas de compilação da Apple, que são executadas apenas em um Mac. Por isso, o Visual Studio 2022 deve se conectar a um Mac acessível à rede para compilar aplicativos iOS do .NET MAUI. Para obter mais informações, consulte Emparelhar com Mac para desenvolvimento para iOS.

Observação

Na primeira vez que o Emparelhamento com Mac faz logon em um host de compilação do Mac do Visual Studio 2022, ele configura as chaves SSH. Com essas chaves, logons futuros não exigirão um nome de usuário ou senha.

Para publicar seu aplicativo na linha de comando no Windows, abra um terminal e navegue até a pasta do projeto de aplicativo .NET MAUI. Execute o comando dotnet publish, fornecendo os mesmos parâmetros de linha de comando ou propriedades de compilação no arquivo de projeto, que você forneceria ao publicar de um Mac. Além disso, forneça os seguintes parâmetros de linha de comando:

Parâmetro Valor
-p:ServerAddress O endereço IP do host de compilação do Mac.
-p:ServerUser O nome de usuário a ser usado ao fazer logon no host de compilação do Mac. Use seu nome de usuário do sistema em vez do nome completo.
-p:ServerPassword A senha do nome de usuário usado para fazer logon no host de compilação do Mac.
-p:TcpPort A porta TCP a ser usada para se comunicar com o host de compilação do Mac, que é 58181.
-p:_DotNetRootRemoteDirectory A pasta no host de compilação do Mac que contém o SDK do .NET. Use /Users/{macOS username}/Library/Caches/Xamarin/XMA/SDKs/dotnet/.

Importante

Os valores desses parâmetros também podem ser fornecidos no arquivo de projeto como propriedades de compilação. No entanto, valores para <ServerAddress>, <ServerUser>, <ServerPassword> e <_DotNetRootRemoteDirectory> normalmente serão fornecidos na linha de comando por motivos de segurança.

Por exemplo, use o seguinte comando para compilar e assinar um .ipa do 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/

Observação

No .NET 8, o comando dotnet publish usa como padrão a configuração Release. Portanto, a configuração de build pode ser omitida da linha de comando. Além disso, o comando dotnet publish também tem como padrão o comando ios-arm64 RuntimeIdentifier. Portanto, o RuntimeIdentifier também pode ser omitido da linha de comando.

Observação

Se o parâmetro ServerPassword for omitido de uma invocação de compilação de linha de comando, Emparelhar com Mac tentará fazer logon no host de compilação do Mac usando suas chaves SSH salvas.

A publicação compila e assina o aplicativo e copia o .ipa para a pasta bin\Release\net8.0-ios\ios-arm64\publish no computador do Windows. O canal de distribuição do aplicativo é especificado no certificado de distribuição contido no perfil de provisão. Para obter informações sobre como criar perfis de provisão de distribuição para os diferentes canais de distribuição, consulte Publicar um aplicativo iOS para distribuição do App Store, Publicar um aplicativo iOS para distribuição ad hoc e Publicar um aplicativo iOS para distribuição internamente

Durante o processo de publicação, talvez seja necessário permitir codesign para execução no Mac emparelhado:

Permitir que o codesign assine seu aplicativo no Mac emparelhado.

Solucionar problemas de uma compilação remota

Se um RuntimeIdentifier não for especificado ao compilar remotamente a partir da linha de comando no Windows, a arquitetura do computador Windows será usada. Isso ocorre porque o RuntimeIdentifier precisa ser definido no início do processo de compilação, antes que a compilação possa se conectar ao Mac para derivar sua arquitetura.

Se um RuntimeIdentifier não for especificado ao compilar remotamente usando o Visual Studio no Windows, o IDE detectará a arquitetura do Mac remoto e a definirá adequadamente. Substituir o padrão pode ser alcançado definindo a propriedade de compilação $(ForceSimulatorX64ArchitectureInIDE):

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

Distribuir o aplicativo

O arquivo .ipa pode ser distribuído com uma das seguintes abordagens: