I am developing an iOS notes app where a user can add image, text, audio and drawing notes. I want to implement iCloud synchronization between multiple devices. Out of the 3 options (key value, document storage, CloudKit) which one should I choose? I would like to implement the sharing of notes (collaboration) among users as well. I am using core data as my DB currently.
2
There are 2 answers
1
marknote
On
IMHO, CloudKit is the only opinion :)
I have a note app named marknote. And at the beginning I used iCloud document storage. It worked sometime, but not stable. The worst thing is, when and whether your documents can be synced is out of your control, instead it relies on Apple's daemon service. It becomes even worse when your documents are a little big, for instance several mega bytes.
So after fighting for some time, I changed to CloudKit. As @maxim-volgin has already pointed out, the implementation of CloudKit sync is tough, but it is reliable. And all headache just gone after switching to CloudKit.
Related Questions in IOS
- URLSession requesting JSON array from server not working
- Incorrect display of LinearGradientBrush in IOS
- Module not found when building flutter app for IOS
- How to share metadata of an audio url file to a WhatsApp conversation with friends
- Occasional crash at NSURLSessionDataTask dataTaskWithRequest:completionHandler:
- Expo Deep linking on iOS is not working (because of Google sign-in?)
- On iOS, the keyboard does not offer a 6-character SMS code
- Hi, there is an error happened when I build my flutter app, after I'm installing firebase packages occurs that error
- The copy/paste functionalities don't work only on iOS in the Flutter app
- Hide LiveActivityIntent Button from Shortcuts App
- While Running Github Actions Pipeline: No Signing Certificate "iOS Development" found: No "iOS Development" signing certificate matching team ID
- Actionable notification api call not working in background
- Accessibility : Full keyboard access with scroll view in swiftui
- There is a problem with the request entity - You are not allowed to create 'iOS' profile with App ID 'XXXX'
- I am getting "binding has not yet been initialized" error when trying to connect firebase with flutter
Related Questions in IPHONE
- How to control the volume of an iPhone programmatically in objective-c
- my website crash on safari The site sometimes crashes and I can't recover the crash
- Postal Framework crash in iPhone but runs successfully in simulator
- Xcode 15 building failure when using iphone 15 as simulator, using ios 17
- Images uploaded via Active Storage not displaying in Active Admin or on certain devices
- Any problem with creating provisioning profile with old Iphone?
- Does anyone know how to make iPad layout the same as iPhone's? Size wise the text and overall layout get's smaller when I run the app on the iPad
- Keyboard not appearing when connecting smart card reader to iPhones with type-c port. i.e. iPhone 15/ 15 pro
- Access the list of SIM mobile numbers installed in the iPhone
- Can we produce haptics and record from microphone the haptic sound at the same time on iOS?
- SwiftUI's localized string do not load from main bundle despite using the main bundle identifier (an xcode bug?)
- Cordova iOS only app upload through transport requires WKWatchKitApp
- Amazon s3 video is not played on Iphone
- build getting failed for ios xcode build -flutter app
- "Error when Importing 'mysdk' into iOS Demo App: dyld Library not loaded: @rpath/MQTTClient.framework/MQTTClient"
Related Questions in ICLOUD
- Shared iCloud album returns all assets slowly
- SwiftData synced to iCloud with one-to-many relationship between 2 models results in a crash when each model contains a reference to the other
- Apple TV Build - CloudKit plugin written in Obj-C & Swift, with C# wrapper, gives Error 1 "Response-Not-Possible"
- Netbeans project files in iCloud
- How to sync sqlite database with iCloud?
- Logging into iCloud Find My iPhone and can't detect the Email input field
- Accessing iCloud Calendar API from a NodeJS server
- VBA how to event handle ItemAdd & ItemChange both (in Outlook Calendar) for iCloud Calendar folder
- Understand different servers (v50, v95) in CloudKit Latency Telemetry
- Why did I call this method PHImageManager.default().requestImage, but the result I got was still false
- Plugin wrapper not linking
- iCloud Key-Value storage does not work for users with full iCloud
- Can an iOS app collect and merge data from multiple Apple IDs using iCloud?
- Nginx server request timeout for Safari with iCloud Private Relay
- Downloading from iCloud, files truncated, fine from other sources
Related Questions in CLOUDKIT
- Is it possible to fix slow CKAsset loading on Cloudkit?
- After receiving update from CloudKit SwiftUI doesn't update child view, but does update if child view is inlined
- Is it necessary to deploy a CloudKit container to production?
- macOS SwiftData app doesn't sync with iCloud when run as app file
- How To Include Record Field in CloudKit Push Notification
- SwiftData synced to iCloud with one-to-many relationship between 2 models results in a crash when each model contains a reference to the other
- Concerns Regarding CoreData Lightweight Migration Impact on CloudKit Schema Deployment
- Fatal error: 'try!' expression unexpectedly raised an error: SwiftData.SwiftDataError(_error: SwiftData.SwiftDataError._Error.loadIssueModelContainer)
- Apple TV Build - CloudKit plugin written in Obj-C & Swift, with C# wrapper, gives Error 1 "Response-Not-Possible"
- CKSyncEngine.RecordZoneChangeBatch and the CKSyncEngineDelegate protocol
- "Invalid bundle ID for container" for Core Data and CloudKit
- Cloudkit app with same codebase, macOS uses development database, iOS uses production
- Trying to use CKQuerySubscription on a shared record
- setting up SwiftData modelContainer for previews compatible with CloudKit
- Uniquely identify CNContact across multiple devices
Related Questions in ICLOUD-DOCUMENTS
- iCloud container name is not displayed proper in development App
- Cannot save files to iCloud drive and have it appear in File app
- Images would not be synchronized
- Can't see my app inside the iCloud Drive folder
- How to download and being notified, a list of files in iCloud Document, in a scalable way?
- Hide iCloud Documents
- how to use NSPersistentCloudKitContainer.eventChangedNotification
- Uploading file to icloud-documents even if the memory is full it doesn't give any error
- Is there a python package that can use app-specific password on iCloud/AppleId?
- SwiftUI and iCloud Documents
- SwiftUI: ICloud Documents alongside CloudKit
- How to access iCloud Documents files in an asynchronous manner
- Determine if a file is inside any macOS Trash folder
- NSFileManager startDownloadingUbiquitousItemAtURL not working correctly on iOS14
- How to prevent automatic file eviction in iCloud Documents?
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Key-value storage is out of question due do being too limited for your goal, document storage is only recommended when you need to handle and store the document as a whole. Since you are already using
CoreDatafor local storage, it only makes sense to use regularCloudKitwith it for cloud storage and sharing.Synchronisation of
CoreDataandCloudKitcan be tough. I am personally using a combo ofRxCoreDataandRxCloudKitlibraries which provide some relief in synchronisation and some syntax sugar too.A word in advance about uniqueness constraints: for
CoreData, you define them based on key(s) or hash of all values, forCloudKitit is only possible (and also required) for theCKRecordkey, to the best of my knowledge. So it is best to take care of it from the very start.