古詩詞大全網 - 藝術簽名 - 如何重新簽名ipa文件

如何重新簽名ipa文件

準備

在重簽名之前要做壹些準備工作。

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助手那樣的第三方工具安裝的。