realm-swift README

The project's README from github.com/realm/realm-swift. As one markdown file: README.md.

realm

About Realm Database

Realm is a mobile database that runs directly inside phones, tablets or wearables. This repository holds the source code for the iOS, macOS, tvOS & watchOS versions of Realm Swift & Realm Objective-C.

Why Use Realm

Object-Oriented: Streamline Your Code

Realm was built for mobile developers, with simplicity in mind. The idiomatic, object-oriented data model can save you thousands of lines of code.

// Define your models like regular Swift classes
class Dog: Object {
    @Persisted var name: String
    @Persisted var age: Int
}
class Person: Object {
    @Persisted(primaryKey: true) var _id: String
    @Persisted var name: String
    @Persisted var age: Int
    // Create relationships by pointing an Object field to another Class
    @Persisted var dogs: List<Dog>
}
// Use them like regular Swift objects
let dog = Dog()
dog.name = "Rex"
dog.age = 1
print("name of dog: \(dog.name)")

// Get the default Realm
let realm = try! Realm()
// Persist your data easily with a write transaction
try! realm.write {
    realm.add(dog)
}

Live Objects: Build Reactive Apps

Realm’s live objects mean data updated anywhere is automatically updated everywhere.

// Open the default realm.
let realm = try! Realm()

var token: NotificationToken?

let dog = Dog()
dog.name = "Max"

// Create a dog in the realm.
try! realm.write {
    realm.add(dog)
}

//  Set up the listener & observe object notifications.
token = dog.observe { change in
    switch change {
    case .change(let properties):
        for property in properties {
            print("Property '\(property.name)' changed to '\(property.newValue!)'");
        }
    case .error(let error):
        print("An error occurred: (error)")
    case .deleted:
        print("The object was deleted.")
    }
}

// Update the dog's name to see the effect.
try! realm.write {
    dog.name = "Wolfie"
}

SwiftUI

Realm integrates directly with SwiftUI, updating your views so you don't have to.

struct ContactsView: View {
    @ObservedResults(Person.self) var persons

    var body: some View {
        List {
            ForEach(persons) { person in
                Text(person.name)
            }
            .onMove(perform: $persons.move)
            .onDelete(perform: $persons.remove)
        }.navigationBarItems(trailing:
            Button("Add") {
                $persons.append(Person())
            }
        )
    }
}

Fully Encrypted

Data can be encrypted in-flight and at-rest, keeping even the most sensitive data secure.

// Generate a random encryption key
var key = Data(count: 64)
_ = key.withUnsafeMutableBytes { (pointer: UnsafeMutableRawBufferPointer) in
    guard let baseAddress = pointer.baseAddress else {
        fatalError("Failed to obtain base address")
    }
    SecRandomCopyBytes(kSecRandomDefault, 64, baseAddress)
}

// Add the encryption key to the config and open the realm
let config = Realm.Configuration(encryptionKey: key)
let realm = try Realm(configuration: config)

// Use the Realm as normal
let dogs = realm.objects(Dog.self).filter("name contains 'Fido'")

Getting Started

We support installing Realm via Swift Package Manager, CocoaPods, Carthage, or by importing a dynamic XCFramework.

For more information, see our Quick Start.

Documentation

The documentation can be found in the docs/ directory.

The API reference can be generated from source using jazzy by running sh build.sh docs from the root of this repository.

Getting Help

Building Realm

In case you don't want to use the precompiled version, you can build Realm yourself from source.

Prerequisites:

Once you have all the necessary prerequisites, building Realm just takes a single command: sh build.sh build. You'll need an internet connection the first time you build Realm to download the core binary. This will produce Realm.xcframework and RealmSwift.xcframework in build/Release/.

Run sh build.sh help to see all the actions you can perform (build ios/osx, generate docs, test, etc.).

Contributing

See CONTRIBUTING.md for more details!

Code of Conduct

This project adheres to the MongoDB Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to [email protected].

License

Realm Objective-C & Realm Swift are published under the Apache 2.0 license. Realm Core is also published under the Apache 2.0 license and is available here.

Feedback

If you use Realm and are happy with it, please consider sending out a tweet mentioning @realm to share your thoughts!

And if you don't like it, please let us know what you would like improved, so we can fix it!

realm-swift (realm/realm-swift)

tvos
Searching Database…

What is this?Realm is an open-source mobile database that runs directly inside phones, tablets and wearables — an embedded replacement for Core Data & SQLite, not a client-server database.
How is it different from just using Core Data or SQLite directly?Realm gives you an object-oriented data model that needs no ORM and saves you code, and it is tuned for mobile constraints like memory, disk space and battery life.
How do I add it to my Xcode project?Install it via Swift Package Manager, CocoaPods, or Carthage, or by importing a dynamic XCFramework directly.
Does it work on Android too, or only Apple devices?Only Apple platforms: this repo holds the iOS, macOS, tvOS and watchOS versions of Realm Swift and Realm Objective-C — there is no Android or Windows code here.
What happens to my app when the phone has no internet connection?Nothing breaks — Realm's local database persists data on-disk, so the app works offline just as well as it does online.
Is the data stored on the device secure?It can be: Realm supports encrypting data both in-flight and at-rest, so even sensitive data stays protected.
Can I ship it in my own app, including a paid one?Yes — Realm Objective-C, Realm Swift and Realm Core are all published under the Apache 2.0 license.
Does it work with SwiftUI?Yes, it integrates directly with SwiftUI and updates your views so you don't have to. Its live objects also mean data changed anywhere is automatically updated everywhere in the app.
Can I safely use it from background threads?Yes — thread safety is one of Realm's advertised properties (the project is tagged 'threadsafe'), so concurrent access from multiple threads is supported by design.
Creator
realm
Size
66.3 MB
Stars
16.6K
Age
14y
Commits · 90 Days