見出し画像

CoreDataからFirebaseに移行 導入

アプリのご紹介

現在、新規アプリを作成しています。

題して、「毛糸メモ」です。

なんてことはない、自分が持っている毛糸の写真とちょっとした情報をメモするアプリです。
なぜ欲しいかというと、ふと寄った手芸屋で毛糸を見ていて、
・家にどの毛糸があったのか
・どのロットだったのか
・どれくらい残っているのか
がわからず、出直すということがしばしばだったんです。

それにプラスして、「本で見つけた作品を編みたい!!」と思って、毛糸を買うためのお買い物メモとしてもつかいたいなと。

CoreData

まずは、SwiftUI × CoreDataで作成しました。
写真についてはCoreDataではなく、Dataに変換してローカルのディレクトリに保存しました。

iOS13から使えるようになったSwiftUI、大変CoreDataと相性がいいんですね。
FetchRequest で読み込んだCoreDataのデータをリスト表示して、詳細画面で編集すると、自動的にリストにも反映されるんですね。

移行の経緯

正直なこと言うと、このままリリースしても十分使えるんです。

ただ、データはローカルなんですね。
iPhoneユーザーはいいんですが、Androidユーザー向けにAndroidアプリを作成する場合はおそらくRealmで作成せざるを得ない。
また、iPhone→Androidへ買い替えた方、その逆の方、アプリを誤って削除しちゃった、OSアップデートでデータが消えちゃった(最近あまり聞きませんが)、などなど。。。

やはりデータをローカルに置いておくのはリスクがある。

以前リリースした「編み物カウンター」、こちらは一つ一つのデータの寿命が短いんですね。
基本的に一作品編み終わったらカウンターのデータなんていらないんです。
最悪、手作業で移行もできますし。

ただ、今回の毛糸メモについては、一つ一つのデータの寿命が長いです。

それを考えると、データを端末に保持するのはよろしくないですね。

環境分け

能書きが長くなりました。

FirebaseSDKの導入の前に、環境分けをするようにします。

本番アプリと開発アプリで別アプリとするために、
・Bundle ID
・アプリ名
を変更します。

Bundle ID はXcodeで対象のターゲット > Signing & Capabilities と選択し、DebugとReleaseでBundle Identifierに別々のIDを指定します。

アプリ名については、対象のターゲット > Build Settings > + > Add User-Defined Setting と選択し、キー名にBUNDLE_DISPLAY_NAMEなどと指定します。
このキーに対する値でDebugとReleaseに別々の名前を指定します。
次に、Info.plistでBundle display nameを追加し、値に$(BUNDLE_DISPLAY_NAME)を指定します。

これで本番アプリと開発アプリが別アプリとなり、アプリ名も異なるため識別しやすくなります。

GoogleService-info.plist

Firebase上のアプリケーションごとに必要になります。
今回は、本番用と開発環境用でFirebase上のアプリケーションも分けるので、Googleservice-info.plistが二つ必要になります。

開発版とリリース版でFirebaseのGoogleService-Info.plistを切り替える

今回、こちらを参考にしました。

・本番用の「GoogleService-info.plist」を「GoogleService-info-Release.plist」にリネーム、開発用の「GoogleService-info.plist」を「GoogleService-info-Debug.plist」にリネームします。

・RunScriptでビルド設定によって「GoogleService-info-Release.plist」または「GoogleService-info-Debug.plist」のどちらかを「GoogleService-info.plist」にリネームします。

・こうすることで、実行時に本番用と開発用どちらか一方のみが正しいファイル名にリネームされ、読み込まれることになります。

この記事が気に入ったらサポートをしてみませんか?