注:此手段僅用于iOS開發(fā)技術(shù)交流耸彪,請(qǐng)勿用于商業(yè)及非法用途,如產(chǎn)生法律糾紛與本人無(wú)關(guān)忘苛。
作者最初研究這個(gè)的原因是蝉娜,因?yàn)閄code升級(jí)唱较,出現(xiàn)了一些意想不到的bug,而排查召川、修復(fù)bug又太花時(shí)間南缓,情況緊急。因?yàn)橹恍枰鎿Q地址和版本號(hào)扮宠,于是考慮采用更新舊安裝包的方式西乖。
需要準(zhǔn)備的內(nèi)容
- iOS安裝包一個(gè)(ipa文件)
- 發(fā)布證書(導(dǎo)入在鑰匙串中)
一般自己開發(fā)的都會(huì)有吧 - 描述文件
同上
原理
- ipa文件可以通過(guò)修改后綴名為zip解壓,得到app的資源文件和一個(gè)可執(zhí)行文件坛增。
我們能修改的只有資源文件获雕,比如plist,圖片收捣,多語(yǔ)言strings等届案,包括bundle里的資源文件。
如果是cordova項(xiàng)目有本地h5文件的罢艾,也可以替換(作者沒(méi)有試過(guò))
但是如果修改了里面的文件楣颠,再壓縮改回去,這個(gè)安裝包是沒(méi)有辦法安裝的咐蚯,因?yàn)楹灻?yàn)證不通過(guò)童漩。
- 一般enterprise安裝包和adhoc安裝包在證書過(guò)期之后是需要重新打包/重簽名的,過(guò)期的安裝包重簽名之后就可以重新使用了春锋。
所以矫膨,我們可以通過(guò)修改資源文件,再將修改后的不可用的安裝包通過(guò)重簽名的方式使其可用
比如版本號(hào)期奔,一般直接重簽名的話侧馅,版本號(hào)是不會(huì)變的,但是有些分發(fā)平臺(tái)要求新版本必須版本號(hào)+1(比如Air Watch)呐萌,這樣的話重簽名的安裝包是沒(méi)有辦法上傳的馁痴。
而App版本號(hào)一般都放在Info.plist文件里,我們只需要修改這個(gè)文件里的版本號(hào)肺孤,重新壓縮罗晕,改回ipa,再重簽名渠旁,就能得到一個(gè)新版本的App了攀例。
重簽名工具(Github):iResign
關(guān)于App安全保護(hù)
鑒于以上操作可以修改App的資源文件,考慮安全的話顾腊,可以在打包前檢測(cè)一下資源文件的md5粤铭,并將校驗(yàn)寫到代碼中,可以防止惡意修改杂靶,禁止啟動(dòng)app梆惯,甚至上報(bào)酱鸭。
由于解壓包可以查看資源文件,建議敏感信息(比如secret)不要直接放到資源文件里垛吗。