NOTE: ビルド番号を自動で増やす¶
iOS/Macアプリを作る時にビルド番号の更新し忘れを防ぐ方法のメモ。
サンプルコードはここ VersionUp.zip
目的¶
ビルド番号の更新し忘れを防ぐ
ビルド番号でcommit漏れでビルドした物を区別できるようにする
マーケティングバージョン番号やコピーライトの変更は1箇所で行い更新漏れを防ぐ
設計の基本方針¶
更新時に編集するファイル数は最小限にする
出来るだけXCodeの機能を使い外部ツールの使用は最小限にする
ビルド番号はgitのcommit数を使う
ビルド番号を記述したファイルはgitに追跡させない
実装¶
上記の基本方針を実装するには以下の2つの手法を使うことで可能
configファイルを読み込ませてinfo.plsitの値を指定する
pre-actionから外部scriptを呼び出し上記のconfigファイルを更新する
関連ファイルは以下の5つ¶
ファイル名 |
用途 |
---|---|
VersionUp.xcodeproj |
サンプル用のプロジェクト |
make_buildNumber_xcconfig.sh |
buildNumber.xcconfigにビルド番号を書く |
Config.xcconfig |
buildNumber.xcconfigを読み込んだり |
buildNumber.xcconfig |
このファイルにbuild番号をシェルスクリプトから書き込む |
.gitignore |
buildNumber.xcconfigをgitに追跡させない設定を行う |
Config.xcconfigとbuildNumber.xcconfigが分かれているのはgitで追跡させる部分と追跡させない部分を分けるためです。 また、分けることでmake_buildNumber_xcconfig.shのコードをシンプルにしています。
Build時の呼び出し順序¶

関連するinfo.plstの設定キーは以下の通り¶
キー文字列 |
用途 |
---|---|
CFBundleShortVersionString |
マーケティングバージョン番号 |
CFBundleVersion |
ビルド番号 |
NSHumanReadableCopyright |
コピーライト文字列 |
上記のキーで指定された文字列は about panel の以下の部分に反映されます。

キー文字列 |
文字列 |
---|---|
CFBundleShortVersionString |
3.2.1 |
CFBundleVersion |
1M |
NSHumanReadableCopyright |
Copyright 2025 mindto01s. All right reserved. |
configファイルで設定している変数¶
名前は適当に決めてます。それぞれのお仕事で使える接頭語なり接尾語を追加してユニークにしてください。
変数名 |
目的 |
---|---|
MTL_MARKETING_VERSION_NUMBER |
マーケティングバージョン番号にしたい文字列 |
MTL_BUILD_VERSION_NUMBER |
ビルド番号にしたい文字列 |
MTL_COPYRIGHT_STRING |
コピーライトにしたい文字列 |
make_buildNumber_xcconfig.shの説明¶
ビルド番号を生成するためのスクリプトです。 commitしていないファイルがあると番号の末尾に"M"がつきます。
#!/bin/sh
# make_buildNumber_xcconfig.sh
#
#
# Created by narita on 07/05/15.
# Copyright 2007 __MyCompanyName__. All rights reserved.
#
# カレントディレクトリ上にgitのリビジョン数の値を示すファイルbuildNumber.xcconfigを作成する
#
# 勿論、ファイルbuildNumber.xcconfigはgitには管理させないのでignoreしておく
# 元ネタは以下のコードを改変しました
# http://www.zathras.de/angelweb/x2005-04-18.htm
# リビジョン総数を出す
git_rev_num=`git rev-list HEAD | wc -l | tr -d ' '`
# ローカルで変更されているかの判定
git_modified_line_count=`git status -s | wc -l | tr -d ' '`
if [ $git_modified_line_count != 0 ] ; then
git_modified_flag='M'
else
git_modified_flag=''
fi
# リビジョン番号とローカルでの変更フラグを合体させてビルド番号文字列を作る
# 末尾に'M'がついている場合はローカルにcommitされていない変更がある目印になる
git_rev_num_string=$git_rev_num$git_modified_flag
if [ -f ./buildNumber.xcconfig ] ; then
file_rev_num_string=`grep -e MTL_BUILD_VERSION_NUMBER ./buildNumber.xcconfig | cut -f '3' -d ' '`
else
file_rev_num_string='DUMMY_STRING'
fi
# ファイルが無いか、バージョン番号が異なるならばファイルを生成する
if [ $file_rev_num_string != $git_rev_num_string ] ; then
# Now write the constant declaration to the file:
echo "MTL_BUILD_VERSION_NUMBER = $git_rev_num_string" > buildNumber.xcconfig
fi
exit 0
詳細はコメントを読んでほしい。
Config.xcconfigの説明¶
このファイルを書き換えることで出荷ごとのマーケティング番号や出荷年ごとのコピーライトを変更します。 xcodeのプロジェクトファイルの中に置かないことでgitとの相性やdiffコマンドとの相性をよくしています。
このファイルは c preprocessor のように include 文が使えるのでここでビルド番号が記述されているファイルを読み込んでいます。
//
// Config.xcconfig
//
// Created by narita on 2025/01/21.
//
// CFBundleShortVersionStringに$(MTL_MARKETING_VERSION_NUMBER)を設定する
MTL_MARKETING_VERSION_NUMBER = 3.2.1
// CFBundleVersionに$(MTL_BUILD_VERSION_NUMBER)を設定する
// MTL_BUILD_VERSION_NUMBERを読み込む
#include "buildNumber.xcconfig"
// NSHumanReadableCopyrightに$(MTL_COPYRIGHT_STRING)を設定する
MTL_COPYRIGHT_STRING = Copyright 2025 mindto01s. All rights reserved.
VersionUp.xcodeprojの設定箇所¶
XCodeのプロジェクトファイルの設定箇所です。文字で表すと分かりにくいのでスクリーンショットを多用しています。
なお私がこのノートを取る目的はこの設定方法を毎回忘れてしまうからです。
スキームの設定箇所¶
場所が分かりにくいが、以下の手順でモーダルダイアログを出す。
モーダルダイアログが出たら以下の手順で script actionを設定する。
コードは以下の2行で外部のスクリプトを呼んでいる。
cd "$SRCROOT"
sh make_buildNumber_xcconfig.sh

configの読み込みの設定箇所¶
さらに分かりにくいが、やってることは以下の2点
ファイルconfig.xcconfigをプロジェクトファイルに登録
プロジェクトの基本的なconfigとしてconfig.xcconfigを設定する
config.xcconfigの登録はDrag&Dropで問題なし。
分かりにくいには、(b)の設定。
と の2つにconfig.xcconfigを設定する。 赤いアンダーバーの箇所を参考にして設定してください。

Build settingの設定箇所¶
これは少し分かりにくいが普段XCodeで開発している人ならば説明は不要だと思います。
スクリーションショットの赤いアンダーバーの箇所を参考にして設定してください。
Project Build settingの設定箇所¶
config.xcconfigから読み込まれる値を設定するように build setting に書き込む。



Target Build settingの設定を削除する場所¶
設定上書きされないように以下の3箇所の設定を削除してください。
copyright
current project version
Marketing version
それぞれの場所は以下のスクショを参考にしてください。


buildNumber.xcconfigの説明¶
スクリプトmake_buildNumber_xcconfig.shが作成します。
中身は以下のようになってます。
MTL_BUILD_VERSION_NUMBER = 1M
1Mの部分はcommit数によって変わります。末尾のMはローカルにcommitされていないファイルがあると追加されます。 昔svnversionコマンドで便利だったのでデバッグ時のミスを防ぐためにつけました。
.gitignoreの説明¶
buildNumber.xcconfigをgitに追跡されないようにしてます。
buildNumber.xcconfig
Comments
comments powered by Disqus