macOS için .NET uygulamalarını yayımlama

MacOS için .NET uygulamalarını yayımlamak, Apple'ın güvenlik gereksinimleri nedeniyle diğer platformlara kıyasla birkaç ek adım gerektirir.

Önkoşullar

macOS için .NET uygulamanızı yayımlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:

  • Apple Geliştirici Hesabı: Kod imzalama ve noter tasdik için gereklidir.
  • Xcode Komut Satırı Araçları: , codesignve diğer yardımcı programları sağlaraltool.
  • .NET SDK: En son .NET SDK'sının yüklü olduğundan emin olun.

.NET SDK kullanarak uygulamanızı oluşturma

Uygulama oluşturmak için .NET uygulama yayımlamaya genel bakış bölümünde açıklanan yöntemlerden birini kullanın. Çerçeveye bağımlı veya bağımsız bir uygulama oluşturabilirsiniz.

Uygulamanızı imzalama ve noter tasdikli hale getirme.

Uygulama yerel ikili dosyalarını imzalamak ve noter olarak almak için Apple'ın geliştirici belgelerini kullanın. .NET, uygulamanızın giriş noktası olarak yerel bir apphost yürütülebilir dosyası oluşturur. Bu apphost imzalanmalıdır ve uygulamanız özel özellikler kullanıyorsa uygun yetkilendirmelere atanmalıdır.

Yerel AOT olarak yayımlanmayan uygulamalar için yetkilendirmeler

Yerel AOTcom.apple.security.cs.allow-jit olarak yayımlanmayan uygulamalar için yetkilendirme gereklidir.

Yerel AOT olarak yayımlanan uygulamalar için yetkilendirmeler

Yerel AOT olarak yayımlanan uygulamalar için yetkilendirme gerekmez.

Hata ayıklama ve tanılama için isteğe bağlı yetkilendirmeler

Aşağıdaki yetkilendirmeler ek hata ayıklama ve tanılama özelliklerini etkinleştirir:

  • com.apple.security.get-task-allow: createdump ve dotnet dump ile döküm toplama için gereklidir.
  • com.apple.security.cs.debugger: İşleme hata ayıklayıcı eklemek için gereklidir.

Uyarı

Uygulamanızın imzalanmaması ve noter tasdikinin yapılmaması, kısıtlı bir işlem yürütülürken uygulamanın kilitlenmesine neden olabilir.

Evrensel ikililer

macOS evrensel ikili dosyaları destekler: birden fazla CPU mimarisi için makine kodu içeren tek bir Mach-O dosyası. macOS geçerli işlemciyle eşleşen dilimi seçer, bu nedenle bir dosya hem Apple silikon (arm64) hem de Intel (x64) makinelerinde yerel olarak çalışır.

.NET evrensel ikili dosyaları doğrudan üretmez. Bunun yerine, uygulamanızı mimari başına bir kez yayımlar ve iki yerel yürütülebilir dosyayı Apple lipo aracıyla birleştirirsiniz. İki .NET yayımlama modu, bu şekilde birleştirebileceğiniz bağımsız bir yerel yürütülebilir dosya oluşturur:

Tek dosyalı evrensel ikili dosya yayımlama

Uygulamayı mimari başına bir kez ayrı dizinlerde yayımlayın:

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

Ardından iki yürütülebilir dosyayı birleştirin ve sonucu yeniden imzalayın:

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

Kendi kendine yeten tek dosyalı yayımlamada çalışma zamanı, yönetilen derlemeler ve yerel kitaplıklar doğrudan yürütülebilir dosyanın içine gömülür; böylece birleştirilmiş dosya uygulamanın tamamını oluşturur. Evrensel ikili, kabaca iki girişin toplamıdır.

Mimari başına çıkış dizinlerinden birinden kalan tüm dosyaları (örneğin, appsettings.json paketten hariç tutulan dosyalar) birleştirilmiş yürütülebilir dosyanın yanına kopyalayın.

Yerel AOT evrensel ikili dosyası yayımlama

Adımlar tek dosya için olanlarla aynıdır, ancak tek dosya özelliklerini PublishAot ile değiştirin:

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

Yerel AOT, tek dosya olarak yayımlamaya kıyasla çok daha küçük bir çıktı üretir; bu nedenle evrensel ikili dosya da küçük kalır.

Yerel AOT ayrıca her mimari için bir MyApp.dSYM hata ayıklama sembol paketi de oluşturur. Her iki dilimin simgelerini korumak için, mimariye özgü dizinleri koruyun ya da paketlerin içindeki DWARF ikili dosyalarını lipo ile birleştirin.