Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Xcodeバージョンをビルド時に厳密にチェックする

More than 1 year has passed since last update.

複数のプロジェクトでそれぞれ異なるXcodeのバージョンを利用していると、気づいたら想定と異なるバージョンで開発・ビルドしていた、といったバージョン取り違えの危険性がある
そのため、想定と異なるXcodeのバージョンでビルドしようとした場合エラーを吐き出し、取り違えを防ぐ方法を取り入れたので、以下にその手順を示す
本方法では、Xcodeのベータ版と正式版の違いも検知できる

手順

プロジェクトのトップディレクトリに、.xcode-versionファイルを以下のように作成する

.xcode-version
REQUIRED_XCODE_VERSION='11.0'
REQUIRED_XCODE_PRODUCT_BUILD_VERSION='11A420a'

上から順に、プロジェクトで利用するXcodeのバージョン番号ビルド番号を記述している
Xcodeのバージョン番号とビルド番号は、メニューの[Xcode] > [About Xcode]から確認できる

次に、XcodeでBuild Phases画面を開き、左上の[+]ボタンから[New Run Script Phase]を選択する

[Run Script]を展開し、スクリプト入力ボックスに以下を入力する

. $SCRIPT_INPUT_FILE_0

# バージョン表記を4桁左詰めゼロパディング形式に変換
REQUIRED_XCODE_VERSION_ACTUAL=`echo $REQUIRED_XCODE_VERSION | tr -d . | xargs printf '%-4d' | tr ' ' 0`

if [ $REQUIRED_XCODE_VERSION_ACTUAL != $XCODE_VERSION_ACTUAL ]; then
    echo "error: Detected wrong Xcode version. Expected=$REQUIRED_XCODE_VERSION_ACTUAL, actual=$XCODE_VERSION_ACTUAL."
    exit 1
fi

if [ $REQUIRED_XCODE_PRODUCT_BUILD_VERSION != $XCODE_PRODUCT_BUILD_VERSION ]; then
    echo "error: Detected wrong Xcode build version. You might be using beta version. Expected=$REQUIRED_XCODE_PRODUCT_BUILD_VERSION, actual=$XCODE_PRODUCT_BUILD_VERSION."
    exit 2
fi

[Input Files]に $(SRCROOT)/.xcode-version を追加する

設定完了した画面が以下となる
Scripts設定画面.png

エラー出力例

Xcode 10.3を利用するプロジェクトを11.0でビルドしようとした場合
バージョン番号違い.png

Xcode 11.0正式版を利用するプロジェクトを11.0 beta-8でビルドしようとした場合
ビルド番号違い.png

運用

.xcode-versionはバージョン管理し、チームで共有するようにする

利用するXcodeのバージョンを上げる際は、.xcode-versionファイル内の変数を変更する

参考

colomney
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away