Xamarin.Mac uygulamasını korumalı alan oluşturma
Bu makale, bir Xamarin.Mac uygulamasının yayın için korumalı alan oluşturma App Store. Kapsayıcı dizinleri, yetkilendirmeler, kullanıcı tarafından belirlenen izinler, ayrıcalık ayrımı ve çekirdek zorlama gibi korumalı alanda yer alan tüm öğeleri kapsar.
Genel Bakış
Xamarin.Mac uygulamasında C# ve .NET ile çalışırken, veya Swift ile çalışırken olduğu gibi bir uygulamayı korumalı alanla Objective-C aynı beceriye sahip olursanız.
Bu makalede, bir Xamarin.Mac uygulamasında korumalı alan oluşturma ile çalışmayla ilgili temel bilgileri ve korumalı alan oluşturmada yer alan tüm öğeleri (kapsayıcı dizinleri, yetkilendirmeler, kullanıcı tarafından belirlenen izinler, ayrıcalık ayrımı ve çekirdek zorlama) kapsıyoruz. Öncelikle Hello, Mac makalesi, özellikle de Xcode'a giriş ve Interface Builder ve Çıkışlar ve Eylemler bölümlerine bakarak bu makalede kullanacaklarımız temel kavramları ve teknikleri gözden geçirin.
Exposing C# classes / methods to Objective-CExposing C# classes / methods to Objective-C belgesinin C# sınıflarınızı nesnelere ve kullanıcı arabirimi öğelerine kablolamak için kullanılan ve özniteliklerini de açıklayan bölümüne göz RegisterExportObjective-C atabilirsiniz.
Uygulama Korumalı Alanı hakkında
Uygulama Korumalı Alanı, bir uygulamanın sistem kaynaklarına erişimini sınırlandırarak Mac üzerinde çalıştırılıyor olan kötü amaçlı bir uygulamanın neden olduğu zarara karşı güçlü bir savunma sağlar.
Korumalı olmayan bir uygulama, uygulamayı çalıştıran kullanıcının tüm haklarına sahip olur ve kullanıcının sahip olduğu her şeye erişebilir veya her şeyi yapar. Uygulama güvenlik açıkları (veya kullanmakta olduğu herhangi bir çerçeve) içeriyorsa, bir bilgisayar korsanı potansiyel olarak bu zayıf noktalardan faydalanarak üzerinde çalıştırılan Mac'in kontrolünü ele almak için uygulamayı kullanabilir.
Korumalı alanlı bir uygulama, kaynaklara erişimi uygulama başına sınırlandırarak kullanıcının makinesi üzerinde çalışan bir uygulamanın parçası olarak hırsızlık, bozulma veya kötü amaçlı saldırılara karşı bir savunma hattı sağlar.
Uygulama Korumalı Alanı, macOS'da yerleşik olarak yer alan (çekirdek düzeyinde zorlanan) bir erişim denetimi teknolojisidir ve iki kat strateji sağlar:
- Uygulama Korumalı Alanı, geliştiricinin bir uygulamanın işletim sistemiyle nasıl etkileşim kuracaklarını açıklamasına olanak sağlar ve bu şekilde yalnızca işi yapmak için gerekli olan erişim hakları ve daha fazlasını olmaz.
- Uygulama Korumalı Alanı, kullanıcının Aç ve Kaydet iletişim kutuları, sürükle ve bırak işlemleri ve diğer yaygın kullanıcı etkileşimleri aracılığıyla sisteme sorunsuz bir şekilde daha fazla erişim izni verilmesini sağlar.
Uygulama Korumalı Alanı'nın uygulanması için hazırlanma
Uygulama Korumalı Alanı'nın makalede ayrıntılı olarak ele alınacak öğeleri şunlardır:
- Kapsayıcı Dizinleri
- Yetkilendirmeler
- User-Determined İzinleri
- Ayrıcalık Ayrımı
- Çekirdek Zorlama
Bu ayrıntıları andikten sonra, Xamarin.Mac uygulamanıza Uygulama Korumalı Alanı'nın benimsenme planı oluşturabileceksiniz.
İlk olarak, uygulamanın korumalı alan için iyi bir aday olup olmadığını belirlemeniz gerekir (çoğu uygulama vardır). Ardından, API uyumsuzluklarını çözmeniz ve Uygulama Korumalı Alanı'nın hangi öğelerine ihtiyacınız olduğunu belirlemeniz gerekir. Son olarak, uygulamanın savunma düzeyini en üst düzeye çıkarmak için Ayrıcalık Ayrımı'nın kullanımına bakın.
Uygulama Korumalı Alanı'nın benimsenerek, uygulamanın kullandığı bazı dosya sistemi konumları farklı olur. Özellikle, uygulama destek dosyaları, veritabanları, önbellekler ve kullanıcı belgeleri değil diğer dosyalar için kullanılacak bir Container Directory olacaktır. Hem macOS hem de Xcode, bu tür dosyaları eski konumlarından kapsayıcıya geçirmek için destek sağlar.
Korumalı alan için hızlı başlangıç
Bu bölümde, Uygulama Korumalı Alanı ile çalışmaya başlama örneği olarak Web Görünümü kullanan basit bir Xamarin.Mac uygulaması (özellikle istenmedikçe korumalı alan altında kısıtlanmış bir ağ bağlantısı gerektirir) oluşturuz.
Uygulamanın gerçekten korumalı alan içinde olduğunu doğrular ve yaygın Uygulama Korumalı Alanı hatalarını gidermeyi ve çözmeyi öğreneceğiz.
Xamarin.Mac projesini oluşturma
Örnek projemizi oluşturmak için şunları gerçekleştirin:
Yeni Mac için Visual Studio'ı başlat ve Yeni Çözüm.. bağlantısına tıklayın.
Yeni Uygulama Project kutusunda MacUygulaması Cocoa Uygulaması'yı seçin:
Sonraki düğmesine tıklayın, proje adı olarak girin ve Oluştur düğmesine tıklayın:
Dosya Çözüm Bölmesi,Main.storyboard dosyasına çift tıklar ve dosyayı Xcode'da düzenlemek için açın:
Bir Web Görünümünü Pencereye sürükleyin, içerik alanı için boyut olarak ayarlayın ve pencereyle birlikte büyütecek ve küçültecek şekilde ayarlayın:
Web görünümü için adlı bir çıkış
webViewoluşturun:Mac için Visual Studio geri dönüp düzenleme için açmak için Çözüm Bölmesi ViewController.cs dosyasına çift tıklayın.
Aşağıdaki using deyimini ekleyin:
using WebKit;yöntemini
ViewDidLoadaşağıdaki gibi yapın:public override void AwakeFromNib () { base.AwakeFromNib (); webView.MainFrame.LoadRequest(new NSUrlRequest(new NSUrl("http://www.apple.com"))); }Yaptığınız değişiklikleri kaydedin.
Uygulamayı çalıştırın ve Apple Web Sitesinin pencerede aşağıdaki gibi görüntülendiğinden emin olur:
Uygulamayı imzalama ve sağlama
Uygulama Korumalı Alanı'yı etkinleştiremeden önce Xamarin.Mac uygulamamızı sağlamamız ve imzalamamız gerekir.
Şimdi şunları yapın:
Apple Geliştirici Portalı:
Sertifikalar, TanımlayıcıLar Profilleri'ne tıklayın:
Mac Uygulamaları altındaTanımlayıcılar'ı seçin:
Uygulama için yeni bir kimlik oluşturun:
Sağlama Profilleri'nin altındaGeliştirme'yi seçin:
Yeni profil oluşturun ve Mac Uygulama Geliştirme'yi seçin:
Yukarıda oluşturduğumız Uygulama Kimliğini seçin:
Bu profil için Geliştiriciler'i seçin:
Bu profil için bilgisayarları seçin:
Profile bir Ad girin:
Bitti düğmesine tıklayın.
Önemli
Bazı durumlarda, Yeni Sağlama Profilini Apple'ın Geliştirici Portalı doğrudan indirmeniz ve yüklemek için çift tıklamaniz gerekir. Ayrıca yeni profile erişemeden önce Mac için Visual Studio yeniden başlatmanız da gerekir.
Ardından, geliştirme makinesine yeni Uygulama Kimliği ve Profilini yüklememiz gerekiyor. Şimdi şunları gerçekleştirin:
Xcode'ı başlat ve Xcode menüsünden Tercihler'i seçin:

Ayrıntıları Görüntüle... düğmesine tıklayın:

Yenile düğmesine tıklayın (sol alt köşede).
Bitti düğmesine tıklayın.
Ardından Xamarin.Mac projemizde yeni Uygulama Kimliği ve Sağlama Profilini seçmemiz gerekiyor. Şimdi şunları gerçekleştirin:
Dosya Çözüm Bölmesiinfo.plist dosyasına çift tıklar ve dosyayı düzenlemek için açın.
Paket Tanımlayıcısı'nın yukarıda oluşturduğumuz Uygulama Kimliği ile eş olduğundan emin olmak (örnek: ):
Ardından Entitlements.plist dosyasına çift tıklayın ve iCloud Key-Value Store ile iCloud Kapsayıcılarının yukarıda oluşturduğumuz Uygulama Kimliğiyle eş olduğundan emin olun (örnek: ):
Yaptığınız değişiklikleri kaydedin.
Dosya Çözüm Bölmesiproje dosyasına çift tıklar ve düzenleme seçenekleri'ne tıklayın:

Mac İmzalama'yatıklayın, ardından Uygulama paketini imzala ve Yükleyici paketini imzala'ya tıklayın. Sağlama profili'ninaltında, yukarıda oluşturduğum profili seçin:

Bitti düğmesine tıklayın.
Önemli
Xcode tarafından yüklenmiş olan Mac için Visual Studio App ID ve Provisioning Profile'ı tanıması için bu profili yeniden başlatmanız gerekebilir.
Sağlama sorunlarını giderme
Bu noktada uygulamayı çalıştırmayı denemeniz ve her şeyin doğru şekilde imzalandı ve sağlandı olduğundan emin olun. Uygulama daha önce olduğu gibi çalışırsa her şey yolundadır. Bir hata durumunda, aşağıdakine benzer bir iletişim kutusu elde ediyor olabilir:
Sağlama ve imzalama sorunlarının en yaygın nedenleri:
- Uygulama Paket Kimliği, seçilen profilin Uygulama Kimliği ile eş değerle eşleşmez.
- Geliştirici Kimliği, seçilen profilin Geliştirici Kimliği ile eşleşmez.
- Test edilen Mac'in UUID'i seçilen profilin bir parçası olarak kayıtlı değil.
Bir sorun durumunda Apple Geliştirici Portalı'daki sorunu düzeltin, Xcode'da profilleri yenileyin ve Mac için Visual Studio.
Uygulama Korumalı Alanı'nı etkinleştirme
Projeleriniz seçeneklerinde bir onay kutusu seçerek Uygulama Korumalı Alanı'nın etkinleştirebilirsiniz. Şunları yapın:
Dosya Çözüm Bölmesientitlements.plist dosyasına çift tıklar ve dosyayı düzenlemek için açın.
Hem Yetkilendirmeleri Etkinleştir'i hem de Uygulama Korumalı Alanı'nın Etkinleştir'ini kontrol edin:
Yaptığınız değişiklikleri kaydedin.
Bu noktada, Uygulama Korumalı Alanı'nın etkinleştirilmesini sağladınız ancak Web Görünümü için gerekli ağ erişimini sağlayamdırmanıza gerek yoktur. Uygulamayı şimdi çalıştıracak olursanız boş bir pencere alasınız:
Uygulamanın korumalı alan içinde olduğunu doğrulama
Kaynak engelleme davranışının dışında, Xamarin.Mac uygulamasının başarıyla korumalı alanlara alınarak korumalı alan oluşturmanın üç ana yolu vardır:
Bulıcı'da klasörün içeriğini kontrol edin - Uygulama korumalı alanda yer aldı ise, uygulamanın Paket Tanımlayıcısı gibi bir klasör
~/Library/Containers/bulunur (örnek:com.appracatappra.MacSandbox):Sistem uygulamayı Etkinlik İzleyicisi'nin korumalı alanı olarak görür:
- Etkinlik İzleyicisi'ne (altında)
/Applications/Utilitiesbaşlatma. - Sütunları Görüntüle'yi seçin ve Korumalı Alan menü öğesinin işaretli olduğundan emin olun.
- Korumalı alan sütunlarının uygulamanıza uygun
Yesolduğundan emin olmak için:
- Etkinlik İzleyicisi'ne (altında)
Uygulama ikili ikili dosyanın korumalı alan içinde olup olduğunu kontrol edin:
- Terminal uygulamasını başlatma.
- Applications dizinine
bingidin. - Şu komutu sorun:
codesign -dvvv --entitlements :- executable_pathexecutable_path(burada, uygulamanıza giden yoldur):
Korumalı alanlı uygulamada hata ayıklama
Hata ayıklayıcısı TCP üzerinden Xamarin.Mac uygulamalarına bağlanır. Bu, korumalı alanı etkinleştirdikten sonra uygulamanın uygulamaya bağlanamadığı anlamına gelir. Bu nedenle, uygulamayı uygun izinler etkinleştirilmeden çalıştırmayı denersanız "Hataayıklayıcıya bağlanamıyor" hatasını alırsınız.
Giden Ağ Bağlantılarına İzin Ver (İstemci) izni, hata ayıklayıcı için gereken izindir; bunun etkinleştirilmesi normalde hata ayıklamaya izin verir. Hata ayıklama olmadan hata ayıklayamayabilirsiniz. Hedefi, yalnızca hata ayıklama derlemeleri için korumalı alan olan herhangi bir uygulamanın yetkilendirmelerine otomatik olarak eklemek için CompileEntitlementsmsbuild güncelleştirildi. Yayın derlemeleri, yetkilendirmeler dosyasında belirtilen yetkilendirmeleri, değiştirilmemiş olarak kullanilmelidir.
Uygulama Korumalı Alanı ihlallerini çözme
Korumalı alanlı bir Xamarin.Mac uygulaması açıkça izin verilmiyor bir kaynağa erişmeye çalıştı ise Uygulama Korumalı Alanı İhlali oluşur. Örneğin, Web Görünümü artık Apple Web Sitesini görüntüleyemmektedir.
Uygulama Korumalı Alanı İhlallerinin en yaygın kaynağı, Mac için Visual Studio yetkilendirme ayarları uygulamanın gereksinimleriyle eşleşmezse oluşur. Yine örneğimize dönecek olursanız, Web Görünümü'nin çalışmayı devamtan tutması için eksik Ağ Bağlantısı yetkilendirmeleri.
Uygulama Korumalı Alanı ihlallerini bulma
Xamarin.Mac uygulamanıza Uygulama Korumalı Alanı İhlali oluştuğunu biliyorsanız, sorunu bulmanın en hızlı yolu Konsol uygulamasını kullanmaktır.
Şunları yapın:
Söz konusu uygulamayı derle ve uygulamanın Mac için Visual Studio.
Konsol uygulamasını açın (kaynak).
Kenar çubuğuna Tüm İletiler'i seçin ve aramaya girin:
Yukarıdaki örnek uygulamamızda Kernal'ın Uygulama Korumalı Alanı nedeniyle trafiği engelleyerek bu hakkı talep network-outbound edattığımızı görebilirsiniz.
Yetkilendirmelerle Uygulama Korumalı Alanı ihlallerini düzeltme
Artık Uygulama Korumalı Alan İhlallerini nasıl bulayacağız, şimdi uygulamamızın Yetkilendirmeleri ayarlayarak bunların nasıl çözülebileceğini göreceğiz.
Şunları yapın:
Dosya Çözüm Bölmesientitlements.plist dosyasına çift tıklar ve dosyayı düzenlemek için açın.
Yetkilendirmeler bölümünde Giden Ağ Bağlantılarına İzin Ver (İstemci) onay kutusunu işaretleyin:
Uygulamada yapılan değişiklikleri kaydedin.
Örnek uygulamamız için yukarıdakini yapar ve sonra uygulamayı derlemek ve çalıştırmak için web içeriği artık beklendiği gibi görüntülenir.
Uygulama Korumalı Alanı derinlemesine
Uygulama Korumalı Alanı tarafından sağlanan erişim denetimi mekanizmaları azdır ve kolayca anlaşılır. Ancak, Uygulama Korumalı Alanı'nın her uygulama tarafından benimsenecek yolu benzersizdir ve uygulamanın gereksinimlerine göredir.
Xamarin.Mac uygulamanızı kötü amaçlı koddan yararlanmaya karşı korumak için en iyi çabanızı göstererek, uygulamanın sistemle etkileşimlerinin denetimine sahip olmak için uygulamada (veya tükettiği kitaplıklardan veya çerçevelerden) yalnızca tek bir güvenlik açığı olması gerekir.
Uygulama Korumalı Alanı, uygulamanın sistemle amaçlanan etkileşimlerini belirtmenize olanak sağlayarak devretmeyi önlemek (veya neden olduğu zararları sınırlamak) için tasarlanmıştır. Sistem yalnızca, uygulamanın işini yapmak için gerekli olan kaynağa erişim izni ve daha fazlasının olmadığını gösterir.
Uygulama Korumalı Alanı için tasarlarken en kötü durum senaryosu için tasarlarsanız. Kötü amaçlı kod tarafından uygulamanın güvenliği tehlikeye girerse yalnızca uygulamanın korumalı alanındaki dosyalara ve kaynaklara erişimle sınırlıdır.
Yetkilendirmeler ve sistem kaynağı erişimi
Yukarıda gördüğümüz gibi korumalı alan verilmeden bir Xamarin.Mac uygulamasına, uygulamayı çalıştıran kullanıcının tam hakları ve erişimi verildi. Kötü amaçlı bir kod tarafından tehlikeye atılmışsa, korumasız bir uygulama saldırgan davranış için bir aracı olarak davranabilir ve zarar verme potansiyeli çok çeşitli olabilir.
Uygulama Korumalı Alanı'nın etkinleştirilmesi sayesinde minimum ayrıcalık kümesine sahip olan tüm ayrıcalıkları kaldırır ve ardından Xamarin.Mac uygulama yetkilendirmelerinizi kullanarak yalnızca ihtiyaç temelinde yeniden etkinleştirebilirsiniz.
Entitlements.plist dosyasını düzenleyerek ve düzenleyiciler açılan kutularında gerekli hakları kontrol ederek veya seçerek, uygulamanın Uygulama Korumalı Alanı Kaynaklarını değiştirirsiniz:
Kapsayıcı dizinleri ve dosya sistemi erişimi
Xamarin.Mac uygulamanız Uygulama Korumalı Alanı'nın benimsenme zaman, aşağıdaki konumlara erişimi vardır:
- Uygulama Kapsayıcı Dizini - İlk çalıştırmada işletim sistemi, tüm kaynaklarının gideceği ve yalnızca erişenin bulunduğu özel bir Container Directory oluşturur. Uygulama bu dizine tam okuma/yazma erişimine sahip olur.
- Uygulama Grubu Kapsayıcı Dizinleri - Uygulamanıza aynı gruptaki uygulamalar arasında paylaşılan bir veya daha fazla Grup Kapsayıcısı için erişim izni verebilirsiniz.
- Kullanıcı Tarafından Belirtilen Dosyalar - Uygulamanız, açıkça açılan veya sürüklenen ve kullanıcı tarafından uygulamaya bırakılan dosyalara otomatik olarak erişim elde eder.
- İlgili Öğeler - Uygun yetkilendirmelerle, uygulamanız aynı adla ancak farklı bir uzantıya sahip bir dosyaya erişim sahibi olabilir. Örneğin, hem dosya hem de olarak kaydedilmiş
.txtbir.pdfbelge. - Geçici dizinler, komut satırı araç dizinleri ve belirli dünya tarafından okunabilir konumlar - Uygulamanız, sistem tarafından belirtilen şekilde diğer iyi tanımlanmış konumlarda yer alan dosyalara farklı derecelerde erişime sahiptir.
Uygulama kapsayıcı dizini
Xamarin.Mac uygulamasının App Container Directory'sinde aşağıdaki özellikler bulunur:
- Kullanıcının Giriş dizininde (genellikle) gizli bir konumdadır ve uygulama içinde
~Library/ContainersNSHomeDirectoryişleviyle erişilebilir (aşağıya bakın). Giriş dizininde olduğundan, her kullanıcı uygulama için kendi kapsayıcıya sahip olur. - Uygulamanın Container Directory'ye ve içindeki tüm alt dizinlerine ve dosyalarına sınırsız okuma/yazma erişimi vardır.
- macOS'un yol bulma API'lerinin çoğu uygulamanın kapsayıcısı ile ilgilidir. Örneğin, kapsayıcının kendi Kitaplığı (üzerinden erişilir), Uygulama Desteği veTercihler alt dizinleri olur.
- macOS, kod imzalama yoluyla ve uygulaması ile kapsayıcısı arasındaki bağlantıyı kurulur ve zorlar. Başka bir uygulama paket tanımlayıcısını kullanarak uygulamanın kimliklerini sildirse bile,kod imzalama nedeniyle Kapsayıcıya erişemayacaktır.
- Kapsayıcı, kullanıcı tarafından oluşturulan dosyalar için değildir. Bunun yerine, uygulamanın veritabanları, önbellekler veya diğer belirli veri türleri gibi kullandığı dosyalar için kullanılır.
- Ayakkabı kutusu uygulama türleri (Apple'ın Photo uygulaması gibi) için kullanıcının içeriği Kapsayıcıya gider.
Önemli
Ne yazık ki, Xamarin.Mac henüz %100 API kapsamına sahip değildir (Xamarin.iOS'un aksine), sonuç olarak NSHomeDirectory API, Xamarin.Mac'in geçerli sürümünde eşlenmemiştir.
Geçici bir geçici çözüm olarak aşağıdaki kodu kullanabilirsiniz:
[System.Runtime.InteropServices.DllImport("/System/Library/Frameworks/Foundation.framework/Foundation")]
public static extern IntPtr NSHomeDirectory();
public static string ContainerDirectory {
get {
return ((NSString)ObjCRuntime.Runtime.GetNSObject(NSHomeDirectory())).ToString ();
}
}
Uygulama grubu kapsayıcı dizini
Mac macOS 10.7.5 (ve daha yenisi) ile başlayarak, bir uygulama gruptaki tüm uygulamalar için ortak olan paylaşılan bir kapsayıcıya erişmek için com.apple.security.application-groups yetkilendirmeyi kullanabilir. Bu paylaşılan kapsayıcıyı veritabanı veya diğer destek dosyası türleri (önbellekler gibi) gibi kullanıcıya yönelik olmayan içerikler için kullanabilirsiniz.
Grup Kapsayıcıları her uygulamanın Korumalı Alan Kapsayıcısı'nda (bir grubun parçası iseler) otomatik olarak eklenir ve üzerinde ~/Library/Group Containers/<application-group-id> depolanır. Grup Kimliği, Geliştirme Ekibi Kimliğiniz ve bir dönemle başlasın, örneğin:
<team-id>.com.company.<group-name>
Daha fazla bilgi için lütfen Apple'ın Yetkilendirme Anahtarı Başvurusu'nda Bir Uygulama Grubuna Uygulama Ekleme'ye bakın.
Uygulama kapsayıcısı dışında Powerbox ve dosya sistemi erişimi
Korumalı alanlı bir Xamarin.Mac uygulaması, kapsayıcısı dışındaki dosya sistemi konumlarına aşağıdaki yollarla erişebilir:
- Kullanıcının belirli yönünde (Aç ve Kaydet İletişim Kutuları aracılığıyla veya sürükleyip bırakma gibi diğer yöntemlerle).
- Belirli dosya sistemi konumları (veya gibi) için yetkilendirmeler
/bin/usr/libkullanarak. - Dosya sistemi konumu, dünya tarafından okunan (Paylaşım gibi) belirli dizinlerde olduğunda.
Powerbox, korumalı alan Xamarin.Mac uygulamanıza dosya erişim haklarını genişletmek için kullanıcıyla etkileşime alan macOS güvenlik teknolojisidir. Powerbox'ın API'si yoktur, ancak uygulama veya çağrısında saydam olarak NSOpenPanelNSSavePanel etkinleştirilir. Powerbox erişimi, Xamarin.Mac uygulamanız için ayarlarınızı yetkilendirmeler aracılığıyla etkinleştirilir.
Korumalı alan uygulama bir Aç veya Kaydet iletişim kutusu görüntülerken, pencere Powerbox tarafından gösterilir (AppKit tarafından değil) ve bu nedenle kullanıcının erişimi olan herhangi bir dosya veya dizine erişimi vardır.
Kullanıcı Aç veya Kaydet iletişim kutusundan bir dosya veya dizin seçer (veya uygulamanın simgesine sürükler), Powerbox ilişkili yolu uygulamanın korumalı alanlarına ekler.
Buna ek olarak, sistem korumalı alanlı bir uygulamaya aşağıdakilere otomatik olarak izin sağlar:
- Sistem giriş yöntemine bağlantı.
- Hizmetler menüsünden kullanıcı tarafından seçilen hizmetleri çağırma (yalnızca hizmet sağlayıcısı tarafından korumalı alan uygulamaları için güvenli olarak işaretlenen hizmetler için).
- Dosyaları aç menüsünden kullanıcı tarafından seçin.
- Diğer uygulamalar & arasında Kopyala Yapıştır'ı kullanın.
- Aşağıdaki dünya tarafından okunabilir konumlardan dosyaları okuyun:
/bin/sbin/usr/bin/usr/lib/usr/sbin/usr/share/System
- tarafından oluşturulan dizinlerde dosyaları okuma ve
NSTemporaryDirectoryyazma.
Varsayılan olarak, korumalı bir Xamarin.Mac uygulaması tarafından açılan veya kaydedilen dosyalar, uygulama sonlandırılana kadar erişilebilir durumda kalır (uygulama çıkılana kadar dosya hala açık değilse). Açık dosyalar, uygulama bir sonraki başlatıda macOS Sürdürme özelliği aracılığıyla uygulamanın korumalı alanlarına otomatik olarak geri yüklenir.
Xamarin.Mac App'in kapsayıcısı dışında bulunan dosyalara kalıcılık sağlamak için yer işaretlerini Security-Scoped kullanın (aşağıya bakın).
İlgili öğeler
Uygulama Korumalı Alanı, bir uygulamanın aynı dosya adı ancak farklı uzantılara sahip ilgili öğelere erişmesi için izin verir. Özelliğin iki parçası vardır: a) uygulamanın dosyasındaki ilgili uzantıların listesi, b) korumalı alana uygulamanın bu dosyalarla ne yaptığını söyleme Info.plst kodu.
Bunun mantıklı olduğu iki senaryo vardır:
- Uygulamanın dosyanın farklı bir sürümünü kaydedebiliyor olması gerekir (yeni bir uzantıyla). Örneğin, bir dosyayı
.txtbir dosyaya dışarı.pdfaktarma. Bu durumu işlemek için dosyasına erişmek içinNSFileCoordinatorbir kullansanız gerekir. Önce yöntemini çağırarakWillMove(fromURL, toURL)dosyayı yeni uzantıya taşımanız ve ardından çağrısınızItemMoved(fromURL, toURL)gerekir. - Uygulamanın bir uzantıya ve farklı uzantılara sahip çeşitli destek dosyalarına sahip bir ana dosya açması gerekir. Örneğin, bir Film ve Alt Başlık dosyası. İkincil
NSFilePresenterdosyaya erişim elde etmek için bir kullanın. özelliğine anaPrimaryPresentedItemURLdosyayı, özelliğine ikincil dosyayıPresentedItemURLda sağlar. Ana dosya açıldığında, ikincil dosyayıAddFilePresenterkaydetmek için sınıfının yönteminiNSFileCoordinatorçağırabilirsiniz.
Her iki senaryoda da uygulamanın Info.plist dosyası, uygulamanın açabilirsiniz Belge Türlerini bildir gerekir. Herhangi bir dosya türü için NSIsRelatedItemType dizisinde girdisi için değerini YES () CFBundleDocumentTypes ekleyin.
Korumalı alanlı uygulamalarla iletişim kutusunu açma ve kaydetme davranışı
Aşağıdaki sınırlar ve korumalı bir NSOpenPanelNSSavePanel Xamarin.Mac uygulamasından çağrılırken ve üzerine yerleştirilir:
- Program aracılığıyla Tamam düğmesini çağıramazsınız.
- Bir kullanıcının seçiminde program aracılığıyla değişiklik
NSOpenSavePanelDelegateolamaz.
Ayrıca, aşağıdaki devralma değişiklikleri de vardır:
- Korumalı Olmayan Uygulama
NSOpenPanelNSSavePanel``NSPanel``NSWindow``NSResponder``NSObject``NSOpenPanel``NSSavePanel``NSObject``NSOpenPanel``NSSavePanel
Güvenlik kapsamlı yer işaretleri ve kalıcı kaynak erişimi
Yukarıda belirtildiği gibi korumalı Xamarin.Mac uygulaması, doğrudan kullanıcı etkileşimi (PowerBox tarafından sağlanmıştır) üzerinden kapsayıcısı dışındaki bir dosyaya veya kaynağa erişebilir. Ancak bu kaynaklara erişim, uygulama başlatma veya sistem yeniden başlatmalarında otomatik olarak kalıcı olmaz.
Korumalı Xamarin.Mac uygulaması, Güvenlik Kapsamlı Yer İşaretleri kullanarak kullanıcı amacını koruyarak uygulama yeniden başlatıldıktan sonra verilen kaynaklara erişimi sürdürebilir.
Güvenlik kapsamlı yer işareti türleri
Yer İşaretleri Security-Scoped Kalıcı Kaynak Erişimi ile çalışırken iki sistin kullanım örnekleri vardır:
App-Scoped Yer İşareti, kullanıcı tarafından belirtilen bir dosya veya klasöre kalıcı erişim sağlar.
Örneğin korumalı Xamarin.Mac uygulaması düzenleme için bir dış belge açmak üzere kullanma iznine sahipse (kullanarak) uygulama, gelecekte aynı dosyaya yeniden erişecek şekilde bir App-Scoped Yer İşareti
NSOpenPaneloluşturabilir.Document-Scoped Yer İşareti, bir alt dosyaya belirli bir belge kalıcı erişimi sağlar.
Örneğin, daha sonra tek bir filmde birleştirecek tek tek görüntülere, video kliplerine ve ses dosyalarına erişimi olan bir proje dosyası oluşturan bir video düzenleme uygulaması.
Kullanıcı projeye bir kaynak dosyası aktarıyorsa (yoluyla), uygulama projede depolanan öğe için bir Document-Scoped Yer İşareti oluşturur, böylece dosya her zaman uygulama tarafından NSOpenPanel erişilebilir olur.
Bir Document-Scoped Yer İşareti, yer işareti verilerini ve belgenin kendisini açabilirsiniz herhangi bir uygulama tarafından çözümlenir. Bu, taşınabilirliği destekler ve kullanıcının proje dosyalarını başka bir kullanıcıya göndermesini ve tüm yer işaretlerinin de onun için çalışır durumda olması sağlar.
Önemli
Bir Document-Scoped Yer İşareti bir klasörü değil yalnızca tek bir dosyaya işaret ediyor olabilir ve bu dosya sistem tarafından kullanılan bir konumda (veya gibi) /Library olamaz.
Güvenlik kapsamındaki yer işaretlerini kullanma
Yer İşareti'Security-Scoped türlerden birini kullanmak için aşağıdaki adımları gerçekleştirmeniz gerekir:
- Xamarin.Mac uygulamasında Security-Scoped Yer İşaretlerini kullanması gereken uygun Yetkilendirmeleri ayarlayın - App-Scoped Yer İşaretleri için Yetkilendirme anahtarını olarak
trueayarlayın. Yer Document-Scoped için Yetkilendirme anahtarınıcom.apple.security.files.bookmarks.document-scopeolaraktrueayarlayın. - Security-Scoped Yer İşareti oluşturma - Bunu, kullanıcının erişim sağladığı herhangi bir dosya veya klasör için (örneğin, ) uygulamanın kalıcı erişime ihtiyacı olacak herhangi bir dosya veya klasör için yapacaksınız. Yer
public virtual NSData CreateBookmarkData (NSUrlBookmarkCreationOptions options, string[] resourceValues, NSUrl relativeUrl, out NSError error)işaretini oluşturmakNSUrliçin sınıfının yöntemini kullanın. - Kaynak Security-Scoped çözümle - Uygulamanın kaynağa yeniden erişmesi (örneğin, yeniden başlatıldıktan sonra) için yer işaretini güvenlik kapsamındaki bir URL'ye çözümlemesi gerekir. Yer
public static NSUrl FromBookmarkData (NSData data, NSUrlBookmarkResolutionOptions options, NSUrl relativeToUrl, out bool isStale, out NSError error)işaretini çözümlemekNSUrliçin sınıfının yöntemini kullanın. - Security-Scoped URL'lerinden dosyaya erişmek istediğinizi Sisteme açıkça bildir - Bu adımın, yukarıdaki Security-Scoped URL'sini edindikten hemen sonra veya erişim iznini verdikten sonra kaynağa yeniden erişim kazanmak istediğinizde yapılması gerekir. Bir
StartAccessingSecurityScopedResource ()url'yeNSUrlerişmeye başlamak için sınıfının yöntemini Security-Scoped. - Sisteme, dosyaya Security-Scoped URL'sini kullanarak erişmeyi tamamlayasınız- Mümkün olan en kısa zamanda, uygulamanın dosyaya erişmesi gerekmeyecek olduğunda (örneğin, kullanıcı dosyayı kapatırsa) Sisteme bildirmeniz gerekir. Bir
StopAccessingSecurityScopedResource ()url'yeNSUrlerişmeyi durdurmak için sınıfının yöntemini Security-Scoped.
Bir kaynağa erişimi geri verdikten sonra yeniden erişim kurmak için 4. adıma geri dönmelisiniz. Xamarin.Mac uygulaması yeniden başlatılırsa 3. adıma dönmeniz ve yer işaretini yeniden çözümlemeniz gerekir.
Önemli
URL kaynaklarına erişimin Security-Scoped başarısız olmak Xamarin.Mac uygulamasının Çekirdek kaynaklarını sızdırmalarına neden olur. Sonuç olarak, uygulama yeniden başlatana kadar kapsayıcıya dosya sistemi konumları ekleymeyecektir.
Uygulama Korumalı Alanı ve kod imzalama
Uygulama Korumalı Alanı'ı etkinleştirdikten ve Xamarin.Mac uygulamanıza yönelik belirli gereksinimleri etkinleştirdikten sonra (Yetkilendirmeler aracılığıyla), korumalı alan oluşturmanın geçerli olması için projeyi kodla imzalamanız gerekir. Uygulama Korumalı Alanı için gereken yetkilendirmeler uygulamanın imzasıyla bağlantılı olduğundan kod imzalama gerçekleştirmeniz gerekir.
macOS, uygulamanın Kapsayıcısı ile kod imzası arasında bir bağlantı zorlar; bu şekilde, uygulamaların Paket Kimliği'nin kimliklerini yalıtmış olsa bile başka hiçbir uygulama bu kapsayıcıya erişebilecektir. Bu mekanizma aşağıdaki gibi çalışır:
- Sistem uygulamanın Kapsayıcısı'sı oluşturduğunda, bu Kapsayıcıda Access Control Listesini (ACL) ayarlar. Listede ilk erişim denetimi girişi, uygulamanın gelecekteki sürümlerinin (yükseltildikten sonra) nasıl tanınabiliyor olduğunu açıklayan Uygulamanın Belirlenmiş Gereksinimini (DR) içerir.
- Aynı Paket Kimliğine sahip bir uygulama her başlatılanda, sistem uygulamanın kod imzasının kapsayıcının ACL'sinde girdilerden biri içinde belirtilen Belirlenen Gereksinimler ile eş zamanlı olduğunu denetler. Sistem eşleşme bulamazsa, uygulamanın başlatılmasını önler.
Kod İmzalama aşağıdaki yollarla çalışır:
- Xamarin.Mac projesini oluşturmadan önce Apple Geliştirici Portalı'den geliştirme sertifikası, dağıtım sertifikası ve geliştirici kimliği sertifikası alın.
- Mac App Store Xamarin.Mac uygulamasını dağıtıyorsa, bir Apple kod imzasıyla imzalanmıştır.
Test ve hata ayıklama sırasında, imzalamış (Uygulama Kapsayıcısını oluşturmak için kullanılacak) Xamarin.Mac uygulamasının bir sürümünü kullanacağız. Daha sonra, Sürümü Apple App Store'den test etmek veya yüklemek isterseniz, Apple imzasıyla imzalanacak ve başlatılamayacak (özgün Uygulama Kapsayıcısıyla aynı kod imzasına sahip olmadığını için). Bu durumda, aşağıdakine benzer bir kilitlenme raporu alırsiniz:
Exception Type: EXC_BAD_INSTRUCTION (SIGILL)
Bunu onarmak için ACL girişini uygulamanın Apple imzalı sürümüne işaret etmek üzere ayarlamanız gerekir.
Korumalı alana alma için gereken sağlama profillerini oluşturma ve indirme hakkında daha fazla bilgi için lütfen yukarıdaki uygulamayı imzalama ve sağlama bölümüne bakın.
ACL girdisini ayarlama
Xamarin. Mac uygulamasının Apple imzalı sürümünün çalışmasına izin vermek için aşağıdakileri yapın:
- Terminal uygulamasını açın (içinde
/Applications/Utilities). - Xamarin. Mac uygulamasının Apple imzalı sürümüne bir bulucu penceresi açın.
asctl container acl add -fileTerminal penceresine yazın.- Xamarin. Mac uygulamasının simgesini Bulucu penceresinden sürükleyin ve Terminal penceresinde bırakın.
- Dosyanın tam yolu terminaldeki komutuna eklenecektir.
- Komutu yürütmek için ENTER tuşuna basın.
Kapsayıcının ACL 'SI artık Xamarin. Mac uygulamasının ve macOS sürümlerinin her iki sürümü için de belirtilen kod gereksinimlerini içerir.
ACL kodu gereksinimlerinin bir listesini görüntüleme
Aşağıdaki işlemleri gerçekleştirerek kapsayıcının ACL 'sindeki kod gereksinimlerinin bir listesini görebilirsiniz:
- Terminal uygulamasını açın (içinde
/Applications/Utilities). asctl container acl list -bundle <container-name>yazın.- Komutu yürütmek için ENTER tuşuna basın.
, <container-name> Genellikle Xamarin. Mac uygulamasının paket tanıtıcısıdır.
Uygulama korumalı alanı için bir Xamarin. Mac uygulaması tasarlama
Uygulama korumalı alanı için bir Xamarin. Mac uygulaması tasarlarken izlenmesi gereken ortak bir iş akışı vardır. Bu şekilde, bir uygulamada korumalı alana alma uygulamanın özellikleri, belirtilen uygulamanın işlevselliğine benzersiz olacaktır.
Uygulama korumalı alanını benimseme için altı adım
Uygulama korumalı alanı için bir Xamarin. Mac uygulaması tasarlamak, genellikle aşağıdaki adımlardan oluşur:
- Uygulamanın korumalı alana alma için uygun olup olmadığını belirleme.
- Geliştirme ve dağıtım stratejisi tasarlayın.
- Tüm API uyumsuzluklarını çözün.
- Gerekli uygulama korumalı alan yetkilendirmelerini Xamarin. Mac projesine uygulayın.
- XPC kullanarak ayrıcalık ayrımı ekleyin.
- Geçiş stratejisi uygulayın.
Önemli
Yalnızca uygulama paketinizdeki ana yürütülebilir dosya ve ayrıca bu paketteki her bir yardımcı uygulama ya da araç için sahip olmanız gerekir. Bu, Mac App Store 'dan dağıtılan tüm uygulamalar için gereklidir ve mümkünse herhangi bir uygulama dağıtımı formu için yapılmalıdır.
Bir Xamarin. Mac uygulamasının paketinde bulunan tüm yürütülebilir ikililerin bir listesi için terminalde aşağıdaki komutu yazın:
find -H [Your-App-Bundle].app -print0 | xargs -0 file | grep "Mach-O .*executable"
Burada [Your-App-Bundle] uygulama paketinin adı ve yoludur.
Xamarin. Mac uygulamasının korumalı alana alma için uygun olup olmadığını belirleme
Çoğu Xamarin. Mac uygulaması, uygulama korumalı alanı ile tamamen uyumludur ve bu nedenle korumalı alana alma için uygundur. Uygulama, uygulama korumalı alanının izin vermediği bir davranış gerektiriyorsa, alternatif bir yaklaşım göz önünde bulundurmanız gerekir.
Uygulamanız aşağıdaki davranışlardan birini gerektiriyorsa, uygulama korumalı alanı ile uyumlu değildir:
- Yetkilendirme Hizmetleri -uygulama korumalı alanı Ile, yetkilendirme hizmetleri C başvurusundaaçıklanan işlevlerle çalışulamıyor.
- Erişilebilirlik API 'leri -ekran okuyucular veya diğer uygulamaları denetleyen uygulamalar gibi yardımcı uygulamalara yönelik korumalı alan.
- Apple olaylarını rastgele uygulamalara gönderme -uygulama, bilinmeyen, rastgele bir uygulamaya Apple olayları göndermeyi gerektiriyorsa, korumalı olamaz. Adlandırılmış uygulamalar listesi için uygulama hala korumalı olabilir ve yetkilendirmelerin çağrılan uygulama listesini eklemesi gerekir.
- Dağıtılmış bildirimlerde Kullanıcı bilgi sözlüklerini diğer görevlere gönderme -uygulama korumalı alanı ile,
NSDistributedNotificationCentermesajlaşma diğer görevleri için bir nesneye naklederken bir sözlük dahil edilemez. - Çekirdek uzantılarını yükle -çekirdek uzantılarının yüklenmesine uygulama korumalı alanı tarafından izin verilmez.
- Açma ve kaydetme Iletişim kutularında kullanıcı girişinin benzetimini yapma-Kullanıcı girişinin benzetimini yapmak veya değiştirmek için program aracılığıyla açık veya kaydetme iletişim kutularını yeniden düzenleme, uygulama korumalı alanı tarafından yasaktır.
- Diğer uygulamalardaki tercihleri erişme veya ayarlama -diğer uygulamaların ayarlarını düzenleme, uygulama korumalı alanı tarafından yasaktır.
- ağ Ayarlar yapılandırmak , ağ Ayarlar işleme uygulama korumalı alanı tarafından yasaklanmıştır.
- Diğer uygulamaları sonlandırma -uygulama korumalı alanı, diğer uygulamaları sonlandırmak için kullanılmasına izin vermez.
API uyumsuzluklarını çözme
Uygulama korumalı alanı için bir Xamarin. Mac uygulaması tasarlarken, bazı macOS API 'Leri kullanımıyla ilgili uyumsuzluklar yaşayabilirsiniz.
Burada, bazı yaygın sorunlar ve bunları çözmek için yapabileceğiniz şeyler verilmiştir:
- Belgeleri açma, kaydetme ve izleme -belgeleri dışında bir teknolojiyi kullanarak yönetiyorsanız , uygulama korumalı alanı için yerleşik destek nedeniyle bu anahtara geçmeniz gerekir.
NSDocumentotomatik olarak PowerBox ile çalışır ve Kullanıcı bunları Finder 'da taşıdıysanız, korumalı belgelerin içinde belge tutma desteği sağlar. - Dosya sistemi kaynaklarına erişimi koruma -Xamarin. Mac uygulaması, kapsayıcısı dışındaki kaynaklara kalıcı erişime bağımlıysa, erişimi sürdürmek için güvenlik kapsamlı yer işaretlerini kullanın.
- Uygulama Için oturum açma öğesi oluşturma -uygulama korumalı alanı ile bir oturum açma öğesi oluşturamaz veya kullanarak başlatma hizmetlerinin durumunu değiştirebilirsiniz
LSRegisterURL.SMLoginItemSetEnabledSMLoginItemSetEnabledelende açıklandığı gibi işlevini kullanın. - Kullanıcı verilerine erişme - kullanıcının dizin hizmetlerinden giriş dizinini almak için gibi POSIX Işlevleri kullanıyorsanız, Cocoa veya gibi çekirdek temel sembolleri kullanmayı düşünün
NSHomeDirectory. - Diğer uygulamaların tercihlerine erişme -uygulama korumalı alanı, uygulamanın kapsayıcısına yol bulma API 'leri yönlendirdiği için, tercihleri değiştirme bu kapsayıcı içinde yer alır ve başka uygulama tercihlerine erişime izin verilmiyor.
- Web GÖRÜNÜMLERINDE HTML5 Embedded videosunu kullanma -Xamarin. Mac uygulaması, gömülü HTML5 videoları çalmak Için WebKit kullanıyorsa, uygulamayı av Foundation altyapısına de bağlamanız gerekir. Uygulama korumalı alanı, Coremedıa 'in bu videoları oynamasını engeller.
Gerekli uygulama korumalı alan yetkilendirmeleri uygulanıyor
Uygulama korumalı alanında çalıştırmak istediğiniz herhangi bir Xamarin. Mac uygulamasının yetkilendirmelerini düzenlemeniz ve uygulamayı etkinleştir korumalı alana alma onay kutusunu işaretlemeniz gerekir.
Uygulamanın işlevselliğine bağlı olarak, işletim sistemi özelliklerine veya kaynaklarına erişmek için diğer yetkilendirmelerin etkinleştirilmesi gerekebilir. Uygulamanızı çalıştırmak için gereken en düşük düzeyde istek yaptığınız yetkilendirmeler en aza indirmeniz durumunda App korumalı alana alma en iyi şekilde çalışır. böylece, yetkilendirmeleri yalnızca rastgele etkinleştirin.
Bir Xamarin. Mac uygulamasının hangi Yetkilendirmelere gerektirdiğini öğrenmek için aşağıdakileri yapın:
- Uygulama korumalı alanını etkinleştirin ve Xamarin. Mac uygulamasını çalıştırın.
- Uygulamanın özelliklerinden çalıştırın.
- Konsol uygulamasını açın (' de kullanılabilir
/Applications/Utilities) vesandboxd/Applications/Utilitiesgünlüğündeki ihlalleri arayın. - Her
sandboxdihlal için, diğer dosya sistemi konumları yerine uygulama kapsayıcısını kullanarak veya kısıtlı işletim sistemi özelliklerine erişimi etkinleştirmek Için uygulama korumalı alanı yetkilendirmelerine göre sorunu çözün. - Tüm Xamarin. Mac uygulama özelliklerini yeniden çalıştırın ve test edin.
- Tüm
sandboxdihlaller çözümlenene kadar tekrarlayın.
XPC kullanarak ayrıcalık ayrımı ekleme
Uygulama korumalı alanı için bir Xamarin. Mac uygulaması geliştirirken, ayrıcalıklar ve erişim koşullarında uygulamanın davranışlarına bakın, sonra yüksek riskli işlemleri kendi XPC hizmetlerine ayırmayı düşünün.
Daha fazla bilgi için bkz. Apple 'ın XPC Hizmetleri ve Daemon 'ları ve hizmetleri oluşturma Programlama Kılavuzu.
Geçiş stratejisi uygulama
Daha önce korumalı olmayan bir Xamarin. Mac uygulamasının yeni, korumalı bir sürümünü serbest bırakdıysanız, geçerli kullanıcıların düzgün bir yükseltme yoluna sahip olduğundan emin olmanız gerekir.
Kapsayıcı geçiş bildiriminin nasıl uygulanacağı hakkında daha fazla bilgi için, Apple 'ın bir uygulamayı korumalı bir belgeye geçirme makalesini okuyun.
Özet
Bu makale, korumalı alana alma a Xamarin. Mac uygulamasına ayrıntılı bir bakış gerçekleştirmiştir. İlk olarak, uygulama korumalı alanının temellerini göstermek için yalnızca Xamarin. Mac uygulaması oluşturduk. Daha sonra, korumalı alan ihlallerinin nasıl çözümleneceğini gösterdik. Daha sonra uygulama korumalı alanı ' na göz atın ve son olarak, uygulama korumalı alanı için bir Xamarin. Mac uygulaması tasarlamaya baktık.







açma Apple Geliştirici Portalı










sağlama sorunu iletişim




