Why iOS Devs Should Consider Using Core Data iCloud sync
21–30 of 34 posts
Re: Why iOS Devs Should Consider Using Core Data iCloud sync
#22Earlier quoted context omitted.
I'm extremely unimpressed with the software engineering coming out of Apple recently. So many of their major new iOS APIs either don't work (Core Data/Sync), are just not well thought through (Storyboards) or seemed to have been designed with much real world testing at all (AutoLayout). They have a great foundation in Obj-C/Cocoa Touch but I'm very quickly losing confidence in their ability to move the platform forwa…
I'm curious about what you think is wrong with Storyboards or AutoLayout. Storyboards certainly lack features so not all apps can be done with them, but nonetheless I think they're pretty solid. And AutoLayout works like magic, haven't had any problems (the IB-adds-constraints-for-you thing is annoying, but necessary)
1. Interact poorly with version control.
2. Scale badly with a lot of VCs.
3. Segues are untyped and are inadequate to express complex navigation schemes.
AutoLayout:
1. Excessively verbose normal syntax and excessively limited and cryptic and untyped shorthand syntax.
2. IB tools are woefully inadequate for editing.
3. Small adjustments to complex layouts in IB completely scramble the constraints.
4. Does nothing to make the 95% use case of nested grid layouts explicit and simple.
Re: Why iOS Devs Should Consider Using Core Data iCloud sync
#23There are a lot of alternatives to iCloud. Most of them are just backend-as-a-service, but some of them are really sync engines. Dropbox has been around a long time, and is really popular for iOS file sync. My team at Couchbase has been building mobile NoSQL databases that sync[1], for a number of years now, and our tech is used by a few apps in the app store already.[2] This preamble is to say that I've had plenty o…
Re: Why iOS Devs Should Consider Using Core Data iCloud sync
#24The problems with Core Data iCloud sync are vastly understated in this article. > "Yes, there are various problems" Yes, chief among them that it doesn't work . I'm quite serious here. No one has gotten an iCloud-based Core Data store to withstand the actual multi-device usage it was designed for. We're not talking about "works, but buggy". We're not even talking about "works but is a pain in the ass". We're talking…
Thanks for that feedback! I thought I had conveyed my own displeasure with CDIS at the end, and mentioned a few times that "only if it worked well". Maybe I should've highlighted this more to reflect my own frustrations that I've experienced so far. I just felt that the tone had gone to an extreme in the other direction (that it's completely unworkable; and even if it did, you shouldn't support it). My point was most…
I simply have not seen this attitude at all on the internet. Everybody wants the promise of CDIS. All of the anger, frustration, and vitriol is around the broken promise of it, not the concept.
> "and (this might be personal opinion) but I don't believe that they're too far from cracking it."
That remains to be seen. There is a growing sentiment in the Apple dev community that Apple's QA quality is slipping, and slipping hard, and this has a large detrimental impact on developers.
I was recently at a conference where this "joke" was made multiple times. Whenever someone commented that "X might be fixed in iOS7" someone would pipe up "Great, then we can use it when iOS8 comes out."
The upgrade rate on iOS devices far outstrips Android, but even now, on the eve of iOS7, a good 15-25% of devices are still on iOS5. There is effectively a one-year gap between Apple coming out with new API, and being able to require the use of the API in your app (unless you feel like leaving up to a quarter of your userbase out).
With things like CDIS this one-year gap is effectively lengthened to TWO years. Apple comes out with something new that's broken enough to be unusable in production. We wait another full year for them to finish baking it. And then we wait another year for the install base to be wide enough to ship an app with it.
With CDIS this is coming up to be a FOUR YEAR GAP, assuming they make it production-stable in iOS7.
There is plenty of reasonable skepticism when it comes to doubting whether CDIS will be fixed at all, or be quietly swept under the carpet as a failed technology.
> "I've only seen 3-4 people who have lost access to their data completely"
In my experience data loss has never been an issue - loss of iCloud connectivity is. Which is to say, once a conflict resolution failure occurs, that device is now an island - no changes made there will be communicated to any other device, and no changes made elsewhere makes it to that device either. And there is no way to restore this connection that anyone is aware of it.
Data loss hasn't ever been a major problem here - when a breaking conflict resolution occurs Core Data's default behavior is to go all-local rather than delete data.
The inability to repair a broken iCloud link is 100x more aggravating than simply breaking, since it means having to tell a user that they are SOL. By far the greatest frustration I've encountered re: CDIS is exactly this - that once it breaks, it's permanently broken.
> "But in any case, my plan is to compile a list of all the issues I've experienced next, and maybe some of the hacks that I'm using to work around them, and do another write-up in the near future."
I'm looking forward to it, though I remain extremely skeptical that Core Data is production-ready.
I've now, collectively, been in rooms with literally thousands of angry CDIS developers. Very smart developers who have yet to be able to ship a single CDIS-enabled app because its stability is simply atrocious. I'm wondering how it is that your experience is so different from everyone else's - where you reportedly have CDIS working in a production app with few/no issues, while others can't even get their Core Data stores to stand up straight. That's a pretty huge gap in progress.
Re: Why iOS Devs Should Consider Using Core Data iCloud sync
#25Earlier quoted context omitted.
Thanks for that feedback! I thought I had conveyed my own displeasure with CDIS at the end, and mentioned a few times that "only if it worked well". Maybe I should've highlighted this more to reflect my own frustrations that I've experienced so far. I just felt that the tone had gone to an extreme in the other direction (that it's completely unworkable; and even if it did, you shouldn't support it). My point was most…
> "that you shouldn't work with it "even if it worked"" I simply have not seen this attitude at all on the internet. Everybody wants the promise of CDIS. All of the anger, frustration, and vitriol is around the broken promise of it, not the concept. > "and (this might be personal opinion) but I don't believe that they're too far from cracking it." That remains to be seen. There is a growing sentiment in the Apple dev…
- I referenced the Brent Simmons article and the Marco / Siracusa podcast early on in my post. They're all highly-visible and prominent members of the Apple dev community, and this was clearly their stance that I was challenging.
- Regarding upgrading, you can mark out certain features to be available on the latest version of iOS while maintaining general backward compatibility with the previous iOS version. My app is compatible with iOS5, but I don't expose the iCloud sync option to iOS5 users because I don't want them to use it. I've had 0 complaints about this policy.
> The inability to repair a broken iCloud link is 100x more aggravating than simply breaking, since it means having to tell a user that they are SOL. By far the greatest frustration I've encountered re: CDIS is exactly this - that once it breaks, it's permanently broken.
This isn't true. I encounter this problem fairly regularly with users, and the process I outline for them is this:
- turn off iCloud sync option from my app from all devices. This will make an object-by-object copy of 'ubiquity' sqlite db into their local sandbox
- nuke their container from Settings -> iCloud -> Storage and Backup -> Manage Storage -> Documents and Data -> Show All -> -> Edit -> Delete All. This cleans out their iCloud database and all metadata associated with it
- wait a few minutes for the delete to sync over to all devices
- choose one of the devices as the most recent 'truth' version, and use that to be the first device to sync up to iCloud
- connect second device to iCloud again, and this will fetch data from iCloud instead of uploading. Once done,from then on, sync will work again seamlessly across both devices.
The instructions have some nuance in them, but that's the gist of it. Resetting the iCloud container fixes almost all the problems that you would encounter with CDIS, and the hacks are around making backups and restoration of data as painless as possible, and trying to minimize data loss. Again, this adds customer service add-on, but it's far far from impossible.
Re: Why iOS Devs Should Consider Using Core Data iCloud sync
#26Hey Apple, why don't you get to studying on good old Lotus Notes? Multimaster, highly replicated, non-relational, conflict-reconciling, document-focused storage for what, twenty years?
[1] http://www.ibm.com/developerworks/lotus/library/ls-NDHistory...
Re: Why iOS Devs Should Consider Using Core Data iCloud sync
#27Re: Why iOS Devs Should Consider Using Core Data iCloud sync
#28Earlier quoted context omitted.
I'm curious about what you think is wrong with Storyboards or AutoLayout. Storyboards certainly lack features so not all apps can be done with them, but nonetheless I think they're pretty solid. And AutoLayout works like magic, haven't had any problems (the IB-adds-constraints-for-you thing is annoying, but necessary)
Storyboards: 1. Interact poorly with version control. 2. Scale badly with a lot of VCs. 3. Segues are untyped and are inadequate to express complex navigation schemes. AutoLayout: 1. Excessively verbose normal syntax and excessively limited and cryptic and untyped shorthand syntax. 2. IB tools are woefully inadequate for editing. 3. Small adjustments to complex layouts in IB completely scramble the constraints. 4. Do…
Re: Why iOS Devs Should Consider Using Core Data iCloud sync
#29Earlier quoted context omitted.
Storyboards: 1. Interact poorly with version control. 2. Scale badly with a lot of VCs. 3. Segues are untyped and are inadequate to express complex navigation schemes. AutoLayout: 1. Excessively verbose normal syntax and excessively limited and cryptic and untyped shorthand syntax. 2. IB tools are woefully inadequate for editing. 3. Small adjustments to complex layouts in IB completely scramble the constraints. 4. Do…
2. Is the fundamental deal breaker. They're impossible to use in a multi-developer environment, because of the absolutely guaranteed merge conflicts at every turn.
Re: Why iOS Devs Should Consider Using Core Data iCloud sync
#30Earlier quoted context omitted.
> "that you shouldn't work with it "even if it worked"" I simply have not seen this attitude at all on the internet. Everybody wants the promise of CDIS. All of the anger, frustration, and vitriol is around the broken promise of it, not the concept. > "and (this might be personal opinion) but I don't believe that they're too far from cracking it." That remains to be seen. There is a growing sentiment in the Apple dev…
> I simply have not seen this attitude at all on the internet. Everybody wants the promise of CDIS. All of the anger, frustration, and vitriol is around the broken promise of it, not the concept. - I referenced the Brent Simmons article and the Marco / Siracusa podcast early on in my post. They're all highly-visible and prominent members of the Apple dev community, and this was clearly their stance that I was challen…
This is the part that's news to me - I've observed myself and corroborated with many other devs that nuking a container prevents the container from being recreated by that app ID ever again.
This really is the one big sticking point - if nuking containers actually worked properly the scope of the problem is greatly reduced. Sure, potential data loss, but at least your devices start talking again.
I'd be interested in seeing code, but this is definitely something outside of your app. Very curious. I was very recently in a room full of CDIS devs who complain that the above is still broken in iOS 6.1.3, and I'm at a loss as to how you've been able to achieve successful recreation of an iCloud container that has been deleted via Settings.