Background Realm
Background Realm is a collection of handy classes and extensions that make it easier to work with RealmSwift
in the background.
It's main focus is to enhance existing Realm
s and Realm-based code bases with very little overhead and refactoring.
Note: Although this module makes it more convenient to work with a Realm
in the background, it does not make Realm
s nor its objects thread-safe. They should still be accessed only from within their appropriate thread.
Specs
- RealmSwift 10.0.0+
- iOS 12+
- tvOS 12+
- watchOS 4+
- macOS 10.12+
- Swift 5.0+
Objective-C
For the Objective-C counterpart, see BLBackgroundRealm.
Writing to a Realm in the background
Performing write transactions in the background becomes as easy as:
Realm.writeInBackground(configuration: <#T##Realm.Configuration?#>) { (result) in
<#code#>
}
Optionally, you can set a default backgroundConfiguration
that will be used in all write transactions in the background:
Realm.Configuration.backgroundConfiguration = <#T##Realm.Configuration?#>
Realm.writeInBackground { (result) in
<#code#>
}
Finally, you can easily move from any Realm
instance to its background counterpart:
let realm = try Realm()
realm.writeInBackground { (result) in
<#code#>
}
Commiting to a Realm in the background
Similarly to write operations, you can commit transactinos to a Realm
in the background. The difference being that commits can be cancelled:
Realm.commitInBackground(configuration: <#T##Realm.Configuration?#>) { (result) -> Bool in
<#code#>
return false //return true if you want to cancel this write operation
}
You can also move from any Realm
instance to its background counterpart:
let realm = try Realm()
realm.commitInBackground { (result) -> Bool in
<#code#>
return false //return true if you want to cancel this write operation
}
BackgroundRealm
The Background Realm exposes a BackgroundRealm
class, which basically:
- creates a private
Thread
andRunLoop
where a new backgroundRealm
will be opened - opens a
Realm
in the private thread - runs work in the background thread
This is particularly useful if you'd like to:
- make computationally expensive changes to the
Realm
- register for change notifications in the background, without necessarily triggering a UI update right away
Usage
- Creating a
BackgroundRealm
usingRealm.Configuration.backgroundConfiguration
:
let backgroundRealm = BackgroundRealm { (result) in
<#code#>
}
- Creating a
BackgroundRealm
using a custom configuration:
let backgroundRealm = BackgroundRealm(configuration: <#T##Realm.Configuration?#>) { (result) in
<#code#>
}
- Creating a
BackgroundRealm
using a fileURL
:
let backgroundRealm = BackgroundRealm(fileURL: <#T##URL#>) { (result) in
<#code#>
}
Queues
BackgroundRealm
uses two queues to process things in the background:
DispatchQueue.backgroundRealm
OperationQueue.backgroundRealm
If you'd like to use your own queues, just set those as early as possible in you app's life cycle.
Installation
Cocoapods
pod 'BackgroundRealm', '~> 3.0'
Then import BackgroundRealm
where needed.
Carthage
github "BellAppLab/BackgroundRealm" ~> 3.0
Then import BackgroundRealm
where needed.
Swift Package Manager
.package(url: "https://github.com/BellAppLab/BackgroundRealm.git", from: "3.0.0")
Git Submodules
cd toYourProjectsFolder
git submodule add -b submodule --name BackgroundRealm https://github.com/BellAppLab/BackgroundRealm.git
Then drag the BackgroundRealm
folder into your Xcode project.
Author
Bell App Lab, [email protected]
Contributing
Check this out.
Credits
Logo image by mikicon from The Noun Project
License
BackgroundRealm is available under the MIT license. See the LICENSE file for more info.