1

我有一个应用程序,我在开发人员门户和目标的项目功能部分都启用了数据保护。我创建了新的配置文件并将它们同步到我在 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要处理的文件。所以我仍然卡住了。为什么数据保护似乎不起作用?

4

2 回答 2

0

现在已解决。它要求重新生成配置文件并将其同步回 Xcode。尝试了几次才能使其正常工作。还值得注意的是,我必须在 Xcode 中的目标功能中以及 Apple Developer Portal 的 App ID 编辑中启用数据保护。然后,我必须确保完全重新生成了所有配置文件。

此外,IExplorer 有点欺骗性:它会向您显示文件结构,但一旦设备被锁定并且密码被应用到 iPad,我就无法预览或复制设备上的文件。

于 2014-04-17T14:52:01.033 回答
-1

据我了解,只有当用户在其设备上设置密码http://support.apple.com/kb/HT4175?viewlocale=en_US&locale=en_US时,数据保护才会起作用

于 2014-04-17T08:57:35.527 回答