Publikování aplikací .NET pro macOS

Publikování aplikací .NET pro macOS vyžaduje v porovnání s jinými platformami několik dalších kroků kvůli požadavkům na zabezpečení společnosti Apple.

Požadavky

Před publikováním aplikace .NET pro macOS se ujistěte, že máte následující:

  • Vývojářský účet Apple: Vyžaduje se podepisování kódu a zápis.
  • Nástroje příkazového řádku Xcode: Poskytuje codesignaltoola další nástroje.
  • .NET SDK: Ujistěte se, že máte nainstalovanou nejnovější sadu .NET SDK.

Vytvoření aplikace pomocí sady .NET SDK

K vytvoření aplikace použijte jednu z metod popsaných v přehledu publikování aplikací .NET . Můžete vytvořit aplikaci závislou na rozhraní nebo samostatnou aplikaci.

Podepsání a notarizace aplikace

K podepsání a notarizaci nativních binárních souborů aplikace použijte dokumentaci apple pro vývojáře . .NET vytvoří nativní spustitelný soubor apphost jako vstupní bod pro vaši aplikaci. Tento hostitel aplikace musí být podepsaný a pokud vaše aplikace používá speciální funkce, musí mít přiřazená příslušná oprávnění.

Nároky na aplikace, které nejsou publikovány jako nativní AOT

U aplikací, které nejsou publikované jako Native AOT, je vyžadováno com.apple.security.cs.allow-jit oprávnění.

Nároky pro aplikace publikované jako nativní AOT

Pro aplikace publikované jako nativní AOT se nevyžadují žádná oprávnění.

Volitelná oprávnění pro ladění a diagnostiku

Následující oprávnění umožňují další možnosti ladění a diagnostiky:

  • com.apple.security.get-task-allow: Potřebné pro shromažďování výpisů s createdump a dotnet dump.
  • com.apple.security.cs.debugger: Je potřeba připojit ladicí program k procesu.

Výstraha

Při nepodepsání a nenotarizování vaší aplikace může dojít k pádu aplikace při provádění omezené operace.

Univerzální binární soubory

macOS podporuje univerzální binární soubory: jeden soubor Mach-O, který obsahuje kód počítače pro více než jednu architekturu procesoru. macOS vybere řez, který odpovídá aktuálnímu procesoru, takže jeden soubor běží nativně na počítačích Apple Silicon (arm64) i Intel (x64).

.NET negeneruje univerzální binární soubory přímo. Místo toho publikujete aplikaci jednou pro každou architekturu a sloučíte tyto dva nativní spustitelné soubory s nástrojem Apple lipo . Dva režimy publikování .NET vytvářejí samostatný nativní spustitelný soubor, který můžete sloučit tímto způsobem:

Publikovat univerzální binární soubor do jednoho souboru

Aplikaci publikujte jednou pro každou architekturu do samostatných adresářů:

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

Potom sloučíte dva spustitelné soubory a výsledek znovu podepíšete:

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

Samostatně publikovaná aplikace v jediném souboru zahrnuje runtime, spravovaná sestavení i nativní knihovny přímo ve spustitelném souboru, takže výsledný soubor představuje kompletní aplikaci. Univerzální binární soubor je zhruba součet dvou vstupů.

Zkopírujte všechny zbývající soubory z jednoho z výstupních adresářů pro jednotlivé architektury (například appsettings.json nebo soubory vyloučené z balíčku) vedle sloučeného spustitelného souboru.

Publikování nativního univerzálního binárního souboru AOT

Postup je stejný jako u jednoho souboru, ale nahraďte vlastnosti jednoho souboru takto 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

Nativní AOT vytváří mnohem menší výsledný soubor než publikování do jednoho souboru, takže univerzální binární soubor zůstává také malý.

Nativní AOT také pro každou architekturu vytváří balíček ladicích symbolů MyApp.dSYM. Chcete-li zachovat symboly pro obě architektury, ponechte adresáře pro jednotlivé architektury nebo slučte binární soubory uvnitř balíčků pomocí lipo.