Wednesday, October 29, 2014

The iOS Data Storage Guidelines indicate that only content that the user creates using your app, e.g., documents, new files, edits, etc., should be backed up by iCloud.

My app is rejected by apple.

In particular, we found that on launch and/or content download, your app stores XXX MB. To check how much data your app is storing:

- Install and launch your app
- Go to Settings > iCloud > Storage & Backup > Manage Storage
- If necessary, tap "Show all apps"
- Check your app's storage

The iOS Data Storage Guidelines indicate that only content that the user creates using your app, e.g., documents, new files, edits, etc., should be backed up by iCloud.

Solution:

You should prevent files from being backed up to iCloud and iTunes!!

iOS 5.1 and later
Starting in iOS 5.1, apps can use either NSURLIsExcludedFromBackupKey or kCFURLIsExcludedFromBackupKey file properties to exclude files from backups. Either of these APIs is preferred over the older, deprecated approach of directly setting an extended attribute. All apps running on iOS 5.1 should use these APIs to exclude files from backups.
Listing 1  Excluding a File from Backups on iOS 5.1
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
    assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);
 
    NSError *error = nil;
    BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES]
                                  forKey: NSURLIsExcludedFromBackupKey error: &error];
    if(!success){
        NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error);
    }
    return success;
}

iOS 5.0.1

If your app must support iOS 5.0.1, you can use the following method to set the "do not back up" extended attribute. Whenever you create a file or folder that should not be backed up, write the data to the file and then call this method, passing in a URL to the file.
Listing 2  Setting the Extended Attribute on iOS 5.0.1
#import <sys/xattr.h>
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
    assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);
 
    const char* filePath = [[URL path] fileSystemRepresentation];
 
    const char* attrName = "com.apple.MobileBackup";
    u_int8_t attrValue = 1;
 
    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
    return result == 0;
}

iOS 5.0

It is not possible to exclude data from backups on iOS 5.0. If your app must support iOS 5.0, then you will need to store your app data in Caches to avoid that data being backed up. iOS will delete your files from theCaches directory when necessary, so your app will need to degrade gracefully if it's data files are deleted.



Source: https://developer.apple.com/library/ios/qa/qa1719/_index.html

Thursday, October 16, 2014

[Unity] Use of undeclared identifier 'GL_RGBA8_OES' in xcode 6

I'm having a similar issue with my Unity project not compiling with the Xcode 6 and the iOS 8 SDK. Xcode 6 gives me five errors, all in the GlesHelper.mm file (which, if I'm not mistaken, is part of Unity). All five are semantic issues:
  • Line 63: Use of undeclared identifier 'GL_RGBA8_OES'
  • Line 123: Use of undeclared identifier 'glRenderbufferStorageMultisampleAPPLE'; did you mean 'glRenderbufferStorageMultisample'?
  • Line 133: Use of undeclared identifier 'GL_DEPTH_COMPONENT24_OES'
  • Line 135: Use of undeclared identifier 'GL_DEPTH24_STENCIL8_OES'
  • Line 143: Use of undeclared identifier 'glRenderbufferStorageMultisampleAPPLE'; did you mean 'glRenderbufferStorageMultisample'?
Answer:

Please add
#include <OpenGLES/ES2/glext.h>