ipa重簽名

參數(shù)說明

appName.ipa: 要重簽名的ipa

embedded.mobileprovision: 用來簽名的provision文件

entitlements.plist: 授權(quán)機制

distributionName: 指該簽名對應(yīng)的證書的名字,在keychain中可以找到對應(yīng)證書的名稱

第一步:解壓IPA

unzip appName.ipa

第二步:修改BundleID(應(yīng)用顯示名字也可以修改,不需要修改則跳過)

修改路徑 Payload/appName.app/Info.plistBundle identifier 的值,改成你希望的bundleID。

第三步:更換證書

cp embedded.mobileprovision Payload/appName.app

provision文件名字一定要改成embedded,因為Payload/appName.app中的證書名字就是embedded。

第四步:對framework中的動態(tài)庫重簽名

必須對Payload/appName.app/framework中的動態(tài)庫進(jìn)行重簽名,不然應(yīng)用安裝成功后,會閃退。

codesign -fs "iPhone Distribution: TuTu Da (CDJ7TE32UE)" --no-strict --entitlements entitlements.plist Payload/appName.app/Frameworks/ZegoAVKit2.framework

我的項目Payload/appName.app/framework中只有ZegoAVKit2.framework,所以只對ZegoAVKit2.framework進(jìn)行重簽名。

第五步:對Payload/appName.app重簽名

codesign -fs "iPhone Distribution: TuTu Da (CDJ7TE32UE)" --no-strict --entitlements entitlements.plist Payload/appName.app  

第六步:打包

zip -r newName.ipa Payload




可能遇到的問題:

問題一:安裝重簽名的ipa包后,打開應(yīng)用閃退

解決方法:
對app包重簽名前必須先對framework中的動態(tài)庫進(jìn)行重簽名。

問題二:App installation failed


解決方法:
查看entitlements.plist文件中的application-identifier的BundleID是不是用來重簽名證書上的BundleID。




授權(quán)機制entitlements.plist

授權(quán)機制決定了哪些系統(tǒng)資源在什么情況下允許被一個應(yīng)用使用。簡單的說它就是一個沙盒的配置列表。Xcode會將這個文件作為 --entitlements參數(shù)的內(nèi)容傳給codesign。

這個文件內(nèi)部格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>application-identifier</key>
    <string>CDJ7TE32UE.com.test.test</string>
    <key>aps-environment</key>
    <string>production</string>
    <key>com.apple.developer.associated-domains</key>
    <string>*</string>
    <key>com.apple.developer.team-identifier</key>
    <string>CDJ7TE32UE</string>
    <key>get-task-allow</key>
    <false/>
    <key>keychain-access-groups</key>
    <array>
        <string>CDJ7TE32UE.*</string>
    </array>
</dict>
</plist>

注意:application-identifier中的BundleID必須是用來重簽名證書上的BundleID,不然重簽名出來的ipa包安裝會出錯。




實用命令

利用security命令查看系統(tǒng)中所有可以用來對代碼進(jìn)行簽名的私鑰:

security find-identity -v -p codesigning 


利用security命令查看. mobileprovision文件內(nèi)容:

security cms -D -i example.mobileprovision


利用codesign命令查看appName.app的簽名信息:

codesign -vv -d Payload/appName.app 


利用codesign檢查二進(jìn)制文件是否已經(jīng)設(shè)置好簽名:

codesign --verify Payload/appName.app

如果簽名完好則沒有任何輸出。

利用codesign查看簽名信息中包含哪些授權(quán)信息:

codesign -d --entitlements - Payload/appName.app 




對ipa重簽名的其他方式

方式一:用iReSign工具進(jìn)行ipa重簽名
方法二:ipa重簽名-ruby實現(xiàn)




參考文章

代碼簽名探析
iOS證書及ipa包重簽名探究
sign重簽名的App部分手機不能安裝
Entitlements.plist not created properly

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容