klc*_*r89 1 iphone objective-c ios icloud
我正在尝试标记我的应用程序的NSDocumentDirectory的整个文件夹,以便它从iCloud备份中排除,但当我去终端并运行:xattr -plxv com.apple.MobileBackup我收到此错误:没有这样的xattr: com.apple.MobileBackup
提前感谢您提供的任何帮助.
这是我正在使用的代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSURL *pathURL= [NSURL fileURLWithPath:documentsDirectory];
[self addSkipBackupAttributeToItemAtURL:pathURL];
}
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
if (&NSURLIsExcludedFromBackupKey == nil) { // iOS <= 5.0.1
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;
} else { // iOS >= 5.1
NSLog(@"%d",[URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:nil]);
return [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:nil];
}
}
Run Code Online (Sandbox Code Playgroud)
如何在iOS应用程序的文件夹上运行终端?你的意思是在模拟器?
Apple肯定会忽略或删除主Documents文件夹中的该属性.您应该做的是Apple告诉开发人员要做的事情(来自文件系统编程指南):
处理支持文件 - 应用程序下载或生成的文件,并可根据需要重新创建 - 使用以下两种方法之一:
在iOS 5.0及更早版本中,将支持文件放在<Application_Home>
/Library/Caches目录中以防止它们被备份在iOS 5.0.1及更高版本中,将支持文件放在<Application_Home>
/Library/Application Support目录中,并将com.apple.MobileBackup扩展属性应用于它们.此属性可防止将文件备份到iTunes或iCloud.如果您有大量支持文件,则可以将它们存储在自定义子目录中,并将扩展属性应用于该目录.
因此,您可以在其中为文件创建新目录Application Support,并将该属性应用于该目录.
编辑:嗯,似乎信息已过期,文档尚未更新.从iOS 5.1发行说明:
iOS 5.1引入了一个新API来标记不应备份的文件或目录.对于
NSURL对象,请添加该NSURLIsExcludedFromBackupKey属性以防止备份相应的文件.对于CFURLRef objects,使用相应的kCFURLIsExcludedFromBackupKey属性.在iOS 5.1及更高版本上运行的应用必须使用较新的属性,而不是
com.apple.MobileBackup直接添加 扩展属性,如前所述.该com.apple.MobileBackup扩展属性已被弃用和支持它可能在将来的版本中删除.
事实证明,您可以在技术问答QA1719中获得实际代码.
此外,我发现我需要创建应用程序支持目录,至少在模拟器中.希望此代码有助于:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// got to make sure this exists
NSFileManager *manager = [NSFileManager defaultManager];
NSString *appSupportDir = [self applicationAppSupportDirectory];
if(![manager fileExistsAtPath:appSupportDir]) {
__autoreleasing NSError *error;
BOOL ret = [manager createDirectoryAtPath:appSupportDir withIntermediateDirectories:NO attributes:nil error:&error];
if(!ret) {
LTLog(@"ERROR app support: %@", error);
exit(0);
}
}
...
}
- (NSString *)applicationAppSupportDirectory
{
return [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5382 次 |
| 最近记录: |