Я согласен с Полом Сезанном, я не думаю, что вы можете сделать захват, пока процесс TouchID активен. Хотя я не вижу никакой конкретной информации ни в документах, ни в файлах заголовков, через некоторое тестирование вы можете видеть, что происходит.
Во-первых, подсказка TouchID запускается за пределами вашего процесса.
1. Запустите приложение с поддержкой TouchID на устройстве в отладчике.
2. Получите приложение, чтобы отобразить подсказку TouchID.
3. В Xcode приостановите приложение.
Как правило, приложение будет заморожено на устройстве, но в этом случае вы можете использовать свой отпечаток пальца или кнопку отмены, чтобы закрыть диалоговое окно. Когда вы закроете подсказку TouchID, приложение будет приостановлено, как и следовало ожидать.
Задайте точку останова в обратном вызове метода оценкиPolicy. Примите TouchID с отпечатком пальца, и вы увидите, что этот блок вызывается из CoreAuthentication.daemon.
-[ViewController startTouchID:]_block_invoke at .../testTouchIDThreadding/testTouchIDThreadding/ViewController.m:60
-[LAContext evaluatePolicy:options:reply:]_block_invoke() /*THIS IS MY BLOCK*/
...
-[NSXPCConnection _sendInvocation:withProxy:remoteInterface:withErrorHandler:timeout:userInfo:]_block_invoke310()
...
Enqueued from com.apple.NSXPCConnection.m-user.com.apple.CoreAuthentication.daemon (Thread 3)Queue : com.apple.NSXPCConnection.m-user.com.apple.CoreAuthentication.daemon (serial)
...
Поскольку TouchID задействует аппаратное обеспечение устройства для считывания отпечатка пальца и сравнить его с печатью, хранящейся на чипе, я думаю, что нужно ограничить доступ к любому другим аппаратному устройству, а процесс выполнения.
Из вашего опыта и тестового приложения я просто бросил вместе, это кажется правдой. Я открыл камеру с помощью UIImagePickerController, и, хотя я открыт, я назвал laContext evaluationPolicy: ... и он приостановил захват камеры.
Таким образом, в итоге, когда вы используете проверку TouchID:
- Ваш процесс по-прежнему является активным приложением, но вы назвали из вашего процесса
- Apple ограничивает доступ к аппаратному устройству для продолжительности
Я подозреваю, что Apple действительно захватывает приложение, когда отображается экран Touch ID. Я знаю, что у моего приложения нет методов ротации, и я также знаю, что при просмотре вашего приложения с помощью визуального инспектора, такого как Reveal.app, экран Touch ID не является даже частью иерархии представлений. Надеюсь, это поможет ... –
Вау, я не понимал таких вещей, как Reveal App. Кажется полезным. – Randomblue
Это замечательный продукт. Многое из того, что он делает, может быть сделано в Xcode сейчас, но не на устройстве, и если вы захватываете видео или используете Touch ID, вам нужно реальное устройство. –