2012-11-18 31 views
1

已經嘗試過很多方法:PKGBUILD,productbuild不同,PackageMaker,軟件包的應用...如何從這些文件構建Mac OS X安裝程序包?

,我要構建的扁平封裝的結構:

Distribution - xml script 
MacBookPro2011EFIUpdate.pkg - flat package 
Resources - resources folder, contains language localizations 

扁平封裝信息:

id="com.apple.pkg.MacBookPro2011EFIUpdate" version="2.7.0.0.1.1330468277" 

例如,我的產品生成失敗:

productbuild: error: Cannot copy package "MacBookPro2011EFIUpdate.pkg" into product. 
(Bundle-style package "MacBookPro2011EFIUpdate.pkg" is not supported.) 


請嘗試從這些文件構建安裝程序包:Link
而且,如果您成功了,請告訴您如何做到這一點!

回答

9

正確的命令使用的確是productbuild,但它只適用於Flat軟件包,如錯誤所示。而你的MacBookPro2011EFIUpdate.pkg是一個Bundle風格的包:容易區分Bundle風格的包是一個目錄,其中Flat包是一個xar歸檔。

爲了得到你想要的東西,首先是捆綁式的包轉換成扁包:
pkgutil --flatten MacBookPro2011EFIUpdate.pkg FlatMacBookPro2011EFIUpdate.pkg

然後生成一個使用這一新的扁平封裝一個新的發行文件:
productbuild --package FlatMacBookPro2011EFIUpdate.pkg --synthesize newdist.dist

將您的腳本和資源條目從您的分發文件複製到newdist.dist。然後建立你的最終包:
productbuild --resources Resources/ --distribution newdist.dist MyCoolPackage.pkg

+0

嗨,我有一個mac應用程序文件,並使用「productbuild」,即hello.app和hello.pkg創建其包文件。現在我想爲該軟件包添加許可協議。爲此,我已經從hello.app文件創建了distribution.xml,現在我希望將其包含在包中,但是因爲不允許出現錯誤。 – Swati

+0

productbuild --synthesize --product「hello.app/Contents/Info.plist」--package hello.app distribution.xml – Swati

+0

<?xml version =「1.0」encoding =「utf-8」?> \t \t <安裝貴腳本minSpecVersion = 「1」> \t \t \t 我的實施例的應用 \t \t \t <許可證文件= 「的license.html」/> \t \t \t <自述文件= 「的README.html」/> \t \t \t ... \t \t \t ... \t \t Swati