title: iCloud & Core Data - "Path is outside of any CloudDocs container, will never sync"
body: <p>So I have been trying to sync data between two iDevices using Core Data &amp; iCloud for a few weeks. Apple's <a href="https://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/UsingCoreDataWithiCloudPG/UsingSQLiteStoragewithiCloud/UsingSQLiteStoragewithiCloud.html">documentation</a> from 2012/2013 is written in Objective-C and is not very detailed. </p>
  
  <p>I have attempted converting it to Swift 2.0 for iOS9. First I thought I may had accomplished it, two devices where sharing data and syncing any changes. Then things got messy, data that had previously been deleted began to appear and the only way to sync is to relaunch the app. Now I have been hit with this error: </p>
  
  <blockquote>
    <p>CoreData: Ubiquity:  Librarian returned a serious error for starting
    downloads Error Domain=BRCloudDocsErrorDomain Code=6 "Path is outside
    of any CloudDocs container, will never sync"</p>
  </blockquote>
  
  <p>If I keep running the app via Xcode(7) it does seem to fix itself and sync changes, but this isn't ideal for the real world; users should not have to force quit an app and relaunch to sync, and if data is corrupt then reinstall. </p>
  
  <p>Does anybody have any ideas where I may be going wrong and why this error is occurring ? </p>
  
  <p><strong>Full Error:</strong> </p>
  
  <pre><code>2015-09-08 22:21:53.679 APPNAME[5550:407392] -  [PFUbiquitySwitchboardEntryMetadata setUseLocalStorage:](874): CoreData: Ubiquity:  nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B:APPNAMEStore
  Using local storage: 1 for new NSFileManager current token &lt;766b5e5c 3c205110 52c05248 38a47bd9 aca1ee87&gt;
  2015-09-08 22:21:57.639 APPNAME[5550:407392] storesDidChange posting notif
  2015-09-08 22:21:57.639 APPNAME[5550:407452] -[PFUbiquitySwitchboardEntryMetadata setUseLocalStorage:](874): CoreData: Ubiquity:  nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B:APPNAMEStore
   Using local storage: 0 for new NSFileManager current token &lt;766b5e5c 3c205110 52c05248 38a47bd9 aca1ee87&gt;
  2015-09-08 22:21:58.565 APPNAME[5550:407476] __45-[PFUbiquityFilePresenter processPendingURLs]_block_invoke(447): CoreData: Ubiquity:  Librarian returned a serious error for starting downloads Error Domain=BRCloudDocsErrorDomain Code=6 "Path is outside of any CloudDocs container, will never sync" UserInfo={NSDescription=Path is outside of any CloudDocs container, will never sync, NSFilePath=/Users/USER/Library/Developer/CoreSimulator/Devices/19DE5FBA-9248-410D-9264-6B434B30F8CA/data/Containers/Data/Application/D00DA341-E9A5-4C65-82B4-41EFC5638ED3/Documents/CoreDataUbiquitySupport/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/DD2F75D5-FEAF-482A-A896-657936AFCFCD/container/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/NiGeopr_A~01pLnJTYkIei3RCNWt5FiSp0~iJS1V9eo=/38201B1B-7F78-4683-8604-D8F79D1F895B.1.cdt} with userInfo {
  NSDescription = "Path is outside of any CloudDocs container, will never sync";
  NSFilePath = "/Users/USER/Library/Developer/CoreSimulator/Devices/19DE5FBA-9248-410D-9264-6B434B30F8CA/data/Containers/Data/Application/D00DA341-E9A5-4C65-82B4-41EFC5638ED3/Documents/CoreDataUbiquitySupport/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/DD2F75D5-FEAF-482A-A896-657936AFCFCD/container/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/NiGeopr_A~01pLnJTYkIei3RCNWt5FiSp0~iJS1V9eo=/38201B1B-7F78-4683-8604-D8F79D1F895B.1.cdt";
  } for these urls: {(
  file:///Users/USER/Library/Developer/CoreSimulator/Devices/19DE5FBA-9248-410D-9264-6B434B30F8CA/data/Containers/Data/Application/D00DA341-E9A5-4C65-82B4-41EFC5638ED3/Documents/CoreDataUbiquitySupport/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/DD2F75D5-FEAF-482A-A896-657936AFCFCD/container/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/NiGeopr_A~01pLnJTYkIei3RCNWt5FiSp0~iJS1V9eo=/38201B1B-7F78-4683-8604-D8F79D1F895B.1.cdt
  )}
  2015-09-08 22:21:58.566 APPNAME[5550:407452] __45-[PFUbiquityFilePresenter processPendingURLs]_block_invoke(447): CoreData: Ubiquity:  Librarian returned a serious error for starting downloads Error Domain=BRCloudDocsErrorDomain Code=6 "Path is outside of any CloudDocs container, will never sync" UserInfo={NSDescription=Path is outside of any CloudDocs container, will never sync, NSFilePath=/Users/USER/Library/Developer/CoreSimulator/Devices/19DE5FBA-9248-410D-9264-6B434B30F8CA/data/Containers/Data/Application/D00DA341-E9A5-4C65-82B4-41EFC5638ED3/Documents/CoreDataUbiquitySupport/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/DD2F75D5-FEAF-482A-A896-657936AFCFCD/container/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/NiGeopr_A~01pLnJTYkIei3RCNWt5FiSp0~iJS1V9eo=/09F9706A-4479-47BF-B26D-DEBF92C55E48.1.cdt} with userInfo {
  NSDescription = "Path is outside of any CloudDocs container, will never sync";
  NSFilePath = "/Users/USER/Library/Developer/CoreSimulator/Devices/19DE5FBA-9248-410D-9264-6B434B30F8CA/data/Containers/Data/Application/D00DA341-E9A5-4C65-82B4-41EFC5638ED3/Documents/CoreDataUbiquitySupport/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/DD2F75D5-FEAF-482A-A896-657936AFCFCD/container/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/NiGeopr_A~01pLnJTYkIei3RCNWt5FiSp0~iJS1V9eo=/09F9706A-4479-47BF-B26D-DEBF92C55E48.1.cdt";
  } for these urls: {(
  file:///Users/USER/Library/Developer/CoreSimulator/Devices/19DE5FBA-9248-410D-9264-6B434B30F8CA/data/Containers/Data/Application/D00DA341-E9A5-4C65-82B4-41EFC5638ED3/Documents/CoreDataUbiquitySupport/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/DD2F75D5-FEAF-482A-A896-657936AFCFCD/container/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/NiGeopr_A~01pLnJTYkIei3RCNWt5FiSp0~iJS1V9eo=/09F9706A-4479-47BF-B26D-DEBF92C55E48.1.cdt,
  file:///Users/USER/Library/Developer/CoreSimulator/Devices/19DE5FBA-9248-410D-9264-6B434B30F8CA/data/Containers/Data/Application/D00DA341-E9A5-4C65-82B4-41EFC5638ED3/Documents/CoreDataUbiquitySupport/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/DD2F75D5-FEAF-482A-A896-657936AFCFCD/container/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/NiGeopr_A~01pLnJTYkIei3RCNWt5FiSp0~iJS1V9eo=/8DACD654-5C84-4699-B512-078D46E51947.1.cdt
  )}
  2015-09-08 22:22:02.865 APPNAME[5550:407497] mergeChanges notif:NSConcreteNotification 0x7fc53c926e80 {name = com.apple.coredata.ubiquity.importer.didfinishimport; object = &lt;NSPersistentStoreCoordinator: 0x7fc53ae36700&gt;; userInfo = {
  deleted = "{(\n)}";
  inserted = "{(\n)}";
  updated = "{(\n)}";
  }}
  </code></pre>
  
  <p><strong>Core Data Stack For ICloud</strong></p>
  
  <pre><code>// MARK: - Core Data stack
  
  // This handles the updates to the data via iCLoud updates
  func registerCoordinatorForStoreNotifications (coordinator : NSPersistentStoreCoordinator) {
      let nc : NSNotificationCenter = NSNotificationCenter.defaultCenter();
  
      nc.addObserver(self, selector: "StoresWillChange:",
          name: NSPersistentStoreCoordinatorStoresWillChangeNotification,
          object: coordinator)
  
      nc.addObserver(self, selector: "StoresDidChange:",
          name: NSPersistentStoreCoordinatorStoresDidChangeNotification,
          object: coordinator)
  
      nc.addObserver(self, selector: "StoreChangedUbiquitousContent:",
          name: NSPersistentStoreDidImportUbiquitousContentChangesNotification,
          object: coordinator)
  }
  
  
  // Subscribe to NSPersistentStoreCoordinatorStoresWillChangeNotification
  // most likely to be called if the user enables / disables iCloud
  // (either globally, or just for your app) or if the user changes
  // iCloud accounts.
  
  func StoresWillChange (notification:NSNotification) {
      managedObjectContext.performBlock { () -&gt; Void in
          if self.managedObjectContext.hasChanges {
              do {
                  try self.managedObjectContext.save()
              } catch {
                  print("error saving Managed Object Context in AppDelegate")
              }
  
              } else{
                  // drop any manged object refrences
                  self.managedObjectContext.reset()
              }
  
          }
      }
  
  // Subscribe to NSPersistentStoreCoordinatorStoresDidChangeNotification
  func StoresDidChange(notification: NSNotification) {
      // here is when you can refresh your UI and
      // load new data from the new store
      NSLog("storesDidChange posting notif");
      NSNotificationCenter.defaultCenter().postNotificationName("storeDidChange", object: nil)
  }
  
  func mergeChanges(notification: NSNotification) {
      NSLog("mergeChanges notif:\(notification)")
          self.managedObjectContext.performBlock {
              self.managedObjectContext.mergeChangesFromContextDidSaveNotification(notification)
          }
  }
  
  func StoreChangedUbiquitousContent(notification: NSNotification) {
      self.mergeChanges(notification);
  }
  
  
  lazy var applicationDocumentsDirectory: NSURL = {
      // The directory the application uses to store the Core Data store file. This code uses a directory named "com.USER.swift2-iCloud" in the application's documents Application Support directory.
      let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
      return urls[urls.count-1]
      }()
  
  lazy var managedObjectModel: NSManagedObjectModel = {
  
      let modelURL = NSBundle.mainBundle().URLForResource("APPNAME", withExtension: "momd")!
      return NSManagedObjectModel(contentsOfURL: modelURL)!
  
      }()
  
  lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator? = {
  
      // Create the coordinator and store
      var coordinator: NSPersistentStoreCoordinator? = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
      let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("APPNAME.sqlite")
      var error: NSError? = nil
      var failureReason = "There was an error creating or loading the application's saved data."
      // iCloud store
      var storeOptions = [NSPersistentStoreUbiquitousContentNameKey : "APPNAMEStore",NSMigratePersistentStoresAutomaticallyOption: true,
          NSInferMappingModelAutomaticallyOption: true]
  
      do {
          try coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: NSURL.fileURLWithPath(url.path!), options: storeOptions)
      } catch var error1 as NSError {
          error = error1
          coordinator = nil
          // Report any error we got.
          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)
          // Replace this with code to handle the error appropriately.
          // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
          NSLog("Unresolved error \(error), \(error!.userInfo)")
          abort()
      } catch {
          fatalError()
      }
  
      self.registerCoordinatorForStoreNotifications (coordinator!)
  
      return coordinator
      }()
  </code></pre>