Adding Core Data to a WatchOS 2 app

I'm currently trying to add Core Data to my WatchOS 2 app and I'm struggling without any documentation.

So I added CoreData.framework to my watch extension's "Link Binary with Libraries" build phase.

And then I defined a DataManager singleton to handle all the CoreData setup:


import CoreData
class DataManager {
    static let sharedManager = DataManager()

    private init() {
     
    }

    lazy var applicationDocumentsDirectory: NSURL = {
        /
        let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
        return urls[urls.count-1]
    }()

    lazy var managedObjectModel: NSManagedObjectModel = {
        /
        let modelURL = NSBundle.mainBundle().URLForResource("Smartvoxx", withExtension: "momd")!
        return NSManagedObjectModel(contentsOfURL: modelURL)!
    }()

    lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator? = {
        /
        /
        var coordinator: NSPersistentStoreCoordinator? = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
        let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("ProjectName.sqlite")
        var error: NSError? = nil
        var failureReason = "There was an error creating or loading the application's saved data."
        do {
            try coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil)
            coordinator = nil
            /
            var dict = [String: AnyObject]()
            dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data"
            dict[NSLocalizedFailureReasonErrorKey] = failureReason
            dict[NSUnderlyingErrorKey] = error
            error = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
            /
            /
            NSLog("Unresolved error \(error), \(error!.userInfo)")
            abort()
        } catch {
         
        }
     
        return coordinator
    }()

    lazy var managedObjectContext: NSManagedObjectContext? = {
        /
        let coordinator = self.persistentStoreCoordinator
        if coordinator == nil {
            return nil
        }
        var managedObjectContext = NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.MainQueueConcurrencyType)
        managedObjectContext.persistentStoreCoordinator = coordinator
        return managedObjectContext
    }()

    /

    func saveContext () {
        if let moc = self.managedObjectContext {
            if moc.hasChanges {
                do {
                    try moc.save()
                } catch {
                    NSLog("Unresolved error: \(error as NSError)")
                    abort()
                }
            }
        }
    }
}


Finally I added a DataModel to my watch extension and I added this line to my ExtensionDelegate:


func applicationWillResignActive() {
        DataManager.sharedManager.saveContext()
    }


Now when I try to run my app, I get the following error message on the console and my app crashes:


dyld: Library not loaded: @rpath/libswiftCoreData.dylib

Referenced from: /Users/sarbogast/Library/Developer/CoreSimulator/Devices/E741F0F7-A258-4101-8E8E-438F47731614/data/Containers/Bundle/Application/4436B83D-F52B-4D58-B116-B3904FFBD385/com.epseelon.Smartvoxx.watchkitapp.app/PlugIns/SmartvoxxOnWrist Extension.appex/SmartvoxxOnWrist Extension

Reason: image not found


Any idea of what I may have forgotten?

For some reason I don't yet understand, switching "Embedded code contains Swift code" to Yes in my Watch Extension's build settings allowed the app to run.

Adding Core Data to a WatchOS 2 app
 
 
Q