在iOS開發(fā)中,為了方便測試和內(nèi)部體驗(yàn),往需要對ipa使用企業(yè)證書重新簽名,然后在內(nèi)部進(jìn)行分發(fā)。接下來,就介紹如何對ipa包進(jìn)行重簽。
簡單重簽
如果想要了解,iOS的證書及代碼簽名機(jī)制,可以閱讀這篇文章代碼簽名探析,這里就不再介紹。
首先,下載iReSign。這是一個(gè)開源工具,下載完成后打iReSign,選擇要重簽的ipa包和重簽時(shí)使用的開發(fā)者證書,點(diǎn)擊“重新簽名”按鈕,就會(huì)在原ipa包同目錄下生成一個(gè)重簽后的ipa包。

QQ20160317-0@2x.png
使用iTunes安裝重簽后的ipa包,這時(shí)在iOS8以下的系統(tǒng)可以正常安裝,但iOS8及以上系統(tǒng)就會(huì)安裝失敗。這是由于蘋果在iOS8.1.3系統(tǒng)以后加強(qiáng)了對ipa安裝包簽名的驗(yàn)證,主要區(qū)別在于ipa唯一標(biāo)識在原有Bundle Identifier的基礎(chǔ)上增加了證書ID,也就說安裝包和手機(jī)上已安裝APP的Bundle Identifier即使一致,如果兩者簽名的證書ID不相同,那么安裝包也無法正常安裝。
完整重簽
-
首先使用重簽時(shí)用的開發(fā)者證書創(chuàng)建一個(gè)App ID,bundleID隨意。
iReSign_identifiers.png -
為上一步創(chuàng)建的App ID創(chuàng)建一個(gè)Provisioning Profile并下載到本地(可以通過Xcode來完成)
iReSign_provisioning_profile.png - 創(chuàng)建Entitlements Plist。
<?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>PREFIX.yourappBundleID</string>
<key>aps-environment</key>
<string>production</string>
<key>get-task-allow</key>
<false/>
<key>keychain-access-groups</key>
<array>
<string>PREFIX.yourappBundleID</string>
</array>
</dict>
</plist>
新建一個(gè)plist文件,將上面代碼粘貼過去。將其中的PREFIX.yourappBundleID替換成前第1步截圖中的Prefix和ID,然后將文件保存為entitlements.plist。該文件中內(nèi)容配置可以參考代碼簽名探析,比如沒有推送功能的話,就去掉如下兩行:
<key>aps-environment</key>
<string>production</string>
最后,打開iReSign

QQ20160317-0@2x.png
- 第一行填待重簽ipa包的路徑
- 第二行填第2步中下載的Provisioning Profile的路徑
- 第三行填第3步創(chuàng)建的
entitlements.plist文件路徑 - 第四行勾選
修改ID,然后填寫第1步中的bundle ID。 - 第五行選擇重簽使用的開發(fā)者證書
- 點(diǎn)擊
重新簽名,大功告成!
重新簽名的ipa包將會(huì)存放在原ipa包同一目錄。

