Xcode
iOS

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 等からも参照できて便利になる。