重簽名:可以讓用個人開發(fā)者賬號打出來的包,不用上架Appstore即可將其安裝到所有未越獄的iOS設(shè)備上(前提條件是你得有一個企業(yè)證書(需要證書或簽名的可以加扣:425374542))。
風(fēng)險提示:這種重簽名方法僅供個人有興趣的開發(fā)者去玩玩,不提倡用于商用,提倡使用Appstore上傳發(fā)布到你的應(yīng)用,重簽名只能算是黑科技,蘋果所不提倡的東西,如果APP使用量過大的話,企業(yè)證書有被封停的風(fēng)險。
蘋果在iOS8.1.3系統(tǒng)以后加強了對ipa安裝包簽名的驗證,主要區(qū)別在于ipa唯一標識在原有Bundle Identifier的基礎(chǔ)上增加了證書ID,也就說安裝包和手機上已安裝APP的Bundle Identifier即使一致,如果兩者簽名的證書ID不相同,那么安裝包也無法正常安裝。
開始:
_CodeSignature -> ipa包簽名文件
embedded.mobileprovision -> 證書配置文件
替換上面兩個文件就解決了ipa重簽名的主要問題。
替換_CodeSignature里面的簽名文件需要用到一個文件entitlements.plist的授權(quán)文件。所以我們要創(chuàng)建一個entitlements.plist文件,具體格式如下:
xml格式如下:
其中xxxxxxxxxx.com.xxx.xxx要換成ipa標識(就是證書ID+BundleID),其中xxxxxxxxxx就是你的證書ID,后面部分是bundleID
注意:get-task-allow一定要填NO(false)(否則安裝一定失敗),還有bundleID一定要與新的embedded.mobileprovision相對應(yīng),不然會導(dǎo)致簽名失敗。
準備工作都做好了 ,是開始我們重簽名的真正的步驟了:
1、解壓你所要簽名的ipa包(其中包含Payload(如果是個人證書打包還會包含Symbols文件夾))
unzip xxx.ipa
2、刪除Payload中xxx.app里面的_CodeSignature文件夾
rm -rf Payload/xxx.app/_CodeSignature
3、拷貝embedded.mobileprovision(新的必須改名為embedded)到Payload中xxx.app里面
cp embedded.mobileprovision Payload/xxx.app
4、創(chuàng)建entitlements.plist,并用該文件進行重簽名
codesign -f -s "iPhone Distribution: xxxxxxxxxx" --entitlements entitlements.plist Payload/xxx.app
其中”iPhone Distribution: xxxxxxxxxx“是證書名
5、打包
zip -r xxx.ipa Payload (如果之前文件夾包含Symbols文件夾,該文件夾與Payload文件夾一起打包)
6、安裝到手機進行驗證
xcode、iTunes、各種手機助手、或者一些第三方托管平臺(比如蒲公英等)