在 iOS 模拟器和设备中测试 NSFileProtectionComplete

Posted

技术标签:

【中文标题】在 iOS 模拟器和设备中测试 NSFileProtectionComplete【英文标题】:Testing NSFileProtectionComplete in iOS simulator and device 【发布时间】:2012-05-17 22:03:18 【问题描述】:

我在 coreData 应用程序中为我的 - (NSPersistentStoreCoordinator *)persistentStoreCoordinator 编写了这段代码。我使用 xCode 的 Master-Detail Application 模板来创建应用程序...

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator

    if (__persistentStoreCoordinator != nil) 
        return __persistentStoreCoordinator;
    

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Notes2.sqlite"];

    NSError *error = nil;
    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) 

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
        

    NSString *urlString = [storeURL absoluteString];
    NSDictionary *fileAttributes = [NSDictionary dictionaryWithObject:NSFileProtectionComplete forKey:NSFileProtectionKey];
    if (![[NSFileManager defaultManager] setAttributes:fileAttributes ofItemAtPath:urlString error:&error]) 
    
        // Handle error
    


    return __persistentStoreCoordinator;

我如何测试并知道我的 sqlite 是否打开了 NSFileProtectionComplete?

我锁定了模拟器,但当我在 Finder 中双击文件时,该文件仍然可读。

【问题讨论】:

我还在设备上对其进行了测试,方法是锁定设备,然后使用 iTunes 和 iTunes 文件共享将文件从设备复制到我的桌面……但文件仍然可读。 你能测试一下吗? 【参考方案1】:

iTunes 不会从设备中复制文件,除非它有您的密码或该设备之前已被信任;这就是它能够解密数据的方式。

在 Xcode 8 及更早版本中,模拟器使用主机文件系统,而 macOS 目前不支持与 ios 相同的按文件加密,因此在 macOS 上,您无法在模拟器中进行测试。

【讨论】:

以上是关于在 iOS 模拟器和设备中测试 NSFileProtectionComplete的主要内容,如果未能解决你的问题,请参考以下文章

没有模拟器或设备的 IOS UI 测试

如何在iOS设备中部署交叉绘图表单应用程序进行测试

Xcode 11 单元测试:未列出装有 iOS 12.* 的设备

Xcode 的 OCUnit 测试能否在 iOS 设备而不是模拟器上运行

如何在 ios 设备中测试不使用调试功能的 bgtaskscheduler 功能

从 iOS 设备上为测试中的应用程序获取文件