LoginSignup
1
1

More than 1 year has passed since last update.

【Swift】個人的によく使うアプリ起動時の分岐処理

Posted at

私がアプリ起動時の分岐処理によく使う方法です。
以下の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についてです。

1
1
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
1
1