1. 程式人生 > >確保 Xcode 每次 Build 時都自動更新資源

確保 Xcode 每次 Build 時都自動更新資源

用過 Xcode 的都知道,Xcode 有一個非常討厭的 bug,有時候更新資源後,真機除錯發現資源還是舊的,這個時候只能 Clean 以後重新 Build。但這樣非常浪費時間,特別是大一點的工程,編譯一次就要幾分鐘。這個時候,程式設計師說不定就跑 moko.cc 去瞎逛了。。。

為了提高生產力,我們需要一個指令碼,在 Xcode Build 的時候強制更新資源。

確定目錄結構

先看下圖,Xcode 專案裡藍色的資料夾表示其中的檔案會直接複製到真機上,並且保持目錄結構。所以其中的 data,img,snd.ios 目錄有什麼內容,在真機上也會有什麼內容。

01

Xcode 在真機除錯時,首先進行 Build,生成 .app 檔案(實際是一個目錄,不過 Finder 裡面看著是一個檔案),其中就包含了可執行檔案和所有資源。然後 Xcode 會將 .app 傳輸到真機,最後在真機上啟動 .app。所以我們的指令碼就是在 Build 的時候,確保生成的 .app 裡總是包含最新的資源。

這裡就需要知道兩個路徑:原始資原始檔所在的路徑,以及 .app 中資原始檔所在的路徑。

第一個路徑需要根據 Xcode 專案檔案和資原始檔的相對位置來確定。

如下圖所示,工程檔案在專案的 proj.ios 目錄中,而資原始檔在專案的 res 目錄中。那麼第一個路徑就是 工程檔案所在路徑/../res/

02

由於 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 後面)。最後如下圖:

03

注意事項

  1. 指令碼內容需要根據專案的目錄結構、資源目錄結構進行調整。
  2. 偶爾真機除錯時,Xcode 會報告資原始檔被修改。這時退出 Xcode 重新開啟就好了,比重新編譯快很多。

- END -