準備
在重簽名之前要做壹些準備工作。
1.首先要下載並安裝Xcode,裏面有個codesign_allocate程序,在安裝時/usr/bin中會多壹個codesign的程序,該程序用於ipa包的簽名。
2.企業證書的Certificate文件,私鑰文件,Provisioning Profile文件等。註意企業證書壹定要是iOS Distribution的類型,不能是iOS Development。
重簽名步驟
1.解壓ipa
解壓ipa得到Payload/[App name].bundle,打開bundle。
2.刪除舊的ipa簽名信息
刪除bundle中的_CodeSignature文件夾,也就是刪除之前ipa的簽名信息。
3.更換證書
將bundle中舊的Provisioning Profile刪除,用我們自己的企業證書的Provisioning Profile替代。
註意,要將ipa包中我們的企業證書改名為embedded.mobileprovision。
4.修改bundle內容
此時我們可以盡情地修改bundle中的內容,例如添加壹個動態庫,刪除壹張圖片等。
註意:如果要往bundle中添加動態庫,必須要先將其壓縮成zip文件,在程序啟動時將其解壓到Documents目錄下再dlopen,否則程序在啟動時加載動態庫文件會卡死在那裏。
5.重新簽名
在完成bundle內容的修改後,需要通過/usr/bin/codesign程序重新簽名,命令如下:
/usr/bin/codesign -f -s "iPhone Distribution: YourCompanyName" --resource-rules Payload/ MYAPP.app/ResourceRules.plist Payload/ MYAPP.app
其中iPhone Distribution可以從鑰匙串訪問中獲取,就是企業證書的名字,例如下面的"iPhone Distribution:XXXXXXXXXX":
具體的命令示例:
codesign -f -s "iPhone Developer: XXXXXXXXXX" --resource-rules Payload/NdCP_Game_Demo.app/ResourceRules.plist Payload/NdCP_Game_Demo.app
這條命令的意思是:使用keychain中"iPhone Developer: XXXXXXXXXX"標識的證書,根據Payload/NdCP_Game_Demo.app/ResourceRules.plist文件中的規則進行簽名,如果ipa包中已經存在簽名,那麽將被替換,該過程生成的_CodeSignature目錄將存放在Payload/NdCP_Game_Demo.app目錄下。
在命令執行後,在bundle中會生成壹個新的_CodeSignature目錄,裏面包含了新的簽名信息。
6.重新打包成ipa
在完成上述工作後,可以生成新的ipa進行發布。示例命令如下:
zip -r ResignTest.ipa Payload
# 註意Payload後面不能有“/”
7.發布
經過打包發布測試,得出結論:對修改了ipa包內容和其中的簽名後,重簽名的ipa文件可以在非越獄設備和越獄設備上成功安裝。註意,是通過帶有SSL證書的網站和Apple系統安裝的(企業內部分發程序),不是通過PP助手那樣的第三方工具安裝的。