【iOSアプリ開発】Realmに初期データを入れる方法

iOSアプリをリリースするときに、あらかじめ初期データを入れてリリースしたいってことありますよね。

このページではその方法を紹介します。

全体の流れ

流れは次の通りです。

  1. 初期データを準備する
  2. 初回利用時の場合、初期データを読み込むようにする

では、順に解説していきます。



STEP1.  初期データを準備する

初期データは実際にあなたが作ったシミュレーターを使って画面から登録したり、Realm Studioを使って直接登録します。

ここはプログラミングとは全く関係ありませんね。

データの登録が終わったら、データが登録された「default.realm」ファイルをプロジェクト内にコピーしてください。

コピー先はどこでもいいですが、僕はseedというフォルダを作ってその中に入れています。

またファイル名は「default.realm」から別の名前に変更しても構いません。

これで、準備はOKです。

STEP2.  初回利用時の場合、初期データを読み込むようにする

続いて、初回の利用時に用意したRealmファイルを利用するようにします。

コードは「AppDelegate.swift」の func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) の中に次のように書きます。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

  // アプリで使用するdefault.realmのパスを取得
  let defaultRealmPath = Realm.Configuration.defaultConfiguration.fileURL!

  // 初期データが入ったRealmファイルのパスを取得
  let bundleRealmPath = Bundle.main.url(forResource: "ShopList", withExtension: "realm")      

  // アプリで使用するRealmファイルが存在しない(= 初回利用)場合は、シードファイルをコピーする
  if !FileManager.default.fileExists(atPath: defaultRealmPath.path) {
    do {
      try FileManager.default.copyItem(at: bundleRealmPath!, to: defaultRealmPath)
    } catch let error {
        print("error: \(error)")
      }
  }        

  return true
}    

やっていることは、起動時に生成されるRealmのファイルがあるかどうかを確認して、存在しなければ初回の利用ということになるので、あらかじめ準備しておいたシードファイルをコピーしています。

Bundle.main.url(forResource: “ShopList”, withExtension: “realm”) の forResourceの値にはあなたのシードファイルにあった名前を指定してください。

withExtensionは拡張子を指定するので「realm」と書いています。

created by Rinker
¥3,168 (2022/08/17 20:26:29時点 Amazon調べ-詳細)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA