【swift】アプリの初回起動時のみ処理を行う方法【CoffeeNote開発日記】

参考サイト

以下の記事を参考にさせていただきました。

  • やり方

cocoa touch - iPhone: How do I detect when an app is launched for the first time? - Stack Overflow

初回起動の判定方法 - Over&Out その後

アプリが初回起動のときに実行される処理 | 侍プログラマー

  • NSUserDefaults使い方(swift)

NSUserDefaults — A Swift Introduction - Coding Explorer Blog

[Swift]【NSUserDefaultsの基本的な使い方】表示、格納、削除。 - Qiita

iphone - What is the use of -[NSUserDefaults registerDefaults:]? - Stack Overflow

やり方

アプリの初回の起動時のみ処理をしたかったのですが、現状NSUserDefaults使うのが一番いいみたいです。

まず初回起動時に呼び出されるdidFinishLaunchingWithOptionsでNSUserDefaultsに初回起動時かどうか判定するためのBool変数にtrueをセット。

// AppDelegate.swift
  func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
   
    // first time to launch this app
    let defaults = NSUserDefaults.standardUserDefaults()
    var dic = ["firstLaunch": true]
    defaults.registerDefaults(dic)
 
    return true
  }

AppDelegateのそれぞれのメソッドの呼ばれるタイミングについては以下の記事がとても参考になりました。

iOSのライフサイクル - iOS Docs

swiftでの基本的なNSUserDefaultsの使い方は以下。

NSUserDefaults — A Swift Introduction - Coding Explorer Blog

registerDefaultsのことは以下から。

iphone - What is the use of -[NSUserDefaults registerDefaults:]? - Stack Overflow

[Swift]【NSUserDefaultsの基本的な使い方】表示、格納、削除。 - Qiita

AppDelegateの他のメソッドfirstLaunchをfalseにしてもよかったのだけど最初の処理を終えた後でfalseにしたほうが楽だと思ったのでそっちの方法で。

    // process if this is first time to launch this app
    let defaults = NSUserDefaults.standardUserDefaults()
    if defaults.boolForKey("firstLaunch") {
      
      // Some Process will be here
    
      // off the flag to know if it is first time to launch
      defaults.setBool(false, forKey: "firstLaunch")
    }

CoffeeNoteで、最初にサンプルのノートを作るって機能が欲しかったので調べてみました。

NSUserDefaultsでも十分簡単にできそうなので今回はそちらで実装しましたが、こういったものも作ってくださってるみたいです。

[iOS] 「インストール直後のみxxする/アップデート直後のみyyする」的な処理を簡単に書く方法 - Qiita

機会があれば使ってみよう。