Publier des applications .NET pour macOS

La publication d’applications .NET pour macOS nécessite plusieurs étapes supplémentaires par rapport à d’autres plateformes, en raison des exigences de sécurité d’Apple.

Prerequisites

Avant de publier votre application .NET pour macOS, vérifiez que vous disposez des éléments suivants :

  • Compte développeur Apple : nécessaire pour la signature de code et la notarisation.
  • Outils en ligne de commande Xcode : fournit codesign, altoolet d’autres utilitaires.
  • Kit de développement logiciel (SDK) .NET : vérifiez que le dernier KIT SDK .NET est installé.

Produire votre application à l’aide du Kit de développement logiciel (SDK) .NET

Utilisez l’une des méthodes décrites dans la vue d’ensemble de la publication d’applications .NET pour produire une application. Vous pouvez créer une application dépendante de l’infrastructure ou autonome.

Signer et notariser votre application

Utilisez la documentation du développeur d’Apple pour signer et notariser les fichiers binaires natifs de l’application. .NET crée un exécutable apphost natif comme point d’entrée pour votre application. Cet apphost doit être signé et, si votre application utilise des fonctionnalités spéciales, elle doit être affectée aux droits appropriés.

Droits pour les applications non publiées en tant que Native AOT

Pour les applications non publiées en tant que natif AOT, le com.apple.security.cs.allow-jit droit est requis.

Autorisations pour les applications publiées en tant qu'AOT natif

Pour les applications publiées en tant que AOT natif, aucun droit n’est requis.

Autorisations facultatives pour le débogage et les diagnostics

Les droits suivants permettent un débogage et des fonctionnalités de diagnostic supplémentaires :

  • com.apple.security.get-task-allow: Nécessaire pour la collecte de vidage de noyau avec createdump et dotnet dump.
  • com.apple.security.cs.debugger: nécessaire pour attacher un débogueur au processus.

Avertissement

L’échec de la connexion et de la notarisation de votre application peut entraîner un blocage de l’application lors de l’exécution d’une opération restreinte.

Fichiers binaires universels

macOS prend en charge les fichiers binaires universels : un seul fichier Mach-O qui contient du code d’ordinateur pour plusieurs architectures d’UC. macOS sélectionne la tranche qui correspond au processeur actuel, donc un fichier s’exécute en mode natif sur les machines Apple Silicon (arm64) et Intel (x64).

.NET ne produit pas directement des fichiers binaires universels. Au lieu de cela, vous publiez votre application une fois par architecture et fusionnez les deux exécutables natifs avec l’outil Apple lipo . Deux modes de publication .NET produisent un exécutable natif autonome que vous pouvez fusionner de cette façon :

Publier un fichier binaire universel à fichier unique

Publiez l’application une fois par architecture dans des répertoires distincts :

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

Fusionnez ensuite les deux exécutables et réinscrire le résultat :

mkdir -p out/universal
lipo -create -output out/universal/MyApp out/osx-arm64/MyApp out/osx-x64/MyApp
codesign --force --sign - out/universal/MyApp

Une publication autonome à fichier unique incorpore le runtime, les assemblys managés et les bibliothèques natives dans l’exécutable lui-même, de sorte que le fichier fusionné est l’application complète. Le binaire universel est à peu près la somme des deux entrées.

Copiez les fichiers restants de l’un des répertoires de sortie par architecture (par exemple, appsettings.json ou les fichiers exclus du bundle) en regard de l’exécutable fusionné.

Publier un binaire universel AOT natif

Les étapes sont identiques à celles du fichier unique, mais remplacent les propriétés à fichier unique par 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

L’AOT natif produit une sortie beaucoup plus petite que la publication à fichier unique, de sorte que le binaire universel reste petit.

L’AOT natif émet également un MyApp.dSYM ensemble de symboles de débogage par architecture. Pour conserver des symboles pour les deux tranches, conservez les répertoires par architecture ou fusionnez les DWARF fichiers binaires à l’intérieur des bundles avec lipo.