CloudKit

RSS for tag

Store structured app and user data in iCloud containers that can be shared by all users of your app using CloudKit.

CloudKit Documentation

Posts under CloudKit tag

325 Posts
Sort by:
Post not yet marked as solved
0 Replies
90 Views
Due to privacy concern, I believe some users prefer their data not to sync with iCloud. Hence, we plan to provide a switch option within the app, so that user can choose, whether to sync their data with iCloud. Such feature can be achieved via the implementation suggested at https://developer.apple.com/forums/thread/118924?login=true However, once user chooses to disable sync with iCloud, we should not perform purging on history tracking transactions. Reason is that, if few months later/ few years later, user decides to turn on sync with iCloud again, lack of sufficient history tracking transactions, will cause sync with iCloud operation fail. This is causing a dilemma. If we never clean the history tracking transactions, will it cause disk full issue? If that is so, may I know, what is the correct way, to handle history tracking transactions purging, if we intent to provide CloutKit sync enable/ disable feature? Thank you.
Posted
by yccheok.
Last updated
.
Post not yet marked as solved
0 Replies
126 Views
Hi I noticed with CKModifyRecordsOperation, modifyRecordsResultBlock works differently from the now deprecated modifyRecordsCompletionBlock. When using a savePolicy of ifServerRecordUnchanged (which is the default), if the record on the server has been changed since it was downloaded, edited and saved again then modifyRecordsResultBlock unexpectedly does not error. But modifyRecordsCompletionBlock does error which is what I would expect. The kind of error in this case looks like this: "Server Record Changed" (14/2004); server message = "client oplock error updating record"; My question is, is this new behavior by design? By the way, I'm having to write my own async/await version of save records using withTaskCancellationHandler and withCheckedThrowingContinuation because the built-in one does not support task cancellation which I require to use with SwiftUI's .task modifier. Finally, modifyRecordsResultBlock and the other 2 new ones are missing its documentation because it hasn't used the correct DocC format, it's using old style comments which are not being picked up. FB10400023
Posted
by malc.
Last updated
.
Post not yet marked as solved
0 Replies
70 Views
Some of my users are experiencing synchronization issues when using the NSPersistentCloudKitContainer in CoreData. This error only occurs in Apple Watch so far. I can not find any documents about this error. Does anyone know what this error code means?
Posted
by yueyuemax.
Last updated
.
Post not yet marked as solved
3 Replies
430 Views
I want to target iOS 15 and I get deprecation warnings in some CloudKit properties. I was using modifyRecordsCompletionBlock on CKModifyRecordsOperation and now I get: 'modifyRecordsCompletionBlock' was deprecated in iOS 15.0: Use modifyRecordsResultBlock instead However with modifyRecordsCompletionBlock I'd get an array of the successfully modified records as input for the block which I'd in turn use for updating my local DB, whereas the input for modifyRecordsResultBlock is Result<Void, Error>. Basically I'm being told to use a different closure where I get no data and I don't know how to complete my local DB updates. Any ideas?
Posted
by gbuela.
Last updated
.
Post not yet marked as solved
2 Replies
162 Views
Anyone know how to load a large number of records into the CloudKit public database? I need to load 1.2million records (about 150Mb) into the public database. no binary data. basically just a bunch of exchange rates that I need to have available to all my users. I've been trying for months. have tried: loading into core data on a device or simulator individually or in batches ranging from 400 records to 2500 (more than that exceeds batch size limits). it will start to sync and then stop. can often get it to restart by restarting device or similator but will eventually corrupt the database in iCloud requiring a reset of the environment. generally can get the load to go for a few days and load maybe 500k records before it breaks. to do that have to put delays up to a minute between batches loaded into core data. have tried doing it using the CloudKit.js framework and loading from a server. this works for a small number of records. but limits are really small doing it through that interface. after a while it locks you out. don't get anywhere near the number of records I need to load. I'm stuck. has anyone found a way? same issue on all versions of iOS - 14, 15, 16b1
Posted
by ngb.
Last updated
.
Post not yet marked as solved
0 Replies
83 Views
I'd like to test how my app behaves when the user signs out of iCloud and my app is in memory. In the iOS Simulator, the "Sign Out" button for iCloud is grayed out so I can't use the simulator to test. I'm hesitant to use a real device tied to my Apple ID because signing out of iCloud System wide has side effects with many apps and I don't want to potentially lose any data. However, I did test on a real device by going the Settings app -> iCloud and disabled iCloud only for my app. When I do this, the system terminates my app and does not post a CKAccountChangedNotification. I only tested turning off the iCloud switch for my app. Does the system simply terminate apps when the user logs out of iCloud system wide too? In what cases is the CKAccountChangedNotification posted? Detecting sign out by listening for CKAccountChangedNotification would seem to be pointless if apps are terminated when the user signs out of iCloud.
Posted Last updated
.
Post not yet marked as solved
1 Replies
90 Views
The app which I am developing uses the user's iCloud account to fetch their first name, but I would like to add their Memoji as their default profile 'pic.' Name is retrieved as follows: if let name = returnedIdentity?.nameComponents?.givenName { self?.userName = name } Any help is greatly appreciated :)
Posted
by kp2485.
Last updated
.
Post not yet marked as solved
0 Replies
92 Views
Hi, any side effect to be aware of when changing a core data relationship delete rule from Null to Cascade? I NSPersistentCloudKitContainer to handle CloudKit sync in case that's relevant. It doesn't look like any migration is required, and the cloudkit schema doesn't change so it seems there's nothing to do on the cloudkit-side either. However I'd prefer to double check to avoid making false assumptions. I wasn't able to find any documentation on that particular point so if someone can shade some light on how things work under the hood that would be appreciated. Thanks!
Posted
by 0o0.
Last updated
.
Post not yet marked as solved
1 Replies
171 Views
I am trying to add CloudKit sharing to my app using the new iOS 15 share method  https://developer.apple.com/documentation/coredata/nspersistentcloudkitcontainer/3746834-sharemanagedobjects In the app there are 3 core data entities (Folder, Item, Comment) with the following relationships: A Folder contains many Items An Item has many Comments I want to use CloudKit to share just the Item entity, not any of its relationships. Is this possible to do with the share(_:to:completion:) method? Currently, when I pass an Item to the share method it also includes the Folder and Comments in the CKShare. How do I prevent this? A similar question was posted here with no response: https://developer.apple.com/forums/thread/697630
Posted
by ethan5513.
Last updated
.
Post marked as solved
19 Replies
5.2k Views
Background I have an established app in the App Store which has been using NSPersistentCloudkitContainer since iOS 13 without any issues. I've been running my app normally on an iOS device running the iOS 15 betas, mainly to see problems arise before my users see them. Ever since iOS 15 (beta 4) my app has failed to sync changes - no matter how small the change. An upload 'starts' but never completes. After a minute or so the app quits to the Home Screen and no useful information can be gleaned from crash reports. Until now I've had no idea what's going on. Possible Bug in the API? I've managed to replicate this behaviour on the simulator and on another device when building my app with Xcode 13 (beta 5) on iOS 15 (beta 5). It appears that NSPersistentCloudkitContainer has a memory leak and keeps ramping up the RAM consumption (and CPU at 100%) until the operating system kills the app. No code of mine is running. I'm not really an expert on these things and I tried to use Instruments to see if that would show me anything. It appears to be related to NSCloudkitMirroringDelegate getting 'stuck' somehow but I have no idea what to do with this information. My Core Data database is not tiny, but not massive by any means and NSPersistentCloudkitContainer has had no problems syncing to iCloud prior to iOS 15 (beta 4). If I restore my App Data (from an external backup file - 700MB with lots of many-many, many-one relationships, ckAssets, etc.) the data all gets added to Core Data without an issue at all. The console log (see below) then shows that a sync is created, scheduled & then started... but no data is uploaded. At this point the memory consumption starts and all I see is 'backgroundTask' warnings appear (only related to CloudKit) with no code of mine running. CoreData: CloudKit: CoreData+CloudKit: -[PFCloudKitExporter analyzeHistoryInStore:withManagedObjectContext:error:](501): <PFCloudKitExporter: 0x600000301450>: Exporting changes since (0): <NSPersistentHistoryToken - { "4B90A437-3D96-4AC9-A27A-E0F633CE5D9D" = 906; }> CoreData: CloudKit: CoreData+CloudKit: -[PFCloudKitExportContext processAnalyzedHistoryInStore:inManagedObjectContext:error:]_block_invoke_3(251): Finished processing analyzed history with 29501 metadata objects to create, 0 deleted rows without metadata. CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate _scheduleAutomatedExportWithLabel:activity:completionHandler:](2800): <NSCloudKitMirroringDelegate: 0x6000015515c0> - Beginning automated export - ExportActivity: <CKSchedulerActivity: 0x60000032c500; containerID=<CKContainerID: 0x600002ed3240; containerIdentifier=iCloud.com.nitramluap.Somnus, containerEnvironment="Sandbox">, identifier=com.apple.coredata.cloudkit.activity.export.4B90A437-3D96-4AC9-A27A-E0F633CE5D9D, priority=2, xpcActivityCriteriaOverrides={ Priority=Utility }> CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate executeMirroringRequest:error:](765): <NSCloudKitMirroringDelegate: 0x6000015515c0>: Asked to execute request: <NSCloudKitMirroringExportRequest: 0x600002ed2a30> CBE1852D-7793-46B6-8314-A681D2038B38 2021-08-13 08:41:01.518422+1000 Somnus[11058:671570] [BackgroundTask] Background Task 68 ("CoreData: CloudKit Export"), was created over 30 seconds ago. In applications running in the background, this creates a risk of termination. Remember to call UIApplication.endBackgroundTask(_:) for your task in a timely manner to avoid this. 2021-08-13 08:41:03.519455+1000 Somnus[11058:671570] [BackgroundTask] Background Task 154 ("CoreData: CloudKit Scheduling"), was created over 30 seconds ago. In applications running in the background, this creates a risk of termination. Remember to call UIApplication.endBackgroundTask(_:) for your task in a timely manner to avoid this. Just wondering if anyone else is having a similar issue? It never had a problem syncing an initial database restore prior to iOS 15 (beta 4) and the problems started right after installing iOS 15 (beta 4). I've submitted this to Apple Feedback and am awaiting a response (FB9412346). If this is unfixable I'm in real trouble (and my users are going to be livid). Thanks in advance!
Posted Last updated
.
Post not yet marked as solved
1 Replies
332 Views
I would like to implement notifications about NSPersistentCloudKitContainer I find this classe but I receive no notifications in my app!?! Do I need more settings to use it? thanx for your help import Combine import CoreData @available(iOS 14.0, *) class SyncMonitor { /// Where we store Combine cancellables for publishers we're listening to, e.g. NSPersistentCloudKitContainer's notifications. fileprivate var disposables = Set<AnyCancellable>() init() { NotificationCenter.default.publisher(for: NSPersistentCloudKitContainer.eventChangedNotification) .sink(receiveValue: { notification in if let cloudEvent = notification.userInfo?[NSPersistentCloudKitContainer.eventNotificationUserInfoKey] as? NSPersistentCloudKitContainer.Event { // NSPersistentCloudKitContainer sends a notification when an event starts, and another when it // ends. If it has an endDate, it means the event finished. if cloudEvent.endDate == nil { print("Starting an event...") // You could check the type, but I'm trying to keep this brief. } else { switch cloudEvent.type { case .setup: print("Setup finished!") case .import: print("An import finished!") case .export: print("An export finished!") @unknown default: assertionFailure("NSPersistentCloudKitContainer added a new event type.") } if cloudEvent.succeeded { print("And it succeeded!") } else { print("But it failed!") } if let error = cloudEvent.error { print("Error: \(error.localizedDescription)") } } } }) .store(in: &disposables) } }
Posted
by docgg.
Last updated
.
Post not yet marked as solved
3 Replies
1.1k Views
I posted this in the user forums but got no response as I suspect it's too low-level for the discussions there. I think this is a relevant developer issue, even though I am only interested in this from a user perpsective. Perhaps someone can confirm my reasoning (and the resulting potential for errors/bugs when syncing between Mac and Windows iCloud Drive)...----After some investigation of log files for iCloud for Windows (Drive specifically) (latest version - 10.7.0.7 / 2.0.74.23) , I think I've discovered a major reason why there are so many syncing issues with iCloud for Windows.My theory is:1) iCloud for Windows is built on top of the OneDrive technology. https://www.howtogeek.com/fyi/daily-news-roundup-icloud-for-windows-powered-by-onedrive-tech/2) OneDrive technology limits the file path length to 216 characters (or thereabouts). You can verify this yourself by trying to create a folder path depth over 216 characters in length using OneDrive. See this article for some more information: http://www.purgeie.com/shareprep/maxlength.htm3) Mac OSX filing system and iCloud (for Mac), don't have the same folder path restriction (well as far as I can see it's somewhere around 1024 characters - https://stackoverflow.com/questions/7140575/mac-os-x-lion-what-is-the-max-path-length).4) So files that are successfully uploaded to iCloud from a Mac, will fail to download on to Windows 10 if they exceed the OneDrive folder path length of ~250.Checking the log files of iCloud for Windows I get errors such asERROR BRC::LocalContainer::CreateNewFilePlaceholder Error creating unique file path for itemIDERROR BRC::LocalContainer::ApplyChangesForLiveFile Failed to create placeholder forWARN BRC::LocalContainer::UpdateUnappliedRankRetryWithEtag com.apple.CloudDocs:__defaultOwner__: Will retry applying itemERROR BRC::LocalContainer::ApplyChangesSchedule Apply failed for itemThe filename, directory name, or volume label syntax is incorrect.5) This then causes iCloud for Windows to constantly retry creating placeholders and downloading, and constantly failing....WARN BRC::LocalContainer::UpdateUnappliedRankRetryWithEtag com.apple.CloudDocs:__defaultOwner__: Will retry applying item in 30 seconds (retryCount = 0)ERROR CKD::MMCS::GetErrorWithMMCSError Error Domain=com.apple.mmcs Code=16 "Last 4 requests failed with a network error. Retry after 16 seconds" UserInfo= {NSLocalizedDescription=Last 4 requests failed with a network error. Retry after 16 seconds,----------------------I don't see anyway easy way around this issue as the two OS are fundamentally incompatible in terms of filing system limits (note Windows 10 can have a larger limit using registry, but it appears OneDrive has the lower limit, which is the bottleneck).So the only way I can see is to reorganise all folders/files that are synced to iCloud to be under the ~250 character limit. And there is no easy way to check this while working normally in iCloud (on Mac side) - so you could unintentionally create a folder path depth that exceeds the OneDrive limit. It will work on the Mac side, but when using Windows it will fail.I haven't thoroughly tested this theory, but after waiting days for my iCloud for Windows to sync, I decided to dig a little deeper and found the above information (and log files).I have quite a deep structure to my filing, but I doubt I'm a complete edge case (!). Perhaps someone out there can verify these limits and symptoms. The log files for iCloud for Windows can be found atC:\Users\USERNAME\AppData\Local\Packages\AppleInc.iCloud_HASHCODE\LocalCache\Local\Logs
Posted
by mgmhunt.
Last updated
.
Post marked as solved
1 Replies
177 Views
I'm working on hooking up a Multiplatform app with CloudKit (using CoreData) and I was wondering if anyone knows any current tutorials to help me understand the process better? I was trying to wrap my head around the WWDC 2022 tutorial CoreDataCloudKitDemo but it isn't SwiftUI and I'm getting bogged down by the non-relevant code. Thanks everyone :)
Posted Last updated
.
Post not yet marked as solved
19 Replies
5k Views
I'm attempting to create a Swift/SwiftUI app that will run on iOS/iPadOS that uses CloudKit to syncronize data between devices. I have created the App in Xcode.In the Apps Signing &amp; Capabilities tab, I have:- Ensured that the Bundle Identifier is valid- Added the iCloud capability - Created the Container and checked it - Validated that the Container was created in the CloudKit Dashbaord- Added the Backgrouind Modes capability - Checked the Remote notifications optionI have modified/validated AppDelegate.swift:- Validated that it is using NSPersistentCloudKitContainer- Added container.viewContext.automaticallyMergesChangesFromParent to true- Added container.viewContext.mergePolicy to NSMergeByPropertyObjectTrumpMergePolicyWhen I load the App, I get a series of errors reported related to CloudKit NSCloudKitMirroringExportRequest. These errors are shown below. I am able to create records, but can see they are only stored locally and do not get synced to the CloudKit Dashboard - interestingly enough, the schema has been created in CloudKit Dashboard - so I know some level of connection has been made.I appreciate any insight that someone can give me to resolve this and allow my data to sync properly.CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate _scheduleAutomatedExportWithLabel:activity:completionHandler:]_block_invoke(2174): &lt;NSCloudKitMirroringDelegate: 0x600003ef0c60&gt; - Finished automatic export - ExportActivity - with result: &lt;NSCloudKitMirroringResult: 0x60000096cc40&gt; success: 0 madeChanges: 0 error: Error Domain=NSCocoaErrorDomain Code=134417 "Request '&lt;NSCloudKitMirroringExportRequest: 0x6000007545a0&gt; B79831CF-9C04-4BB0-90B7-974EB38D2A25' was cancelled because there is already a pending request of type 'NSCloudKitMirroringExportRequest'." UserInfo={NSLocalizedFailureReason=Request '&lt;NSCloudKitMirroringExportRequest: 0x6000007545a0&gt; B79831CF-9C04-4BB0-90B7-974EB38D2A25' was cancelled because there is already a pending request of type 'NSCloudKitMirroringExportRequest'.}CoreData: warning: CoreData+CloudKit: -[NSCloudKitMirroringDelegate finishedAutomatedRequestWithResult:](2119): Finished request '&lt;NSCloudKitMirroringExportRequest: 0x6000007545a0&gt; B79831CF-9C04-4BB0-90B7-974EB38D2A25' with result: &lt;NSCloudKitMirroringResult: 0x60000096cc40&gt; success: 0 madeChanges: 0 error: Error Domain=NSCocoaErrorDomain Code=134417 "Request '&lt;NSCloudKitMirroringExportRequest: 0x6000007545a0&gt; B79831CF-9C04-4BB0-90B7-974EB38D2A25' was cancelled because there is already a pending request of type 'NSCloudKitMirroringExportRequest'." UserInfo={NSLocalizedFailureReason=Request '&lt;NSCloudKitMirroringExportRequest: 0x6000007545a0&gt; B79831CF-9C04-4BB0-90B7-974EB38D2A25' was cancelled because there is already a pending request of type 'NSCloudKitMirroringExportRequest'.}CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate _enqueueRequest:]_block_invoke(714): &lt;NSCloudKitMirroringDelegate: 0x600003ef0c60&gt;: enqueuing request: &lt;NSCloudKitMirroringImportRequest: 0x6000007a7450&gt; D59C4B33-4075-4A43-AEF0-88EDD466D644CoreData: warning: CoreData+CloudKit: -[NSCloudKitMirroringDelegate _enqueueRequest:]_block_invoke_2(724): Failed to enqueue request: &lt;NSCloudKitMirroringImportRequest: 0x6000007a7450&gt; D59C4B33-4075-4A43-AEF0-88EDD466D644Error Domain=NSCocoaErrorDomain Code=134417 "Request '&lt;NSCloudKitMirroringImportRequest: 0x6000007a7450&gt; D59C4B33-4075-4A43-AEF0-88EDD466D644' was cancelled because there is already a pending request of type 'NSCloudKitMirroringImportRequest'." UserInfo={NSLocalizedFailureReason=Request '&lt;NSCloudKitMirroringImportRequest: 0x6000007a7450&gt; D59C4B33-4075-4A43-AEF0-88EDD466D644' was cancelled because there is already a pending request of type 'NSCloudKitMirroringImportRequest'.}CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate _scheduleAutomatedImportWithLabel:activity:completionHandler:]_block_invoke(2150): &lt;NSCloudKitMirroringDelegate: 0x600003ef0c60&gt; - Finished automatic import - ImportActivity - with result: &lt;NSCloudKitMirroringResult: 0x60000096f0c0&gt; success: 0 madeChanges: 0 error: Error Domain=NSCocoaErrorDomain Code=134417 "Request '&lt;NSCloudKitMirroringImportRequest: 0x6000007a7450&gt; D59C4B33-4075-4A43-AEF0-88EDD466D644' was cancelled because there is already a pending request of type 'NSCloudKitMirroringImportRequest'." UserInfo={NSLocalizedFailureReason=Request '&lt;NSCloudKitMirroringImportRequest: 0x6000007a7450&gt; D59C4B33-4075-4A43-AEF0-88EDD466D644' was cancelled because there is already a pending request of type 'NSCloudKitMirroringImportRequest'.}CoreData: warning: CoreData+CloudKit: -[NSCloudKitMirroringDelegate finishedAutomatedRequestWithResult:](2119): Finished request '&lt;NSCloudKitMirroringImportRequest: 0x6000007a7450&gt; D59C4B33-4075-4A43-AEF0-88EDD466D644' with result: &lt;NSCloudKitMirroringResult: 0x60000096f0c0&gt; success: 0 madeChanges: 0 error: Error Domain=NSCocoaErrorDomain Code=134417 "Request '&lt;NSCloudKitMirroringImportRequest: 0x6000007a7450&gt; D59C4B33-4075-4A43-AEF0-88EDD466D644' was cancelled because there is already a pending request of type 'NSCloudKitMirroringImportRequest'." UserInfo={NSLocalizedFailureReason=Request '&lt;NSCloudKitMirroringImportRequest: 0x6000007a7450&gt; D59C4B33-4075-4A43-AEF0-88EDD466D644' was cancelled because there is already a pending request of type 'NSCloudKitMirroringImportRequest'.}
Posted Last updated
.
Post not yet marked as solved
0 Replies
111 Views
Xcode 14 beta 1 is yelling at me that CKNotification initializer should return a non-optional value. This happens only AFTER letting Xcode upgrade my project settings. The change that the upgrade project settings made was it merged my WatchKit and WatchKit extension targets into a single watch app target. After doing so, this code will not compile which I know to be good. // This line fails to compile with ' if let notification = CKNotification(fromRemoteNotificationDictionary: userInfo) { // Do something } Compile error: "Initializer for conditional binding must have Optional type, not 'CKNotification'" Feedback w/ sysdiagnose: FB10282805 - watchOS / CloudKit: CKNotification doesn't return optional, xcode build failing after updating project settings for Xcode 14 I could not reproduce this in a sample application. I tried making a standalone watch app with Xcode 13, upgrading the project file with Xcode 14 beta, and then creating a CKNotification object--but that worked fine. :/
Posted
by edorphy.
Last updated
.
Post marked as solved
1 Replies
186 Views
Every of our data row, contains an unique uuid column. Previously, before adopting CloudKit, the uuid column has a unique constraint. This enables us to prevent data duplication. Now, we start to integrate CloudKit, into our existing CoreData. Such unique constraint is removed. The following user flow, will cause data duplication. Steps to cause data duplication when using CloudKit Launch the app for the first time. Since there is empty data, a pre-defined data with pre-defined uuid is generated. The pre-defined data is sync to iCloud. The app is uninstalled. The app is re-installed. Launch the app for the first time. Since there is empty data, a pre-defined data with pre-defined uuid is generated. Previous old pre-defined data from step 3, is sync to the device. We are now having 2 pre-defined data with same uuid! :( I was wondering, is there a way for us to prevent such duplication? In step 8, we wish we have a way to execute such logic before written into CoreData Check whether such uuid exists in CoreData. If not, write to CoreData. If not, we will pick the one with latest update date, then overwrite the existing data. I once try to insert the above logic into https://developer.apple.com/documentation/coredata/nsmanagedobject/1506209-willsave . To prevent save, I am using self.managedObjectContext?.rollback(). But it just crash. Do you have any idea, what are some reliable mechanism I can use, to prevent data duplication in CoreData CloudKit? Additional info: Before adopting CloudKit We are using using the following CoreData stack class CoreDataStack { static let INSTANCE = CoreDataStack() private init() { } private(set) lazy var persistentContainer: NSPersistentContainer = { precondition(Thread.isMainThread) let container = NSPersistentContainer(name: "***", managedObjectModel: NSManagedObjectModel.wenote) container.loadPersistentStores(completionHandler: { (storeDescription, error) in if let error = error as NSError? { // This is a serious fatal error. We will just simply terminate the app, rather than using error_log. fatalError("Unresolved error \(error), \(error.userInfo)") } }) // So that when backgroundContext write to persistent store, container.viewContext will retrieve update from // persistent store. container.viewContext.automaticallyMergesChangesFromParent = true // TODO: Not sure these are required... // //container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy //container.viewContext.undoManager = nil //container.viewContext.shouldDeleteInaccessibleFaults = true return container }() Our CoreData data schema has Unique constraint. Deny deletion rule for relationship. Not having default value for non-null field. After adopting CloudKit class CoreDataStack { static let INSTANCE = CoreDataStack() private init() { } private(set) lazy var persistentContainer: NSPersistentContainer = { precondition(Thread.isMainThread) let container = NSPersistentCloudKitContainer(name: "***", managedObjectModel: NSManagedObjectModel.wenote) container.loadPersistentStores(completionHandler: { (storeDescription, error) in if let error = error as NSError? { // This is a serious fatal error. We will just simply terminate the app, rather than using error_log. fatalError("Unresolved error \(error), \(error.userInfo)") } }) // So that when backgroundContext write to persistent store, container.viewContext will retrieve update from // persistent store. container.viewContext.automaticallyMergesChangesFromParent = true // TODO: Not sure these are required... // //container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy //container.viewContext.undoManager = nil //container.viewContext.shouldDeleteInaccessibleFaults = true return container }() We change the CoreData data schema to Not having unique constraint. Nullify deletion rule for relationship. Having default value for non-null field. Based on a feedback of a Developer Technical Support engineer from https://developer.apple.com/forums/thread/699634?login=true , hen mentioned we can Detecting Relevant Changes by Consuming Store Persistent History Removing Duplicate Data But, it isn't entirely clear on how it should be implemented, as the github link provided in broken.
Posted
by yccheok.
Last updated
.
Post not yet marked as solved
1 Replies
284 Views
I have this error: [AXRuntimeCommon] AX Lookup problem - errorCode:1100 error:Permission denied portName:'com.apple.iphone.axserver' PID:963 It is preceded by lots of this message, if it matters: [Assert] +[UIInputViewSetPlacementInvisible placementWithPlacement:]: Should not be called with an invisible placement I thought it was because I didn't include a key in Info.plist, but I put keys in there that I thought might be needed. I am using CloudKit sharing and silent push notifications for CloudKit subscriptions, and the Apple documentation says when I set the capabilities for background fetch and remote notifications, the keys would be put in Info.plist by Xcode. Does this have anything to do with the fact that when my app is run for the first time it asks the user for permission to send notifications. If it's a silent notification that I'm using, I thought the documentation meant the user is not notified at all? I have searched on the internet and on stack overflow and in Apple developer forums for a solution. Any help will be appreciated.
Posted Last updated
.
Post not yet marked as solved
2 Replies
203 Views
Is there any way to run code in iOS whenever new information are added to certain contacts in contact store? If I use Notifications, I would have to have a process running at all times, since contacts are able to be changed by Apple's Contacts app. I have looked at App Extensions and there are no extensions I that can be used. There is a way to run a background process but I recall that has a limited lifespan. Am I correct about this? I need to update data in CloudKit that saves contacts information that can be shared with other users using their own Apple ID's. CloudKit subscriptions notify my app when something changes in CloudKit, but I also need to update records in CloudKit when something changes in Contacts. Anyone have any ideas how this might possibly be done?
Posted Last updated
.