LoginSignup
2
4

More than 3 years have passed since last update.

iOSアプリのビルド番号にビルド日時を設定する

Last updated at Posted at 2020-05-07

背景

  • これを実施するまでは1ずつインクリメントしていたため、ビルド番号は意味のない数字だった
  • 数字で何か意味のあるものでパッと浮かんだのが日時であった
  • ビルド番号が日付だとTestFlightにいつアップロードしたものなのか、TestFlightアプリ上のファーストビューで見れる

300x0w.png

実装

1.[Target]->[Edit Scheme...]->[Build]を展開->[Pre-actions]に下記を記述

#!/bin/sh

date "+%Y.%m%d.%H%M" >${PROJECT_DIR}/build_number.txt

2.プロジェクトファイルの[TARGETS]からターゲットを選択
3.[Build Phases]タブを選択
4.[+]をクリックし、[New Run Script Phase]を選択
5.下記を記述

#!/bin/sh

plistBuddy="/usr/libexec/PlistBuddy"
infoPlist="${TEMP_DIR}/Preprocessed-Info.plist"
buildNumber=$(cat "${PROJECT_DIR}/build_number.txt")
$plistBuddy -c "Set :CFBundleVersion $buildNumber" $infoPlist

6..gitignorebuild_number.txtを追記

説明

なぜPre-actionを使用するのか

最初はすべてのスクリプトをBuild Phaseに記載していたがWatchアプリのビルドが失敗する問題が発生。
アプリ本体とWatchアプリのビルド番号は同じである必要があるように見える。
(TodayExtensionやNotificationServiceExtensionはアプリ本体のビルド番号と同じになっていなくともビルドは通る。)
各ターゲットのビルドが並列で動いているので、アプリ本体のターゲットが先にビルドされた時しかビルドが通らない。
Pre-actionはどのビルド時よりも早いタイミングで任意の処理を動かせるので、そのタイミングでtxtファイルにビルド番号を保存しておくようにした。

参考

DeepL翻訳で翻訳。

ビルドバージョン番号は、最初の整数をゼロよりも大きい値にして、3 つの非負の周期で区切られた整数で構成された文字列にする必要があります。文字列には、数字 (0-9) とピリオド (.) のみを含める必要があります。先頭のゼロは各整数から切り捨てられ、無視されます(つまり、1.02.3は1.2.3と同じです)。各要素の意味は以下の通りです。

最初の数字は最新のメジャーリリースを表し、最大4桁の長さに制限されています。
2 番目の数字は最新の重要なリビジョンを表し、最大 2 桁の長さに制限されています。
3番目の数字は最新のマイナーバグフィックスを表し、最大2桁の長さに制限されています。
3 番目の数字の値が 0 の場合、それと 2 番目のピリオドを省略できます。

2
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4