重簽名目的:越獄包重簽名運(yùn)行到非越獄手機(jī)進(jìn)行調(diào)試。
手動(dòng)重簽名大體步驟(以墨跡天氣app 為例子):
1.刪除插件Plugins文件夾以及里面的內(nèi)容。
2.Watch 直接干掉!()(微信有這一步,其他App無)
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: xxx ?(5ZBE4C879L)"? --no-strict --entitlements=en.plist WeChat.app
9.打包 生成zip
$zip -ry WeChat.ipa Payload
一.前期準(zhǔn)備:
1.利用PP助手下載越獄的墨跡天氣的App包。


2.查看越獄包的簽名信息
codesign -vv -d ?包的路徑


3.查詢本地所有授權(quán)證書
通過終端命定:security find-identity -v -p codesigning


4.查看App可執(zhí)行文件是否加密



二.手動(dòng)進(jìn)行簽名
1.刪除插件Plugins文件夾以及里面的內(nèi)容


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

如果有xxx.framework,利用終端對(duì)其進(jìn)行重簽名 進(jìn)入到對(duì)應(yīng)的Frameworks文件目錄下:
執(zhí)行:codesign -fs " 上面查詢到的本地的授權(quán)證書" xxx.framework
3.給可執(zhí)行文件執(zhí)行權(quán)限!?
chmod +x ? 可執(zhí)行文件

終端執(zhí)行:
chmod +x ?MojiWeather的文件地址
執(zhí)行后可以看到可執(zhí)行文件的描述信息變?yōu)?Unix 可執(zhí)行文件

4.拷貝描述文件
隨便建個(gè)項(xiàng)目A,運(yùn)行一下,生成app包,之后獲取它的描述文件:


將描述文件copy 到MojiWeather包里

5.修改info.plist 的Bundle ID!
在新建的項(xiàng)目A中,就在剛剛的描述文件的同級(jí)目錄,找到info.plist 文件, 之后復(fù)制bundle Id到MojiWeather包里的info.plist中


6.生成plist的權(quán)限文件
查看當(dāng)前用的描述文件的權(quán)限: security cms -D -i ?embedded.mobileprovision

在新建的項(xiàng)目A中創(chuàng)建plist(newPlist.plist)文件,之后Source Code 展示,將復(fù)制的代碼放到粘貼到里面,如圖:

將新建的plist 文件 放到和MojiWeather包的同級(jí)目錄。

7.簽名整個(gè)APP!
$codesign -fs "iPhone Developer: xxx ?(5ZBE4C879L)"? --no-strict --entitlements=newPlist.plist MojiWeather.app

8.打包 生成zip
將MojiWeather.app 壓縮成zip的文件,之后將.zip改成ipa,獲取ipa的安裝文件。
9.安裝重簽名的App?

接下來就是見證奇跡的時(shí)刻了。。。。。。
我擦嘞,報(bào)錯(cuò)了,又失敗了。。。。。。 ?我為什么加又呢? ? ??

彩蛋: 同志們不要灰心,我用MonkeyDev 簽名成功了,說明上面的步驟哪里出問題了,持續(xù)完善中。
MonkeyDev:https://github.com/AloneMonkey/MonkeyDev
三.利用Xcode進(jìn)行簽名
剛才手動(dòng)硬整未成功,這回咱們試試借助Xcode簽名試一下。
1.替換app包
新建Xcode 工程XcodeSign,運(yùn)行一下, 在finder中打開XcodeSign.app文件。

用墨跡天氣(MojiWeather)的包替換上圖新建的項(xiàng)目的包,替換后注意名字要改成XcodeSign,和項(xiàng)目生成的包名相同,達(dá)到欺騙Xcode的目的。
二.更改plist 文件


三.修改可執(zhí)行文件權(quán)限
chmod +x ? 可執(zhí)行文件 同手動(dòng)簽名第三步。
之后運(yùn)行項(xiàng)目:

mmp:

四.腳本自動(dòng)化重簽
上面的兩個(gè)都失敗了,這個(gè)應(yīng)該不會(huì)讓大家失望了。
1.新建項(xiàng)目添加腳本信息


2.配置腳本信息
在項(xiàng)目的同級(jí)目錄建立個(gè)文件夾

腳本僅供參考:因?yàn)槲矣质×恕K懔酥苯佑肕onkeyDev吧!
# ${SRCROOT} 它是工程文件所在的目錄
# 定義路徑變量 TEMP_PATH
TEMP_PATH="${SRCROOT}/Temp"
#資源文件夾?
ASSETS_PATH="${SRCROOT}/APP"
#ipa包路徑?
TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"
#新建Temp文件夾 rm 移除
rm -rf "${SRCROOT}/Temp"
mkdir -p "${SRCROOT}/Temp"
#---------------------------------------- #
1. 解壓IPA到Temp下
unzip -oqq ?"$TARGET_IPA_PATH" -d "$TEMP_PATH"
# 拿到解壓的臨時(shí)的APP的路徑?
TEMP_APP_PATH=$(set -- "$TEMP_PATH/Payload/"*.app;echo "$1")
#可以用echo打印路徑?
# echo "路徑是:$TEMP_APP_PATH"
#----------------------------------------?
#2. 將解壓出來的.app拷貝進(jìn)入工程下
# BUILT_PRODUCTS_DIR 工程生成的APP包的路徑?環(huán)境變量
# TARGET_NAME target名稱 環(huán)境變量
TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"
echo "app路徑:$TARGET_APP_PATH"
rm -rf "$TARGET_APP_PATH"
mkdir -p "$TARGET_APP_PATH"
#拷貝app文件到TARGET_APP_PATH
cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH"
#----------------------------------------
#3. 刪除extension和WatchAPP. 個(gè)人證書沒法簽名Extention (微信獨(dú)有的)
rm -rf "$TARGET_APP_PATH/PlugIns"
rm -rf "$TARGET_APP_PATH/Watch"
#----------------------------------------
# 4. 更新info.plist文件 CFBundleIdentifier(bundle id)
# 設(shè)置:"Set : KEY Value" "目標(biāo)文件路徑"?
#/usr/libexec/PlistBuddy 一段可執(zhí)行文件 ?-c 執(zhí)行 (Command)
/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"
#判斷是否有這個(gè)路徑 有則重簽 否則會(huì)報(bào)路徑錯(cuò)誤
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