LoginSignup
4
2

More than 5 years have passed since last update.

いい感じにインストールされたアプリのバージョンをトラッキングしてくれるSwiftyVersionTrackerを作った

Last updated at Posted at 2017-06-23

サマリ

GitHubはこちらSwiftyVersionTracker

  • GBVersionTrackingを元にしています。
  • インストールされたアプリのバージョンを時系列に保存します。
  • Protocol Orientedな実装なので、バージョン番号のルールはプロジェクトに応じて柔軟に実装できます。
  • とはいえ、殆どのプロジェクトは1.0.0(整数繰り上げ)とかのルールだと思いますので、すぐに使えるよう整数用の構造体を実装済みです。
  • 便利なプロパティを用意しています。
  • 下記、基本的にはREADME.mdの日本語訳です。

Quick Look

let tracker = try! SwiftyVersionTracker<SwiftyVersionIntInt>()

if tracker.isFirstLaunchEver {
  // do something
  // e.g. shows welcome screen
}

if tracker.isFirstLaunchForVersion {
  // do something
  // e.g. shows release note
}

if tracker.last?.major == 1 {
  // do something
  // e.g. migrate database
}

使い方

プロパティ

プロパティ 用途
isFirstLaunchEver: Bool インストール後初回起動かどうかを返します
isFirstLaunchForVersion: Bool 今回起動のバージョンで初めての起動かどうかを返します
isFirstLaunchForBuild: Bool 今回起動のビルドで初めての起動かどうかを返します
current: T 現在のバージョンを返します
previous: T? 一つ前にインストールされていたバージョンを返します
first: T 最初にインストールされたバージョンを返します
last: T? 最後に起動されたバージョンを返します
history: [T] これまでインストールされたバージョン履歴を返します

T

SwiftyVersionTrackerはプロトコル指向プログラミングで実装されています。バージョンを表すルールは会社やアプリに応じて様々あると思います。SwiftyVersionプロトコルに準拠していれば、バージョンを表す構造体/クラスTを自由に実装できますので、要件に応じて柔軟に対応出来るようになっています。

SwiftyVersion

SwiftyVersionは下記で表されるシンプルなプロトコルです。

public protocol SwiftyVersion: Equatable {
    associatedtype VersionLetters: Comparable
    associatedtype BuildLetters: Comparable

    var major: VersionLetters { get }
    var minor: VersionLetters { get }
    var release: VersionLetters { get }
    var build: BuildLetters { get }

    init(versionString: String?, buildString: String?) throws
}

バージョニングの考え方はWikipediaをご参照下さい:grinning:

SwiftyVersionIntInt: SwiftyVersion

ただインストールバージョンをトラッキングしたいだけなのに1から実装するのはめんどくさい!という方(ほとんどだとおもいますが:sweat_smile:)のために、SwiftyVersionIntIntを同梱しています。IntIntという名前の通り、バージョン番号にもビルド番号にも整数しか使わないユースケースで利用できます。具体的には下記をご覧ください。

let version = try! SwiftyVersionIntInt(versionString: "1.2.3", buildString: "4")

XCTAssertEqual(version.major, 1)
XCTAssertEqual(version.minor, 2)
XCTAssertEqual(version.release, 3)
XCTAssertEqual(version.build, 4)

SwiftyVersionTracker

T: SwiftyVersionが実装できたら、ようやくSwiftyVersionTrackerの出番です。SwiftyVersionTrackerを初期化する際は、2つの選択肢があります。

1. Bundleを使う方法

1つ目はバンドルを使う方法で、殆どのアプリケーションに最適です。SwiftyVersionTrackerを引数なしで初期化すると、ターゲットに設定したVersionBuildを使って、ジェネリクスで指定したSwiftyVersionを初期化します。

サンプルは下記の通りです。

let tracker = try! SwiftyVersionTracker<YourVersion>()

2. 独自バージョン管理を使う方法

バージョン情報をそれ以外の方法で管理している場合は、初期化時にversionStringbuildStringパラメータに指定できます。

let tracker = try! SwiftyVersionTracker<YourVersion>(versionString: "1.2.3", buildString: "a123")

App Extensionsの中で使う場合

アプリ本体とExtensionsで共通して使いたい場合は、初期化時にuserDefaultsパラメータを指定することで、App Groupに対応した保存先を使えます。

4
2
0

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
4
2