给公司做项目,之前因为企业证书被封闭,需要紧急发布ios应用,于是从网上找了个卖苹果企业证书的,对方只要了我的ipa安装包,然后一番倒腾,就可以将我原来的ipa包中的证书给替换掉,甚是惊奇,由此,知道了ipa重签名一说


最近公司项目不多,想起之前的这件事,于是就也想倒腾一番,学习下重签名的流程;以下为学习流程:


首先找了一个resign.sh的脚本,内容就先不贴了,然后从appstore下载了我经常用的网易新闻,不管如何倒腾,就是无法重签名成功;哎,此路不通,继续找其他方法

又从网上下载了一个iReSign的软件,看最后的更新日期,比较老,经过一番测试,仍旧不行;

继续从网上寻找资源,后来在如下的地址:http://bbs.iosre.com/t/topic/2966,发现了一篇文章;这篇文章的介绍比较详细,并且:fastlane/sigh/这个项目一直在维护,

感觉应该可以的,于是,下载,安装,经过一番倒腾,安装成功,仿照fastlane/sigh 上的用法操作一遍,使用网易新闻重签名,不成功;看评论,找原因,好像是因为直接从appstore下载的ipa,没有脱壳,没办法,从pp助手上下载了一个越狱的网易新闻ipa,继续测试:结果报了一个如下的错误:


No provisioning profile for nested application: '_floatsignTemp/Payload/NewsBoard.app/PlugIns/NotificationContentExtension.appex' with bundle identifier 'com.netease.news.notificationcontent'

看来这就是所谓的多目标证书,没办法,采用懒省事的办法:除了主证书,其他子证书都使用相同的一个证书文件:命令如下

/usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.28.7/sigh/lib/assets/resign.sh /Users/xxx/Desktop/recodeSignApp/670.ipa "F6757CD6720B0967E91F1243300D" -p com.netease.news=/Users/xxx/Desktop/recodeSignApp/CLM_Manager_Hoc.mobileprovision -p com.netease.news.entrancewidget=/Users/xxx/Desktop/recodeSignApp/Manager_Hoc_Plugin.mobileprovision -p com.netease.news.notificationcontent=/Users/xxx/Desktop/recodeSignApp/Manager_Hoc_Plugin.mobileprovision -p com.netease.news.notificationservice=/Users/xxx/Desktop/recodeSignApp/Manager_Hoc_Plugin.mobileprovision -p com.netease.news.newsboardtodaywidget=/Users/xxx/Desktop/recodeSignApp/Manager_Hoc_Plugin.mobileprovision -p com.netease.news.watchkitapp.watchkitextension=/Users/xxx/Desktop/recodeSignApp/Manager_Hoc_Plugin.mobileprovision -p com.netease.news.watchkitapp=/Users/xxx/Desktop/recodeSignApp/Manager_Hoc_Plugin.mobileprovision /Users/njwangdou1/Desktop/recodeSignApp/789.ipa


可以执行成功,但用itunes却无法安装成功,一时不知是何原因,此问题暂且不标


前面不是说ipa只有是脱壳的才能重签名成功吗,那我要先试试没脱壳的,从最简单的入手;首选从appstore下载了我们自己开发的一个app,ipa包中只有一个证书,使用

fastlane sigh resign 按照提示,拖入ipa文件,输入Signing Identity:20B0967E91F12433,拖入Path to provisioning file:

执行结果:[!] ipa file could not be found or is not an ipa file

看来没脱壳的ipa确实不行,

那好,现在来验证经过脱壳的,从pp助手下载我们越狱版的app,重复上述步骤,一切ok,使用itunes安装,可以安装成功,打开,也能正常运行,

为了更进一步的验证,从pp助手下载公司的app进行验证,只要原app中是包含一个证书的应用,用fastlane sigh resign此方法都是没有问题了

到这里,我们已经验证了,使用fastlane sigh resign对单target应用重签名是没有问题的,


下面,我们要对多target应用的验证,还是从http://bbs.iosre.com/t/topic/2966的文章中得到提示,我去下载了乐动力应用,不过,遗憾的是,最新版本已经的target已经不是2个了,加入watchkit等的功能,目标过多,放弃,

网易新闻,也是多target应用,不能用于测试,


继续从pp助手随机找应用测试,最后找到一个叫做:理光景达S-42(越狱应用)的应用,经过验证,该应用只包含三个目标,一个主target,一个watchkit,还有一个watchkitextention;如果后两个还是用同样的证书,使用/usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.28.7/sigh/lib/assets/resign.sh命令,可以重签名成功,但无法安装,

到这里,我已经更肯定的怀疑,一个证书必须用在一个target上了,不过还没有经过验证,当日已经下班,剩下的等第二天上班来验证

Provisioning Profiles,下载三个Provisioning Profiles


执行如下命令:

/usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.28.7/sigh/lib/assets/resign.sh /Users/xxx/Desktop/recodeSignApp/670.ipa "F6757CD6720B0967E91FF5FEC0B6396" -p cn.ricoh.theta2.watchkitapp.watchkitextension=/Users/xxx/Desktop/recodeSignApp/watchkit_extention_group_hoc.mobileprovision -p cn.ricoh.theta2.watchkitapp=/Users/xxx/Desktop/recodeSignApp/watchkit_group_hoc.mobileprovision -p cn.ricoh.theta2=/Users/xxx/Desktop/recodeSignApp/main_group_hoc.mobileprovision /Users/xxx/Desktop/recodeSignApp/789.ipa

一切顺利; 使用itunes打开789.ipa,同步,安装,然后成功!

打开应用,正常运行,至此,对多目标ipa的重签名成功,


后面,网易新闻,和腾讯都没有测试,流程应该差不多