Özet
pkgbuild [seçenekler] --root kök-yolu [--component-plist plist-yolu] paket-çıktı-yolu
pkgbuild --analyze --root kök-yolu plist-çıktı-yolu
pkgbuild [seçenekler] {--component bileşen-yolu} paket-çıktı-yolu
Açıklama
pkgbuild yardımcı programı, macOS Yükleyici (Installer) tarafından hedef sisteme yüklenecek olan bileşen paketlerini (component packages) oluşturur.
Bir bileşen paketi tek başına doğrudan kurulabilse de, genellikle productbuild(1) kullanılarak bir dağıtım (distribution) dosyası ve yerelleştirilmiş kaynaklarla birleştirilip daha kapsamlı bir ürün arşivine (product archive) dönüştürülür.
[!IMPORTANT] Mac App Store'a göndermek üzere son ürün arşivi oluştururken
pkgbuildkullanmayın. Bunun yerine doğrudan productbuild(1) aracını kullanın.
pkgbuild üç farklı modda çalışabilir:
- Eksiksiz Hedef Kök Dizinini Paketleme:
--rootseçeneği kullanılarak, belirtilen kök dizin altındaki tüm dizin ağacı pakete dahil edilir. - Analiz Modu (Şablon Üretimi):
--analyzeseçeneği ile hedef kök dizin taranır ve paket üretilmeden önce bundle davranışlarını yönetebilmeniz için bir bileşen özellik listesi (plist) şablonu oluşturulur. - Bağımsız Bundle Paketleme: Hedef kök dizini olmaksızın, doğrudan bir veya daha fazla bağımsız bundle (örneğin
.app,.plugin)--componentseçeneğiyle paketlenir.
Seçenekler
Aşağıdaki seçenekler mevcuttur:
--root kök-yolu:xcodebuild(1)veya benzeri derleme araçları tarafından oluşturulan ve paketlenecek olan hedef kök dizininin yolunu belirtir.--component bileşen-yolu: Belirtilen bundle dosyasını pakete dahil eder. Yalnızca--rootkullanılmadığı durumlarda geçerlidir.--component-plist plist-yolu:--rootpaketleme modunda, hedef kök dizin altındaki bundle'ların davranışlarını özelleştirmek için kullanılacak olan özellik listesi dosyasını (plist-yolu) tanımlar.--scripts betikler-yolu: Belirtilen dizin altındaki tüm betikleri paket içerisine arşivler. Bu dizindepreinstallve/veyapostinstalladında betikler varsa, bunlar kurulum aşamalarında en üst düzey paket betikleri olarak çalıştırılır.--nopayload: Paketin herhangi bir dosya yükü (payload) içermeyeceğini, yalnızca betiklerden oluşacağını belirtir.--identifier paket-tanımlayıcı: Paket için benzersiz bir kimlik (örneğincom.sirket.pkg.uygulama) tanımlar. Yükleyici, paket güncellemelerini ve sürüm denetimlerini bu tanımlayıcı üzerinden gerçekleştirir.--version paket-sürümü: Paket için bir sürüm dizesi belirtir. Atlanırsa varsayılan olarak0kabul edilir.--install-location yükleme-konumu: Paket içeriğinin kurulacağı varsayılan hedef dizini tanımlar (örneğin/Applicationsveya/Library/Frameworks).--analyze: Paket oluşturmak yerine,--rootile verilen dizini tarayarak özelleştirilebilir bir bileşen özellik listesi (plist) şablonu yazar.--prior önceki-paket-yolu: Aynı paketin önceki bir sürümünü referans alarak yeni paketin tanımlayıcısını, sürümünü (önceki sürüm + 1) ve yükleme konumunu otomatik olarak yapılandırır.--filter filtre-ifadesi: Paketleme sırasında hariç tutulacak dosyaları saptamak içinre_format(7)standardında bir genişletilmiş düzenli ifade tanımlar. Varsayılan olarak.svn,CVSve.DS_Storehariç tutulur.--ownership (recommended | preserve | preserve-other): Paketlenmiş dosyaların sahiplik izinlerini yapılandırır:recommended: Dosyalara önerilen sistem sahipliğini (root:wheelgibi) uygular.preserve: Disk üzerindeki kaynak dosyaların gerçek sahipliğini aynen korur.preserve-other: Yalnızcapkgbuild'i çalıştıran kullanıcı dışındaki dosya sahiplerini korur, diğerlerinerecommendeddeğerini uygular.
--large-payload: 8 GiB veya daha büyük boyuttaki dosyaların paketlenmesini destekleyen yeni biçimde bir paket üretir.[!WARNING]
--large-payloadile üretilen paketler yalnızca macOS Monterey (12.0) ve üzeri sürümlerle uyumludur. Bu seçeneğin belirtilmesi durumunda--min-os-version 12.0parametresinin de iletilmesi zorunludur.--compression sıkıştırma-modu: Yük için sıkıştırma modunu belirler:legacy: Mac OS X 10.5 ile uyumlu eski sıkıştırma algoritmasını zorlar.latest: Belirtilen--min-os-versiondeğerine göre en yeni ve verimli sıkıştırma algoritmasını otomatik seçer.
--min-os-version sürüm: Paketin çalışabileceği minimum macOS işletim sistemi sürümünü belirtir.--sign kimlik-adı: Sonuç paketini belirtilen dijital sertifika kimliğiyle imzalar.--keychain anahtar-zinciri-yolu: İmza kimliğini aramak için özel bir anahtar zinciri (keychain) dosyası belirtir.--cert sertifika-adı: Pakete gömülecek ara sertifikanın Ortak Adını (Common Name) belirtir.--timestamp/--timestamp=none: İmzayla birlikte güvenilir zaman damgasını etkinleştirir veya devre dışı bırakır.--quiet: Standart çıktıdaki (stdout) durum iletilerini gizler. Hata mesajları standart hataya (stderr) basılmaya devam eder.
Bileşen Özellik Listesi (Component plist)
Bir hedef kök dizinini paketlerken, içerideki bundle'ların macOS Yükleyici tarafından nasıl ele alınacağını belirtmek için bir bileşen özellik listesi kullanabilirsiniz.
Desteklenen plist Anahtarları
| Anahtar Kelime | Tür | Açıklama |
|---|---|---|
RootRelativeBundlePath |
Dize | Hedef kök dizinine göre bundle yolu. |
BundleIsRelocatable |
Boole | Kullanıcı bundle'ı başka bir yere taşımışsa önceki sürümün üzerine mi yüklensin? |
BundleIsVersionChecked |
Boole | Diskte daha yeni bir sürüm varsa bundle yüklenmesin mi? |
BundleHasStrictIdentifier |
Boole | Yükleme yolunda birebir aynı bundle tanımlayıcıları zorunlu kılınsın mı? |
BundleOverwriteAction |
Dize | Diskteki mevcut sürüme nasıl davranılacağı (upgrade veya update). |
BundlePreInstallScriptPath |
Dize | Bundle'a özel preinstall betiğinin göreceli yolu. |
BundlePostInstallScriptPath |
Dize | Bundle'a özel postinstall betiğinin göreceli yolu. |
BundleInstallScriptTimeout |
Tam Sayı | Betiğin sonlandırılmadan önce çalışabileceği süre (saniye). |
ChildBundles |
Dizi | Bundle altındaki diğer alt bundle tanımları. |
BundleOverwriteActiondeğerleri:upgrade: Paketteki bundle, diskteki tüm sürümleri atomik olarak değiştirir (yeni sürümde olmayan eski dosyalar silinir).update: Paketteki bundle, diskteki sürümün üzerine yazar ancak pakette olmayan eski dosyalar olduğu gibi bırakılır. Diskte zaten bir sürüm yoksa bundle hiç yüklenmez.
İmzalı Paketler
Bir paket oluştururken, isteğe bağlı olarak pakete dijital bir imza ekleyebilirsiniz. Anahtar zincirlerinizden birinde geçerli bir sertifika ve özel anahtar (kimlik) bulunmalıdır. Bir imza eklemek için --sign seçeneğini kullanarak kimliğin Ortak Adını (Common Name) belirtmeniz gerekir.
İmzalama sertifikasını ve anahtar zincirinde bulunan tüm ara sertifikaları pkgbuild otomatik olarak pakete gömecektir. Ek sertifikalar gömmek istiyorsanız --cert seçeneğini kullanabilirsiniz.
Örnekler
Aşağıdaki örnekler kabukta (shell) çalıştırılabilecek şekilde gösterilmiştir:
/tmp/Sample.dsthedef kök dizinindeki tüm dosyaları kullanarakSample.pkgpaketini oluşturma:pkgbuild --identifier com.sample.pkg.app --root /tmp/Sample.dst Sample.pkgHedef kök dizini analiz ederek
components.plistadında şablon özellik listesi oluşturma:pkgbuild --analyze --root /tmp/Sample.dst components.plistDüzenlenmiş
components-edited.plistdosyasındaki özel kuralları uygulayarak paket oluşturma:pkgbuild --identifier com.sample.pkg.app --root /tmp/Sample.dst --component-plist components-edited.plist Sample.pkgBileşen paketini oluşturup dijital olarak imzalama:
pkgbuild --identifier com.sample.pkg.app --root /tmp/Sample.dst --sign "Developer ID Installer: Sirket Adi (ABC123XYZ)" Sample.pkg
Ayrıca Bakınız
productbuild(1), xcodebuild(1)