https://github.com/bellapplab/backgroundrealm
A collection of handy classes and extensions that make it easier to work with RealmSwift in the background.
https://github.com/bellapplab/backgroundrealm
ios macos osx realm realmswift swift tvos watchos
Last synced: 8 months ago
JSON representation
A collection of handy classes and extensions that make it easier to work with RealmSwift in the background.
- Host: GitHub
- URL: https://github.com/bellapplab/backgroundrealm
- Owner: BellAppLab
- License: mit
- Created: 2018-06-21T12:42:33.000Z (over 7 years ago)
- Default Branch: main
- Last Pushed: 2023-02-08T16:59:24.000Z (about 3 years ago)
- Last Synced: 2025-04-13T17:19:30.460Z (11 months ago)
- Topics: ios, macos, osx, realm, realmswift, swift, tvos, watchos
- Language: Swift
- Homepage:
- Size: 799 KB
- Stars: 3
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Background Realm [](#installation) [](#license)
[](#installation)
[](#swift-versions-support)
[](https://cocoapods.org/pods/BackgroundRealm)
[](https://github.com/Carthage/Carthage)
[](https://github.com/apple/swift-package-manager)
[](http://twitter.com/BellAppLab)

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.13+
* Swift 5.0+
### Objective-C
For the Objective-C counterpart, see [BLBackgroundRealm](https://github.com/BellAppLab/BLBackgroundRealm).
## Writing to a Realm in the background
Performing write transactions in the background becomes as easy as:
```swift
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:
```swift
Realm.Configuration.backgroundConfiguration = <#T##Realm.Configuration?#>
Realm.writeInBackground { (result) in
<#code#>
}
```
Finally, you can easily move from any `Realm` instance to its background counterpart:
```swift
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:
```swift
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:
```swift
let realm = try Realm()
realm.commitInBackground { (result) -> Bool in
<#code#>
return false //return true if you want to cancel this write operation
}
```
## The `BackgroundRealm`
Background Realm exposes a `BackgroundRealm` class, which basically:
1. creates a private `Thread` and `RunLoop` where a new background `Realm` will be opened
2. opens a `Realm` in the private thread
3. 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` using `Realm.Configuration.backgroundConfiguration`:
```swift
let backgroundRealm = BackgroundRealm { (result) in
<#code#>
}
```
- Creating a `BackgroundRealm` using a custom configuration:
```swift
let backgroundRealm = BackgroundRealm(configuration: <#T##Realm.Configuration?#>) { (result) in
<#code#>
}
```
- Creating a `BackgroundRealm` using a file `URL`:
```swift
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
```ruby
pod 'BackgroundRealm', '~> 4.0'
```
Then `import BackgroundRealm` where needed.
### Carthage
```swift
github "BellAppLab/BackgroundRealm" ~> 4.0
```
Then `import BackgroundRealm` where needed.
### Swift Package Manager
```swift
.package(url: "https://github.com/BellAppLab/BackgroundRealm.git", from: "4.0.0")
```
### Git Submodules
```shell
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, apps@bellapplab.com
### Contributing
Check [this out](./CONTRIBUTING.md).
### Credits
[Logo image](https://thenounproject.com/search/?q=background&i=635453#) by [mikicon](https://thenounproject.com/mikicon) from [The Noun Project](https://thenounproject.com/)
## License
BackgroundRealm is available under the MIT license. See the LICENSE file for more info.