.NET-alkalmazások közzététele macOS rendszeren

A .NET-alkalmazások macOS-hez való közzététele több további lépést igényel a többi platformhoz képest, az Apple biztonsági követelményei miatt.

Előfeltételek

A macOS -hez készült .NET-alkalmazás közzététele előtt győződjön meg arról, hogy rendelkezik az alábbiakval:

  • Apple Fejlesztői fiók: Kódaláíráshoz és -közjegyzőhöz szükséges.
  • Xcode parancssori eszközök: Biztosít codesign, altool és egyéb segédprogramok.
  • .NET SDK: Győződjön meg arról, hogy a legújabb .NET SDK van telepítve.

Az alkalmazás létrehozása a .NET SDK használatával

A .NET-alkalmazások közzétételi áttekintésében ismertetett módszerek egyikével hozhat létre alkalmazást. Létrehozhat keretrendszerfüggő vagy önálló alkalmazásokat.

Az alkalmazás aláírása és közjegyzői hitelesítése

Az Apple fejlesztői dokumentációját használva írja alá és hitelesítse az alkalmazás natív bináris fájljait. .NET létrehoz egy natív apphost végrehajtható fájlt az alkalmazás belépési pontjaként. Ezt az apphostot alá kell írni, és ha az alkalmazás speciális képességeket használ, a megfelelő jogosultságokat kell hozzárendelnie.

Jogosultságok natív AOT-ként nem közzétett alkalmazásokhoz

A natív AOT-ként nem közzétett alkalmazások esetében a com.apple.security.cs.allow-jit jogosultság szükséges.

Jogosultságok natív AOT-ként közzétett alkalmazásokhoz

Natív AOT-ként közzétett alkalmazásokhoz nincs szükség jogosultságokra.

Nem kötelező jogosultságok a hibakereséshez és a diagnosztikához

A következő jogosultságok további hibakeresési és diagnosztikai képességeket tesznek lehetővé:

  • com.apple.security.get-task-allow: Szükséges a memórialerakatok gyűjtéséhez a createdump és dotnet dump használatával.
  • com.apple.security.cs.debugger: Hibakeresőt kell csatolni a folyamathoz.

Figyelmeztetés

Ha nem sikerül aláírni és hitelesíteni az alkalmazást, az azt eredményezheti, hogy az alkalmazás összeomlik egy korlátozott művelet végrehajtása közben.

Univerzális bináris fájlok

A macOS támogatja az univerzális bináris fájlokat: egyetlen Mach-O fájlt, amely több processzorarchitektúra gépi kódját tartalmazza. A macOS kiválasztja az aktuális processzornak megfelelő szeletet, így egy fájl natív módon fut apple szilícium (arm64) és Intel (x64) gépeken.

.NET nem hoz létre közvetlenül univerzális bináris fájlokat. Ehelyett architektúránként egyszer teszi közzé az alkalmazást, és egyesíti a két natív végrehajtható fájlt az Apple lipo eszközzel. Két .NET közzétételi mód egy önálló natív végrehajtható fájlt hoz létre, amelyet így egyesíthet:

Egy fájlból álló univerzális bináris fájl közzététele

Az alkalmazás közzététele architektúránként egyszer külön könyvtárakban:

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

Ezután egyesítse a két végrehajtható fájlt, és írja alá újra az eredményt:

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

Egy önálló egyfájlos közzététel beágyazza a futtatókörnyezetet, a felügyelt szerelvényeket és a natív kódtárakat a végrehajtható fájlba, így az egyesített fájl a teljes alkalmazás. Az univerzális bináris érték nagyjából a két bemenet összege.

Másolja a fennmaradó fájlokat az architektúránkénti kimeneti könyvtárak egyikéből (például appsettings.json a csomagból kizárt fájlokból) az egyesített végrehajtható fájl mellé.

Natív AOT univerzális bináris fájl közzététele

A lépések megegyeznek az egyfájlossal, de az egyfájlos tulajdonságokat cserélje le a következőre 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

A natív AOT sokkal kisebb kimenetet eredményez, mint az egyfájlos közzététel, így az univerzális bináris fájl is kicsi marad.

A natív AOT emellett hibakeresési szimbólumcsomagot MyApp.dSYM is bocsát ki architektúránként. Ha mindkét szelet szimbólumait meg szeretné őrizni, tartsa meg az architektúránkénti könyvtárakat, vagy egyesítse a DWARF bináris fájlokat a kötegekben lipo.