Xcode + 腳本自動化簽名

廢話

簽名的話, Xcode當(dāng)然是最專業(yè)的, 我們需要為Xcode簽名做好準(zhǔn)備工作

原理

Xcode編譯過程.png

上圖是重簽名工程的編譯過程, 比較重要三個步驟
1. Create product structure 創(chuàng)建xxx.app 文件
2. Run custom shell script 'Run script' 運(yùn)行自定義腳本
3. Sign xxx.app 簽名xxx.app文件

因為這個編譯順序, 我可以在自定義腳本中將xxx.app文件替換成我們要簽名的.app文件, 同時也需要做一些Xcode不能完成的工作

簽名步驟

  1. 將要簽名的.ipa.app文件放在工程目錄中, 這里是將.ipa文件放在${SRCROOT}/APP目錄下. 還需要創(chuàng)建${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拷貝進(jìn)入工程下
# 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
#  設(shè)置:"Set : KEY Value" "目標(biāo)文件路徑"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"

#----------------------------------------
# 5. 給MachO文件上執(zhí)行權(quán)限
# 拿到MachO文件的路徑
APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`
#上可執(zhí)行權(quán)限
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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 用到的組件 1、通過CocoaPods安裝 2、第三方類庫安裝 3、第三方服務(wù) 友盟社會化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 15,159評論 1 180
  • 背景 新項目這邊每次版本移交, 給測試都是直接xcode挨個拿手機(jī)安裝的流程. 一次兩次還好,天天這么搞,而且每次...
    全力以赴打醬油閱讀 1,703評論 0 4
  • 「勇氣,是當(dāng)渴望大於恐懼,而帶著恐懼全力以赴。」 人有七情六慾,愛恨情仇,其中最常在我生命中出現(xiàn)的,就是恐懼。 生...
    leejayce閱讀 115評論 0 1
  • 我是哭著看完《星空》的。 書中的她就好像另一個我,她用最簡單的話語,說出了我心底所有的話。我難過得像個...
    木唏閱讀 197評論 0 0
  • 艷艷秋風(fēng)臨北岸,田田爽意蕩南園。 菊黃堪伴楓紅暖,碧柳閑撥對月弦。 笑飲千斛河漢斗,酣游萬里洞庭淵。 如織細(xì)雨花前...
    不惑而歌閱讀 674評論 35 44

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