前言

关于签名有好多方法,这里介绍两种常用的重签名方法,手动签名和Xcode签名,为了方便讲解,在这里就全程用微信进行举例吧。

准备工作

砸过壳的ipa包,没有可以去各种助手上越狱应用区下载一个,例如去PP助手下载一个越狱版本的微信

手动签名

1.获取embedded.mobileprovision描述文件

新建一个工程,真机编译,获取Products文件夹下app文件中的embedded.mobileprovision描述文件 例如:新建一个叫WeChat的Demo项目,真机编译,然后选择WeChat.app Show in Finder,显示包内容,获取里面的 embedded.mobileprovision描述文件

2.生成entitlements.plist文件

通过以上生成的描述文件,执行以下两行命令,生成entitlements.plist,此文件是给app包签名的文件

security cms -D -i embedded.mobileprovision > profile.plist
/usr/libexec/PlistBuddy -x -c 'Print :Entitlements' profile.plist > entitlements.plist

3.调整IPA包

解压ipa包,获取Payload文件夹下的app文件,删掉app文件中的PlugIns(拓展文件夹)和Watch文件夹, 因为拓展文件夹和Watch签名对其不生效,所以删除

4.签名Frameworks

首先先查看电脑上安装的证书,选择创建工程时候使用的证书进行签名

security find-identity -p codesigning -v

cd到Frameworks文件夹下,把所有的framework挨个进行签名,命令为:

codesign -fs "xxxx” xxx.framework

例如:

codesign -fs "iPhone Developer: 1234567890@qq.com (ABCDEFGHIGK)" WCDB.framework

5.给app中的可执行文件赋权限

例如给微信赋权限:

chmod +x WeChat

6.替换Bundle Identifier(可省略)

复制项目的Bundle Identifier ID替换appInfo.plist文件的Bundle Identifier ID,然后保存即可

7.签名app文件

codesign -f -s xxxx --no-strict --entitlements=entitlements.plist xxx.app

例如签名微信:

codesign -f -s  "iPhone Developer: 1234567890@qq.com (ABCDEFGHIGK)" --no-strict --entitlements=entitlements.plist WeChat.app

8.打包成ipa文件

新建一个Payload文件夹,然后把WeChat.app文件放进去,然后终端执行命令打包

例如打包微信:

zip -r WeChat.ipa Payload

9.利用xcode安装到手机上

打开Xcode command + shift + 2 进行安装