重签名目的:越狱包重签名运行到非越狱手机进行调试。
手动重签名大体步骤(以墨迹天气app 为例子):
1.删除插件Plugins文件夹以及里面的内容。
2.Watch 直接干掉!()(微信有这一步,其他App无)
3.对 Frameworks 进行签名!
4.给可执行文件执行权限! chmod +x WeChat
5.拷贝描述文件
6.修改info.plist 的Bundle ID!
7.生成plist的权限文件
8.签名整个APP!
$codesign -fs "iPhone Developer: xxx (5ZBE4C879L)" --no-strict --entitlements=en.plist WeChat.app
9.打包 生成zip
$zip -ry WeChat.ipa Payload
一.前期准备:
1.利用PP助手下载越狱的墨迹天气的App包。
2.查看越狱包的签名信息
codesign -vv -d 包的路径
3.查询本地所有授权证书
通过终端命定:security find-identity -v -p codesigning
4.查看App可执行文件是否加密
二.手动进行签名
1.删除插件Plugins文件夹以及里面的内容
2.对 Frameworks 进行签名!
如果有xxx.framework,利用终端对其进行重签名 进入到对应的Frameworks文件目录下:
执行:codesign -fs " 上面查询到的本地的授权证书" xxx.framework
3.给可执行文件执行权限!
chmod +x 可执行文件
终端执行:
chmod +x MojiWeather的文件地址
执行后可以看到可执行文件的描述信息变为 Unix 可执行文件
4.拷贝描述文件
随便建个项目A,运行一下,生成app包,之后获取它的描述文件:
将描述文件copy 到MojiWeather包里
5.修改info.plist 的Bundle ID!
在新建的项目A中,就在刚刚的描述文件的同级目录,找到info.plist 文件, 之后复制bundle Id到MojiWeather包里的info.plist中
6.生成plist的权限文件
查看当前用的描述文件的权限: security cms -D -i embedded.mobileprovision
在新建的项目A中创建plist(newPlist.plist)文件,之后Source Code 展示,将复制的代码放到粘贴到里面,如图:
将新建的plist 文件 放到和MojiWeather包的同级目录。
7.签名整个APP!
$codesign -fs "iPhone Developer: xxx (5ZBE4C879L)" --no-strict --entitlements=newPlist.plist MojiWeather.app
8.打包 生成zip
将MojiWeather.app 压缩成zip的文件,之后将.zip改成ipa,获取ipa的安装文件。
9.安装重签名的App
接下来就是见证奇迹的时刻了。。。。。。
我擦嘞,报错了,又失败了。。。。。。 我为什么加又呢?
彩蛋: 同志们不要灰心,我用MonkeyDev 签名成功了,说明上面的步骤哪里出问题了,持续完善中。
MonkeyDev:https://github.com/AloneMonkey/MonkeyDev
三.利用Xcode进行签名
刚才手动硬整未成功,这回咱们试试借助Xcode签名试一下。
1.替换app包
新建Xcode 工程XcodeSign,运行一下, 在finder中打开XcodeSign.app文件。
用墨迹天气(MojiWeather)的包替换上图新建的项目的包,替换后注意名字要改成XcodeSign,和项目生成的包名相同,达到欺骗Xcode的目的。
二.更改plist 文件
三.修改可执行文件权限
chmod +x 可执行文件 同手动签名第三步。
之后运行项目:
mmp:
四.脚本自动化重签
上面的两个都失败了,这个应该不会让大家失望了。
1.新建项目添加脚本信息
2.配置脚本信息
在项目的同级目录建立个文件夹
脚本仅供参考:因为我又失败了。算了直接用MonkeyDev吧!
# ${SRCROOT} 它是工程文件所在的目录
# 定义路径变量 TEMP_PATH
TEMP_PATH="${SRCROOT}/Temp"
#资源文件夹
ASSETS_PATH="${SRCROOT}/APP"
#ipa包路径
TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"
#新建Temp文件夹 rm 移除
rm -rf "${SRCROOT}/Temp"
mkdir -p "${SRCROOT}/Temp"
#---------------------------------------- #
1. 解压IPA到Temp下
unzip -oqq "$TARGET_IPA_PATH" -d "$TEMP_PATH"
# 拿到解压的临时的APP的路径
TEMP_APP_PATH=$(set -- "$TEMP_PATH/Payload/"*.app;echo "$1")
#可以用echo打印路径
# echo "路径是:$TEMP_APP_PATH"
#----------------------------------------
#2. 将解压出来的.app拷贝进入工程下
# BUILT_PRODUCTS_DIR 工程生成的APP包的路径 环境变量
# TARGET_NAME target名称 环境变量
TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"
echo "app路径:$TARGET_APP_PATH"
rm -rf "$TARGET_APP_PATH"
mkdir -p "$TARGET_APP_PATH"
#拷贝app文件到TARGET_APP_PATH
cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH"
#----------------------------------------
#3. 删除extension和WatchAPP. 个人证书没法签名Extention (微信独有的)
rm -rf "$TARGET_APP_PATH/PlugIns"
rm -rf "$TARGET_APP_PATH/Watch"
#----------------------------------------
# 4. 更新info.plist文件 CFBundleIdentifier(bundle id)
# 设置:"Set : KEY Value" "目标文件路径"
#/usr/libexec/PlistBuddy 一段可执行文件 -c 执行 (Command)
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"
#----------------------------------------
# 5. 给MachO文件上执行权限
# 拿到MachO文件的路径
APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`
#上可执行权限
chmod +x "$TARGET_APP_PATH/$APP_BINARY"
#----------------------------------------
# 6. 重签名第三方 FrameWorks
TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks"
#判断是否有这个路径 有则重签 否则会报路径错误
if [ -d "$TARGET_APP_FRAMEWORKS_PATH"];
then
for FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"*
do
#签名
/usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK"
done
fi