ipa是iOS系统app安装包,如果我们想对App Store上的软件进行修改然后重新安装到手机上、或者对已有的APP进行企业分发而不更改包名、或者手机上安装多个相同的APP等都需要进行重签名。
本文主要讲解重签名,不涉及砸壳,如ipa包是在App Store下载的,则需要先进行砸壳。
准备工作
- 首先你得有个苹果开发者证书
- 然后准备一个mobileprovision描述文件,可以在你的https://developer.apple.com/account/ios/certificate/上创建和下载
或者从Xcode中导出。
将准备好的xxx.mobileprovision
文件重名为embedded.mobileprovision
。
使用软件工具进行重签名(需要更改包名Bundle Id)
iReSign
下载地址iReSign,使用反法非常简单:
- 1.选择ipa文件
- 2.选择准备好的mobileprovision文件。
- 3.entitlements.plist,这个无需选择,iReSign会自动生成。
- 4.这里填写mobileprovision所对应的bundle Id,并勾选修改ID,否则会重签名失败,此工具不支持在不修改bundle id的情况下重签名。
- 5.选择你的证书。
点击重签名就可以在原ipa文件同一目录生成以resigned.ipa结尾新的重签名的ipa文件。
ios-app-signer
下载地址https://github.com/DanTheMan827/ios-app-signer
这个项目是在iReSign基础上开发的,自己使用Xcode编译即可。
使用也是非常简单:
选择需要重签名的包,签名用的证书,描述文件,包名,点击Start即可。后三项根据自己的需求选填,亲测修改名称无效。
使用codesign命令进行签名(无需修改包名 Bundle Id)
生成 entitlements.plist 文件
我们有两种方式获得entitlements.plist
文件
- 使用iReSign对进行重签名,然后将重签名后的包进行解压,得到
entitlements.plist
文件 - 通过
mobileprovision
文件生成:
首先生成一个完整的plist文件
security cms -D -i embedded.mobileprovision > embedded.plist
我们实际上需要的是中间红线框的那部分,接下来执行
/usr/libexec/PlistBuddy -x -c 'Print:Entitlements' embedded.plist > entitlements.plist
就可以生成我们需要的entitlements.plist
了。
重签名
一切准备就绪,接下来开始进行签名操作了
- 解压ipa包
unzip xxx.ipa
tip:xxx.ipa
为你的需要重签名的包。
- 删除签名文件
rm -rf Payload/xxx.app/_CodeSignature/
- 替换配置文件
cp embedded.mobileprovision Payload/xxx.app/
- 签名
codesign -f -s "你的证书的名称" --entitlements entitlements.plist Payload/xxx.app
tip:证书的名称你可以通过mac自带的keychain Access
钥匙串访问程序查看电脑上的证书。
- 打包
zip -r resign_xxx.ipa Payload/
tip:resign_xxx.ipa
名字是随便起的。
大功告成,你可以顺手解压出来的文件清理删除掉rm -r Payload
。