基本的に SDK バージョンやコンパイラのバージョンが変わらなければ Xcode バージョンが変わっても動作に変わりないため、Xcode バージョンをチェックするよりも SDK バージョンやコンパイラのバージョンを固定した方が良いと思います。
それを踏まえて、どうしても Xcode バージョンを固定したい場合に以下を参考にしてください。
tr;dr
プロジェクトのルートディレクトリに .xcode-version
という名称で、バージョン番号を書いたファイルを書き出す。
# Xcode 8.3.2 を使用する場合
echo '8.3.2' >.xcode-version
Build Phase > Run Script に以下を記述する。
tr -d . < "$SCRIPT_INPUT_FILE_0" | xargs printf '%04d' | grep -q "$XCODE_VERSION_ACTUAL"
if [ $? -ne 0 ]; then
echo 'Error: Detected wrong Xcode version. Please switch to the correct Xcode version.' >&2
exit 1
fi
Run Script の Input Files に $(SRCROOT)/.xcode-version
と書く。
Run Script を Build Phase の先頭に移動する
何をやっているのか
$XCODE_VERSION_ACTUAL
Xcode はビルド時に $XCODE_VERSION_ACTUAL
に使用中の Xcode バージョンを出力する。
この変数は xcodebuild -showBuildSettings
で確認できる。
$ xcodebuild -showBuildSettings 2>/dev/null | grep XCODE_VERSION_ACTUAL
XCODE_VERSION_ACTUAL = 0832
このように右詰めでゼロパディングされた4桁の数字になる。
xcenv
複数の Xcode を管理するための xcenv というツールがある。
rbenv や pyenv と似たようなツールで、 .xcode-version
というファイルがあると、そのディレクトリ以下では指定されたバージョンの Xcode を使うようになる。
これを使うかどうかは別として、明示的に .xcode-version
にバージョンを書いておくと fastlane 等からも参照できて便利になる。