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?