iOS重簽名工具開發(fā)之路(介紹篇)

相關(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目錄下:

profile.png

重簽名的解釋:
當(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入口

resign-tool.png

如上圖所示鲤看,可以選擇要簽名的包文件缘揪,這個(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ā)之路(原理篇)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市敛苇,隨后出現(xiàn)的幾起案子妆绞,更是在濱河造成了極大的恐慌,老刑警劉巖枫攀,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件括饶,死亡現(xiàn)場離奇詭異,居然都是意外死亡来涨,警方通過查閱死者的電腦和手機(jī)图焰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蹦掐,“玉大人技羔,你說我怎么就攤上這事∥钥梗” “怎么了藤滥?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長社裆。 經(jīng)常有香客問我拙绊,道長,這世上最難降的妖魔是什么泳秀? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任标沪,我火速辦了婚禮,結(jié)果婚禮上晶默,老公的妹妹穿的比我還像新娘谨娜。我一直安慰自己,他們只是感情好磺陡,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著漠畜,像睡著了一般币他。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上憔狞,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天蝴悉,我揣著相機(jī)與錄音,去河邊找鬼瘾敢。 笑死拍冠,一個(gè)胖子當(dāng)著我的面吹牛尿这,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播庆杜,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼射众,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了晃财?” 一聲冷哼從身側(cè)響起叨橱,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎断盛,沒想到半個(gè)月后罗洗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钢猛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年伙菜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片命迈。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仇让,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出躺翻,到底是詐尸還是另有隱情丧叽,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布公你,位于F島的核電站踊淳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏陕靠。R本人自食惡果不足惜迂尝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望剪芥。 院中可真熱鬧垄开,春花似錦、人聲如沸税肪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽益兄。三九已至锻梳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間净捅,已是汗流浹背疑枯。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛔六,地道東北人荆永。 一個(gè)月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓废亭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親具钥。 傳聞我的和親對象是個(gè)殘疾皇子豆村,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 接觸iOS開發(fā)多年,花了一點(diǎn)時(shí)間去研究了一下iOS這套證書和簽名機(jī)制氓拼,并撰文分享給需要的朋友你画。由于本人才疏學(xué)淺,多...
    風(fēng)和花閱讀 1,858評論 0 7
  • 非對稱加密和摘要非對稱加密的特性和用法非對稱加密算法可能是世界上最重要的算法桃漾,它是當(dāng)今電子商務(wù)等領(lǐng)域的基石坏匪。簡而言...
    哈哈哈我的簡書賬號閱讀 1,273評論 1 5
  • ipa 包重簽名最新最簡單教程 重簽名的意義:ipa 重簽名最大的用處是,不必重新打包撬统,和配置其它第三方獲取 ap...
    紅發(fā)_KVO閱讀 72,516評論 24 63
  • 冬天到了适滓,天要降溫了,上午騎著電動(dòng)車出去給孩子填了兩件衣服恋追。這時(shí)候花錢的感覺挺好凭迹,花錢了還舒服,把孩子打扮保暖一點(diǎn)...
    文皓文文媽媽閱讀 242評論 0 1
  • 通常我們聽到拖延癥都認(rèn)為是不好的苦囱,經(jīng)常有人跟我說拖延是病嗅绸,得治。當(dāng)然如果一些能夠讓自己成長學(xué)習(xí)的事情總是拖著不去做...
    BonnieBeauty閱讀 349評論 1 2