1.在當前shell環境中讀取並執行FileName中的命令shell
$ source FileName
複製代碼
命令能夠強行讓一個腳本去當即影響當前的環境(通常用於加載配置文件)bash
命令會強制執行腳本中的所有命令,而忽略文件的權限 2.從新創建一個子shell,在子shell中執行腳本里面的代碼markdown
$ bash/zsh FileName
複製代碼
3.讀取並執行文件中的命令。但有一個前提,腳本文件須要有可執行權限app
$ ./FileName
複製代碼
這個目錄是給用戶放置本身的可執行程序,因此咱們通常把咱們可執行的腳本文件放到這個目錄(記得加可執行權限)以後就能夠在任意目錄下直接執行腳本(功能等同於ls
、pwd
)工具
Unix和Linux都是多用戶、多任務的系統,因此這樣的系統裏面就擁有了用戶、組的概念。那麼一樣文件的權限也就有相應的所屬用戶和所屬組了ui
//查看當前列表文件權限
ls -l
複製代碼
文件權限的改變使用chmod命令。設置方法有兩種:數字類型改變
和符號類型改變
spa
1.數字類型命令行
2.符號類型 chmod [u、g、o、a][+(加入)/-(除去)/=(設置)][r、w、x] 文件名稱code
//去掉"組"的寫入權限
chmod g-w 123.txt
//給文件加全部可執行權限(默認爲a)
chmod +x 123.txt
複製代碼
對Shell有個簡單瞭解以後就能夠開始介紹今天的重點了cdn
在項目目錄下建立APP
文件夾並放入越獄ipa包
複製腳本代碼至腳本處
# ${SRCROOT} 它是工程文件所在的目錄
TEMP_PATH="${SRCROOT}/Temp"
#資源文件夾,咱們提早在工程目錄下新建一個APP文件夾,裏面放ipa包
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文件的路徑WeChat
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
#注入
#yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/Hook.framework/Hook"
複製代碼
或將
3.1
腳本寫成文件,放在項目根目錄下,執行腳本處寫入以下代碼
chmod +x .app.sh
./app.sh
複製代碼