我使用openParentApplication
和handleWatchKitExtensionRequest
从Apple Watch应用程序调用iPhone上的父应用程序。在主应用程序中,我使用CoreData以及addPersistentStoreWithType:
NSDictionary *options = @{
NSMigratePersistentStoresAutomaticallyOption : @YES, //
NSInferMappingModelAutomaticallyOption : @YES, //
NSSQLitePragmasOption : @{@"journal_mode" : @"DELETE"}, //
NSPersistentStoreFileProtectionKey : NSFileProtectionCompleteUnlessOpen
};
这引起了异常:
此NSPersistentStoreCoordinator没有持久存储(设备 锁定)。它无法执行保存操作。
这是否意味着我既不能使用NSFileProtectionCompleteUnlessOpen
也不能使用NSFileProtectionComplete
?
我必须使用NSFileProtectionNone
或NSFileProtectionCompleteUntilFirstUserAuthentication
吗?
我想知道一种使用NSFileProtectionCompleteUnlessOpen
保护我的数据的方法,并且当我的Watch应用程序使用openParentApplication
时仍能访问数据。
解决问题的可能方法(但不是真正的解决方案)
答案 0 :(得分:0)
NSFileProtectionCompleteUntilFirstUserAuthentication
似乎是我的推荐方式。它确保用户必须至少自上次启动后解锁设备一次。
iOS 7和后台刷新引入了此问题。要防止物理取证分析读取未加密的数据。
来自https://security.stackexchange.com/questions/57588/iphone-ios-7-encryption-at-lock-screen的补充信息:
NSFileProtectionNone
:即使设备已锁定,也可以随时访问该文件; NSFileProtectionComplete
:只有在设备解锁时才能访问文件(请注意,在设备被锁定且设备仍可访问的情况下,有~10秒的宽限期); NSFileProtectionCompleteUnlessOpen
:文件可以在设备锁定时创建,但一旦关闭,只能在设备解锁时访问; NSFileProtectionCompleteUntilFirstUserAuthentication
:只有在设备自启动后至少解锁一次后才能访问该文件。来自Gilt的人们也在这里解释了很多关于这种行为:http://tech.gilt.com/post/67708037571/sleuthing-and-solving-the-user-logout-bug-on-ios
我想到的另一个想法是使用app group容器。请在此处查看问题:WatchKit SDK not retrieving data from NSUserDefaults这样,它不仅应该共享NSUserDefaults
,还应该共享相同的钥匙串。这应该与iOS应用程序共享相同的钥匙串的方式相同。