Will App Store reject app that requires iCloud and iCloud Drive to function?

I'm developing an app that uses CloudKit. Will be making the app such that iCloud and iCloud Drive is required in order for the app to function. When the app first started, there will be an onboarding pagecontroller that will inform the users that they need to sign in to iCloud and turn on iCloud Drive in order to use the app. During normal use, when iCloud is not available, the app will just display an empty view controller with a message that iCloud is required. Will App Store reject such app?

Replies

I don't think that will be a problem - but a better user experience would be to show them something and 'alert' them only when they start to use the app. For example give them a front page with logo and instructions and other stuff. Then when they actually start to do something that requires the database show them the alert (if appropriate).

I tend to agree with PBK here though, I have to wonder why you would limit your app only to

those who have enabled iCloud drive? Personally, none of my devices are setup for iCloud

drive because, several of them cannot use it. This will unfortunately remain true until these

older devices are no longer supported.

For some app with photo sharing, social commenting as main features, you do need a central data depository. That is CloudKit for my app. iCloud and iCloud Drive needs to be enabled in order for your app to use CloudKit.

I couldn't even get a similar app pass Testflight Beta Review. Wrote back and forth with the reviewer, explaining how I build my app entirely on CloudKit and thus the user must log into iCloud in order to use it (alienating some users, but I accept that - basically this started out as a test project to get to know CloudKit and has since developed into a shippable app). I refered to the "Designing for CloudKit" documentation, which explicitely states: " If your app does more than read data from the public database, check for an active iCloud account at startup and adjust your interface accordingly. For example, if no iCloud account is available, disable any UI for saving records and notify the user that saving records requires an active iCloud account".

Final message was: "Thank you for your reply. It would in fact be appropriate to implement the backend features through a separate service. The primary purpose of the app, [...], can be achieved without CloudKit. Therefore, upon further consideration, we stand by the initial rejection."

That's what I call a nice way to promote your frameworks. I guess Apple does not want us to use CloudKit 😉

I recommend that you make an alert for users that sharing requires iCloud/iCloud Drive. You should probably enable local caching of data in Core Data so that the app remains usable except for the sharing aspect.

But aren't they just saying to do what the docs are saying - do whatever you can locally and enable the other stuff if and when the user has iCloud access? Is your app completely dead without iCloud?

Yup, because it is primarily driven through push notifications and communication channels. Thus, it won't work offline. I buffer some content locally, but almost all of the action happens online.

I think depends on reviewer. You might want to quote some existing App Store app such as magpievideo.com (not affiliated, more info pls check with that app's author) which requires CloudKit in order to work.

I think I have an answer to this question and a reason for the answer. I think your app must function at some level without iCloud functionality. That might be just showing all the bells and whistles that your app has, but when the user goes to ring a bell or **** a whistle they get back a message 'sorry - you need iCloud to do that'. That allows App Review to review the app (albeit sans any functionality) without any iCloud interaction. If your app doesn't show what it might do because iCloud is unavailable then App Review can't "review" it.