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

Uma alternativa à distribuição de aplicativos Mac Catalyst através da 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 Apple Developer Program e do Apple Developer Enterprise Program 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. Os 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 .NET Multi-platform App UI (.NET MAUI) Mac Catalyst fora da Mac App Store, você precisará criar um perfil de provisionamento de distribuição específico para ele. Esse perfil permite que o aplicativo seja assinado digitalmente para lançamento para que possa ser instalado em Macs. Um perfil de provisionamento de distribuição contém uma ID de 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 seu aplicativo.

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

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

Importante

Este artigo mostra o provisionamento para 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 Apple Developer Enterprise Program, pois as etapas necessárias são praticamente idênticas.

Em seguida, quando o provisionamento estiver concluído, você deve preparar seu aplicativo para publicação, publicá-lo e anotá-lo com o seguinte processo:

  1. Opcionalmente, adicione direitos ao seu aplicativo. Para obter mais informações, consulte Adicionar direitos.
  2. Atualize o arquivo Info.plist do aplicativo. Para obter mais informações, consulte Atualizar Info.plist.
  3. Desative a verificação de assinatura de código para seu aplicativo. Para obter mais informações, consulte Desabilitar a verificação de assinatura de código.
  4. Publique seu aplicativo usando a linha de comando. Para obter mais informações, consulte Publicar usando a linha de comando.
  5. Registre seu aplicativo. Para obter mais informações, consulte Notarize seu aplicativo.

Criar uma solicitação de assinatura de certificado

Antes de criar um certificado de distribuição, primeiro você precisará criar uma solicitação de assinatura de certificado (CSR) no Acesso às Chaves em um Mac:

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

  2. Em Acesso às Chaves, selecione o item de menu Assistente > de Certificado de Acesso > às Chaves Solicitar um Certificado de 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 CA vazio.

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

    Certificate assistant dialog.

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

  8. Na caixa de diálogo Assistente de Certificado, selecione o botão Concluído.

  9. Feche o Acesso às 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 do desenvolvedor. O segundo será usado para criar um certificado de instalador de ID de desenvolvedor.

Importante

Não é possível 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 do desenvolvedor

O CSR permite que você gere um certificado de ID de desenvolvedor, que confirma sua identidade. O certificado de ID de desenvolvedor deve ser criado usando o ID Apple para sua conta de desenvolvedor Apple:

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

  2. Na sua Conta de Programador Apple, selecione o separador Certificados, IDs e Perfis .

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

  4. Na página Criar um Novo Certificado, selecione o botão de opção Aplicativo de ID do Desenvolvedor antes de selecionar o botão Continuar:

    Create a Developer ID Application certificate.

  5. Na página Criar um Novo Certificado, selecione o botão de opção Sub-CA G2 e selecione Escolher Arquivo:

    Upload your certificate signing request for a Developer ID Application certificate.

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

  7. Na página Criar um Novo Certificado, selecione o botão Continuar:

    Continue to generate your distribution certificate.

  8. Na página Baixar seu certificado, selecione o botão Download:

    Download your Developer ID Application certificate.

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

  9. No Mac, clique duas vezes no arquivo de certificado baixado para instalar o certificado nas chaves. O certificado aparece na categoria Meus Certificados no Acesso às Chaves e começa com Aplicativo de ID do Desenvolvedor:

    Keychain Access showing Developer ID Application certificate.

    Observação

    Anote o nome completo do certificado no Acesso às Chaves. Ele será necessário ao assinar seu aplicativo.

Criar um certificado de instalador de ID de desenvolvedor

O CSR permite que você gere um certificado de instalador de ID de desenvolvedor, que é necessário para assinar o pacote de instalação do seu aplicativo. O certificado do instalador deve ser criado usando o ID Apple da sua conta de desenvolvedor Apple:

  1. Na sua Conta de Programador Apple, selecione o separador Certificados, IDs e Perfis .

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

  3. Na página Criar um Novo Certificado, selecione o botão de opção Instalador de ID do Desenvolvedor antes de selecionar o botão Continuar:

    Create a Developer ID Installer certificate.

  4. Na página Criar um Novo Certificado, selecione o botão de opção Sub-CA G2 e selecione Escolher Arquivo:

    Upload your certificate signing request for a Developer ID Installer certificate.

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

  6. Na página Criar um Novo Certificado, selecione o botão Continuar:

    Continue to generate your installer certificate.

  7. Na página Baixar seu certificado, selecione o botão Download:

    Download your distribution certificate.

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

  8. No Mac, clique duas vezes no arquivo de certificado baixado para instalar o certificado nas chaves. O certificado aparece na categoria Meus Certificados no Acesso às Chaves e começa com o Instalador da ID do Desenvolvedor:

    Keychain Access showing installer certificate.

    Observação

    Anote o nome completo do certificado no Acesso às Chaves. Ele será necessário ao assinar seu aplicativo.

Criar um perfil de distribuição

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

Criar uma ID do Aplicativo

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

Existem dois tipos de ID de aplicativo:

  • Curinga. Uma ID de Aplicativo curinga permite que você use uma única ID de Aplicativo para corresponder a vários aplicativos e, normalmente, assume a forma com.domainname.*. Uma ID de 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 de Aplicativo explícita é exclusiva de um único aplicativo e normalmente assume a forma com.domainname.myid. Uma ID de aplicativo explícita permite a distribuição de um aplicativo, com um identificador de pacote correspondente. Normalmente, os IDs de aplicativo explícitos são usados para aplicativos que habilitam recursos específicos do aplicativo, como o Apple Pay ou o Game Center. Para obter mais informações sobre recursos, consulte Recursos.

Para criar uma nova ID de Aplicativo:

  1. Na sua Conta de Programador Apple, navegue até Certificados, IDs e Perfis.

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

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

  4. Na página Registrar um novo identificador, selecione o botão de opção IDs de aplicativo antes de selecionar o botão Continuar:

    Create an App ID.

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

    Register an App ID.

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

    Specify the bundle identifier for the app.

    Importante

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

    O identificador de pacote para um aplicativo .NET MAUI é armazenado no arquivo de projeto como a propriedade 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 MAUI Shared > General . O campo ID do aplicativo lista o identificador do pacote.
    • No Visual Studio para Mac, na janela Solução, clique com o botão direito do mouse em seu projeto de aplicativo .NET MAUI e selecione Propriedades. Em seguida, na janela Propriedades do projeto, selecione a guia Criar > informações do aplicativo. O campo ID do aplicativo lista o identificador do pacote.

    Quando o valor do campo ID do aplicativo for atualizado, o valor do identificador de pacote no Info.plist será atualizado automaticamente.

  7. Na página Registrar uma ID do Aplicativo, selecione os recursos que o aplicativo usa. Todos os recursos devem ser configurados nesta página e no arquivo Entitlements.plist em seu projeto de aplicativo. Para obter mais informações, consulte Recursos e direitos.

  8. Na página Registrar uma ID de Aplicativo , selecione o botão Continuar .

  9. Na página Confirmar sua ID do Aplicativo, selecione o botão Registrar.

Criar um perfil de provisão

Depois que a ID do aplicativo tiver sido criada, você deverá criar um perfil de provisionamento de distribuição. Esse perfil permite que o aplicativo seja assinado digitalmente para lançamento para que 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 Programador Apple, selecione o separador Perfis .

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

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

    Register a provisioning profile distribution outside the App Store.

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

    Select your App ID.

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

    Select your distribution certificate.

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

    Generate the provisioning profile.

    Observação

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

  7. Na página Gerar um Perfil de Provisionamento, clique opcionalmente no botão Download para baixar seu perfil de provisionamento.

    Observação

    Não é necessário baixar seu perfil de provisionamento agora. Em vez disso, você fará isso no Xcode.

Baixe seu perfil de provisionamento no Xcode

Depois de criar um perfil de provisionamento em sua conta de desenvolvedor Apple, o Xcode pode baixá-lo para que esteja disponível para assinar seu aplicativo:

  1. No Mac, inicie o Xcode.

  2. No Xcode, selecione o 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 Apple ao Xcode:

    Xcode Accounts dialog in preferences.

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

    Xcode select the type of account you'd like to add popup.

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

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

    Xcode Apple account sign-in.

  8. Na guia Contas, clique no botão Gerenciar Certificados... para garantir que seu certificado de distribuição tenha sido baixado.

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

    Xcode Apple Developer Program account details.

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

Adicionar direitos

O App Sandbox da Apple restringe o acesso a recursos do sistema e dados do usuário em aplicativos Mac, para conter danos se um aplicativo for comprometido. Opcionalmente, ele pode ser ativado para aplicativos Mac Catalyst que são distribuídos fora da Mac App Store.

Isso pode ser feito adicionando um arquivo Entitlements.plist à pasta Platforms/MacCatalyst do seu projeto de aplicativo .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 App Sandbox é definido usando a com.apple.security.app-sandbox chave, do tipo boolean. Para obter informações sobre a Área Restrita de Aplicativos, consulte Protegendo dados do usuário com a Área Restrita de Aplicativos em developer.apple.com. Para obter informações sobre o direito de área restrita de aplicativo, consulte Direito de área restrita de aplicativo.

Se seu aplicativo abrir conexões de rede de saída, você também precisará adicionar a com.apple.security.network.client chave, 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 obter informações sobre o direito de conexões de rede de saída, consulte com.apple.security.network.client em developer.apple.com.

Atualizar Info.plist

Antes de publicar seu aplicativo, você deve atualizar seu 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 diz ao macOS para dimensionar a interface do usuário do aplicativo para corresponder ao ambiente de exibição do Mac, preservando a aparência semelhante ao 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 seu tamanho e aparência, e interagir com eles parece idêntico a interagir com AppKit controles.

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

<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 UIDeviceFamily chave:

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

Para obter mais informações sobre expressões idiomáticas 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 para o aplicativo

Defina a chave no Info.plist do seu aplicativo como uma string que representa a CFBundleDevelopmentRegion região de desenvolvimento nativa da 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 obter mais informações, consulte CFBundleDevelopmentRegion em developer.apple.com.

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

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

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

Declarar o uso de criptografia pelo seu aplicativo

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

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

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

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

Desativar verificação de assinatura de código

Atualmente, quando você tenta publicar um aplicativo .NET MAUI Mac Catalyst para distribuição fora da Mac App Store, desde que tenha 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 seja bem-sucedido na assinatura do aplicativo, o _CodesignVerify destino não consegue verificar a assinatura do código:

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

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

Portanto, atualmente é necessário adicionar o seguinte destino de compilação ao final do arquivo de projeto para desabilitar a verificação da assinatura de 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 a partir da linha de comando em um Mac, abra um terminal e navegue até a pasta do seu projeto de aplicativo .NET MAUI. Execute o dotnet publish comando, 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 de compilação, que é Release.
-p:MtouchLink O modo de link para o projeto, que pode ser None, SdkOnlyou Full.
-p:CreatePackage Defina como true para que um pacote (.pkg) seja criado para o aplicativo no final da compilação.
-p:EnableCodeSigning Defina como para que a true assinatura de código esteja 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 às Chaves.
-p:CodesignProvision O perfil de provisionamento a ser usado ao assinar o pacote de aplicativos.
-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 às Chaves.
-p:RuntimeIdentifier O identificador de tempo de execução (RID) para o projeto. Versões de aplicativos .NET MAUI Mac Catalyst padrão para usar maccatalyst-x64 e maccatalyst-arm64 como identificadores de tempo de execução, para oferecer suporte a aplicativos universais. Para oferecer suporte a apenas uma única arquitetura, especifique maccatalyst-x64 ou maccatalyst-arm64.
-p:UseHardenedRuntime Defina como true para habilitar o tempo de execução protegido, que é necessário para aplicativos Mac Catalyst distribuídos fora da Mac App Store.

Aviso

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

Parâmetros de compilação adicionais podem ser especificados na linha de comando, se não forem fornecidos em um arquivo de <PropertyGroup> projeto. A tabela a seguir 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 da compilação que identifica uma iteração do aplicativo.
-p:ApplicationDisplayVersion O número da versão do aplicativo.
-p:RuntimeIdentifier O identificador de tempo de execução (RID) para o projeto. Versões de aplicativos .NET MAUI Mac Catalyst padrão para usar maccatalyst-x64 e maccatalyst-arm64 como identificadores de tempo de execução, para oferecer 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 Propriedades do arquivo de projeto.

Importante

Os valores para 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 compilação em seu arquivo de projeto, consulte Definir propriedades de compilação em seu arquivo de projeto.

Por exemplo, use o seguinte comando para criar e assinar um .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 dotnet publish comando assume como padrão a Release configuração. Portanto, a configuração de compilação pode ser omitida da linha de comando.

A publicação compila, assina e empacota o aplicativo e, em seguida, 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 talvez seja necessário digitar sua senha de login e permitir codesign e productbuild executar:

Allow codesign to sign your app on your Mac.Allow productbuild to sign your app on your Mac.

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

Definir propriedades de compilação no arquivo de projeto

Uma alternativa para especificar parâmetros de compilação na linha de comando é especificá-los em seu arquivo de projeto em um <PropertyGroup>arquivo . A tabela a seguir lista algumas das propriedades de compilação 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 da compilação que identifica uma iteração do aplicativo.
<ApplicationDisplayVersion> O número da 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 às 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 provisionamento a ser usado ao assinar o pacote de aplicativos.
<CreatePackage> Defina como true para que um pacote (.pkg) seja criado para o aplicativo no final da compilação.
<EnableCodeSigning> Defina como para que a true assinatura de código esteja habilitada.
<EnablePackageSigning> Defina como true para que o pacote criado seja assinado.
<MtouchLink> O modo de link para o projeto, que pode ser None, SdkOnlyou 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 às Chaves.
<RuntimeIdentifier> O identificador de tempo de execução (RID) para o projeto. Versões de aplicativos .NET MAUI Mac Catalyst padrão para usar maccatalyst-x64 e maccatalyst-arm64 como identificadores de tempo de execução, para oferecer suporte a aplicativos universais. Para oferecer suporte a apenas uma única arquitetura, especifique maccatalyst-x64 ou maccatalyst-arm64.
<UseHardenedRuntime> Defina como true para habilitar o tempo de execução 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 Propriedades do arquivo de projeto.

Importante

Os valores para essas propriedades de compilação 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 que você omita 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 exemplo <PropertyGroup> adiciona uma verificação de condição, impedindo que as configurações sejam processadas, a menos que a verificação de condição seja aprovada. A verificação de condição procura dois itens:

  1. A configuração de compilação é 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 qualquer uma dessas condições falhar, as configurações não serão processadas. Mais importante, as <CodesignKey>configurações , e <PackageSigningKey> não estão definidas, <CodesignProvision>impedindo que o aplicativo seja assinado.

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

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

Observação

No .NET 8, o dotnet publish comando assume como padrão a Release configuração. Portanto, a configuração de compilação pode ser omitida da linha de comando.

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

Registre seu 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 verificando se o software está registrado em cartório pela Apple para estar livre de conteúdo mal-intencionado conhecido e não foi alterado. Portanto, depois de provisionar e publicar seu aplicativo, você deve enviá-lo à Apple para ser reconhecido em cartório. O serviço notariarial da Apple verifica automaticamente o aplicativo assinado pelo ID do desenvolvedor e realiza verificações de segurança. Quando o reconhecimento de firma é bem-sucedido, o software recebe um tíquete para informar ao Gatekeeper que ele foi reconhecido em cartório.

Os aplicativos podem ser enviados ao serviço de cartório da Apple com a ferramenta de linha de notarytool comando:

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 uso da notarytool ferramenta para assinar um arquivo de .pkg .NET MAUI Mac Catalyst é 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 wait sinalizador diz notarytool para sair somente depois que o serviço notarial terminar de processar o envio, eliminando assim a necessidade de sondar o serviço para seu status. Os apple-idargumentos , passworde 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 notarytoolo . Para obter informações sobre como criar uma senha específica do aplicativo, consulte Fazer login em aplicativos com seu ID Apple usando senhas específicas do aplicativo no developer.apple.com.

Depois de enviar seu aplicativo para a Apple, o processo de reconhecimento de firma normalmente leva menos de uma hora.

Observação

O reconhecimento de firma é concluído para a maioria dos aplicativos em 5 minutos. Para obter informações sobre como evitar longos tempos de resposta do serviço notarial, consulte Evitar longos tempos de resposta de reconhecimento de firma e limites de tamanho em developer.apple.com.

Desde que o reconhecimento de firma seja bem-sucedido, o serviço de cartório gera um tíquete para o pacote de instalação assinado e o pacote de aplicativos dentro dele.

Para obter mais informações sobre reconhecimento de firma, consulte Notarizando o software macOS antes da distribuição. Para outras abordagens para enviar seu aplicativo ao serviço notarial da Apple, consulte Carregar seu aplicativo para o serviço de reconhecimento de firma em developer.apple.com. Para obter informações sobre como resolver problemas comuns de reconhecimento de firma, consulte Resolvendo problemas comuns de reconhecimento de firma.

Grampear o ticket para seu aplicativo

A notarização produz um tíquete para o pacote do instalador assinado e o pacote de aplicativos dentro dele, que informa ao Gatekeeper que seu aplicativo está registrado em cartório. Após a conclusão do reconhecimento de firma, quando os usuários tentarem executar seu aplicativo no macOS 10.14 ou posterior, o Gatekeeper localizará o ticket online.

Após o reconhecimento de firma, você deve anexar o ticket ao seu aplicativo usando a stapler ferramenta. Isso garante que o Gatekeeper possa encontrar o tíquete mesmo quando uma conexão de rede não estiver disponível. Execute o seguinte comando para anexar o ticket ao seu .pkg:

xcrun stapler staple {filename}.pkg

A stapler ferramenta recupera o ticket e o anexa ao pacote do instalador. Você receberá uma mensagem informando que a ação de grampear e validar funcionou, desde que o grampeamento seja bem-sucedido.

Validar reconhecimento de firma

Se você quiser validar o reconhecimento de firma, você pode fazê-lo com o seguinte comando:

xcrun stapler validate mypackage.pkg

Distribuir seu aplicativo

Os .pkg assinados e autenticados podem ser distribuídos com segurança fora da Mac App Store em um local de sua escolha, como um servidor Web.

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

Confira também