iOS重簽名注意,證書要用ADhoc那個(gè)用來分發(fā)的證書嫉戚,其余的沒什么好說的
現(xiàn)在主流的重簽名有兩種:
1. 完全重簽名(更改Bundle ID)
證書愈犹,mobileprovision、Bundle ID三者信息對應(yīng)一致,這種重簽名方式基本上與直接對代碼進(jìn)行簽名的效果是一樣的腥光;
優(yōu)點(diǎn):有效期長鹅颊、穩(wěn)定性高敷存;
缺點(diǎn):維護(hù)成本較高,每一個(gè)重簽名的ipa都必須修改Bundle ID并且獨(dú)享一套證書和mobileprovision文件堪伍;
適用范圍:對簽名效果穩(wěn)定性有要求的公司和團(tuán)隊(duì)锚烦;
不完全重簽名(不更改Bundle ID)
只保證證書和mobileprovision對應(yīng)一致,至于這兩者與原ipa的Bundle ID等信息是否一致則不考慮帝雇;
優(yōu)點(diǎn):看起來較方便維護(hù)涮俄;
缺點(diǎn):實(shí)際上并沒有對原ipa的簽名進(jìn)行完全替換,很容易重簽名失敗尸闸,穩(wěn)定性不高彻亲,多則一兩個(gè)月孕锄,少則三五天就可能發(fā)生簽名失效,需要重新簽名苞尝,慎用;痢!
適用范圍:市面上出售企業(yè)證書進(jìn)行重簽名的個(gè)人賣家宙址;
下面詳細(xì)說下重簽名相關(guān)的知識以及這兩種重簽名的方法轴脐,大家一起學(xué)習(xí)探討。
在了解重簽名之前抡砂,我們先要了解下iOS 簽名機(jī)制以及作用
簽名機(jī)制的目的
在 iOS 出來之前大咱,在主流操作系統(tǒng)(Mac/Windows/Linux)上開發(fā)和運(yùn)行軟件是不需要簽名的,軟件隨便從哪里下載都能運(yùn)行注益,導(dǎo)致平臺對第三方軟件難以控制碴巾,盜版流行。蘋果希望解決這樣的問題丑搔,在 iOS 平臺對第三方 APP 有絕對的控制權(quán)厦瓢,一定要保證每一個(gè)安裝到 iOS 上的 APP 都是經(jīng)過蘋果官方允許的,怎樣保證呢啤月?就是通過簽名機(jī)制旷痕。
簽名機(jī)制的實(shí)現(xiàn)
說到簽名機(jī)制的實(shí)現(xiàn),就不得不提各種證書顽冶、mobileprovision、Entitlements售碳、CertificateSigningRequest强重、p12、AppID這些概念性的東西每一個(gè)拿出來說都是需要很大篇幅的贸人,我們在這里不講概念间景,就簡單說下他們是如何來實(shí)現(xiàn)IPA簽名的功能的。
iOS簽名主要用到的有證書和mobileprovision這兩個(gè)文件艺智,其他文件(CertificateSigningRequest倘要、AppID)都是為了生成這兩種文件而存在,或者是這兩種文件在的衍生文件(P12十拣、Entitlements)封拧,當(dāng)簽名代碼時(shí),會將證書文件夭问、mobileprovision一起寫入泽西,同時(shí)為了管控APP 的其他權(quán)限,Xcode 會生成Entitlements文件,這些文件缰趋、資源和代碼最終都會以ipa文件的形式導(dǎo)出
通過解壓ipa文件的結(jié)構(gòu)也可以看出一些問題:
ipa內(nèi)部文件結(jié)構(gòu)
資源文件:例如圖片捧杉、html陕见、等等。
CodeSignature/CodeResources:這是一個(gè)plist文件味抖,可用文本查看评甜,其中的內(nèi)容就是是程序包中(不包括Frameworks)所有文件的簽名。注意這里是所有文件仔涩。意味著你的程序一旦簽名忍坷,就不能更改其中任何的東西,包括資源文件和可執(zhí)行文件本身红柱。iOS系統(tǒng)會檢查這些簽名承匣;
可執(zhí)行文件:此文件跟資源文件一樣需要簽名;
mobileprovision:次文件用來校驗(yàn)證書文件锤悄、Bundle ID韧骗、,從MC上生成的零聚。
Frameworks:程序引用的非系統(tǒng)自帶的Frameworks袍暴,每個(gè)Frameworks其實(shí)就是一個(gè)app,其中的結(jié)構(gòu)應(yīng)該和app差不多隶症,也包含簽名信息CodeResources文件
上述這些文件組合在一起政模,共同實(shí)現(xiàn)了ipa的簽名功能。
了解了簽名原理蚂会,我們再來了解下iOS系統(tǒng)驗(yàn)證簽名有效性的過程淋样,只有了解這個(gè)過程才能更好的重簽名
iOS 系統(tǒng)驗(yàn)證簽名有效性的過程
iOS 系統(tǒng)驗(yàn)證簽名有效性的過程
解壓ipa;
取出embedded.mobileprovision胁住,通過簽名校驗(yàn)是否被篡改過趁猴;
校驗(yàn)所有文件的簽名,包括Frameworks;
驗(yàn)證授權(quán)設(shè)備是否符合embedded.mobileprovision文件中的信息;
比對Info.plist里面的BundleId是否符合embedded.mobileprovision文件中的信息;
簽名和驗(yàn)證簽名的原理都了解了彪见,接下來我們就可以對癥下藥儡司,進(jìn)行重簽名
重簽名的實(shí)現(xiàn)
既然簽名是由證書和mobileprovision共同實(shí)現(xiàn),那么重簽名的過程其實(shí)就是將新的證書和mobileprovision替換舊文件的過程余指,但由于系統(tǒng)在驗(yàn)證app是否合法的時(shí)候還會隨機(jī)驗(yàn)證授權(quán)設(shè)備列表和Bundle ID捕犬、所以必須修改Bundle ID與新的mobileprovision中的信息保持一致,否則將會有驗(yàn)證失敗的風(fēng)險(xiǎn)酵镜。
完全重簽名就是采用完全替換的方式碉碉,所以在面對Apple的合法性校驗(yàn)的時(shí)候,不會有任何問題淮韭;
不完全重簽名由于忽視了Bundle ID校驗(yàn)這一環(huán)節(jié)誉裆,簽名不穩(wěn)定,有效期很短缸濒!
重簽名的操作
完全重簽名
完全重簽名現(xiàn)在很多工具都可以實(shí)現(xiàn)了足丢,我們公司用到的是Fastlane中的resign功能粱腻,我這邊介紹一種更輕量級的GUI工具iReSign,使用非常簡單斩跌,一張圖即可說明绍些。
iReSign使用說明
注意:選擇重簽名的描述文件和重簽名的證書文件時(shí),一定要配套耀鸦,同時(shí)一定要勾選修改ID柬批,并將App ID修改為與重簽名的描述文件中的APP ID 一致,切記袖订!
2. 不完全重簽名
不完全重簽名的方式需要用到一種比較老的工具iOS_resign_scripts
這個(gè)工具提供三種重簽名的腳本氮帐,但是據(jù)我個(gè)人血淚踩坑,只有洛姑。上沐。第三種方式有效,前兩種已經(jīng)失效了楞艾。参咙。。
方法:
將重簽名腳本ios_resign_with_ipa和 要重簽名的ipa硫眯、mobileprovision放入同一個(gè)文件夾蕴侧;
cd 到文件夾中
執(zhí)行代碼
$shios_resign_with_ipa$source_ipa_file$Developer_code_sign$mobileprovision$target_app_related_path
注意:source_ipa_file待重簽名的ipa名稱。target_app_related_path重簽名后ipa的名稱$Developer_code_sign用到的證書名稱两入。$mobileprovision描述文件名稱
Example:
$shios_resign_with_ipa Testerhome.ipa"iPhone Developer: hengjie chen (XXXXXXXX)"embedded.mobileprovision Testerhome-resigned.ipa
成功之后净宵,上傳重簽名過的ipa安裝可以完美運(yùn)行
作者:卿卿小可
鏈接:http://www.reibang.com/p/92821e8db5fa
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)裹纳,非商業(yè)轉(zhuǎn)載請注明出處塘娶。