私がアプリ起動時の分岐処理によく使う方法です。
以下の3パターンに分けています。
- 初回起動時
- 更新時
- 通常起動
コード
サンプルコードはSwiftUIですがUIKitでも問題ありません。
SwiftUIをimportすればAppStorageが使えますし、
AppStorageを使わずにUserDefaultsを直接扱っても良いです。
import SwiftUI
enum LaunchStatus {
case FirstLaunch
case NewVersionLaunch
case Launched
}
class LaunchUtil {
static let launchedVersionKey = "launchedVersion"
@AppStorage(launchedVersionKey) static var launchedVersion = ""
static var launchStatus: LaunchStatus {
get{
let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? ""
let launchedVersion = self.launchedVersion
self.launchedVersion = version
if launchedVersion == "" {
return .FirstLaunch
}
return version == launchedVersion ? .Launched : .NewVersionLaunch
}
}
}
struct ContentView: View {
init(){
switch LaunchUtil.launchStatus {
case .FirstLaunch :
self.addSampleData()
self.showTutorial()
case .NewVersionLaunch :
self.showUpdateText()
default: break
}
}
var body: some View {
//略
}
//略
}
解説
AppStorage(UserDefaults)に初期値を設定し、
起動時に現在のバージョンを取得します。
以下が現在のバージョンの取得です。アプリバージョンを取得できます。
Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? ""
2つの値を比較して以下の通りに条件分岐します。
- 初期値なら初回起動
- 現在の値と異なれば更新時
- 同じ値なら通常起動
サンプルコードでなんとなくわかると思いますが、
私は初回起動時にCoreDataへのサンプルデータの追加とチュートリアル表示、
更新時には更新内容の表示をよく行います。
ブログ記事の紹介
本記事は最低限の内容にしています。
コードと簡単な説明があれば十分で、余談や細かい説明はあるだけ邪魔という人も多いと思うので
(私もよくあります)
- UserDefault版のコード
- AppStorageとUserDefaultの関係
- もう少し具体的な実用例
などを見たい場合はブログ記事も見てみて下さい。
AdMobの初期化処理もこの辺で行うので一緒に紹介しています。
こちらはAppStorageについてです。