2016-09-13 2 views
1

В моем приложении я хотел бы узнать, установил ли пользователь пароль или отпечаток пальца (touchID). Для этого есть довольно простой способ: [LAContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication error:error].Что произойдет, если я использую LAPolicyDeviceOwnerAuthentication на iOS 8?

Однако Apple's docs говорит, что LAPolicyDeviceOwnerAuthentication доступен только на iOS9 и выше. Я бы предпочел не сбой пользователей iOS 8 без объяснения причин, даже если он становится старше. Дело в том, что я пробовал это на iOS8.4 симуляторе, и кажется компилировать и просто работать.

Какие вредные эффекты могут произойти, если я использую LAPolicyDeviceOwnerAuthentication на iOS 8?

ответ

1

Я использую код, подобный этому:

LAPolicy localAuthPolicy = LAPolicyDeviceOwnerAuthenticationWithBiometrics; 
if (![[UIDevice currentDevice].systemVersion hasPrefix:@"8."]) { 
    localAuthPolicy = LAPolicyDeviceOwnerAuthentication; 
} 

Это гарантирует, я использую только LAPolicyDeviceOwnerAuthentication на прошивкой 9 и более поздних версий.

Непризнано, что на самом деле происходит на устройстве iOS 8 при попытке использовать LAPolicyDeviceOwnerAuthentication. Очень маловероятно, что что-то сработает, но аутентификация может вернуть NO из-за неизвестного значения, или это может произойти, потому что у iOS 8 было только одно допустимое значение, и он может не выполнять никаких проверок.

К сожалению, Objective-C не предоставляет никаких проверок времени выполнения для действительных значений enum, как вы можете делать с константами, методами и классами.

+1

Имеет смысл, поскольку значение перечисления должно быть определено в заголовке где-то, а вызов метода просто видит его как неизвестное значение перечисления. Любопытно, однако: при компиляции xcode не компилируется в разные заголовки для разных версий iOS? – Chaosed0

+1

Нет, Xcode компилируется только на базовом SDK. И во время компиляции значения enum просто заменяются их целым значением. Таким образом, вы только передаете '1' или' 2' в качестве политики. Таким образом, реальное неизвестное - это то, что происходит под iOS 8, если вы должны передать '2' в качестве политики, когда только« 1 »является известной политикой в ​​iOS 8. – rmaddy

0

Если вы используете LAPolicyDeviceOwnerAuthentication на что-нибудь ниже iOS 9, приложение выйдет из строя. Это то, что случилось с моим приложением, когда я не понимал, что это не доступно ни на чем ниже iOS 9, но мое приложение поддерживает iOS 8.x как минимальную поддерживаемую версию ОС.

Смежные вопросы