美文网首页iOS 道路之行
Xcode + 脚本自动化签名

Xcode + 脚本自动化签名

作者: 烟影很美 | 来源:发表于2018-05-12 00:46 被阅读299次

废话

签名的话, Xcode当然是最专业的, 我们需要为Xcode签名做好准备工作

原理

Xcode编译过程.png

上图是重签名工程的编译过程, 比较重要三个步骤
1. Create product structure 创建xxx.app 文件
2. Run custom shell script 'Run script' 运行自定义脚本
3. Sign xxx.app 签名xxx.app文件

因为这个编译顺序, 我可以在自定义脚本中将xxx.app文件替换成我们要签名的.app文件, 同时也需要做一些Xcode不能完成的工作

签名步骤

  1. 将要签名的.ipa.app文件放在工程目录中, 这里是将.ipa文件放在${SRCROOT}/APP目录下. 还需要创建${SRCROOT}/Temp目录, 用来存ipa文件放解压后的文件.
ipa存放路径.png
  1. 添加自定义脚本
# ${SRCROOT} 它是工程文件所在的目录
TEMP_PATH="${SRCROOT}/Temp"
#资源文件夹
ASSETS_PATH="${SRCROOT}/APP"
#ipa包路径
TARGET_IPA_PATH="${ASSETS_PATH}/*.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")
# 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"
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
#  设置:"Set : KEY Value" "目标文件路径"
/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
  1. cmmand + R

后记

以上是利用脚本自动化签名, 其实手动也是可以的, 即脚本所有的工作手动完成

  1. 编译工程生成xxx.app文件
  2. 解压需要重签名的.ipa文件, 用其中的.app文件替换掉xxx.app文件, 并改为和xxx.app文件一样的名字
  3. 脚本中的其他工作
  4. cmmand + R

相关文章

网友评论

    本文标题:Xcode + 脚本自动化签名

    本文链接:https://www.haomeiwen.com/subject/vuuarftx.html