- macOS uygulamaları, komut satırı programlarından daha karmaşık bileşenlere sahiptir ve pencere ile menü gibi arayüz kaynaklarını ayrı bir yapıda yönetir
- Classic Mac OS'ta çalıştırılabilir kod ve kaynaklar dosyanın resource fork bölümünde saklanıyordu, ancak Mac OS X ile birlikte bundle yapısına geçildi
- Uygulama bundle'ı, Contents dizini etrafında; MacOS, Resources, Frameworks gibi alt klasörler ve Info.plist gibi temel dosyalardan oluşur
- Daha sonra kod imzalama, App Store makbuzu, notarization gibi unsurlar eklendi ve yapı güvenlik ile bütünlüğü güçlendirecek şekilde gelişti
- Bu kendine yeterli app bundle yapısı, kurulum, güncelleme ve kaldırmayı basitleştirirken güvenlik ve bakım verimliliğini artıran temel bir zemin haline geldi
Classic Mac OS'ta uygulama yapısı
- İlk Mac OS sürümlerinde pencere, menü gibi UI kaynakları, çalıştırılabilir dosyadan ayrılarak resource fork içinde saklanıyordu
- Örnek olarak QuarkXPress 4.11 kaynakları ResEdit içinde görüntülenebiliyordu
- Çalıştırma kodu CODE resource içinde yer alıyor, Finder'ın tanıyabilmesi için dosya türü (type) ve creator bilgileri de birlikte saklanıyordu
Mac OS X'in bundle yapısı
- Mac OS X, NeXTSTEP kökenli bundle yapısını benimsedi
- Uygulama,
.app uzantılı bir dizin biçimindedir ve içinde Contents klasörü bulunur
- MacOS klasörü, GUI uygulamasının çalıştırılabilir dosyasını ve komut satırı araçlarını içerir
- Resources klasörü, uygulama simgesi, GUI bileşenleri ve benzeri kaynak dosyaları saklar
- Bazı uygulamalar, Frameworks klasörü içinde dylib (dinamik kütüphane) gömülü olarak gelir
- Info.plist dosyası zorunludur; çalıştırılabilir dosya adını, simgeyi, minimum macOS sürümünü, belge türlerini ve sürüm numaralarını tanımlar
- PkgInfo dosyası, Classic Mac OS'taki type/creator bilgisini korur ancak zorunlu değildir
- Uygulama çalıştırıldığında launchd yürütme kodunu başlatır; LaunchServices ve RunningBoard ise Info.plist bilgisine dayanarak başlatma sürecini yürütür
macOS'ta güvenlik ve genişleme
- Mac OS X 10.5 Leopard (2007) ile birlikte Code Signature kullanıma girdi ve
_CodeSignature klasörü eklendi
- CodeResources dosyası, uygulama bütünlüğünü doğrulamak için kod dizini hash'ini (CDHash) içerir
- App Store üzerinden dağıtılan uygulamalar,
_MASReceipt klasöründe mağaza makbuzunu içerir
- 2018'den sonra notarization devreye girdi; Apple tarafından verilen ticket, CodeResources dosyası üzerinden bundle'a staple edilebilir
- Modern uygulama bundle'ları, geçmişte sistem klasörlerine kurulan bileşenleri artık kendi içinde taşır
- Library klasörü: LaunchDaemons, LoginItems vb.
- XPCServices klasörü: uygulamanın kullandığı ayrı yürütme servisleri
- Plugins / Extensions klasörü: uygulama genişletmeleri ve App Intents içerir
- Bazı uygulamalarda ayrıca version.plist dosyası da bulunur
Uygulama bundle'ının avantajları
- Tüm bileşenlerin bundle içinde birleştirilmesi, kurulum, güncelleme ve kaldırmayı kolaylaştırır
- Bileşen eksikliği olasılığı azalır; imzalama ve notarization koruması sayesinde güvenlik güçlenir
- App Store uygulamaları, ek olarak makbuz ve notarization ticket içererek güvenilirlik sağlar
- Intel ve Arm mimarileri arasında yapısal fark yoktur; Mach-O çalıştırılabilir dosyası, her iki platformun kodunu birlikte içeren universal (fat) binary biçiminde saklanır
- Aynı dosya içinde her mimariye ait signature da birlikte bulunur
Uygulama yapısının görsel özeti
- Diyagramda açık sarı, zorunlu ya da neredeyse tüm uygulamalarda bulunan bileşenleri gösterir
- Yeşil, yalnızca App Store dağıtımlı uygulamalarda bulunan öğeleri; mavi ise isteğe bağlı notarization ticket'ını ifade eder
- Ek olarak Automator workflow'ları, script'ler gibi yardımcı unsurlar da yer alabilir
- Genel olarak macOS uygulamaları, kendine yeterli ve güvenlik odaklı bir yapıya doğru evrilmiştir
Henüz yorum yok.