---
# System prepended metadata

title: 使用Xcode debug ipa 檔

---

# 使用Xcode debug ipa 檔

debug ipa的方式有很多種，此篇分享用Xcode 配合腳本做法，見下：


## 一、新建專案

新建專案空跑後，Xcode會在實機上先安裝profile，如果對於apple簽名機制不熟，[可以參考這篇](https://hackmd.io/nKw3RWGURbil77eFIa6V-g?view#4-Run-your-app-on-a-device)

這很重要一定要在跑腳本（後面會提）前先運行~

另外第一次運行可能還需要[實機信任](https://hackmd.io/ETvce8KPRFmC2L6Cr6bXUA?view#%E4%BC%8D%E3%80%81%E5%AF%A6%E6%A9%9F%E9%9C%80%E4%BF%A1%E4%BB%BB%E9%96%8B%E7%99%BC%E8%80%85)，先完成就對了。



## 二、準備腳本

建立腳本方法，可先創建記事本，然後把副檔名改成 .sh。

建立完後，==要用terminal，下指令給權限==，才會動作。




以下為腳本：

:::info
```shell=
# 資源資料夾，需提前在工程目錄下新建APP資料夾，裡面丟ipa包
ASSETS_PATH="${SRCROOT}/APP"

# ${SRCROOT} 他是工程所在的目標
TEMP_PATH="${SRCROOT}/temp"

# 目標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 工程生成包的路徑
#TARGET_NAME
TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"
#echo "app路徑是:$TARGET_IPA_PATH"

rm -rf "$TARGET_APP_PATH"
mkdir -p "$TARGET_APP_PATH"
cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH"


#-----------------------------
#3. 刪除extension和watch
rm -rf "$TARGET_APP_PATH/PlugIns"
rm -rf "$TARGET_APP_PATH/watch"

#-----------------------------
#4. 修改 info.plist

# 設置 "Set : KEY Value" "目標文件路徑"

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

#-----------------------------
#5. 給可執行文件上執行權限
#拿到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.重簽名第三方app 第三方的frameworks

TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks"
if [ -d "$TARGET_APP_FRAMEWORKS_PATH" ] ;
then

for FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"*
do
#echo "包的路徑:$FRAMEWORK"
if test -f  $FRAMEWORK
    then
    #簽名
    /usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK"
        
    fi
done
fi

# 刪掉temp資料夾
rm -rf "${SRCROOT}/temp"
```
:::


下為給檔案權限的terminal指令：

```
$ chmod +x XXX.sh(腳本檔)
```



## 三、在專案根目錄建立資料夾

因腳本需求，需在專案根目錄：
1. 創一個App的資料夾，並把想debug的ipa丟進去。
2. 把建立好的腳本一併放進去

![](https://i.imgur.com/9X8Ca3H.png)





## 四、xCode設定專案

回到xCode，在Build Phases中，新建一個==Script Phase==
![](https://i.imgur.com/ZR52Jbl.png)


並設定執行.sh檔。這邊補充“./” 位置是在專案根目錄。

![](https://i.imgur.com/SA2RTxD.png)



## 五、專案啟動

command + shift + k（清理mac暫存）
command + B（重新編譯）
command + R（run起來~）


原則上就會成功運行ipa了～


