Я хотел бы знать, заблокировано ли устройство, когда я загружаю виджет «Уведомление/Сегодня», чтобы я мог правильно отображать виджет. (это финансовые вопросы, и мы не хотим показывать баланс на заблокированном телефоне)
На устройствах с TouchID я могу просто попытаться получить доступ к Связке ключей, и если я получу
errSecInteractionNotAllowed
назад, он заперт. Все хорошо. Это не работает на устройствах без touchID (но с PIN-кодом). Я нашел несколько вещей, которые рекомендуют использовать
[[UIApplication sharedApplication] protectedDataAvailable]
Однако у меня нет [UIApplication sharedApplication]
в виджете.
Есть идеи где и как это сделать? Мне просто нужно да/нет: устройство заблокировано.
Спасибо
[ОБНОВЛЕНИЕ: вот код, который у меня есть]
Получение имени файла:
+ (NSString *)lockedDeviceFilename {
NSURL *directoryUrl = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:USER_DEFAULTS_GROUP_NAME];
return [directoryUrl.path stringByAppendingPathComponent:@"security.dummy"];
}
Запись/создание файла (в приложении, а не расширение:
NSError *error = nil;
NSString *documentPath = [FOOStorageGatekeeper lockedDeviceFilename];
[[NSFileManager defaultManager] removeItemAtPath:documentPath error:&error];
BOOL created = [[NSFileManager defaultManager] createFileAtPath:documentPath
contents:[@"super secret file contents. we only care about the permissions" dataUsingEncoding:NSUTF8StringEncoding]
attributes:@{NSFileProtectionKey : NSFileProtectionComplete}];
Чтение:
BOOL isReadable = [[NSFileManager defaultManager] fileExistsAtPath:[FOOStorageGatekeeper lockedDeviceFilename]];
NSLog(@"isReadable? %@", isReadable ? @"YES" : @"NO");
Он всегда может прочитать файл, даже на устройстве TouchID с заблокированным экраном. Если я посмотрю на атрибуты, это покажет, что для NSFileProtectionKey установлено значение NSFileProtectionComplete... но я ВСЕ ЕЩЕ МОГУ ПРОЧИТАТЬ ЭТО :(
Обновление: нашел. Пометка ответа Яна как правильного