我在开发人员门户网站和目标的项目功能部分都启用了一个用于数据保护的应用程序。我创建了新的配置文件,并将它们同步到Xcode中的我的帐户。然而,当我构建项目并下载文件时,我仍然可以使用IExplorer(一种在iOS设备上浏览文件系统的工具)查看它们。我是不是错过了什么?我知道当设备被锁定并且有密码时,文件是不可访问的。我的印象是,这一切现在都是使用Xcode 5.1自动处理的,所以当我的文件被写入时,没有权利.plist文件或任何代码来处理这件事。
更新
[[NSFileManager defaultManager] createFileAtPath:self.filePath contents:nil attributes:[Utils defaultFileProtectionAttributesDictionary]];
@synchronized(self.fileHandle)
{
self.fileHandle = [NSFileHandle fileHandleForWritingAtPath:self.filePath];
}
这段代码用于在我的文件下载时创建和编写它们。我想知道NSFileHandle
是否有自己的内部文件创建方法。这是Utils代码:
+ (NSDataWritingOptions)defaultFileProtection
{
NSDataWritingOptions result = 0;
if (&NSFileProtectionCompleteUnlessOpen != nil)
result = NSDataWritingFileProtectionCompleteUnlessOpen;
return result;
}
+ (NSString*)attributeStringForFileProtection:(NSDataWritingOptions)protection
{
NSString* result = nil;
switch (protection & NSDataWritingFileProtectionMask) {
case NSDataWritingFileProtectionNone:
result = NSFileProtectionNone;
break;
case NSDataWritingFileProtectionComplete:
result = NSFileProtectionComplete;
break;
case NSDataWritingFileProtectionCompleteUnlessOpen:
result = NSFileProtectionCompleteUnlessOpen;
break;
case NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication:
result = NSFileProtectionCompleteUntilFirstUserAuthentication;
break;
default:
break;
}
return result;
}
+ (NSDictionary*)defaultFileProtectionAttributesDictionary
{
static NSDictionary* sDict = nil;
NSDataWritingOptions defaultProtection = [self defaultFileProtection];
NSString* attributeString = [self attributeStringForFileProtection:defaultProtection];
if (attributeString && !sDict)
sDict = @{NSFileProtectionKey: attributeString};
return sDict;
}
如果我调试它,我可以看到它使用NSFileProtectionCompleteUnlessOpen
作为其首选的保护技术。但是,是吗?还是NSFileHandle
只是放弃了所有的工作?
更新更新
似乎您确实需要创建NSFileHandle
要处理的文件。所以我还是被卡住了。为什么数据保护似乎不起作用?
此问题现已解决。它要求重新生成配置文件并将其同步回Xcode。花了几次尝试才让它发挥作用。同样值得注意的是,我必须在Xcode中的目标功能范围内启用数据保护,还必须从苹果开发者门户网站的应用程序ID编辑中启用数据保护。然后,我必须确保我完全重新生成了所有的配置文件。
此外,IExplorer有点欺骗性:它会向你显示文件结构,但一旦设备被锁定并在iPad上应用了密码,我就无法预览或复制设备上的文件。
据我所知,只有当用户在他的设备上设置了密码时,数据保护才会起作用http://support.apple.com/kb/HT4175?viewlocale=en_US&locale=en_US