確保 Xcode 每次 Build 時都自動更新資源
用過 Xcode 的都知道,Xcode 有一個非常討厭的 bug,有時候更新資源後,真機除錯發現資源還是舊的,這個時候只能 Clean 以後重新 Build。但這樣非常浪費時間,特別是大一點的工程,編譯一次就要幾分鐘。這個時候,程式設計師說不定就跑 moko.cc 去瞎逛了。。。
為了提高生產力,我們需要一個指令碼,在 Xcode Build 的時候強制更新資源。
確定目錄結構
先看下圖,Xcode 專案裡藍色的資料夾表示其中的檔案會直接複製到真機上,並且保持目錄結構。所以其中的 data,img,snd.ios 目錄有什麼內容,在真機上也會有什麼內容。
Xcode 在真機除錯時,首先進行 Build,生成 .app 檔案(實際是一個目錄,不過 Finder 裡面看著是一個檔案),其中就包含了可執行檔案和所有資源。然後 Xcode 會將 .app 傳輸到真機,最後在真機上啟動 .app。所以我們的指令碼就是在 Build 的時候,確保生成的 .app 裡總是包含最新的資源。
這裡就需要知道兩個路徑:原始資原始檔所在的路徑,以及 .app 中資原始檔所在的路徑。
第一個路徑需要根據 Xcode 專案檔案和資原始檔的相對位置來確定。
如下圖所示,工程檔案在專案的 proj.ios 目錄中,而資原始檔在專案的 res 目錄中。那麼第一個路徑就是 工程檔案所在路徑/../res/
由於 Xcode 提供了不少環境變數,所以“工程檔案所在路徑”和“.app 中資原始檔所在的路徑”都很容易確定,我們直接在指令碼中引用即可。
新增指令碼
Xcode 允許在 Build 時指定指令碼程式碼,所以我們要修改 Xcode 的工程,加入指令碼內容。
操作步驟:
-
首先在 Xcode 裡選中工程,右側會顯示工程的設定介面。
-
從設定介面選擇 Build Phases 標籤,然後點選右下角的 Add Build Phases 按鈕,並選擇“Add Run Script”。
-
在新出現的 Run Script 欄中輸入以下內容:
_TARGET_BUILD_CONTENTS_PATH=$TARGET_BUILD_DIR/$CONTENTS_FOLDER_PATH
echo _TARGET_BUILD_CONTENTS_PATH: $_TARGET_BUILD_CONTENTS_PATH
echo PWD: $PWD
echo Cleaning $_TARGET_BUILD_CONTENTS_PATH/
rm -fr $_TARGET_BUILD_CONTENTS_PATH /data/*
rm -fr $_TARGET_BUILD_CONTENTS_PATH/img/*
rm -fr $_TARGET_BUILD_CONTENTS_PATH/snd.ios/*
mkdir -p $_TARGET_BUILD_CONTENTS_PATH/data/
mkdir -p $_TARGET_BUILD_CONTENTS_PATH/img/
mkdir -p $_TARGET_BUILD_CONTENTS_PATH/snd.ios/
cp -RLp $PWD/../res/data/* $_TARGET_BUILD_CONTENTS_PATH/data/
cp -RLp $PWD/../res/img/* $_TARGET_BUILD_CONTENTS_PATH/img/
cp -RLp $PWD/../res/snd.ios/* $_TARGET_BUILD_CONTENTS_PATH/snd.ios/
- 重要: 拖動 Run Script 欄,將其移動到列表的第二個位置(也就是 Target Dependencies 後面)。最後如下圖:
注意事項
- 指令碼內容需要根據專案的目錄結構、資源目錄結構進行調整。
- 偶爾真機除錯時,Xcode 會報告資原始檔被修改。這時退出 Xcode 重新開啟就好了,比重新編譯快很多。
- END -