EAZY E
EAZY E

Reputation: 39

SyncCredentials Don't exist in Realm Swift

Im trying to connect my app to a Realm Object Server. The documentation says, to do this you use the below:

// create a configuration object
let realmUrl = URL(string: "realms://example.com:9000/~/settings")!
let realmUser = SyncCredentials.usernamePassword(username: username,     password: password)
let config = Realm.Configuration(user: realmUser, realmURL: realmUrl)

// open the Realm with the configuration object
let settingsRealm = try! Realm(configuration: config)

However for SyncCredentials.usernamePassword, XCode says SyncCredentials doesn't exist. From the looks you need to set SyncConfiguration on in Realm.configuration (or the only file I can find RealmConfiguration.swift)

Now I'm in that file theres no option to use SyncCredentials

My question is, how do I simply connect my app with a Realm Object Database using SyncCredentials (or however you're supposed to do it). Been pulling my hair out all day over this, surely it can't be that hard :-(

Upvotes: 1

Views: 550

Answers (2)

Carter
Carter

Reputation: 1284

Swift Package Manager doesn't load SyncCredentials or SyncUser properly.

I was using the SPM to install RealmSwift as a dependency from IceCream. I removed Realm and IceCream from SPM. Then installed using Carthage to solve the issue.

Upvotes: 1

kishikawa katsumi
kishikawa katsumi

Reputation: 10563

There seem some mistakes.

SyncCredentials is auth info that is used to log in. It is not user object. Realm.Configuration doesn't receive user and realmURL parameters in the initializer. You need to use SyncConfiguration instead.

The example code for logging in or instantiating Realm with existing user is the following.

let syncServerURL = URL(string: "realm://example.com:9080/~/settings")!
let syncAuthURL = URL(string: "http://example.com:9080")!

if let user = SyncUser.current {
    let config = Realm.Configuration(syncConfiguration: SyncConfiguration(user: user, realmURL: syncServerURL))
    let realm = try! Realm(configuration: config)
    ...

} else {
    let username = ...
    let password = ...

    let credentials = SyncCredentials.usernamePassword(username: username, password: password)
    SyncUser.logIn(with: credentials, server: syncAuthURL) { user, error in
        DispatchQueue.main.async {
            if let user = user {
                let config = Realm.Configuration(syncConfiguration: SyncConfiguration(user: user, realmURL: syncServerURL))
                let realm = try! Realm(configuration: config)
                ...

            } else {
                // Handle error
            }
        }
    }
}

Please read our documentation again https://realm.io/docs/swift/latest/#sync

and also our RealmTasks sample project helps you to understand interacting Realm Object Server. https://github.com/realm-demos/realm-tasks

If you still see SyncCredentials not found error in above code, probably you didn't setup RealmSwift framework correctly. Please add more info that how did you set up Realm.

Upvotes: 1

Related Questions