iOS重签名工具开发之路(介绍篇)

相关概念

证书:对iOS项目开发、发布资格进行授权的,主要会用到下面两种 :一个是Development开发证书,另外一个就是Distribution发布证书。具体存在形式就是我们开发人员经常收到并双击安装的那些p12文件。

描述文件:包含了证书信息,App ID,具备调试、测试权限的设备,以及应用的一些功能信息等等,后缀名Provisioning Profile,双击安装后,其实拷贝到了~/Library/MobileDevice/Provisioning Profiles目录下:

profile.png

重签名的解释:
当在Xcode进行archive或者通过脚本打包ipa的时候,通常到最后一步,要对包有一个签名过程,对签名起到关键作用的是配置好证书和描述文件。也就是一套证书,描述文件最终签名好一个对应的ipa。
而所谓的重签名的概念就是,可以把一个已经存在的ipa重新配置一套证书和描述文件,再签名生成一个新的ipa包。

开发背景

本人在一家手游公司,我们公司的游戏项目iOS包经常是几百兆,每次上线前正式打包需要十几分钟,而通常需要打出来好几种签名包:Development包(开发证书签名包),Distribution包(用于提审苹果商店包),有些时候还会用企业证书签名包给一些运营人员。这样三个包就需要三倍的打包时间,效率非常低

另外,我们公司比较依赖苹果提供的TestFight测试,而由于游戏包的包体比较大,每次提交苹果商店,TestFight后台审核生效的时间都在一个小时左右
我们各个游戏项目组都经常遇到这样的场景:用了十几分钟打出了dis包,提交苹果后台,QA等了一个小时后TestFight生效可以测试,结果测出了问题。然后修改完问题,又要十几分钟加上一个小时的等待。那如果在等待期间或者等待后又反复出问题,会极大地降低提审的效率。

利用重签名工具可以大大的节省以上的需求场景下所花费的时间。经测试利用重签名工具对一个300多兆的游戏ipa包进行重签只需要花费三四十秒左右。

目前的实践方案:
1.正式提审前,还按照之前正常的打包流程用dis(发布)证书打出一个ipa,用于正常的提审。
2.然后利用重签名工具把包重新签名为dev类型的包,两个包的二进制,以及资源,功能完全一样,因此交付给QA进行测试。
3.若运营或者渠道有需求,继续可以用企业证书重新签名,做分发。

个人开发重签名工具介绍

使用说明

开发了一个MAC APP应用,具有可视化的操作界面,且已经开源: GitHub入口

resign-tool.png

如上图所示,可以选择要签名的包文件,这个工具支持ipa,app,xcarchive三种文件作为签名源文件,重签名之后都会生成ipa
Provisioning Profile:用于选择描述文件,会像xcode一样检索所有双击安装在电脑上的描述文件,列举出来,会自动过滤掉过期的。
Signing Certificate: 选择对应的证书,同样会检索系统钥匙串安装的可用的证书,会自动过滤掉过期的。
new BundleID: 可以重新指定一个新的BundleID。
App Display Name: 可以重新设定一个app名字。
App Version: 可以重新指定version。
App Short Version: 可以重新指定Short version。

安装方法

1.直接下载源码使用xcode运行

命令行模式:

支持使用命令行调起签名功能:(打开源码工程运行macho-sign target,从Products目录拷贝出同名的可执行二进制文件) 命令:

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.目标机有多个版本xcode,命令行环境下没有select对应的当前的xcode版本:

检查一下当前命令号环境下的xcode:

xcode-select --print-path

如果发现指定版本不是当前所用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"

如果提示找不到,就打开 苹果官方证书下载地址 点击下载后,双击cer文件即可。OK。
ps:事实上如果缺少AppleWWDRCA.cer,所有申请的开发者证书,在钥匙串里面的显示都会变成不信任证书。

重签名过程中可能用到的有用的命令

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

等得到描述文件关联的app包名,过期时间,证书信息,应用配置信息Entitlements,TeamIdentifier等等很多的信息,这些信息也是重签名过程中用到的。

在接下来,我会把工具的一些原理,解析描述文件,代码调用命令执行,实施过程中遇到的一些问题以及解决方法等等,继续进行补充:iOS重签名工具开发之路(原理篇)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容

  • 接触iOS开发多年,花了一点时间去研究了一下iOS这套证书和签名机制,并撰文分享给需要的朋友。由于本人才疏学浅,多...
    风和花阅读 1,867评论 0 7
  • 非对称加密和摘要非对称加密的特性和用法非对称加密算法可能是世界上最重要的算法,它是当今电子商务等领域的基石。简而言...
    哈哈哈我的简书账号阅读 1,278评论 1 5
  • ipa 包重签名最新最简单教程 重签名的意义:ipa 重签名最大的用处是,不必重新打包,和配置其它第三方获取 ap...
    红发_KVO阅读 72,575评论 24 64
  • 冬天到了,天要降温了,上午骑着电动车出去给孩子填了两件衣服。这时候花钱的感觉挺好,花钱了还舒服,把孩子打扮保暖一点...
    文皓文文妈妈阅读 243评论 0 1
  • 通常我们听到拖延症都认为是不好的,经常有人跟我说拖延是病,得治。当然如果一些能够让自己成长学习的事情总是拖着不去做...
    BonnieBeauty阅读 351评论 1 2