Parse iOS SDK 上 PFFile.getData() 的 NSFileProtection 级别是多少?

What is the NSFileProtection level for PFFile.getData() on Parse iOS SDK?

应用程序似乎很少崩溃,一位 Apple 工程师建议,原因可能是如果用户在创建 NSData 对象和应用程序尝试读取第一个对象之间锁定他们的设备,就会发生崩溃来自该 NSData 对象的字节。

这意味着 Parse 是 downloading/storing 具有 'Complete' 数据保护级别 (NSFileProtectionComplete) 的文件。

let query = PFQuery(className: aClass)
let result = try query.getFirstObject()

guard
    let imageObject = result.objectForKey(aKey) as? PFFile,
    let imageData = try? imageObject.getData(),
    let firstByte = imageData.dataType() // this reads the 1st byte of data
else {
    return
}

Parse iOS SDK好像使用了NSFileProtectionCompleteUntilFirstUserAuthentication,允许设备启动后第一个用户authentication/unlock之后的文件访问。

static NSDictionary *_PFFileManagerDefaultDirectoryFileAttributes() {
#if !PF_TARGET_OS_OSX
    return @{ NSFileProtectionKey : NSFileProtectionCompleteUntilFirstUserAuthentication };
#else
    return nil;
#endif
}

static NSDataWritingOptions _PFFileManagerDefaultDataWritingOptions() {
    NSDataWritingOptions options = NSDataWritingAtomic;
#if !PF_TARGET_OS_OSX
    options |= NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication;
#endif
    return options;
}

@interface PFFileManager ()
@property (nonatomic, copy) NSString *applicationIdentifier;
@property (nonatomic, copy) NSString *applicationGroupIdentifier;
@end
@implementation PFFileManager

所以我假设同步 PFFile.getData() 使用 NSFileProtectionCompleteUntilFirstUserAuthentication 是对的吗?或者它根本不使用文件保护,因为数据被加载到内存中,根本没有写入文件?

在深入研究 Parse iOS SDK 之后,我可以回答这个问题:

同步(与异步一样)文件获取将数据保存在一个临时文件中 NSFileManagerNSFileProtectionCompleteUntilFirstUserAuthentication