iOSアプリをリリースするときに、あらかじめ初期データを入れてリリースしたいってことありますよね。
このページではその方法を紹介します。
全体の流れ
流れは次の通りです。
- 初期データを準備する
- 初回利用時の場合、初期データを読み込むようにする
では、順に解説していきます。
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」と書いています。
(2024/11/25 03:22:12時点 Amazon調べ-詳細)