I've been workin on an app. It uses Core Data allowing the user to create and group a list of records (like many Core Data apps). It's a Mac app.
So I'm thinking of adding iCloud support (using the CloudKit API) and syncing data from iCloud with Core Data. I'm on the fence about how I should design my code to handle users who do not opt in to using iCloud and users who may opt in and change their mind and turn the setting off. As a user, I prefer having both iCloud and local areas in the UI, so if I opt into iCloud I don't have to place every single entry in iCloud because 1) it's not free and 2) often I don't need to or want to put something in iCloud.
If I remember correctly, the last time I checked out the iCloud design guidelines devs were discouraged from providing both local and cloud options at the same time (I believe we are/were encouraged in offering all or nothing...use iCloud or don't use it). However, Apple does not do this in Notes,...you can add a local note "On my Mac" in the sidebar even with iCloud enabled.
Also from a programming standpoint, offering both local/iCloud options at the same time would make it easier to structure code...I can have a separate Core data stack for local entries and another one that syncs with iCloud. I can create a couple simple subclasses that inherit from the local class to add iCloud support rather than having to check a flag that marks whether or not iCloud is enabled before attempting iCloud operations.and having to deal with a local user deciding to do iCloud later...I can just put 'the work' on the user to copy and paste local entries to the iCloud section rather than having to throw up a dialog to merge local entries.
How would you do it? Anyone who's made an app like this before have any tips?