xcode通过脚本调试第三方app

先创建一个与要调试的app名称相同的项目(不是必须,但是要修改脚本)
然后就是在同一个目录下创建相应的目录。这个不是必须修改脚本就是了。
第一个目录(TEMP)是放已经解密的app
xcode通过脚本调试第三方app
第二个目录APP目录是生成后会拷贝到这里的。里面不要放东西。
xcode通过脚本调试第三方app
脚本如下:

#${SRCROOT} 它是工程文件所在的目录
TEMP_PATH="${SRCROOT}/Temp"
#资源文件夹,我们提前在工程目录下新建一个app文件夹, 里面放ipa包
ASSETS_PATH="${SRCROOT}APP"
#目录ipa包路径
TARGET_IPA_PATH="${SRCROOT}/*.ipa"
#清空Temp 文件夹
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")
#---------------------------
#---------------------------
#2.将解压出来的.app 拷贝进入工程下
TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"  #真是醉了这样不行
echo "temp:$TARGET_APP_PATH"
echo "app路径:$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"
rm -rf "$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"
mkdir -p "$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"
cp -rf "$TEMP_APP_PATH/" "$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"
#---------------------------
#---------------------------
#3.删除一些无法签名的
rm -rf "$BUILT_PRODUCTS_DIR/$TARGET_NAME.app/PlugIns"
rm -rf "$BUILT_PRODUCTS_DIR/$TARGET_NAME.app/Watch"
#---------------------------
#---------------------------
#4. 更新info.plist文件 的Bundle identifier
#设置:“Set :KEY Value ” “目标文件路径”
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier  $PRODUCT_BUNDLE_IDENTIFIER" "$BUILT_PRODUCTS_DIR/$TARGET_NAME.app/Info.plist"
echo "Set :CFBundleIdentifier  $PRODUCT_BUNDLE_IDENTIFIER"
echo "$BUILT_PRODUCTS_DIR/$TARGET_NAME.app/Info.plist"
#---------------------------
#---------------------------
#5. 给Maho文件上执行 仅限
APP_BINARY=`plutil -convert xml1 -o - $BUILT_PRODUCTS_DIR/$TARGET_NAME.app/Info.plist | grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`
echo "APP_BINARY $APP_BINARY"
chmod +x "$BUILT_PRODUCTS_DIR/$TARGET_NAME.app/$APP_BINARY"
#---------------------------
#---------------------------
#6.重签名第三方app
#TARGET_APP_FRAMEWORK_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app/frameworks”
#if [-d "$TARGET_APP_FRAMEWORK_PATH"];
#then
#for FRAMEWORK in "$TARGET_APP_FRAMEWORK_PATH/"*
#do
#/usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK"
#done
#fi
#签名所有framework和动态库
function mycodesign(){
#遍历文件$1 为shell语法 相当于ls遍历的东西在一个数组中$1为下标为1  1开始 https://blog.csdn.net/xungjhj/article/details/73613883
for file in `ls $1`;
do
# 获取目录名字${file#*.}:拿掉第一个 .  及其左边的字符串:file.txt https://www.cnblogs.com/xunbu7/p/6187017.html
extension="${file#*.}"
#判断是否为目录 就是 普通的比较与[]相似 http://manual.51yip.com/shell/tests.html#DBLBRACKETS
if [[ -d "$1/$file" ]]; then
#判断后辍是否为framework framework因为也是一个目录
if [[ "$extension" == "framework" ]]; then
/usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$1/$file"
else
codesign "$1/$file"
fi
#判断是否为文件
elif [[ -f "$1/$file" ]]; then
#判断后辍
if [[ "$extension" == "dylib" ]]; then
/usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$1/$file"
fi
fi
done
}
mycodesign "$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"

#codesign -fs "$EXPANDED_CODE_SIGN_IDENTITY" --no-strict --entitlements entitlements.plist "$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"

脚本运行入口:
xcode通过脚本调试第三方app
效果是:
xcode通过脚本调试第三方app
项目地址:

猜你喜欢

转载自blog.51cto.com/haidragon/2406523