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

Posted

技术标签:

【中文标题】Parse iOS SDK 上 PFFile.getData() 的 NSFileProtection 级别是啥?【英文标题】:What is the NSFileProtection level for PFFile.getData() on Parse iOS SDK?Parse iOS SDK 上 PFFile.getData() 的 NSFileProtection 级别是什么? 【发布时间】:2016-06-24 15:11:07 【问题描述】:

一个应用程序似乎很少崩溃,一位 Apple 工程师建议,原因可能是如果用户在创建 NSData 对象和应用程序尝试从那个 NSData 对象。

这意味着 Parse 正在下载/存储具有“完整”数据保护级别 (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,它允许在设备启动后第一次用户身份验证/解锁后访问文件。

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 是否正确?或者它根本没有使用文件保护,因为数据被加载到内存中并且根本没有写入文件?

【问题讨论】:

【参考方案1】:

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

同步(类似于异步)文件提取将数据保存在带有NSFileManagerNSFileProtectionCompleteUntilFirstUserAuthentication 的临时文件中。

【讨论】:

以上是关于Parse iOS SDK 上 PFFile.getData() 的 NSFileProtection 级别是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Parse 的 iOS SDK(或其他 SDK)如何解决冲突?

将 tvOS Parse SDK 添加到现有 iOS 项目

如何在 AppDelegate 中使用 Parse 正确设置 Facebook iOS SDK?

使用 Parse iOS SDK 和 Facebook 构建错误

当Parse iOS sdk更新为1.14时,callFunctionInBackground无法正常工作

Parse-Server iOS SDK - 创建返回 PFQuery 结果的函数