Xcode + 脚本自动化签名

废话

签名的话, 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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,980评论 1 180
  • 背景 新项目这边每次版本移交, 给测试都是直接xcode挨个拿手机安装的流程. 一次两次还好,天天这么搞,而且每次...
    全力以赴打酱油阅读 5,568评论 0 4
  • 「勇氣,是當渴望大於恐懼,而帶著恐懼全力以赴。」 人有七情六慾,愛恨情仇,其中最常在我生命中出現的,就是恐懼。 生...
    leejayce阅读 1,054评论 0 1
  • 我是哭着看完《星空》的。 书中的她就好像另一个我,她用最简单的话语,说出了我心底所有的话。我难过得像个...
    木唏阅读 1,409评论 0 0
  • 艳艳秋风临北岸,田田爽意荡南园。 菊黄堪伴枫红暖,碧柳闲拨对月弦。 笑饮千斛河汉斗,酣游万里洞庭渊。 如织细雨花前...
    不惑而歌阅读 3,795评论 35 44

友情链接更多精彩内容