iOS 包签名及重签名
本文章主要介绍iOS 版本发布的两个相关功能。
一 : iOS 开发出的版本发布安装 用两种方式 :
1 --- 证书打包安装(比较多,便不再介绍)
2 --- 无证书打包安装 (主要用于合作开发商之间,自定义版本签名)
具体步骤:
1. 首先把项目从模拟器改成通用设备(Generic iOS Device), 然后command + B编 译项目.2. 然后在Products文件夹下, 找到我们的app, 右键show in finder.3. 把这个app包复制到桌面, 然后创建一个名字为Payload的文件夹, 这里的文件夹名字不可以是其他的名字, 必须是Payload, 否则会失败. 4, 然后把app包放进Payload文件夹内, 在把Payload文件夹压缩后更改zip格式为ipa即可.
二:iOS逆向 ipa包重签名
相关自动化签名的链接: https://zhuanlan.zhihu.com/p/23180455
转载: https://blog.csdn.net/chenyblog/article/details/78959762
软件环境
Mac: v10.12.6 (16G29)
ruby: v2.3.4
rvm: v1.29.3
sigh: v2.71.1
Xcode: v9.2
应用场景:
主要解决因重复打包导致测试同学回归测试的包和上传App Store的包不一致的问题。以及 合作方之间 证书不一致,需要重新签名问题。
App开发测试流程
分析:一般情况下,流程如下:
- 开发同学完成开发后,打包给测试同学测试
- 测试同学发现bug,然后开发同学继续开发改bug、打包
- 测试到一定阶段后,开发同学打包(封板),测试同学做回归测试
- 回归测试完成之后,开发同学再次打包上传App Store
可能存在的问题:
- 多次打包,麻烦,编译一次的成本比想象中大
- 多次打包,可能会导致测试同学回归测试的包和上传App Store的包不一致(!important)
解决办法:
对回归测试通过的ipa包进行重新签名,然后上传 App Store
ipa包重新签名
新版本的ipa包重新签名
-
切换至ipa目录
image
xxx.ipa和xxxDistrbution.mobileprovision文件在同一目录下
-
在终端输入
fastlane sigh resign
命令
image
此时会看到可选择的 identities 列表
-
Signing Identity:输入用来签名的证书标识
image
因为xxx.ipa和xxxDistrbution.mobileprovision文件在同一个目录下,所以省略了拖拽ipa文件和证书配置文件等步骤。
如果xxx.ipa和xxxDistrbution.mobileprovision文件不在一个目录下,你可能需要这样做:
-
在终端输入
fastlane sigh resign
命令 -
Path to ipa file:
- 输入ipa文件路径(拖拽ipa文件到终端即可)
-
Signing Identity:输入用来签名的证书标识(同上)
-
Path to provisioning file:
- 输入.mobileprovision文件路径(拖拽.mobileprovision文件到终端即可)
-
自动resign,成功
TIPS
输入的 Signing Identity 如果和 .mobileprovision文件 不一致,那么终端上仍会提示resign成功,但是,安装时会报错!
查看app信息(校验签名是否替换成功)
codesign -vv -d xxx.app
替换前(开发证书打的包)
替换后(企业证书打的包)
老版本的ipa包重新签名(已过时!!!)
# *********************** 部分命令如下: ***********************
# 工程绝对路径
project_path=$(pwd)
# build文件夹路径
build_path=${project_path}/build
# 创建保存打包结果的目录
result_path=${build_path}/build_release_$(date +%Y-%m-%d_%H_%M)
mkdir -p "${result_path}"
# target名称
target_name=${project_name}
# zip的路径
zipPath=${result_path}/${target_name}_jailbroken.zip
# 解压缩
unzip ${zipPath} -d ${result_path}
# payload目录
cd ${result_path}
payload="Payload"
bundle_path="${payload}/${target_name}.app"
#删除以前的签名
rm -r "${bundle_path}/_CodeSignature" "${bundle_path}/CodeResources" 2> /dev/null | true
#替换provision
cp "${project_path}/XXXDistribution.mobileprovision" "${bundle_path}/embedded.mobileprovision"
#重新签名
codesign -f -s "${rightDistributionSign}" --resource-rules "${bundle_path}/ResourceRules.plist" "${bundle_path}"
#ipa名称
ipa_name_p="${result_path}/${target_name}_${bundleShortVersion}_${dcName}_${dcId}.ipa"
#压缩zip
zip -r "${ipa_name_p}" "${payload}"
现在运行,报错如下:
Warning: --resource-rules has been deprecated in Mac OS X >= 10.10!
准备工作
本文主要讲述sigh命令的安装和使用。
安装
首先确保你安装了Xcode的命令行工具。
xcode-select --install
然后通过gem安装sigh,gem的安装请自行谷歌。
sudo gem install sigh
如何使用
在终端执行
sigh resign
依次执行下列步骤:
- 显示
Path to ipa file:
-将重签ipa拖入回车; - 显示
Signing Identity:
-填写正确的签名证书回车; - 显示
Path to provisioning file:
-将签名所用的描述文件拖入回车; - 最后等签名结果,成功后会替换原路径的ipa文件。
关于更多sigh用法请访问sigh使用
最后
签名成功的应用就可以顺利在我们的设备中安装了并使用了,用这个方法可以进行非越狱平台安装在正版基础移植的越狱应用。
!注意:如果是对iTunes正版应用进行签名在安装后运行时会闪退,需要先将应用进行破壳处理,因为苹果对应用进行了保护。