008--自動(dòng)化重簽名

重簽名的流程:

1.干掉插件Plugins文件夾里面的內(nèi)容!

2.Watch 直接干掉!

3.對(duì) Frameworks 進(jìn)行簽名!

4.給可執(zhí)行文件執(zhí)行權(quán)限! chmod +x WeChat

5.拷貝描述文件

6.修改info.plist 的Bundle ID!

7.生成plist的權(quán)限文件

8.簽名整個(gè)APP!

$codesign -fs "iPhone Developer: WenHan Li (6ZBE4C573L)"? --no-strict --entitlements=en.plist WeChat.app

9.打包其實(shí)就是一個(gè)zip

$zip -ry WeChat.ipa Payload


查看描述文件信息:$security cms -D -i 描述文件路徑

查看APP的簽名信息

$codesign -vv -d APP路徑

查看本機(jī)所有證書

$security find-identity -v -p codesigning

查看可執(zhí)行文件的加密信息!

$otool -l WeChat | grep crypt

簽名

$codesign -fs "證書" 需要簽名的文件


自動(dòng)化重簽名的腳本:

# ${SRCROOT} 為工程文件所在的目錄 TEMP_PATH="${SRCROOT}/Temp"?

#資源文件夾,放三方APP的 ASSETS_PATH="${SRCROOT}/APP"?

#ipa包路徑 TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"

?#新建Temp文件夾

?rm -rf "$TEMP_PATH"

?mkdir -p "$TEMP_PATH"?

# --------------------------------------?

# 1. 解壓IPA 到Temp下 unzip -oqq "$TARGET_IPA_PATH" -d "$TEMP_PATH"

?# 拿到解壓的臨時(shí)APP的路徑 TEMP_APP_PATH=$(set -- "$TEMP_PATH/Payload/"*.app;echo "$1")

?# 這里顯示打印一下 TEMP_APP_PATH變量 echo "TEMP_APP_PATH: $TEMP_APP_PATH"

# 2. 把解壓出來(lái)的.app拷貝進(jìn)去

?#BUILT_PRODUCTS_DIR 工程生成的APP包路徑

?#TARGET_NAME target名稱 TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"?

echo "TARGET_APP_PATH: $TARGET_APP_PATH"

?rm -rf "$TARGET_APP_PATH"?

mkdir -p "$TARGET_APP_PATH"

?cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH/"

# 3. 為了是重簽過(guò)程簡(jiǎn)化,移走extension和watchAPP. 此外個(gè)人免費(fèi)的證書沒(méi)辦法簽extension?

?rm -rf "$TARGET_APP_PATH/PlugIns"?

rm -rf "$TARGET_APP_PATH/Watch"

?# 4. 更新 Info.plist 里的BundleId?

#? 設(shè)置 "Set :KEY Value" "目標(biāo)文件路徑.plist"

?/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"

?# 5.給可執(zhí)行文件上權(quán)限

?#添加ipa二進(jìn)制的執(zhí)行權(quán)限,否則xcode會(huì)告知無(wú)法運(yùn)行?

#這個(gè)操作是要找到第三方app包里的可執(zhí)行文件名稱,因?yàn)閕nfo.plist的 'Executable file' key對(duì)應(yīng)的是可執(zhí)行文件的名稱?

#我們grep 一下,然后取最后一行, 然后以cut 命令分割,取出想要的關(guān)鍵信息。存到APP_BINARY變量里

?APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`

?#這個(gè)為二進(jìn)制文件加上可執(zhí)行權(quán)限 +X?

chmod +x "$TARGET_APP_PATH/$APP_BINARY"

?# 6. 重簽第三方app Frameworks下已存在的動(dòng)態(tài)庫(kù) TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks"?

if [ -d "$TARGET_APP_FRAMEWORKS_PATH" ];?

then?

#遍歷出所有動(dòng)態(tài)庫(kù)的路徑

?for FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"*?

do?

#簽名

?/usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK"?

done?

fi

#7. 注入我們編寫的動(dòng)態(tài)庫(kù)?

?# 需要注入的動(dòng)態(tài)庫(kù)的路徑 ?

INJECT_FRAMEWORK_RELATIVE_PATH="動(dòng)態(tài)庫(kù)的可執(zhí)行文件路徑"?

## 通過(guò)工具實(shí)現(xiàn)注入?

yololib "$TARGET_APP_PATH/$APP_BINARY" "$INJECT_FRAMEWORK_RELATIVE_PATH"?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容