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