[Foundation] Application バージョン番号、ビルド番号の取得方法

     

TAGS:

⌛️ 2 min.
アプリケーション内部から、バージョン番号やビルド番号を取得する方法を説明します。

バージョン番号、ビルド番号の意味

厳密には、定義はありませんが、よく見る運用を説明します。

バージョン番号

3つの数字で構成されるバージョン番号の付け方が、「セマンティック・バージョンニング」として知られています。

バージョン番号を X.Y.Z とすると、以下の意味を持ちます。

X
メジャーバージョン番号
Y
マイナーバージョン番号
Z
パッチ番号

メジャーバージョン番号

API に変更等発生し、互換性のないときに、上げられます。

マイナーバージョン番号

API に変更等発生しても後方互換性があり、機能性の拡張が行われたときに、上げられます。

パッチ番号

後方互換性をもつように修正したときに、上げられます。

ビルド番号

リリースしたかどうかを問わず、ビルドを行うたびに上げます。

バージョン番号ではなく、ビルド番号を確認することで、ビルドが確実に固定されます。

こちらは、単純に1つの数字を使っている例を知っています。ビルド番号:5022 とかでした。ビルドごとに1つ数字が繰り上がりました。

保存場所:Info.plist

Xcode を使用すると、以下の画面のように、プロジェクトの設定画面から、バージョン番号・ビルド番号を設定することができます。

VersionNumber in Xcode

VersionNumber in Xcode
この情報は、Info.plist に保存されています。

VersionNumber in Info.plist

VersionNumber in Info.plist
Info.plist についての Apple のドキュメントは、こちら

Apple のドキュメントでは、リリースされたアプリケーションに対してのバージョン番号と説明されています。

こちらのバージョン番号は、InfoPlist.strings ファイルに設定することでローカライズされます。

バージョン番号

キー CFBundleShortVersionString に保存されています。

Apple のドキュメントは、こちら

ビルド番号

キー CFBundleVersion に保存されています。

Apple のドキュメントは、こちら

Apple の説明でも、こちらは、リリースされたかどうかにかかわらずバージョンが上げられることを推奨しています。
Apple の説明では、こちらも 3つの数字で構成される番号をつけることを推奨しています。

また、こちらのバージョンには、3つめの数字の後に文字をつけらます。例えば、Development, Alpha, Beta, Fincal Candidate をそれぞれ、 d, a, b, fc のように記述するとして、例えば、”3.1.3a1″のようにできます。 最後の文字の後に数字をつけることができて、その数字は、1 – 255 としています。

取得方法

どちらも Bundle (Info.plist) から、String として取得することができます。

バージョン番号

バージョン番号


let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String

ビルド番号

ビルド番号


let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String

バージョン番号取得アプリ

Info.plist から取得して表示するアプリケーションは以下のようになります。

コード


//
//  ContentView.swift
//  VersionNumber
//
//  Created by Tomoaki Yagishita on 2020/09/21.
//

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            Text("BundleShortVersion: \(self.VersionNumber())")
            Text("BundleVersion: \(self.BuildNumber())")
        }
    }
    func VersionNumber() -> String {
        return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
    }
    func BuildNumber() -> String {
        return Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

以下が、実行したアプリのスナップショットです。

バージョン取得アプリ

バージョン取得アプリスナップショット

まとめ:バージョン番号のポイント

バージョン番号
  • アプリケーションのバージョン番号は、2種類ある
  • バージョン番号は、リリースされたものに付与し、3つの数字で構成される
  • バージョン番号の3つの数字をどのように上げるかはルールがある
  • ビルド番号は、リリースしたかどうかにかかわらず上げる番号
AppStore の要件

AppStore にアップロードするときには、過去のビルド番号と同じものはアップロードすることができないようになっています。

ビルド番号が更新された=新しいバイナリと認識されます。

例えば、アプリがリジェクトされて新しいバイナリをアップロードするときがあると思いますが、過去と同じビルド番号のバイナリはアップロードすることはできません。
(その番号のアプリがリリースされたかどうかとは無関係でアップロード自体が拒否されます)

説明は以上です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です