Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A publicação de aplicativos .NET para macOS requer várias etapas adicionais em comparação com outras plataformas, devido aos requisitos de segurança da Apple.
Pré-requisitos
Antes de publicar seu aplicativo .NET para macOS, verifique se você tem o seguinte:
- Conta de desenvolvedor Apple: necessária para assinatura de código e reconhecimento de firma.
-
Xcode Command Line Tools: Fornece
codesign,altoole outros utilitários. - SDK do .NET: verifique se você tem o SDK do .NET mais recente instalado.
Produza seu aplicativo usando o SDK do .NET
Use um dos métodos descritos na visão geral de publicação do aplicativo .NET para produzir um aplicativo. Você pode criar um aplicativo independente ou dependente da estrutura.
Assine e registre seu aplicativo
Use a documentação do desenvolvedor da Apple para assinar e registrar os binários nativos do aplicativo. O .NET cria um executável apphost nativo como o ponto de entrada para o seu aplicativo. Esse apphost deve ser assinado e, se seu aplicativo usa recursos especiais, ele deve receber os direitos apropriados.
Direitos para aplicações não publicadas como Nativo AOT
Para aplicações não publicadas como Nativo AOT, o com.apple.security.cs.allow-jit privilégio é necessário.
Direitos para aplicações publicadas como Nativo AOT
Para aplicativos publicados como AOT nativa, não são necessários direitos.
Permissões opcionais para depuração e diagnóstico
As seguintes permissões habilitam funcionalidades adicionais de depuração e diagnóstico:
-
com.apple.security.get-task-allow: Necessário para a coleta de despejo comcreatedumpedotnet dump. -
com.apple.security.cs.debugger: Necessário para anexar um depurador ao processo.
Advertência
A falha ao assinar e autenticar seu aplicativo pode resultar na falha do aplicativo durante a execução de uma operação restrita.
Binários universais
O macOS suporta binários universais: um único ficheiro Mach-O que contém código máquina para mais do que uma arquitetura de CPU. O macOS seleciona a fatia que corresponde ao processador atual, de modo que um ficheiro corre nativamente tanto em Apple Silicon (arm64) como em máquinas Intel (x64).
O .NET não produz binários universais diretamente. Em vez disso, publica a sua aplicação uma vez por arquitetura e funde os dois executáveis nativos com a ferramenta Apple lipo . Dois modos de publicação .NET produzem um executável nativo autónomo que pode fundir desta forma:
-
Aplicações de ficheiro único (
PublishSingleFile) -
Implementação nativa AOT (
PublishAot)
Publicar um binário universal de ficheiro único
Publique a aplicação uma vez por arquitetura em diretórios separados:
dotnet publish -c Release -r osx-arm64 --self-contained true \
-p:PublishSingleFile=true -o out/osx-arm64
dotnet publish -c Release -r osx-x64 --self-contained true \
-p:PublishSingleFile=true -o out/osx-x64
Depois junta os dois executáveis e volta a assinar o resultado:
mkdir -p out/universal
lipo -create -output out/universal/MyApp out/osx-arm64/MyApp out/osx-x64/MyApp
codesign --force --sign - out/universal/MyApp
Uma publicação autónoma de ficheiro único incorpora o tempo de execução, os assemblies geridos e as bibliotecas nativas no próprio executável, pelo que o ficheiro fundido é a aplicação completa. O binário universal é aproximadamente a soma das duas entradas.
Copie quaisquer ficheiros restantes de um dos diretórios de saída por arquitetura (por exemplo, appsettings.json ou ficheiros excluídos do pacote) ao lado do executável fundido.
Publique um binário universal AOT nativo
Os passos são os mesmos do ficheiro único, mas substituam as propriedades do ficheiro único por PublishAot:
dotnet publish -c Release -r osx-arm64 -p:PublishAot=true -o out/osx-arm64
dotnet publish -c Release -r osx-x64 -p:PublishAot=true -o out/osx-x64
mkdir -p out/universal
lipo -create -output out/universal/MyApp out/osx-arm64/MyApp out/osx-x64/MyApp
codesign --force --sign - out/universal/MyApp
O AOT nativo produz uma saída muito menor do que a publicação em ficheiro único, pelo que o binário universal também se mantém pequeno.
O AOT nativo também emite um MyApp.dSYM conjunto de símbolos de depuração por arquitetura. Para manter símbolos para ambas as fatias, manter os diretórios por arquitetura, ou fundir os DWARF binários dentro dos fibrados com lipo.