Highlighted

iOS AIR app rejection: 2.23 - Apps must follow the iOS Data Storage Guidelines or they will be rejected

Community Beginner ,
Mar 12, 2016

Copy link to clipboard

Copied

Hi,

I’ve recently submitted 3 almost identically programmed apps to the Apple App Store published in Adobe Animate and packaged with Air 20.0.0.204 iOS. They are mobile versions of some older web games produced about 4-5 years ago.


The strange thing is one of them got accepted, but the other two got rejected, both for the following reason:


From Apple

2.23 Details

On launch and content download, your app stores 7.MB on the user's iCloud, which does not comply with the iOS Data Storage Guidelines.


Next Steps

Please verify that only the content that the user creates using your app, e.g., documents, new files, edits, etc. is backed up by iCloud as required by the iOS Data Storage Guidelines. Also, check that any temporary files used by your app are only stored in the /tmp directory; please remember to remove or delete the files stored in this location when it is determined they are no longer needed.


Data that can be recreated but must persist for proper functioning of your app - or because users expect it to be available for offline use - should be marked with the "do not back up" attribute. For NSURL objects, add the NSURLIsExcludedFromBackupKey attribute to prevent the corresponding file from being backed up. For CFURLRef objects, use the corresponding kCRUFLIsExcludedFromBackupKey attribute.


Resources

To check how much data your app is storing:

    - Install and launch your app

    - Go to Settings > iCloud > Storage > Manage Storage

    - Select your device

    - If necessary, tap "Show all apps"

    - Check your app's storage


For additional information on preventing files from being backed up to iCloud and iTunes, see Technical Q&A 1719: How do I prevent files from being backed up to iCloud and iTunes.


If you have difficulty reproducing a reported issue, please try testing the workflow described in Technical Q&A QA1764: How to reproduce bugs reported against App Store submissions.

If you have code-level questions after utilizing the above resources, you may wish to consult with Apple Developer Technical Support. When the DTS engineer follows up with you, please be ready to provide:

- complete details of your rejection issue(s)

- screenshots

- steps to reproduce the issue(s)

- symbolicated crash logs - if your issue results in a crash log


First of all I have checked the iCloud storage on my device as they suggested and it just says 0.1KB for each of the 3 apps - not the 7MB suggested by Apple.


Secondly the apps are not programmed to write any files and neither are they downloading anything. I'm not using local shared objects or applicationStorageDirectory as suggested in this thread: https://forums.adobe.com/thread/950408?start=0&tstart=0


At the moment I wonder whether it has anything to do with the FLV Playback component used in all 3 apps, as the only real difference between the accepted app and the rejected ones is that the rejected ones have some FLV files packaged with the app where as the accepted app loads them from a URL.


However if anything, I would have thought it would be the other way round?


The combined size of the FLVs is 6.5MB for the first rejected app - where they rejected it because of 7MB iCloud storage - so that would be quite close. But on the second app the combined size of the FLVs is 25.8MB and they rejected it for 7.33MB - so that doesn't make sense either.

Not sure what else to try to get this accepted.


Any help would be much appreciated - thanks.

TOPICS
Development

Views

777

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more

iOS AIR app rejection: 2.23 - Apps must follow the iOS Data Storage Guidelines or they will be rejected

Community Beginner ,
Mar 12, 2016

Copy link to clipboard

Copied

Hi,

I’ve recently submitted 3 almost identically programmed apps to the Apple App Store published in Adobe Animate and packaged with Air 20.0.0.204 iOS. They are mobile versions of some older web games produced about 4-5 years ago.


The strange thing is one of them got accepted, but the other two got rejected, both for the following reason:


From Apple

2.23 Details

On launch and content download, your app stores 7.MB on the user's iCloud, which does not comply with the iOS Data Storage Guidelines.


Next Steps

Please verify that only the content that the user creates using your app, e.g., documents, new files, edits, etc. is backed up by iCloud as required by the iOS Data Storage Guidelines. Also, check that any temporary files used by your app are only stored in the /tmp directory; please remember to remove or delete the files stored in this location when it is determined they are no longer needed.


Data that can be recreated but must persist for proper functioning of your app - or because users expect it to be available for offline use - should be marked with the "do not back up" attribute. For NSURL objects, add the NSURLIsExcludedFromBackupKey attribute to prevent the corresponding file from being backed up. For CFURLRef objects, use the corresponding kCRUFLIsExcludedFromBackupKey attribute.


Resources

To check how much data your app is storing:

    - Install and launch your app

    - Go to Settings > iCloud > Storage > Manage Storage

    - Select your device

    - If necessary, tap "Show all apps"

    - Check your app's storage


For additional information on preventing files from being backed up to iCloud and iTunes, see Technical Q&A 1719: How do I prevent files from being backed up to iCloud and iTunes.


If you have difficulty reproducing a reported issue, please try testing the workflow described in Technical Q&A QA1764: How to reproduce bugs reported against App Store submissions.

If you have code-level questions after utilizing the above resources, you may wish to consult with Apple Developer Technical Support. When the DTS engineer follows up with you, please be ready to provide:

- complete details of your rejection issue(s)

- screenshots

- steps to reproduce the issue(s)

- symbolicated crash logs - if your issue results in a crash log


First of all I have checked the iCloud storage on my device as they suggested and it just says 0.1KB for each of the 3 apps - not the 7MB suggested by Apple.


Secondly the apps are not programmed to write any files and neither are they downloading anything. I'm not using local shared objects or applicationStorageDirectory as suggested in this thread: https://forums.adobe.com/thread/950408?start=0&tstart=0


At the moment I wonder whether it has anything to do with the FLV Playback component used in all 3 apps, as the only real difference between the accepted app and the rejected ones is that the rejected ones have some FLV files packaged with the app where as the accepted app loads them from a URL.


However if anything, I would have thought it would be the other way round?


The combined size of the FLVs is 6.5MB for the first rejected app - where they rejected it because of 7MB iCloud storage - so that would be quite close. But on the second app the combined size of the FLVs is 25.8MB and they rejected it for 7.33MB - so that doesn't make sense either.

Not sure what else to try to get this accepted.


Any help would be much appreciated - thanks.

TOPICS
Development

Views

778

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Mar 12, 2016 0
Engaged ,
Mar 14, 2016

Copy link to clipboard

Copied

Whether you are explicitly writing files to applicationStorageDirectory or documentsDirectory or some process is putting files there as part of temporary file usage, these folders and their contents will be part of an iCloud backup.


After running your app locally on a device, use an app that allows you to explore your app's folders, or you can use XCode's built in Devices tool to explore your app's container and confirm what files are ending up in these folders.


You don't need to necessarily stop using these folders or putting files there, you just need to mark them with 'preventBackup = true' from the File class:

File - Adobe ActionScript® 3 (AS3 ) API Reference

This will solve the problem of them being considered for iCloud backup (you can just set this on a parent folder and it will prevent any files or subfolders within that folder from being considered for backup)

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
Mar 14, 2016 1
Community Beginner ,
Mar 15, 2016

Copy link to clipboard

Copied

Thanks for your help.

I've compared the app's container folders between the accepted and one of the rejected apps in XCode and they are pretty much identical in file number and file size (about 300KB) after excluding the cached snapshot images which as far as I understand are generated by iOS - not the app itself. So unfortunately I'm still no wiser as to what files Apple are referring to.

I have looked into the preventBackup. As I'm not explicitly writing any files and not using the File class anywhere else, I'm not sure whether instantiating the File class just to set preventBackup to true would make any difference? Or does that then also apply to background processes? If that's the case, how do I know which folder the process is writing to?

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
Mar 15, 2016 0
Engaged ,
Mar 15, 2016

Copy link to clipboard

Copied

Ok, well the idea was that you would end up seeing which files or folders are getting created in those directories, and at some point in your app you would instantiate a File instance using a path pointing at those problem file or folder and set preventBackup = true and that would flag them from iCloud trying to back them up.

I also wouldn't assume that the one that got accepted is also truly 'safe', from experience, its been seen many times that any given review of a version isn't always 100% consistent. One version might get accepted, and the next update with just some minor changes might get flagged for something some other reviewer missed the first time.

Not sure what else to suggest except to make sure you execute every scene/feature in your app that might be downloading/saving local files and check the container again for files you aren't cresting yourself but that you can flag to prevent backup

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
Mar 15, 2016 0
New Here ,
Apr 28, 2016

Copy link to clipboard

Copied

Did you ever solve this problem? I am experiencing the exact same thing. I have a very simple app. Bundled in the applicationstorage is an xml and my bitmap assets. The only file operations i make in the app are loading these into the app. I don't save anything anywhere and still - the app is rejected as yours.

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
Apr 28, 2016 0
Community Beginner ,
Apr 28, 2016

Copy link to clipboard

Copied

Yes, I solved the problem. It seems obvious afterwards - but I was using the Google Universal Analytics library (GitHub - zwetan/as3-universal-analytics: Google Universal Analytics for AS3)​ and that was writing to a SharedObject (_ga file). As it wasn't really that important for me I simply removed the library and it got accepted. I think the file size they give you can be misleading, the _ga file was just a few bytes - unlike the 7MB they mentioned. There might be other reasons in your case, but I would double check if any libraries or extensions that you are using in your app use shared objects.

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
Apr 28, 2016 1
tekstur LATEST
New Here ,
Apr 28, 2016

Copy link to clipboard

Copied

Thanks for getting back to me. However i am certain that my app does not write any files to the device - and when i test it the iCloud usage says 'No Data' - i think ill post a new question on the subject.

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
Apr 28, 2016 0