2013-03-27 6 views
5

4 alt paketi içeren Mac OS X için bir yükleme paketi oluşturmak istiyorum. Alt paketler pkgbuild ile inşa edilmiştir. Son paket, hoş geldiniz ve lisans metni için bir Distribution.xml kullanarak ürün grubu ile oluşturulup konum seçimleri yüklenir.Mac paketi üzerinde pkgbuild ve productbuild kullanarak bir postflight komut dosyası nasıl çalıştırılır

Şimdi, yükleme başarılı olduktan sonra bir komut dosyası çalıştırmak istiyorum. Özellikle tüm paketlerin makbuzları yükleyici tarafından yazıldıktan sonra.

Adam sayfalarını, belgelerini ve diğer faydalı bağlantıları anladığım kadarıyla, bunun için bir yazım denetleyicisi kullanmalıyım. Maalesef işe alamıyorum. Postflight adını verdim ve pscbuild ile --script seçeneğini kullanarak alt pakete ekledim ama pkgbuild postflight betiklerini desteklemiyor gibi görünüyor. Postayı kurduğumda, maalesef makbuzlar yazılmadan önce çalışır.

Makbuzlar yazıldıktan sonra çalışmam gerekir çünkü XCode için bir paketin diğer paketlerinin konumlarını pkgutil aracını kullanarak yerleştirdiği bir xcconfig dosyası yazmak istiyorum.

Genişletilen pkg'a bir Komut Dosyası/klasör ekleyerek genişletme düzlemi kesmeyi kullanmaya çalıştım ancak düzleştirdikten sonra göz ardı ediliyor gibi görünüyor.

İhtiyaçlarımı gerçekleştirmenin bir yolu var mı? (Paketlerimin seçili yükleme konumlarını bir alt paketin yükleme konumundaki bir dosyaya yazılması)

Mümkünse, en azından başka bir yol varsa, kullanımdan kaldırılan paketleyici aracını kullanmaktan kaçınmak istiyorum. Sonunda öğrenmek zorunda gibi makbuzlar yazılır önce peşin

cevap

1

yılında

sayesinde postflight komut da çalıştırılır. Yani bu sorunun benim çözüm şimdi şu:

echo "${DSTROOT}" > "${SHARED_INSTALLER_TEMP}/my_install_location" 
:

Mac OS yükleyicisi tarafından belirlenen DSTROOT ortam değişkeni okumak ve paylaşılan geçici klasördeki bir dosyaya yazmak benim paketlerine postInstall komut eklemek

sonra bu bilgiye ihtiyacı benim ambalajlarda, ben bir postInstall komut dosyası aracılığıyla eski okundu (durumunda alt paket zaten yüklü ve kullanıcı alt paketlerinden bazı dışarıda bırakarak "yeniden yükler") ve daha sonra geçici dosya diğer paketten. paket zaten yüklü olup yeniden takdirde

Yani, yeni geçici dosyaları üzerinden yükleme konumu kullanır aksi yükleme konumu akım kullanır. hiçbir şey gerekli paket böylece yüklenmemiş varsa varsayılan değerleri kullanmak ve (muhtemelen çalışmaz) xcconfig dosyasına yazın:

pkgutil --pkg-info-plist my.package.bundle > "${SHARED_INSTALLER_TEMP}/tmp.plist" 
if [ -e "${SHARED_INSTALLER_TEMP}/tmp.plist" ]; 
then 
    MY_PACKAGE_VOL=`/usr/libexec/PlistBuddy -c "Print :volume" "${SHARED_INSTALLER_TEMP}/tmp.plist"` 
    MY_PACKAGE_DIR=`/usr/libexec/PlistBuddy -c "Print :install-location" "${SHARED_INSTALLER_TEMP}/tmp.plist"`  
    MY_PACKAGE_DIR="${MY_PACKAGE_VOL}${MY_PACKAGE_DIR}" 
fi 

"eski" okuduktan sonra yükleme konumu, ben kontrol

if [ -e "${SHARED_INSTALLER_TEMP}/my_install_location" ]; 
then 
    MY_PACKAGE_DIR=`cat "${SHARED_INSTALLER_TEMP}/my_install_location"` 
fi 

... 
Write the xcconfig file... 
... 

birisi daha iyi bir çözüm bana bildirin varsa: yeni bir diğer paketlerden daha önce yazılı geçici dosyasını kullanarak yükleme konumu var.

İlgili konular