Shell脚本应用重签名
2018-12-08 本文已影响27人
KinKen
一、前言
上篇手动非脚本应用重签名 介绍了一步一步对第三方应用进行重签名,我们会觉得每次都这样手动操作的话太浪费时间,能不能让Xcode自动帮我们完成这些骚操作呢?当然可以,Xcode提供了在工程编译期间Run Script的功能,让我们可以在编译期间执行我们的脚本。
二、Shell脚本
Shell脚本(英语:Shell script),又称Shell命令稿、程序化脚本,是一种计算机程序使用的文本文件,内容由一连串的shell命令组成,经由Unix Shell直译其内容后运作。被当成是一种脚本语言来设计,其运作方式与解释型语言相当,由Unix shell扮演命令行解释器的角色,在读取shell脚本之后,依序运行其中的shell命令,之后输出结果。利用shell脚本可以进行系统管理,文件操作等。
三、配置重签名的Shell脚本
-
新建工程,在Build Phases下添加Run Script
Xcode配置执行的脚本
在当前工程下的目录创建AppResign.sh
脚本文件(命名随意),在Run Script窗口下填写${SRCROOT}/AppResign.sh
,意思就是让Xcode在编译期间运行我们自定义的脚本。 -
编写Shell脚本
脚本第一条语句的TargetApp是当前工程下需要我们新建的文件夹,放置我们已经脱壳了的ipa包,这是一个比较简陋的脚本,还有待学习增强,日后学习Shell脚本语言再回头研究。
#当前项目目录下的TargetApp文件夹,里面放ipa包
ASSETS_PATH="${SRCROOT}/TargetApp"
#临时目录
TEMP_PATH="${SRCROOT}/Temp"
#目标ipa包路径
TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"
#每次运行前都清空Temp文件夹
rm -rf "${SRCROOT}/Temp"
mkdir -p "${SRCROOT}/Temp"
#-----------------------------------------#
#解压缩ipa
unzip -oqq "${TARGET_IPA_PATH}" -d "${TEMP_PATH}"
#获取解压后的app路径
TEMP_APP_PATH=$(set -- "${TEMP_PATH}/Payload/"*.app;echo "$1")
#获取当前工程编译app的路径
TARGET_APP_PATH="${BUILT_PRODUCTS_DIR}/${TARGET_NAME}.app"
#清空一下工程生成的App包
rm -rf "${TARGET_APP_PATH}"
mkdir -p "${TARGET_APP_PATH}"
#-----------------------------------------#
#将三方应用app拷贝到当前工程编译app的路径
cp -rf "${TEMP_APP_PATH}/" "${TARGET_APP_PATH}"
#删除一些免费开发者账户签名不了的内容
rm -rf "$TARGET_APP_PATH/PlugIns"
rm -rf "$TARGET_APP_PATH/Watch"
#修改三方应用的Info.plist文件
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"
# 拿到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"
#重签Frameworks
TARGET_FRAMEWORKS_PATH="${TARGET_APP_PATH}/Frameworks"
if [ -d "${TARGET_FRAMEWORKS_PATH}"];
then
for FRAMEWORK in "${TARGET_FRAMEWORKS_PATH}/"*
do
/usr/bin/codesign --force --sign "$EXPANDED_CODE_SGIN_IDENTITY" "$FRAMEWORK"
done
fi
-
Xcode自动重签&真机调试
将我们脱壳的ipa放到TargetApp文件夹,接着command + R运行当前工程,可以看到一系列copy,install操作,最后真机运行了我们准备好的三方应用,enjoy~
2.jpg
四、总结
-
脚本签名可以很快地帮我们重签名三方应用,大大节省时间
-
虽然脚本签名十分方便,但是还是要知道其中的签名原理