Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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:createdumpvedotnet dumpile 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 ikili dosyalar
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ı uygulamalar (
PublishSingleFile) -
Yerel AOT dağıtımı (
PublishAot)
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 içinde tek dosya yayımlama çalışma zamanını, yönetilen derlemeleri ve yerel kitaplıkları yürütülebilir dosyanın kendisine ekler, böylece birleştirilmiş dosya tam uygulamadır. 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 ile aynıdır, ancak tek dosya özelliklerini ile PublishAotdeğ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 dosyalı yayımlamadan çok daha küçük bir çıkış üretir, bu nedenle evrensel ikili de küçük kalır.
Yerel AOT ayrıca mimari başına bir MyApp.dSYM hata ayıklama simgesi paketi de yayar. Her iki dilimin de simgelerini korumak için, mimari başına dizinleri koruyun veya paketlerin DWARF içindeki ikili dosyaları ile lipobirleştirin.