Özet
productbuild [--product gereksinimler-plist] {--component bilesen-yolu [yukleme-konumu]} urun-cikti-yolu
productbuild {--content icerik-yolu} urun-cikti-yolu
productbuild [--product gereksinimler-plist] {--root kok-yolu yukleme-konumu} urun-cikti-yolu
productbuild [seçenekler] --distribution dagitim-yolu [--package-path arama-yolu] urun-cikti-yolu
productbuild --synthesize [--product gereksinimler-plist] {--package pkg-yolu} dagitim-cikti-yolu
Açıklama
productbuild yardımcı programı, macOS Yükleyici (Installer) ile dağıtılabilen veya Mac App Store'a gönderilebilen nihai ürün arşivleri (.pkg uzantılı tekil düz dosyalar) oluşturur.
Araç 5 farklı modda çalıştırılabilir:
- Paketten Ürün Arşivi Oluşturma (Örn. App Store için):
--componentile tekil bir uygulama paketi ve varsayılan yükleme konumu belirtilerek otomatik bir dağıtım dosyası sentezlenir ve paket oluşturulur. - Uygulama İçi İçerik Paketleme:
--contentseçeneği ile uygulama içi dinamik ek içerikler paketlenir. - Derleme Kök Dizininden Ürün Arşivi Oluşturma:
xcodebuild(1)ile üretilen hedef derleme kökü (DSTROOT) ve kurulacağı hedef yol belirtilerek paketlenir. - Dağıtım Dosyasıyla Ürün Arşivi Oluşturma: Mevcut bir dağıtım (
XML) dosyası (--distribution) ve gerekli bileşen paketlerinin bulunduğu dizin yolları (--package-path) verilerek karmaşık, çok adımlı yükleyiciler derlenir. - Dağıtım Sentezleme (Şablon Üretimi): Bileşen paketlerinden bir dağıtım yapısı sentezlenir, ancak arşiv üretilmek yerine doğrudan düzenlenebilir bir XML dosyasına yazdırılır (
--synthesize).
[!IMPORTANT] Mac App Store'a gönderilecek nihai ürün arşivlerini hazırlarken her zaman
productbuildaracının--componentmodunu kullanın. Diğer modlar macOS Yükleyici ile uyumlu paketler üretir ancak App Store kurallarına uymayabilir.
Seçenekler
Aşağıdaki seçenekler mevcuttur:
--distribution dagitim-yolu: Yüklenecek sunumu, seçenek şemasını (choices) ve paket referanslarını tanımlayan dağıtım XML dosyasını kullanır.--package-path arama-yolu: Dağıtımda adı geçen bileşen paketlerinin (.pkg) aranacağı dizin yolunu tanımlar. Çoklu kullanım desteklenir.--resources kaynak-dizini: Belirtilen dizin altındaki yerelleştirilmiş (English.lprojvb.) ve yerelleştirilmemiş resim, lisans metni gibi tüm kaynakları ürün arşivine kopyalar.--ui arayuz-turu: Dağıtımda birden fazla arayüz alternatifi varsa, hangisinin kullanılacağını seçer.--identifier urun-tanimlayici: Ürün arşivi için benzersiz bir kimlik belirler.--version urun-surumu: Ürün arşivi için sürüm dizesini atar.--component bilesen-yolu [yukleme-konumu]: Belirtilen uygulamayı (veya bundle'ı) pakete dahil eder ve otomatik olarak dağıtım sentezler.--component-compression sikistirma-modu: Eklenen bileşenler için kullanılacak sıkıştırma türünü belirler:legacy: OS X 10.5 uyumlu eski sıkıştırmayı zorlar.none: Sıkıştırma yapılmaz (büyük pre-compressed dosyalar için yükleme süresini hızlandırır).auto: İşletim sistemi gereksinimlerine göre en verimli sıkıştırma algoritmasını otomatik belirler.default: Varsayılan sistem sıkıştırma davranışını korur.
--content icerik-yolu: Belirtilen dizinin içeriğini ürün arşivine ek içerik paketi olarak dahil eder.--root kok-yolu yukleme-konumu: Belirtilen derleme kök dizinini ve kurulacağı konumu pakete dahil eder.--package pkg-yolu [yukleme-konumu]: Var olan bir bileşen paketini sentezlenen dağıtıma dahil eder.--synthesize: Sentezlenen dağıtım dosyasını ürün arşivi üretmeden doğrudan bağımsız bir XML dosyasına yazar.--product gereksinimler-plist: Dağıtım sentezlenirken kurulum gereksinimlerini ayrı bir özellik listesi (plist) dosyasından alır.--scripts betikler-yolu: Yükleyici tarafındansystem.run()gibi tetiklenecek ek betiklerin dizinini belirtir.--plugins eklentiler-yolu: Yükleyici uygulamasının adımlarını genişletecek eklenti paketlerinin (InstallerSections.plistvb.) bulunduğu dizini belirler.--large-payload: 8 GiB veya daha büyük boyuttaki dosyaları barındıran paketlerin bütünlüğünü korur.[!WARNING]
--large-payloadkullanılması, hedef sistemlerde minimum macOS Monterey (12.0) sürümünü zorunlu kılar.--sign kimlik-adı: Ürün arşivini verilen sertifika kimliğinin Ortak Adı (Common Name) ile imzalar.--keychain anahtar-zinciri-yolu: İmza kimliğinin aranacağı özel anahtar zinciri dosyasını belirtir.--cert sertifika-adı: İmza güven zincirine eklenecek ara sertifikaları belirtir.--timestamp/--timestamp=none: İmzalama için zaman damgası durumunu kontrol eder.--quiet: Standart çıktı durum iletilerini kapatır.
Kurulum Öncesi Gereksinimler Özellik Listesi (Requirements plist)
Bir dağıtım sentezlenirken donanım ve yazılım gereksinimleri ayrı bir plist dosyasında (--product) belirtilebilir.
Desteklenen plist Anahtarları
| Anahtar | Tür | Açıklama |
|---|---|---|
os |
Dize Dizisi | İzin verilen minimum macOS işletim sistemi sürümleri. |
arch |
Dize Dizisi | Desteklenen donanım mimarileri (örneğin x86_64, arm64). |
ram |
Gerçek Sayı | Gigabayt cinsinden gereken minimum bellek (RAM) miktarı. |
bundle |
Sözlük Dizisi | Sistemde bulunması şart koşulan belirli paketlerin (bundle) listesi. |
all-bundles |
Boole | Belirtilen paketlerin tamamı gerekli mi? Yoksa biri yeterli mi? |
gl-renderer |
Dize | NSPredicate biçiminde OpenGL donanım işleme gereksinimleri. |
cl-device |
Dize | NSPredicate biçiminde OpenCL GPU aygıtı gereksinimleri. |
metal-device |
Dize | NSPredicate biçiminde Metal GPU aygıtı gereksinimleri. |
single-graphics-device |
Boole | OpenGL, OpenCL ve Metal testlerinin tek bir GPU tarafından karşılanma zorunluluğu. |
sysctl-requirements |
Dize | sysctl(2) donanım parametreleri bazlı ek gereksinimler (örneğin hw.physicalcpu > 1). |
home |
Boole | Yalnızca kullanıcının ev dizini altına yüklemeye izin verilsin mi? |
Grafik Donanım Arama Anahtar Yolları (gl-renderer ve cl-device)
| Anahtar Yolu | Tür | Açıklama |
|---|---|---|
version |
Double | Desteklenen OpenGL veya OpenCL sürümü (örneğin 2.0, 1.2). |
extensions |
Dizi | Desteklenen ekran kartı uzantılarının listesi. |
limits.<parametre> |
Tam Sayı | Adlandırılmış GL veya CL donanım parametresinin değeri (örn. GL_MAX_TEXTURE_SIZE). |
limits.param<hex> |
Tam Sayı | Sembolik adı tanınmayan parametrenin onaltılık (hex) enum değeri. |
Metal Aygıt Özellikleri (metal-device)
| Anahtar Yolu | Tür | Açıklama |
|---|---|---|
deviceName |
Dize | Donanım aygıtının adı. |
supportedFeatureSets |
Dizi | Desteklenen Metal özellik seti listesi (MTLFeatureSet_macOS_GPUFamily1_v1 gibi). |
isRemovable |
Boole | Aygıtın harici (eGPU) olarak çıkarılabilir olup olmadığı. |
isHeadless |
Boole | Ekran bağlantısı olmayan, yalnızca hesaplama GPU'su olup olmadığı. |
isLowPowerDevice |
Boole | Düşük güç tüketimli entegre grafik birimi olup olmadığı. |
rasterOrderGroupsSupported |
Boole | Raster düzen gruplarını destekleyip desteklemediği. |
argumentBuffersTier |
Tam Sayı | Grafik arabellek katman numarası (argument buffers tier). |
Bağımlı Paket Denetim Özellikleri (bundle)
| Anahtar | Tür | Açıklama |
|---|---|---|
id |
Dize | Paketin CFBundleIdentifier değeri (zorunlu). |
path |
Dize | Paketin sistemdeki varsayılan kontrol yolu (zorunlu). |
CFBundleShortVersionString |
Dize | Paketin sahip olması gereken minimum kısa sürüm dizesi. |
search |
Boole | Varsayılan yolda bulunamazsa sistemde otomatik aransın mı? |
İmzalı Ürün Arşivleri
Nihai ürün arşivleri, anahtar zincirinde (keychain) bulunan geçerli bir yükleyici imzalama kimliği (Developer ID Installer sertifikası) ile imzalanabilir. İmza, ürünün içerdiği tüm bileşen paketlerini otomatik olarak koruma altına alır, bu yüzden bileşenlerin (pkgbuild ile) önceden tek tek imzalanmasına gerek yoktur.
İmzalamayı ürünün test süreçleri tamamlanana kadar ertelemek isterseniz, daha sonra productsign(1) aracını kullanarak ürünü doğrudan imzalayabilirsiniz.
Örnekler
Aşağıdaki örnekler kabukta (shell) çalıştırılabilecek şekilde gösterilmiştir:
Sample.appuygulamasını/Applicationsaltına kuracak bir Mac App Store paketi sentezleme ve derleme:productbuild --component build/Release/Sample.app /Applications Urun.pkgKurulum öncesi donanım/sistem gereksinimlerini (
gereksinimler.plist) uygulayarak bir uygulama bileşeni paketleme:productbuild --product gereksinimler.plist --component build/Release/Sample.app /Applications Urun.pkgBir dağıtım (
Product.dist) dosyası ve belirli bir paket dizini kullanarak nihai yükleyici arşivini oluşturma:productbuild --distribution Product.dist --package-path /tmp/Packages Urun.pkgKaynak klasörü (
Resources) içeriğini (resimler, lisans metinleri) dahil ederek dağıtım bazlı paket oluşturma:productbuild --distribution Product.dist --resources Resources Urun.pkgÜrün arşivini oluştururken belirtilen sertifika kimliği ile imzalama:
productbuild --distribution Product.dist --sign "Developer ID Installer: Sirket Adi (ABC123XYZ)" Urun.pkg
Ayrıca Bakınız
pkgbuild(1), productsign(1), xcodebuild(1), sysctl(2)