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重签名工具开发之路(原理篇)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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