重签名的意义:ipa 重签名最大的用处是,不必重新打包,和 配置 其它第三方获取 app key 等操作,直接重签名之后依然可以拥有这些功能,更 快的 发布 测试 或者灰度版本。
本文介绍三种方式的重签名,当然着重介绍第一种,因为目前来说是签名最全面的,也是最可靠的。
首先,我们得准备需要的东西
开发 证书或者 企业 证书(如果没有企业账号可找代签获得苹果企业签名服务,这也是一个不错的办法。),什么都好吧,反正是你想重签名的证书,关于证书和 provision描述文件的申请和 下载 ,请参考【iOS 证书申请和使用详解】
1.这里我说一下必须要注意的点,证书必须是申请证书的电脑导出的p12文件才可以,因为有信任 认证 ,不然双击是不会添加到钥匙串,也不会显示出来私钥的。
2.下载下来的 mobileprovision文件必须改名字为 embedded.mobileprovison 然后 安装 。
3.一般重签名用企业发布证书!个人证书,公司证书当然也可以(你重签的包也只能是你的 devices 里选中的机器能运行)
4.按照原理是可以无限重签的,但是因为 苹果 的新的 安全 验证机制,加强了对 ipa 安装包签名的验证,主要区别在于 ipa 唯一标识在原来的Bundle Identifier的基础上增加了证书的 ID
ipa重签名最直接的教程
图中的框里面的字符串就是证书 ID,只有两者完全匹配,才能覆盖安装。
5.每一个重签版本都需重新申请一个 app id 和 provisoning profile,不然同appid的会覆盖。
mac电脑的开发环境配置,不得不提的就是工具集的 神器 HomeBrew
安装 homebrew,命令:/usr/bin/ruby -e “$(curl -fsSL https ://raw. git hu bus http://ercontent.com/Homebrew/install/master/install)”
安装 ruby,命令:brew install ruby更新 ruby 版本
安装 sigh,命令:sudo gem install sigh如果出错那就换成gem install sigh安装过程是漫长的。(在安装 sigh 之前,你得检查 gem的镜像源,现在一般为 http s://http://gems.ruby-china.org如果提示 timeout 还是啥的,请把 https 的 s 去掉,重新添加) 设置可以参考 Ruby China
确保自己这个时候还是清醒的,因为一系列安装踩坑下来,你都快崩溃了(当然,你脸好当我没说)
准备好需要重签名的 ipa 包
1.准备好需要重签名的 ipa 包(不会打包的看这里 iOS App打包上架超详细流程(手把手图文教你) )
2.如果你是偷别人的包,请先把 ipa 包砸壳 iOS逆向 ,这里面的大神带你飞
3. 百度 上一大堆关乎重签名的办法,但是预期都不是很理想,因为命令行的方法现在几乎行不通了。
开始我们的重签名之路吧
一、sigh resign:最有效,不出错的重签名方法。已验证
第一步,把我们要重签名的 ipa 包和我们下载下来安装的 embedded.mobileprovison放在同一文件夹 目录 下,同级
第二步,终端 cd 到这个 ipa 的文件夹目录下,执行sigh resign或者 fastlane sigh resign命令
第三步:这时候,sigh 会直接弹出下面这个指令要你输入:Signing Id entity 这个就是你的证书的十六进制串,输入之后回车,然后等待见证奇迹的时刻吧。
看图说话最直接,下面就看看终端的截图,当出现Successfully signed 路径/xxx.ipa!原来文件夹中的.ipa已经被重签名了。
ipa重签名最直接的教程
第四步:验证我们重签的 ipa 包的时刻到了
现在还能用的助手不多了,pp 助手目前还存活,iTools 已经频繁报错没更新了。pp 助手安装 ipa 包的流程大致如下:
点击应用游戏目录,选择连接的机器,有个应用列表,点击左上角有个安装,这时候就可以安装我们本地的 ipa 包了
先安装重签名之前的 ipa 包,然后再安装我们重签名之后的 ipa 包,如果没有覆盖,出现了两个一模一样的 App ,各自点开没闪退没打不开的情况下,说明我们签名成功了。
sigh resign关于重签名有时候失败或者无法安装的情况说明。
1.如果ipa 里面有除了系统之外的 framework或者dy lib 的话,也需要先签名,不然也会导致签名后安装失败!至于 sigh 里面大致执行的脚本 代码 如下:
for framework in "$FRAMEWORKS_DIR"/*
do
if [[ "$framework" == *.framework || "$framework" == *.dylib ]]
then
log "Resigning '$framework'"
# Must not qote KEYCHAIN_FLAG because it needs to be unwrapped and passed to codesign with spaces
# shellcheck disable=SC2086
/usr/bin/codesign ${VERBOSE} ${KEYCHAIN_FLAG} -f -s "$CERTIFICATE" "$framework"
checkStatus
else
log "Ignoring non-framework: $framework"
fi
done
看得懂或者熟悉脚本的同学可以前往以下地址:/usr/local/lib/ruby/gems/2.3.0/gems/sigh-2.0.1/lib/assets/resign.sh版本号是根据自己当前 sigh 插件 的版本号决定的(直接执行此脚本可以重签多 tar get 的 ipa:./resign.sh YourApp.ipa “iPhone Distribution: YourCompanyOr Developer Name” -p “bundel id”= .mobileprovision -p “bundel id”= .mobileprovision -p “bundel id”= .mobileprovision -p “bundel id”= .mobileprovision resignedYourApp.ipa)
2.苹果的 政策 越来越收紧,这种方案的可行性的周期不确定。因为很多方案已经随着版本的更新,变得不可行了。从 iTunes 关闭了 ipa应该 管理 功能就知道了,对于包的安全性苹果越来越重视。另外,企业账号申请的难度越来越高,也有这种趋势。
3.你们还可以通过下面的 文章 去尝试适合自己的方法,有图形化重签的工具,也有纯命令行的,但是对于结果,就看个人造化了。
二、iResign 重签名方案
下载 iResign ,下载完直接有个可执行的iResign.app,双击执行
ipa重签名最直接的教程
参数 路径跟 图片 上描述的很清楚,第一项是你要重签名的 ipa 的路径,第二项是我们重签名的配置描述文件的路径(不用改为 embedded 也可以),第四项,填写我们生成重签名用到的mobileprovison的 bundle identifier,勾选修改 ID,第五项是我们重签名用到的mobileprovison的证书
第三项很多教程说不用填,但是不填是无法 自动生成 的,会一直卡在entitlements generated这个步骤,无法生成。所以我们要自己生成entitlements.p list ! 首先我们把要重签的 XXXX.ipa 解压后得到 Payload目录,然后终端 cd 到Payload目录下,执行以下命令:/usr/libexec/PlistBuddy -x -c “print :Entitlements ” /dev/stdin <<< $(security cms -D -i XXXX.app/embedded.mobileprovision) > Entitlements.plist 其中 XXXX.app 是你要重签的 ipa的包名。生成的 entitlements.plist存放在Payload目录下,然后我们用 文本编辑或者 Xcode打开 plist 文件,修改里面的 appli cat ion-identifier
PREFIX.yourappBundleID 为第四项填写的 bundle id。到此,配置完成,点击重新签名!
噔噔噔!签名成功
ipa重签名最直接的教程
用 pp 助手安装验证,是没问题的,可以同时存在两个不同的包
iResign 使用注意事项:第三个 plist 文件是必填的,修改ID 的 bunle id 要跟 plist 修改的对应。
三、 iOS ipa重签名工具 – iOS App Signer
Github的官方 read me 提示:This app requires Xcode to be installed, it has only been successfully tested on OS X 10.11 at this time.
下载 iOS App Signer 源码 ,运行在 May Mac 上
ipa重签名最直接的教程
第一项,填写我们需要重签名的 ipa 路径,第二项是我们要签名的证书,第三项选择我们配置的 provisoning profile(默认项Re-Sign Only 是无效的),然后,点击star!
ipa重签名最直接的教程
pp助手验证通过!此方式会自动分析 provisoning profile描述文件中的东西,所以不用我们自己填写变更的bundle id