Compartilhar via


Publicar um aplicativo Mac Catalyst para distribuição fora da Mac App Store

Uma alternativa à distribuição de aplicativos Mac Catalyst na Mac App Store é distribuí-los fora da Mac App Store. Com essa abordagem, seu aplicativo Mac Catalyst pode ser hospedado em um local de sua escolha para download. Os membros do Programa de Desenvolvedor da Apple e do Programa de Desenvolvedor da Apple para Empresas podem usar essa abordagem de distribuição.

A distribuição de um aplicativo Mac Catalyst requer que o aplicativo seja provisionado usando um perfil de provisionamento. Perfis de provisionamento são arquivos que contêm informações de assinatura de código, bem como a identidade do aplicativo e seu mecanismo de distribuição pretendido.

Para distribuir um aplicativo Mac Catalyst .NET MAUI (.NET Multi-platform App UI) fora da App Store do Mac, você precisará criar um perfil de provisionamento de distribuição específico para ele. Este perfil permite que o aplicativo seja assinado digitalmente para lançamento para que ele possa ser instalado em Macs. Um perfil de provisionamento de distribuição contém uma ID do Aplicativo e um certificado de aplicativo de ID de desenvolvedor. Você precisará criar um certificado de aplicativo de ID de desenvolvedor para identificar a si mesmo ou sua organização, se ainda não tiver um. Além disso, você precisará criar um certificado de instalador de ID de desenvolvedor para assinar o pacote de instalação do aplicativo.

O processo de provisionamento de um aplicativo Mac Catalyst do .NET MAUI para distribuição fora da Mac App Store é o seguinte:

  1. Criar duas solicitações de assinatura de certificado. Para mais informações, consulte Criar uma solicitação de assinatura de certificado.
  2. Criar um certificado de aplicativo de ID de desenvolvedor. Para mais informações, confira Criar um certificado de aplicativo de ID de desenvolvedor.
  3. Criar um certificado de instalador de ID de desenvolvedor. Para mais informações, confira Criar um certificado de instalador de desenvolvedor.
  4. Crie uma ID do Aplicativo. Para obter mais informações, confira Criar uma ID do aplicativo.
  5. Crie um perfil de provisão. Para obter mais informações, confira Criar um perfil de provisão.
  6. Baixar o perfil de provisionamento. Para mais informações, consulte Baixar o perfil de provisionamento no Xcode.

Importante

Este artigo mostra como provisionar a distribuição fora da Mac App Store usando uma conta de desenvolvedor da Apple que faz parte do Programa de Desenvolvedor da Apple. Ele também pode ser usado para uma conta de desenvolvedor da Apple que faz parte do Programa de Desenvolvedor da Apple para Empresas, pois as etapas necessárias são praticamente idênticas.

Em seguida, finalizado o provisionamento, você deverá preparar o aplicativo para publicação, publicá-lo e autenticá-lo com o seguinte processo:

  1. Você tem a opção de adicionar direitos ao aplicativo. Para mais informações, confira Adicionar direitos.
  2. Atualizar o arquivo Info.plist do aplicativo. Para mais informações,consulte Atualizar Info.plist.
  3. Desativar a verificação de assinatura por código para seu aplicativo. Para mais informações, confira Desativar a verificação de assinatura por código.
  4. Publicar um aplicativo usando a linha de comando. Para mais informações, consulte Publicar usando a linha de comando.
  5. Autenticar o aplicativo. Para mais informações, confira Autenticar o aplicativo.

Criar uma solicitação de assinatura de certificado

Antes de criar um certificado de distribuição, primeiro você precisa criar uma CSR (solicitação de assinatura de certificado) no acesso ao conjunto de chaves em um Mac:

  1. Em seu Mac, inicie Acesso ao Conjunto de Chaves.

  2. No item de menu Acesso ao conjunto de chaves, selecione Acesso ao conjunto de chaves > Assistente de certificado > Solicitar um certificado a uma Autoridade de Certificação...

  3. Na caixa de diálogo Assistente de certificado, insira um endereço de email no campo Endereço de email do usuário.

  4. Na caixa de diálogo Assistente de certificado, insira um nome para a chave no campo Nome comum.

  5. Na caixa de diálogo Assistente de Certificado, deixe o campo Endereço de Email da AC vazio.

  6. Na caixa de diálogo Assistente de certificado, escolha o botão de opção Salvo no disco e clique em Continuar:

    Caixa de diálogo do assistente de certificado.

  7. Salve a solicitação de assinatura de certificado em um local conhecido.

  8. Na caixa de diálogo Assistente de certificado, clique no botão Concluído.

  9. Feche o Acesso ao conjunto de chaves.

Repita esse processo para criar uma segunda solicitação de assinatura de certificado. O primeiro CSR será usado para criar um certificado de aplicativo de ID de desenvolvedor. O segundo será usado para criar um certificado de instalador de ID de desenvolvedor.

Importante

Você não pode usar a mesma solicitação de assinatura de certificado para criar um certificado de aplicativo de ID de desenvolvedor e um certificado de instalador de ID de desenvolvedor.

Criar um certificado de aplicativo de ID de desenvolvedor

O CSR permite gerar um certificado de ID de desenvolvedor, que confirma a sua identidade. O certificado de ID de desenvolvedor deve ser criado usando a ID da Apple da sua Conta de desenvolvedor da Apple.

  1. Em um navegador da Web, faça logon na sua Conta de desenvolvedor da Apple.

  2. Na sua Conta de desenvolvedor da Apple, selecione a guia Certificados, IDs e Perfis.

  3. Na página Certificados, Identificadores e Perfis, clique no botão + para criar um certificado.

  4. Na página Criar Novo Certificado, clique no botão de opção Aplicativo da ID do Desenvolvedor antes de clicar no botão Continuar:

    Criar um certificado de aplicativo de ID de desenvolvedor.

  5. Na página Criar certificado, clique no botão de opção Sub-CA G2 e depois em Escolher Arquivo:

    Carregue sua solicitação de assinatura de certificado para um certificado de aplicativo de ID de desenvolvedor.

  6. Na caixa de diálogo Escolher arquivos para carregar, selecione o arquivo de solicitação do primeiro certificado que você criou anteriormente (um arquivo com uma extensão de arquivo .certSigningRequest) e selecione Carregar.

  7. Na página Criar certificado, clique no botão Continuar:

    Continue gerando o certificado de distribuição.

  8. Na página Baixar certificado, clique no botão Baixar:

    Baixe seu certificado de aplicativo de ID de desenvolvedor.

    O arquivo de certificado (um arquivo com uma extensão .cer) será baixado no local escolhido.

  9. No Mac, clique duas vezes no arquivo de certificado baixado para instalar o certificado no conjunto de chaves. O certificado aparecerá na categoria Meus Certificados em Acesso ao conjunto de chaves e começará com Aplicativo de ID de desenvolvedor:

    Acesso ao conjunto de chaves mostrando o certificado do aplicativo de ID de desenvolvedor.

    Observação

    Anote o nome completo do certificado no Acesso ao conjunto de chaves. Você precisa dele ao assinar o aplicativo.

Criar um certificado de instalador de ID de desenvolvedor

O CSR permite gerar um certificado de instalador de ID de desenvolvedor, que é necessário para assinar o pacote do instalador do aplicativo. O certificado do instalador deve ser criado usando a ID da Apple da sua conta de desenvolvedor da Apple:

  1. Na sua Conta de desenvolvedor da Apple, selecione a guia Certificados, IDs e Perfis.

  2. Na página Certificados, Identificadores e Perfis, clique no botão + para criar um certificado.

  3. Na página Criar certificado, clique no botão de opção Instalador de ID de desenvolvedor antes de clicar no botão Continuar:

    Criar um certificado do instalador de ID de desenvolvedor.

  4. Na página Criar certificado, clique no botão de opção Sub-CA G2 e depois em Escolher Arquivo:

    Carregar sua solicitação de assinatura de certificado para um certificado do instalador de ID de desenvolvedor.

  5. Na caixa de diálogo Escolher arquivos para carregar, selecione o segundo arquivo de solicitação de certificado que você criou anteriormente (um arquivo com uma extensão de arquivo .certSigningRequest) e selecione Carregar.

  6. Na página Criar certificado, clique no botão Continuar:

    Continue gerando o certificado do instalador.

  7. Na página Baixar certificado, clique no botão Baixar:

    Baixe o certificado de distribuição.

    O arquivo de certificado (um arquivo com uma extensão .cer) será baixado no local escolhido.

  8. No Mac, clique duas vezes no arquivo de certificado baixado para instalar o certificado no conjunto de chaves. O certificado aparecerá na categoria Meus Certificados em Acesso ao conjunto de chaves e começará com Instalador de ID de desenvolvedor:

    Acesso ao conjunto de chaves mostrando o certificado do instalador.

    Observação

    Anote o nome completo do certificado no Acesso ao conjunto de chaves. Você precisa dele ao assinar o aplicativo.

Criar um perfil de distribuição

Um perfil de provisionamento de distribuição permite que seu aplicativo Mac Catalyst do .NET MAUI seja assinado digitalmente para lançamento, para que ele possa ser instalado em outro Mac. Um perfil de provisionamento para distribuição fora da Mac App Store contém uma ID do aplicativo e um certificado de aplicativo de ID de desenvolvedor.

Criar uma ID do Aplicativo

Uma ID do Aplicativo é necessária para identificar o aplicativo que você está distribuindo. Uma ID do Aplicativo é semelhante a uma cadeia de caracteres DNS reversa, que identifica exclusivamente um aplicativo e deve ser idêntica ao identificador de pacote do aplicativo. Você pode usar a mesma ID do Aplicativo usada ao implantar seu aplicativo em um dispositivo para teste.

Há dois tipos de ID do Aplicativo:

  • Curinga. Uma ID do Aplicativo curinga permite que você use uma única ID do Aplicativo para corresponder a vários aplicativos, e normalmente usa o formato com.domainname.*. Uma ID do Aplicativo curinga pode ser usada para distribuir vários aplicativos e deve ser usada para aplicativos que não habilitam recursos específicos do aplicativo.
  • Explícita. Uma ID do Aplicativo explícita é exclusiva de um único aplicativo e normalmente usa o formato com.domainname.myid. Uma ID do Aplicativo explícita permite a distribuição de um aplicativo, com um identificador de pacote correspondente. IDs do Aplicativo explícitas normalmente são usadas para aplicativos que habilitam recursos específicos do aplicativo, como Apple Pay ou Game Center. Para obter mais informações sobre recursos, confira Recursos.

Para criar uma nova ID do Aplicativo:

  1. Em sua Conta de desenvolvedor da Apple, navegue até Certificados, IDs e Perfis.

  2. Na página Certificados, Identificadores e Perfis, selecione a guia Identificadores.

  3. Na página Identificadores, clique no botão + para criar uma nova ID do aplicativo.

  4. Na página Registrar novo identificador, clique no botão de opção IDs do aplicativo antes de clicar no botão Continuar:

    Crie uma ID do Aplicativo.

  5. Na página Registrar novo identificador, selecione Aplicativo antes de clicar no botão Continuar:

    Registrar um ID de aplicativo.

  6. Na página Registrar uma ID do Aplicativo, insira uma descrição e selecione o botão de opção de ID do Pacote Explícito ou Curinga. Em seguida, insira a ID do Pacote para o seu aplicativo no formato DS inverso:

    Especifique o identificador de pacote para o aplicativo.

    Importante

    A ID do Pacote inserida deve corresponder ao Identificador de pacote no arquivo Info.plist em seu projeto de aplicativo.

    O identificador de pacote para um aplicativo do .NET MAUI é armazenado no arquivo de projeto como a propriedade da ID do Aplicativo. No Visual Studio, no Gerenciador de Soluções, clique com o botão direito do mouse em seu projeto de aplicativo .NET MAUI e selecione Propriedades. Em seguida, navegue até a guia Geral > Compartilhado MAUI. O campo ID do Aplicativo lista o identificador do pacote.

    Quando o valor do campo ID do Aplicativo for atualizado, o valor do Identificador do pacote no arquivo Info.plist será atualizado automaticamente.

  7. Na página Registrar uma ID do Aplicativo, selecione todos os recursos usados pelo aplicativo. Todos os recursos devem ser configurados nesta página e no arquivo Entitlements.plist em seu projeto de aplicativo. Para obter mais informações, confira Recursos e Direitos.

  8. Na página Registrar uma ID do aplicativo, clique no botão Continuar.

  9. Na página Confirmar ID do aplicativo, clique no botão Registrar.

Criar um perfil de provisão

Depois que a ID do Aplicativo tiver sido criada, você deverá criar um perfil de provisão de distribuição. Este perfil permite que o aplicativo seja assinado digitalmente para lançamento para que ele possa ser instalado em Macs.

Para criar um perfil de provisionamento para distribuição fora da Mac App Store:

  1. Na página Certificados, Identificadores e Perfis da sua Conta de Desenvolvedor da Apple, selecione a guia Perfis.

  2. Na guia Perfis, clique no botão + para criar um novo perfil.

  3. Na página Registrar um Novo Perfil de Provisionamento, clique no botão de opção ID de Desenvolvedor antes de clicar no botão Continuar:

    Registrar um perfil de provisionamento para distribuição fora da App Store.

  4. Na página Gerar um perfil de provisionamento, clique no botão de opção Mac Catalyst. Depois, na lista suspensa ID do aplicativo, selecione a ID do aplicativo que você criou anteriormente antes de clicar no botão Continuar:

    Selecione a ID do Aplicativo.

  5. Na página Gerar um perfil de provisão, selecione o botão de opção que corresponde ao certificado de distribuição antes de clicar no botão Continuar:

    Selecione o seu certificado de distribuição.

  6. Na página Gerar um perfil de provisão, insira um nome para o perfil de provisão antes de clicar no botão Gerar:

    Gere o perfil de provisão.

    Observação

    Anote o nome do perfil de provisão, pois ele será necessário ao assinar o seu aplicativo.

  7. Na página Gerar um perfil de provisão, opcionalmente, clique no botão Baixar para baixar o seu perfil de provisão.

    Observação

    Não é necessário baixar oseu perfil de provisão agora. Você fará isso no Xcode.

Baixar o perfil de provisionamento no Xcode

Depois de criar um perfil de provisionamento na sua Conta de desenvolvedor da Apple, o Xcode poderá baixá-lo para que ele esteja disponível para assinar o seu aplicativo:

  1. No Mac, inicie o Xcode.

  2. No Xcode, clique no item de menu Preferências > do Xcode....

  3. Na caixa de diálogo Preferências, selecione a guia Contas.

  4. Na guia Contas, clique no botão + para adicionar sua Conta de desenvolvedor da Apple ao Xcode:

    Caixa de diálogo Contas do Xcode nas preferências.

  5. No pop-up do tipo de conta, selecione ID da Apple e clique no botão Continuar :

    Xcode selecione o tipo de conta que você quer adicionar o pop-up.

  6. No pop-up de login, digite seu ID da Apple e clique no botão Avançar.

  7. No pop-up de login, digite a senha do seu ID da Apple e clique no botão Avançar:

    Entrada da conta Apple no Xcode

  8. Na guia Contas, clique no botão Gerenciar certificados... para confirmar se o certificado de distribuição foi baixado.

  9. Na guia Contas, clique no botão Baixar perfis manuais para baixar seus perfis de provisionamento:

    Detalhes da conta do Programa de Desenvolvedor da Apple no Xcode.

  10. Aguarde a conclusão do download e feche o Xcode.

Adicionar direitos

A área restrita do aplicativo da Apple restringe o acesso aos recursos do sistema e aos dados do usuário em aplicativos Mac para conter danos se um aplicativo for comprometido. Opcionalmente, ela pode ser ativada para aplicativos Mac Catalyst distribuídos fora da Mac App Store.

Isso pode ser feito adicionando um arquivo Entitlements.plist à pasta Platforms/MacCatalyst do seu projeto do aplicativo do .NET MAUI:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>com.apple.security.app-sandbox</key>
    <true/>
  </dict>
</plist>

O direito da área restrita do aplicativo é definido usando a chave com.apple.security.app-sandbox, do tipo boolean. Para informações sobre a área restrita do aplicativo, consulte Proteção dos dados do usuário com a área restrita do aplicativo em developer.apple.com. Para informações sobre o direito da área restrita do aplicativo, consulte Direito da área restrita do aplicativo.

Se o aplicativo abrir conexões de rede de saída, você também precisará adicionar a chave com.apple.security.network.client, do tipo boolean, ao arquivo Entitlements.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>com.apple.security.app-sandbox</key>
    <true/>
    <key>com.apple.security.network.client</key>
    <true/>
  </dict>
</plist>

Para informações sobre o direito a conexões de rede de saída, veja com.apple.security.network.client em developer.apple.com.

Atualizar Info.plist

Antes de publicar o aplicativo, você deve atualizar o arquivo Info.plist com informações adicionais.

Especificar o idioma da interface do usuário

Um aplicativo Mac Catalyst pode ser executado no idioma da interface do usuário do iPad ou Mac:

  • O idioma da interface do usuário do iPad informa ao macOS para dimensionar a interface do usuário do aplicativo para corresponder ao ambiente de exibição do Mac, preservando a aparência do iPad.
  • O idioma da interface do usuário do Mac não dimensiona a interface do usuário do aplicativo para corresponder ao ambiente de exibição do Mac. Alguns controles mudam o tamanho e a aparência, e interagir com eles parece idêntico a interagir com controles AppKit.

Por padrão, os aplicativos Mac Catalyst do .NET MAUI usam o idioma da interface do usuário do iPad. Se esse for o comportamento desejado, verifique se o arquivo Info.plist do aplicativo especifica apenas 2 como o valor da chave UIDeviceFamily:

<key>UIDeviceFamily</key>
<array>
  <integer>2</integer>
</array>

Para adotar o idioma da interface do usuário do Mac, atualize o arquivo Info.plist do aplicativo para especificar 6 como o valor da chave UIDeviceFamily:

<key>UIDeviceFamily</key>
<array>
  <integer>6</integer>
</array>

Para mais informações sobre idiomas da interface do usuário do Mac Catalyst, consulte Especificar o idioma da interface do usuário para seu aplicativo Mac Catalyst.

Definir o idioma e a região padrão do aplicativo

Defina a chave CFBundleDevelopmentRegion no Info.plist do aplicativo como uma string que represente a região de desenvolvimento nativa de localização:

<key>CFBundleDevelopmentRegion</key>
<string>en</string>

O valor da chave deve ser um designador de idioma, com um designador de região opcional. Para mais informações, consulte CFBundleDevelopmentRegion em developer.apple.com.

Defina a chave NSHumanReadableCopyright no Info.plist do seu aplicativo como um string que represente a notificação de direitos autorais legível por humanos para seu aplicativo:

<key>NSHumanReadableCopyright</key>
<string>MyMauiApp © 2023</string>

Para mais informações, consulte NSHumanReadableCopyright em developer.apple.com.

Declarar o uso de criptografia do aplicativo

Se o aplicativo usa criptografia e você planeja distribuí-lo fora dos Estados Unidos ou do Canadá, ele está sujeito aos requisitos de conformidade de exportação dos EUA. Você pode fornecer informações sobre o uso de criptografia do aplicativo no arquivo Info.plist.

Isso é feito adicionando a chave ITSAppUsesNonExemptEncryption ao Info.plist do aplicativo com um valor boolean que indica se o aplicativo usa criptografia:

<key>ITSAppUsesNonExemptEncryption</key>
<false/>

Para mais informações, consulte Conformidade com os regulamentos de exportação de criptografia em developer.apple.com.

Desativar a verificação de assinatura por código

Atualmente, ao tentar publicar um aplicativo Mac Catalyst do .NET MAUI para distribuição fora da Mac App Store, tendo atendido aos requisitos de provisionamento, você receberá um erro sobre codesign sair com o código 3:

/usr/local/share/dotnet/packs/Microsoft.MacCatalyst.Sdk/16.2.1040/tools/msbuild/iOS/Xamarin.Shared.targets(1930,3): error MSB6006: "codesign" exited with code 3. [/Users/davidbritch/Projects/MyMauiApp/MyMauiApp/MyMauiApp.csproj::TargetFramework=net8.0-maccatalyst]

Embora codesign consiga assinar seu aplicativo, o destino _CodesignVerify não consegue verificar a assinatura do código:

test-requirement: code failed to satisfy specified code requirement(s)

Devido a essa falha, não é produzido um arquivo .pkg.

Portanto, no momento é necessário adicionar o seguinte destino de build ao final do arquivo de projeto para desabilitar a verificação da assinatura do código:

<Project Sdk="Microsoft.NET.Sdk">
  ...
  <Target Name="_SkipCodesignVerify" BeforeTargets="_CodesignVerify" AfterTargets="_CodesignAppBundle">  
    <PropertyGroup>    
      <_RequireCodeSigning>false</_RequireCodeSigning>  
    </PropertyGroup>
  </Target>
</Project>

Publicar usando a linha de comando

Para publicar seu aplicativo Mac Catalyst pela linha de comando no Mac, abra um terminal e navegue até a pasta do projeto do aplicativo do .NET MAUI. Execute o comando dotnet publish, fornecendo os seguintes parâmetros:

Parâmetro Valor
-f ou --framework A estrutura de destino, que é net8.0-maccatalyst.
-c ou --configuration A configuração do build, que é Release.
-p:MtouchLink O modo de link do projeto, que pode ser None, SdkOnly ou Full.
-p:CreatePackage Defina como true para que um pacote (.pkg) seja criado para o aplicativo no final do build.
-p:EnableCodeSigning Defina como true para que a assinatura de código seja habilitada.
-p:EnablePackageSigning Defina como true para que o pacote criado seja assinado.
-p:CodesignKey O nome da chave de assinatura de código. Defina como o nome do seu certificado de distribuição, conforme exibido em Acesso ao conjunto de chaves.
-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. Defina como Platforms\MacCatalyst\Entitlements.plist.
-p:PackageSigningKey A chave de assinatura do pacote a ser usada ao assinar o pacote. Defina como o nome do certificado do instalador, conforme exibido em Acesso ao conjunto de chaves.
-p:RuntimeIdentifier O RID (identificador de runtime) para o projeto. As compilações de versão dos aplicativos Mac Catalyst do .NET MAUI usam por padrão maccatalyst-x64 e maccatalyst-arm64 como identificadores de runtime para dar suporte a aplicativos universais. Para oferecer suporte a apenas uma única arquitetura, especifique maccatalyst-x64 ou maccatalyst-arm64.
-p:UseHardenedRuntime Defina como true para ativar o runtime protegido, que é necessário para aplicativos Mac Catalyst distribuídos fora da Mac App Store.

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. As compilações de versão dos aplicativos Mac Catalyst do .NET MAUI usam por padrão maccatalyst-x64 e maccatalyst-arm64 como identificadores de runtime para dar suporte a aplicativos universais. Para oferecer suporte a apenas uma única arquitetura, especifique maccatalyst-x64 ou maccatalyst-arm64.

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

Importante

Os valores de todos esses 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 arquivo .pkg em um Mac para distribuição fora da Mac App Store:

dotnet publish -f net8.0-maccatalyst -c Release -p:MtouchLink=SdkOnly -p:CreatePackage=true -p:EnableCodeSigning=true -p:EnablePackageSigning=true -p:CodesignKey="Developer ID Application: John Smith (AY2GDE9QM7)" -p:CodesignProvision="MyMauiApp (Non-App Store)" -p:CodesignEntitlements="Platforms\MacCatalyst\Entitlements.plist" -p:PackageSigningKey="Developer ID Installer: John Smith (AY2GDE9QM7)" -p:UseHardenedRuntime=true

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.

A publicação compila, assina e empacota o aplicativo, e depois copia o .pkg para a pasta bin/Release/net8.0-maccatalyst/publish/. Se você publicar o aplicativo usando apenas uma única arquitetura, ele será publicado na pasta bin/Release/net8.0-maccatalyst/{architecture}/publish/.

Durante o processo de assinatura, pode ser necessário inserir sua senha de logon e permitir que codesign e productbuild executem:

Permitir que o codesign assine o aplicativo no Mac.Permitir que o productbuild assine seu aplicativo no seu Mac.

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.
<CodesignKey> O nome da chave de assinatura de código. Defina como o nome do seu certificado de distribuição, conforme exibido em Acesso ao conjunto de chaves.
<CodesignEntitlements> O caminho para o arquivo de direitos que especifica os direitos exigidos pelo aplicativo. Defina como Platforms\MacCatalyst\Entitlements.plist.
<CodesignProvision> O perfil de provisão a ser usado ao assinar o pacote do aplicativo.
<CreatePackage> Defina como true para que um pacote (.pkg) seja criado para o aplicativo no final do build.
<EnableCodeSigning> Defina como true para que a assinatura de código seja habilitada.
<EnablePackageSigning> Defina como true para que o pacote criado seja assinado.
<MtouchLink> O modo de link do projeto, que pode ser None, SdkOnly ou Full.
<PackageSigningKey> A chave de assinatura do pacote a ser usada ao assinar o pacote. Defina como o nome do certificado do instalador, conforme exibido em Acesso ao conjunto de chaves.
<RuntimeIdentifier> O RID (identificador de runtime) para o projeto. As compilações de versão dos aplicativos Mac Catalyst do .NET MAUI usam por padrão maccatalyst-x64 e maccatalyst-arm64 como identificadores de runtime para dar suporte a aplicativos universais. Para oferecer suporte a apenas uma única arquitetura, especifique maccatalyst-x64 ou maccatalyst-arm64.
<UseHardenedRuntime> Defina como true para ativar o runtime protegido, que é necessário para aplicativos Mac Catalyst distribuídos fora da Mac App Store.

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 criar e assinar seu aplicativo Mac Catalyst para distribuição fora da Mac App Store:

<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-maccatalyst|AnyCPU'">
  <MtouchLink>SdkOnly</MtouchLink>
  <EnableCodeSigning>True</EnableCodeSigning>
  <EnablePackageSigning>true</EnablePackageSigning>
  <CreatePackage>true</CreatePackage>
  <CodesignKey>Developer ID Application: John Smith (AY2GDE9QM7)</CodesignKey>
  <CodesignProvision>MyMauiApp (Non-App Store)</CodesignProvision>
  <CodesignEntitlements>Platforms\MacCatalyst\Entitlements.plist</CodesignEntitlements>
  <PackageSigningKey>Developer ID Installer: John Smith (AY2GDE9QM7)</PackageSigningKey>
  <UseHardenedRuntime>true</UseHardenedRuntime>
</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 configuração de build é definida como Release.
  2. A estrutura de destino é definida como algo que contém o texto net8.0-maccatalyst.
  3. A plataforma está definida como AnyCPU.

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

Depois de adicionar o grupo de propriedades acima, o aplicativo pode ser publicado pela linha de comando em um Mac abrindo um terminal e navegando até a pasta do projeto do aplicativo do .NET MAUI. Em seguida, execute o seguinte comando:

dotnet build -f net8.0-maccatalyst -c Release

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.

A publicação compila, assina e empacota o aplicativo, e depois copia o .pkg para a pasta bin/Release/net8.0-maccatalyst/publish/.

Autenticar o aplicativo

O macOS inclui uma tecnologia chamada Gatekeeper, que ajuda a garantir que apenas softwares confiáveis sejam executados em um Mac. Quando um usuário baixa e abre um pacote de instalação ou um aplicativo, o Gatekeeper verifica se o software é de um desenvolvedor identificado. Ele faz isso verificando se há um certificado de ID de desenvolvedor e se o software é autenticado pela Apple para estar livre de conteúdo malicioso conhecido e não foi alterado. Portanto, depois de provisionar e publicar seu aplicativo, você deve enviá-lo à Apple para ser autenticado. O serviço de autenticação da Apple verifica automaticamente seu aplicativo assinado por ID de desenvolvedor e realiza verificações de segurança. Quando a autenticação é bem-sucedida, seu software recebe um tíquete para informar ao Gatekeeper que ele foi autenticado.

Os aplicativos podem ser enviados ao serviço de autenticação da Apple com a ferramenta de linha de comando notarytool:

xcrun notarytool submit {my_package_filename} --wait --apple-id {my_apple_id} --password {my_app_specific_password} --team-id {my_team_id}

Um exemplo de como usar a ferramenta notarytool para assinar um arquivo .pkg Mac Catalyst do .NET MAUI é mostrado abaixo:

xcrun notarytool submit MyMauiApp-1.0.pkg --wait --apple-id johm.smith@provider.com --password fqtk-cprr-gqdt-bvyo --team-id AY2GDE9QM7

O sinalizador wait diz para notarytool sair somente depois que o serviço de autenticação terminar de processar o envio, eliminando assim a necessidade de sondar o serviço quanto a seu status. Os argumentos apple-id, password e team-id são usados para fornecer suas credenciais do App Store Connect. Como o App Store Connect requer autenticação de dois fatores, você deve criar uma senha específica do aplicativo para notarytool. Para informações sobre como criar uma senha específica do aplicativo, confira Entrar em aplicativos com a ID da Apple usando senhas específicas do aplicativo em developer.apple.com.

Depois de enviar seu aplicativo à Apple, o processo de autenticação normalmente leva menos de uma hora.

Observação

Para a maioria dos aplicativos, a autenticação é concluída em cinco minutos. Para informações sobre como evitar longos tempos de resposta do serviço de autenticação, consulte Evitar longos tempos de resposta de autenticação e limites de tamanho em developer.apple.com.

Se a autenticação for bem-sucedida, o serviço de autenticação gerará um tíquete para o pacote do instalador assinado e o pacote de aplicativos dentro dele.

Para mais informações sobre autenticação, consulte Autenticação do software macOS antes da distribuição. Para outras abordagens para enviar o aplicativo ao serviço de autenticação da Apple, confira Carregar o aplicativo no serviço de autenticação em developer.apple.com. Para informações sobre como resolver problemas comuns de autenticação, consulte Resolução de problemas comuns de autenticação.

Grampear o tíquete no seu aplicativo

A autenticação produz um tíquete para o pacote do instalador assinado e o lote de aplicativo dentro dele, que informa ao Gatekeeper que seu aplicativo está autenticado. Finalizada a autenticação, quando os usuários tentarem executar o aplicativo no macOS 10.14 ou posterior, o Gatekeeper localizará o tíquete online.

Feita a autenticação, você deverá anexar o tíquete ao aplicativo usando a ferramenta stapler. Isso garante que o Gatekeeper possa encontrar o tíquete mesmo quando não houver uma conexão de rede disponível. Execute o seguinte comando para anexar o tíquete ao .pkg:

xcrun stapler staple {filename}.pkg

A ferramenta stapler recuperará o tíquete e o anexará ao pacote do instalador. Feito o grampeamento, você receberá uma mensagem informando que a ação de grampear e validar funcionou.

Validar autenticação

Se você quer validar a autenticação, faça isso com o seguinte comando:

xcrun stapler validate mypackage.pkg

Distribuir seu aplicativo

O arquivo .pkg assinado e autenticado pode ser distribuído com segurança fora da Mac App Store em um local de sua escolha, como um servidor Web.

Para informações sobre como abrir aplicativos com segurança em um Mac, consulte Abrir apps aplicativos segurança no seu Mac em support.apple.com.

Confira também