我有一个应用程序,我在开发人员门户和目标的项目功能部分都启用了数据保护。我创建了新的配置文件并将它们同步到我在 Xcode 中的帐户。然而,当我构建我的项目并下载文件时,我仍然可以使用 IExplorer(一种用于在 iOS 设备上浏览文件系统的工具)查看它们。我错过了什么吗?我了解当设备被锁定并有密码时,这些文件是无法访问的。我的印象是这一切现在都是使用 Xcode 5.1 自动处理的,所以当我的文件被写入时,没有 Entitlements.plist 文件或任何编码来处理这个问题。
更新
[[NSFileManager defaultManager] createFileAtPath:self.filePath contents:nil attributes:[Utils defaultFileProtectionAttributesDictionary]];
@synchronized(self.fileHandle)
{
self.fileHandle = [NSFileHandle fileHandleForWritingAtPath:self.filePath];
}
此代码用于在下载文件时创建和编写我的文件。我想知道是否NSFileHandle
有自己的内部文件创建方法。这是实用程序代码:
+ (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
要处理的文件。所以我仍然卡住了。为什么数据保护似乎不起作用?