[Realm] macOS/iOS プロジェクトでの RealmSwift セットアップ

     

TAGS:

⌛️ 2 min.

macOS/ iOS 向けプロジェクトで、Realm(RealmSwift) を使用するセットアップを再確認。

環境&対象

以下の環境で動作確認を行なっています。

  • macOS14.6
  • Xcode 16.1 Beta
  • iOS 17.5
  • Swift 5.9

SwiftPackage 設定

Swift Package Manager 経由で プロジェクトに追加するのが簡単です。

RealmSwift の github は、こちら

  1. 適当に プロジェクトを作成する(UnitTest を含めて作成すると、設定後の動作確認まで 記事に沿って試せます。)
  2. “File”-“Add Package Dependencies…” を選択
  3. 右上のフィールドに、”https://github.com/realm/realm-swift” を入力
  4. 中央のリポジトリリストに、realm-swift が表示されるので、選択
  5. Dependency Rule を “Up to Next Major Version” にする
  6. バージョン番号は、最新リリースにするのが、公式のおすすめ
    具体的なバージョン番号の確認は こちら
  7. Package Product 選択画面では、”Swift で使用する” なら、RealmSwift を 自分のターゲット(アプリ)に追加する。(Realm は追加しない)

上記で、使用開始できますが、Realm 側が提供する Privacy Manifest を使用するためには、以下の追加設定が必要です。

  1. プロジェクトナビゲータでプロジェクトファイルを選択し、ターゲットからアプリを選択する
  2. General タブで、Frameworks, Libraries, and Embedded Content セクションにある RealmSwift を見つける
  3. “Do Not Embeded” を “Embed & Sign” に変更する

Realm が提供する Privacy Manifest は、こちらで確認することができます。
(使用は必須ではありませんが、該当部分含めアプリ分を自分で作成することが必要になります)

モデル定義

せっかくなので(?)、モデルを作って 保存するところまで作ってみます。

Fighter という名前で以下の属性値を持つ要素を作成します。
・id(UUID, unique)
・name(String)
・hitPoint(Int)

Realm で上記モデルを定義すると以下のようになります。

import Foundation
import RealmSwift

class Fighter: Object {
    @Persisted(primaryKey: true) var id: UUID
    @Persisted var name: String = ""
    @Persisted var hitPoint: Int = 100
}

詳細は、Realm のドキュメントを確認する必要がありますが、ざっくり説明は以下です。

・RealmSwift を使うために、import する必要がある
・Realm に保存するためのオブジェクトは、Object を継承する必要がある
・オブジェクトとして保存するプロパティは、@Persisted をつける必要がある
・あとから キーとして検索するプロパティは、primaryKey を指定しておくと良い

保存してみる

アプリを作って、要素を作成・保存しようとすると いろいろな UI を作らなければいけないので、UnitTest を使って試してみます。

MEMO

UnitTest で、RealmSwift を使うためには、UnitTest にも ライブラリとして RealmSwift を追加することが必要です。

  1. プロジェクトナビゲータでプロジェクトを選択し、TARGETS で UnitTest を選択する
  2. Build Phases で、”Link Binary With Libraries” で、”+” ボタンを押下し、RealmSwift を追加する

先ほど定義した Fighter を 生成し、Realm に保存するコードは以下です。

//
//  RealmNotificationCheckTests.swift
//
//  Created by : Tomoaki Yagishita on 2024/09/11
//  © 2024  SmallDeskSoftware
//

import XCTest
import RealmSwift
@testable import RealmNotificationCheck

final class RealmNotificationCheckTests: XCTestCase {
    @MainActor
    func test_create() async throws {
        let fighter = Fighter()
        fighter.name = "R01"

        let realm = try! await Realm()
        try realm.write {
            realm.add(fighter)
        }

        print(realm.configuration.fileURL ?? "noFile")
    }
}

最後の print 文は、デフォルトで作成された Realm ファイルの位置を表示しています。

自環境では、以下のような位置でした。

file:///Users/<ユーザー名>/Library/Containers/<アプリID>/Data/Library/Application%20Support/default.realm
注意

Realm は、上記のテストを実行するたびに、realm ファイルに要素を “追加” していきます。
3回実行すると要素が3つ追加されるということです。
ファイルを削除してから実行すると、新規ファイルを作成して追加します。

RealmStudio で確認

Realm には、RealmStudio というツールが用意されていて、Realm の保存ファイルを開いて確認/編集することができます。

RealmStudio のページは こちら

使用している OS 向けの RealmStudio をダウンロードして用意してください。

自分がプロジェクトに指定したバージョンに対応する RealmStudio 使用することが必要です。

アプリを立ち上げて、先ほどの print 文で表示されたファイルを開くと、要素が保存されていることが確認できます。
(途中でいろいろと許諾を聞いてきますので、適切に回答してください)

FighterInRealmStudio

RealmStudio で開くことで、要素が生成されて保存されていることが確認できます。

まとめ

Realm を使ったプロジェクトセットアップを確認しました。

Realm を使ったプロジェクトセットアップ
  • SwiftPackage(https://github.com/realm/realm-swift) を使用するのが簡単
  • 公式では最新版を “Up to Next Major Version” して使用するのが推奨
  • Swift で使うだけなら、RealmSwift “のみ” をプロジェクトに追加する
  • Realm の Privacy Manifest を使用するなら、”Do Not Embeded” を “Embed & Sign” に変更する
  • RealmStudio を使用すると 保存されたファイルの中身を確認できて便利

説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。

SwiftUI おすすめ本

SwiftUI を理解するには、以下の本がおすすめです。

SwiftUI ViewMatery

SwiftUI で開発していくときに、ViewやLayoutのための適切なmodifierを探すのが大変です。
英語での説明になってしまいますが、以下の”SwiftUI Views Mastery Bundle”という本がビジュアル的に確認して探せるので、便利です。

英語ではありますが、1ページに コードと画面が並んでいるので、非常にわかりやすいです。

View に適用できる modifier もわかりやすく説明されているので、ビューの理解だけではなく、どのような装飾ができるかも簡単にわかります。

超便利です

SwiftUIViewsMastery

販売元のページは、こちらです。

SwiftUI 徹底入門

# SwiftUI は、毎年大きく改善されていますので、少し古くなってしまいましたが、いまでも 定番本です。

Swift学習におすすめの本

詳解Swift

Swift の学習には、詳解 Swift という書籍が、おすすめです。

著者は、Swift の初期から書籍を出していますし、Swift の前に主力言語だった Objective-C という言語についても同様の書籍を出しています。

最新版を購入するのがおすすめです。

現時点では、上記の Swift 5 に対応した第5版が最新版です。

コメントを残す

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