Xcode 運行時配置

有時候,咱們的app在測試時須要鏈接到一個testing服務器,在打包爲企業證書的app時又須要鏈接到另外一個ad hoc 服務器,或者咱們想企業證書打包的app和debug模式打包的app有不一樣的APP Bundle Identifier,以在一個測試機上同時安裝....等等這些與App開發沒有實際鏈接的需求,若是咱們手動改,很是麻煩,若是分工程管理更麻煩。git

下面介紹一些Xcode中的運行時配置,但願有所啓發:github

一個很好地實現上面的需求的方式是使用build configuration 構建配置和C 宏定義,這避免了爲不一樣的配置建立不一樣的target。首先你須要在工程級別開始配置:shell

能夠看到,上面有三個配置:Debug,Release,adhoc。並且,前面兩個配置裏都有兩個xcconfig文件:xcode

這些xcconfig文件內容相似這樣:服務器

接下來,您能夠將被傳遞到編譯器的每一個配置定義了一些宏標誌。而後,您能夠在編譯時檢查這些標誌。在target級別中找到"Preprocessor flags"(在Xcode 6中是"Preprocessor Macros")構建設置,你能夠在這裏定義 KEY=VALUE 或者 只是 KEY 形式的宏定義:app

在你的代碼中,你能夠檢查這些宏定義是否存在,例如:iphone

你也能夠傳入字符串類型,只不過必須用單引號括起來:編輯器

DEFAULT_LOCALIZATION_NAME='@"en"'

你也能夠使用Schemes 編輯器,爲Debug 和Archive時指定不一樣的配置:post

若是你須要在Info.plist 文件裏使用自定義的參數,你能夠添加一個自定義的構建設置:測試

而後對不一樣的配置,設置合適的值:

而後,你在Info.plist文件中,就能夠使用這個自定義的參數:

甚至,咱們在命令行下構建項目時,還能夠直接設置這個參數的值:

xcodebuild …  BUNDLE_ID_SUFFIX=justTest build

自動根據當前git項目的提交次數來在構建時,修改Info.plist的構建版本號

首先建立一個shell 腳本 buildNumber.sh ,主要是獲取當前git項目的提交次數,做爲build version,修改Info.plist文件對應的build verison:

#!/bin/sh

git=`sh /etc/profile; which git`
build_num=`"$git" rev-list --all |wc -l`
branch=`"$git" rev-parse --abbrev-ref HEAD`
commit=`"$git" rev-parse --short HEAD`
version=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${INFOPLIST_FILE}"`

if [ $CONFIGURATION = "Debug" ]; then
  /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $build_num-$branch" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
else
  /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $build_num" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
fi
echo "Updated ${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"

而後在 target級別中,在Build Phases菜單的最後面添加一個shell:

指定這個shell的文件路徑:

注意,修改的這個Info.plist文件不會影響工程目錄下的Info.plist文件,由於修改的是構建目錄下的app裏面的Info.plist,例如,我這裏修改的是 ./Build/Products/Debug-iphonesimulator/yooke.app/Info.plist

參考:

整合上面實踐的開源項目:

相關文章
相關標籤/搜索