ObjectBox Swift Database Docs

ObjectBox is a NoSQL Swift object database for iOS providing high-performance on mobile devices. It is an easy-to-use Core Data alternative.

Welcome to the official documentation for ObjectBox Swift. Here's what you need for your first steps:

If you have any questions, check out the FAQ or contact us; we're here to help: contact [at] objectbox.io.

ObjectBox Change Log

1.6.0 - 2021-05-13

  • Experimental Swift Package Manager (SPM) support; added 2021-06-02

  • Build with Xcode 12.5 and Swift 5.4

  • Updated Sync protocol to V3

  • Internal improvements

1.5.0 - 2021-05-03

  • Added support for Apple Silicon (e.g. M1 ARM64-based CPU)

  • Switched packaging to XCFramework (note: this will help us with SwiftPM in the future, but currently breaks Carthage consumers)

  • Several updates to the Sync API

  • Several internal improvements

  • Built with Swift 5.3.2

1.4.1 - 2020-11-10

  • Several internal improvements under the hood; an indirect consequence is that Foundation is not implicitly imported anymore (you may have to add Foundation imports after upgrading)

  • New sync annotation

  • Build target for macOS set to 10.10 (was undefined before)

  • Built with Swift 5.3

1.4.0 - 2020-09-08

See also: announcement post covering object relations

  • ToMany improvements

    • applyToDb() now puts new objects automatically; you do not have to put them individually anymore

    • New properties to probe the state: resolved and canInteractWithDb

    • A throwing resolveFromDb() to explicitly fetch the target objects allowing to catch errors before starting to interact with the target objects

    • getUncachedFromDb() and getUncachedIdsFromDb() for getting plain arrays from the database

    • Fixes: e.g. resolving now happens transactionally (improves performance too), removeAll() is now supported

  • ToOne: putting an object with a ToOne, now avoids to put already persisted related ToOne target object. Note: While this is a fix, it may be a breaking change if you relied on that behavior before.

  • Box: added a bulk get() for given IDs and renamed dictionaryWithEntities() to getAsDictionary()

  • Read-only stores

  • Added a version check to ensure that the library matches the generator

  • Reduced framework size by omitting outdated 32 bit versions

1.3.1 - 2020-06-29

  • Fixes for ToMany

  • Several internal improvements, e.g. query links are resolved faster

1.3.0 - 2020-05-11

  • Built with and for Swift 5.2

  • Fix sporadic "errno 12" while opening a DB on iOS devices

  • Lower deployment target to iOS 9.3 (seems to be still used by older iPads)

  • Fix for PropertyQuery (e.g. single line construction without holding on to Query)

  • API clean ups

    • Remove deprecated Query.all(); use find() instead

    • Box functions like visit(), for() and forEach() are now read-only by default. New optional writable flags changes this to use a write transaction instead.

1.2.0 - 2019-12-17

  • Added support for optional unsigned property types

  • Better type support for queries; e.g. unsigned and optional properties, Bool properties

  • Property queries compute sums and averages more precisely (improved algorithms and wider types)

  • Some Query API clean up, e.g. setting query parameters does not throw anymore, findUnique() always returns an optional result, etc.

1.1.1 - 2019-11-23

Fix for the 1.1 "realpath" error during build on machines without Homebrew coreutils.

1.1 - 2019-11-18

  • Experimental Carthage support (in addition to CocoaPods)

  • If a convert annotation on an enum has no explicit database type given, its RawType is used.

  • Various performance optimizations

  • Usability improvements, e.g.setup.rb now asks which project to use if there is more than one, and creates a non-empty *.generated.swift file to help with code completion.

  • Added put() with variable argument list, put(inout) for mutable structs, and putAndReturnIDs(). Upgrade note: put() itself no longer returns IDs.

  • Added variants of Box methods for ContiguousArray class, which are faster than the methods using standard arrays.

  • Anonymous build statistics can be turned off using --no-statistics

1.0.1 - 2019-10-01

  • Fix bug that prevented code generator from working in projects that use SwiftPM

1.0 - 2019-09-24

  • Relations in queries

  • Observer callbacks for data changes

  • Many-to-many relations

  • Asynchronous put/remove

  • Edit relations through their backlinks

  • API clean up; e.g. renames, simple IDs, simplifications, etc.

  • If you've been using pre-releases, you can find migration instructions in the Readme on Github.

0.9.1 - 2019-08-13

iOS hotfix

  • Fixed "Storage error code 78" for iOS

0.9.0 - 2019-07-22

Open Source Release

  • Source code for the Swift binding is now available

  • Reduced write/update time by about 25%

  • Rewrote the remaining Objective-C classes in Swift

  • Fix an issue reading an old entity written before a new, non-optional property was added to it

  • Improvements for people using SwiftLint in their projects

  • Added findIds(), visit()/forEach(). Added remove() for queries.

  • Improved support for enums and other user-defined types

  • Data and [UInt8] are now supported as property types.

  • Binaries: Swift 5 ABI only

0.8.0 - 2019-05-14

Struct Support and Performance Improvements

  • Immutable structs can now be used, you are no longer restricted to classes

  • We no longer throw NSError-based errors, they're all enum ObjectBoxError cases now

  • Strings that were created as NSStrings previously are now created as Swift Strings, which should reduce the number of unnecessary UTF-16/UTF-8 roundtrip conversions when Swift 5.1 arrives

  • New projects are now set up with separate generated source files for each target by setup.rb.

  • Binaries: Swift 5 ABI only

0.7.0 - 2019-04-02

Swift 5 and Build Improvements

0.6.0 - 2018-12-19

Model Migration

  • Your data model is now migrated transparently for you when you make changes

  • Properties can be indexed

  • You can require property fields to be unique

  • You can specify a different name for use in the model than the instance variable's

  • Use of ObjectBox without CocoaPods has been simplified

  • You do not need to annotate back-links in relations anymore in clear cases

  • Binaries: Swift 4 ABI only.

  • Alpha users:

    • Use annotations // objectbox: instead of // sourcery:

    • Delete any database files you created before (one time only, starting with the beta we have model migrations)

0.5.5 - 2018-11-29

Alpha 6

  • Remove code-generator limitations regarding order of properties vs. relations

  • Support sandboxed macOS applications (see macOS Sandbox setup)

  • Add "transient" annotation for skipping properties

  • Binaries: Swift 4 ABI only.

0.5.4 - 2018-11-27

Alpha 5

  • Code generation fixes for optionals

  • Expanded example app to demo optionals

  • Fixes for Date-decoding into entities

  • Binaries: Swift 4 ABI only

0.5.3 - 2018-11-26


  • Just small things. Also an elephant.

0.5.2 - 2018-11-22

iOS Sandboxing.

  • Fixed issues that could occur when deploying to device.

  • Added auto-registration of your entities

0.5.1 - 2018-11-19

Alpha 2

  • Fix an issue related to "duplicate index ID" error message.

0.5.0 - 2018-11-16

Alpha 1

  • Initial public release for comment.