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.
Uygulama kimliği
Uygulama kimliği, macOS'un erişim kararlarını ve ilkelerini belirli bir uygulamayla ilişkilendirmek için kullandığı kod imzalama tanımlayıcısıdır (CFBundleIdentifier bildirimindeki Info.plist alanda belirtildiği gibi).
Gizli diziler veya diğer anahtarlık öğeleri için erişim kararlarını kaydeden uygulamalar, dotnet MyApp.dll gibi bir apphost yürütülebilir dosyası kullanılarak dağıtılmalı ve başlatılmalıdır; dotnet başlatıcısı (MyApp) değil. Uygulamaya özgü durum benzersiz, kararlı bir kod imzalama tanımlayıcısıyla ilişkilendirilmelidir. Başlatıcı dotnet bu senaryoda desteklenmiyor.
Yazılım yönetimi çözümleri, uygulamaya özgü başlatma ilkelerini, dotnet konağını kullanan diğer .NET barındırılan uygulamalardan ayrı olarak uygulamak için apphost'unuzun imzalama kimliğini kullanabilir.
Apphost için benzersiz, kararlı bir kod imzalama tanımlayıcısı verin ve Apple Geliştirici ekibinizden bir Developer ID Application certificate ile yayınları imzalayın. Tanımlayıcıyı ve ekibi güncelleştirmeler arasında tutarlı tutun. Bunlardan herhangi birini değiştirmek, kullanıcıların ve yöneticilerin onayları yenilemesini gerektirebilir.
Ayrıntılar için apple'ın tek başına araçlara yönelik meta veriler ve tek tek yürütülebilir dosyaları imzalama yönergelerine bakın.
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 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ı 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 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.