一.理解iOS簽名機制
網上有很多資料,這里不展開細說,重點參考這三篇文章:
https://www.objccn.io/issue-17-2/
http://www.pchou.info/ios/2015/12/14/ios-certification-and-code-sign.html
http://blog.csdn.net/phunxm/article/details/42685597
二.重簽名準備條件
1.已經授權過的 iPhone 設備,在embedded.mobileprovision可以看到其Device UDID
2.開發者證書,P12文件,將其安裝到自己的mac上
3.描述文件embedded.mobileprovision,使用前文件名需要改為embedded
4.一個打包好的ipa文件,企業簽名或者開發者簽名都可以,
5.授權文件entitlements.plist,使用前文件名需要改為entitlements
6.應用信息Info.plist,從源ipa包中獲取,并且只更改其中的Bundle Identifier屬性。使用前文件名需要改為Info
7.將embedded.mobileprovision,entitlements.plist,Info.plist ,ipa包,這四個文件都放在同一個目錄下
8.下載 iTools 工具
三.文件說明
1.描述文件embedded.mobileprovision 和證書文件是一一對應的,在描述文件中有如下信息:
? ? ? ?AppID
? ? ? ?證書
? ? ? ?功能授權列表
? ? ? ?Device UDID列表
? ? ? ?蘋果的簽名
2. entitlements.plist是一個xml格式文件,自己手動創建,其中的key-value根據embedded.mobileprovision文件中的Entitlements屬性對應獲取。只需提取
application-identifier/com.apple.developer.team-identifier/get-task-allow/keychain-access-groups 這四個屬性和值即可
3. Info.plist 從ipa解壓后的Payload文件夾中獲取,拷貝出來后,只將里面的 Bundle Identifier 屬性值改為與 ?embedded.mobileprovision文件中的application-identifier值一致,并去掉其前綴(前綴由十位數字和大寫字母組成)
四.簽名步驟
打開終端,依次輸入:
1. cd ?{各資料文件所在目錄}
2. unzip {ipaName}.ipa ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 解壓ipa文件
3. cp Info.plist Payload/{ipaName}.app/Info.plist ? ? ? 替換待簽名包中的Info.plist 應用程序信息文件
4. rm -rf Payload/*.app/_CodeSignature/ ? ? ? ? ? ? ? ? ? 移除待簽名包中的_CodeSignature 簽名文件,這是個plist文件,涵蓋了包文件中所有文件的簽名
5. cp embedded.mobileprovision Payload/{ipaName}.app/embedded.mobileprovision ? ? ? ? ? ? ? 替換待簽名包中的描述文件
6. /usr/bin/codesign -f -s"iPhone Developer: xxxxxx(2F4935C2YD)"--entitlements entitlements.plist Payload/*.app/
上面一條為簽名命令,其中? ? "iPhone Developer:xxxxxx (2F4935C2YD)"為相應證書中的名字,在key-chain中可查看
7. zip -r {ipaName}Res.ipa Payload/ ? ? ? ? ? ? ? ? ? ? ? ? 壓縮待簽名包中的app文件
8. rm -rf Payload/ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?移除Payload文件
除了第3,4,5條可以不分前后,其他步驟嚴格按照順序執行
五.自動化執行
將上面提到的執行的命令,放到一個resign.sh文件中,在resign.sh文件中開頭中加上:#!/bin/sh? ,該文件也放在和其他資料文件同目錄下。最后在該sh文件中加上一些出錯處理,如文件不存在或文件名不正確。
打開終端,輸入:chmod 777 resign.sh ? ? ? ?(給該文件賦予權限)
接著執行:./resign.sh ? {ipaName}.ipa
如果整個流程順利,則會生成 ?{ipaName}Res.ipa文件,通過 iTools 工具安裝到指定的手機上