相關(guān)概念
證書:對iOS項(xiàng)目開發(fā)缨称、發(fā)布資格進(jìn)行授權(quán)的,主要會(huì)用到下面兩種 :一個(gè)是Development開發(fā)證書蛹磺,另外一個(gè)就是Distribution發(fā)布證書畅买。具體存在形式就是我們開發(fā)人員經(jīng)常收到并雙擊安裝的那些p12文件。
描述文件:包含了證書信息贞岭,App ID八毯,具備調(diào)試、測試權(quán)限的設(shè)備瞄桨,以及應(yīng)用的一些功能信息等等话速,后綴名Provisioning Profile,雙擊安裝后芯侥,其實(shí)拷貝到了~/Library/MobileDevice/Provisioning Profiles目錄下:
重簽名的解釋:
當(dāng)在Xcode進(jìn)行archive或者通過腳本打包ipa的時(shí)候泊交,通常到最后一步乳讥,要對包有一個(gè)簽名過程,對簽名起到關(guān)鍵作用的是配置好證書和描述文件廓俭。也就是一套證書云石,描述文件最終簽名好一個(gè)對應(yīng)的ipa。
而所謂的重簽名的概念就是研乒,可以把一個(gè)已經(jīng)存在的ipa重新配置一套證書和描述文件汹忠,再簽名生成一個(gè)新的ipa包。
開發(fā)背景
本人在一家手游公司雹熬,我們公司的游戲項(xiàng)目iOS包經(jīng)常是幾百兆宽菜,每次上線前正式打包需要十幾分鐘,而通常需要打出來好幾種簽名包:Development包(開發(fā)證書簽名包)竿报,Distribution包(用于提審蘋果商店包)铅乡,有些時(shí)候還會(huì)用企業(yè)證書簽名包給一些運(yùn)營人員。這樣三個(gè)包就需要三倍的打包時(shí)間烈菌,效率非常低阵幸。
另外,我們公司比較依賴蘋果提供的TestFight測試芽世,而由于游戲包的包體比較大挚赊,每次提交蘋果商店,TestFight后臺(tái)審核生效的時(shí)間都在一個(gè)小時(shí)左右捂襟。
我們各個(gè)游戲項(xiàng)目組都經(jīng)常遇到這樣的場景:用了十幾分鐘打出了dis包咬腕,提交蘋果后臺(tái)欢峰,QA等了一個(gè)小時(shí)后TestFight生效可以測試葬荷,結(jié)果測出了問題。然后修改完問題纽帖,又要十幾分鐘加上一個(gè)小時(shí)的等待宠漩。那如果在等待期間或者等待后又反復(fù)出問題,會(huì)極大地降低提審的效率懊直。
利用重簽名工具可以大大的節(jié)省以上的需求場景下所花費(fèi)的時(shí)間扒吁。經(jīng)測試?yán)弥睾灻ぞ邔σ粋€(gè)300多兆的游戲ipa包進(jìn)行重簽只需要花費(fèi)三四十秒左右。
目前的實(shí)踐方案:
1.正式提審前室囊,還按照之前正常的打包流程用dis(發(fā)布)證書打出一個(gè)ipa雕崩,用于正常的提審。
2.然后利用重簽名工具把包重新簽名為dev類型的包融撞,兩個(gè)包的二進(jìn)制盼铁,以及資源,功能完全一樣尝偎,因此交付給QA進(jìn)行測試饶火。
3.若運(yùn)營或者渠道有需求鹏控,繼續(xù)可以用企業(yè)證書重新簽名,做分發(fā)肤寝。
個(gè)人開發(fā)重簽名工具介紹
使用說明
開發(fā)了一個(gè)MAC APP應(yīng)用当辐,具有可視化的操作界面,且已經(jīng)開源: GitHub入口
如上圖所示鲤看,可以選擇要簽名的包文件缘揪,這個(gè)工具支持ipa,app义桂,xcarchive三種文件作為簽名源文件寺晌,重簽名之后都會(huì)生成ipa。
Provisioning Profile:用于選擇描述文件澡刹,會(huì)像xcode一樣檢索所有雙擊安裝在電腦上的描述文件呻征,列舉出來,會(huì)自動(dòng)過濾掉過期的罢浇。
Signing Certificate: 選擇對應(yīng)的證書陆赋,同樣會(huì)檢索系統(tǒng)鑰匙串安裝的可用的證書,會(huì)自動(dòng)過濾掉過期的嚷闭。
new BundleID: 可以重新指定一個(gè)新的BundleID攒岛。
App Display Name: 可以重新設(shè)定一個(gè)app名字。
App Version: 可以重新指定version胞锰。
App Short Version: 可以重新指定Short version灾锯。
安裝方法
1.直接下載源碼使用xcode運(yùn)行
命令行模式:
支持使用命令行調(diào)起簽名功能:(打開源碼工程運(yùn)行macho-sign target,從Products目錄拷貝出同名的可執(zhí)行二進(jìn)制文件) 命令:
Usage:
$ ./macho-sign
Commands:
+ resign - resign a mach-o type file
Options:
--filepath [default: ] - A mach-o type file path use to resign.
--provisionPath [default: ] - select a mobileProvision file.
--bundleid [default: ] - change bundle identifier in the info.plist of target ipa or other mach-o excuable file.
--displayName [default: ] - change bundle displayName in the info.plist of target ipa or other mach-o excuable file.
--bundleVersion [default: ] - change bundleVersion in the info.plist of target ipa or other mach-o excuable file.
--bundleShortVersion [default: ] - change bundleShortVersion in the info.plist of target ipa or other mach-o excuable file.
--certificate [default: ] - input name of the certificate in login keychan to resign.
--outputPath [default: ] - outputPath after resign.
使用舉例:
./macho-sign resign --filepath /xxx/xxx.ipa --provisionPath /xxx/xxx.mobileprovision --certificate "xxx: xx." --outputPath /xxx/xxx.ipa
簽名失敗可能的問題以及解決方案
1.目標(biāo)機(jī)有多個(gè)版本xcode嗅榕,命令行環(huán)境下沒有select對應(yīng)的當(dāng)前的xcode版本:
檢查一下當(dāng)前命令號環(huán)境下的xcode:
xcode-select --print-path
如果發(fā)現(xiàn)指定版本不是當(dāng)前所用xocde顺饮,就使用以下命令指定xcode
sudo xcode-select -switch /Applications/XcodeXXX.app/Contents/Developer
2.缺少Apple Worldwide Developer Relations Certification Authority證書
檢查一下是否安裝了AppleWWDRCA.cer:
security find-certificate -c "Apple Worldwide Developer Relations Certification Authority"
如果提示找不到,就打開 蘋果官方證書下載地址 點(diǎn)擊下載后,雙擊cer文件即可凌那。OK兼雄。
ps:事實(shí)上如果缺少AppleWWDRCA.cer,所有申請的開發(fā)者證書帽蝶,在鑰匙串里面的顯示都會(huì)變成不信任證書赦肋。
重簽名過程中可能用到的有用的命令
1.查看app文件信息
codesign -vv -d /xxx/xxx.app
能得到app文件簽名,包名信息励稳,TeamIdentifier等等:
Identifier=com.xxx.xxx
Format=app bundle with Mach-O universal (armv7 arm64)
CodeDirectory v=20200 size=24373 flags=0x0(none) hashes=754+5 location=embedded
Signature size=4682
Authority=iPhone Distribution: xxx Inc.
Authority=Apple Worldwide Developer Relations Certification Authority
Authority=Apple Root CA
Signed Time=2017年12月28日 上午11:01:05
Info.plist entries=46
TeamIdentifier=xxx
Sealed Resources version=2 rules=13 files=228
Internal requirements count=1 size=176
2.查看描述文件信息
security cms -D -i /xxx/xxx.mobileprovision
等得到描述文件關(guān)聯(lián)的app包名佃乘,過期時(shí)間,證書信息驹尼,應(yīng)用配置信息Entitlements趣避,TeamIdentifier等等很多的信息,這些信息也是重簽名過程中用到的扶欣。
在接下來鹅巍,我會(huì)把工具的一些原理千扶,解析描述文件,代碼調(diào)用命令執(zhí)行骆捧,實(shí)施過程中遇到的一些問題以及解決方法等等澎羞,繼續(xù)進(jìn)行補(bǔ)充:iOS重簽名工具開發(fā)之路(原理篇)