いい感じにインストールされたアプリのバージョンをトラッキングしてくれるSwiftyVersionTrackerを作った
サマリ
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
}
使い方
プロパティ
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をご参照下さい
SwiftyVersionIntInt: SwiftyVersion
ただインストールバージョンをトラッキングしたいだけなのに1から実装するのはめんどくさい!という方(ほとんどだとおもいますが)のために、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
を引数なしで初期化すると、ターゲットに設定したVersion
とBuild
を使って、ジェネリクスで指定したSwiftyVersion
を初期化します。
サンプルは下記の通りです。
let tracker = try! SwiftyVersionTracker<YourVersion>()
2. 独自バージョン管理を使う方法
バージョン情報をそれ以外の方法で管理している場合は、初期化時にversionString
とbuildString
パラメータに指定できます。
let tracker = try! SwiftyVersionTracker<YourVersion>(versionString: "1.2.3", buildString: "a123")
App Extensionsの中で使う場合
アプリ本体とExtensionsで共通して使いたい場合は、初期化時にuserDefaults
パラメータを指定することで、App Groupに対応した保存先を使えます。
Author And Source
この問題について(いい感じにインストールされたアプリのバージョンをトラッキングしてくれるSwiftyVersionTrackerを作った), 我々は、より多くの情報をここで見つけました https://qiita.com/notohiro/items/5df626edbca03ca540d0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .