Paul Roub

A Software Tool Geek in His Natural Habitat

Using Zumero in Your Swift Project

We’ve received an email or two asking how to use Zumero sync from Swift code. If you’ve used other Objective-C frameworks in your Swift projects, the steps are just what you’d expect. If you haven’t, don’t worry - it’s not that bad.

Create a Swift-based project, as usual.

Now add the ZumeroSync framework - either directly from the Zumero SDK, or – my preferred way – via Cocoapods.

$ cat >> Podfile 
pod 'ZumeroSync'

$ pod install
Analyzing dependencies
Downloading dependencies
Installing ZumeroSync (
Installing sqlite3 (
Generating Pods project
Integrating client project

[!] Please close any current Xcode sessions and use `swiftnzum.xcworkspace` for this project from now on.

We’ll now open the workspace as instructed, and it looks like we’re all set:

Except that Swift has no idea what we’re talking about:

To let Swift code know about the Zumero classes, we need a bridging header. I followed Mark Petherbridge’s instructions in How to create an Objective-C Bridging header, like so:

Add a new Objective-C file. Call it what you like:

Yes, we do want to create a bridging header:

Add a ZumeroSync import to that header:

//  Use this file to import your target's public headers that you would like to expose to Swift.

#import <ZumeroSync/ZumeroSync.h>

We can delete the “dummy” Objective-C file (optional, but it serves no purpose here):

And voilà, Swift has heard of Zumero:

As for the actual usage, it’s just a Swift-y version of the Objective-C call:

var syncError: NSError?

let ok = ZumeroSync.Sync("foo", cipherKey: nil,
    serverUrl: "", remote: "dbfilename",
    authScheme: nil, user: nil, password: nil,
    error: &syncError)