2015-04-18 30 views
5

Mam AVCaptureDevice, aby wyświetlić podgląd kamery na żywo na ekranie.Touch ID zamarza AVCaptureDevice

Po nałożeniu widoku Touch ID na podglądzie kamery (przy użyciu CAContext 's evaluatePolicy), podgląd kamery zostaje zamrożony. Po zwolnieniu widoku Touch ID podgląd kamery miga czarnym ekranem przed ponownym uruchomieniem.

Zarówno zamrożenie, jak i czarny błysk ekranu są problematyczne. Jak mogę utrzymać podgląd kamery przy użyciu nałożonego widoku Touch ID?

+0

Podejrzewam, że Apple naprawdę przejmuje aplikację po wyświetleniu ekranu Touch ID. Wiem, że moja aplikacja nie ma metod rotacji i wiem też, że podczas sprawdzania aplikacji za pomocą inspektora wizualnego, takiego jak Reveal.app, ekran Touch ID nie jest nawet częścią hierarchii widoku. Mam nadzieję, że to pomoże ... –

+1

Wow, nie zdawałem sobie sprawy, że istnieje coś takiego jak aplikacja Reveal. Wydaje się przydatne. – Randomblue

+0

To jest niesamowity produkt. Wiele z tego, co robi, można teraz zrobić w Xcode, ale nie na urządzeniu, a jeśli przechwytujesz wideo lub używasz Touch ID, potrzebujesz prawdziwego urządzenia. –

Odpowiedz

4

Nie jestem pewien, czy to możliwe. Wygląda na to, że aplikacja traci kontrolę, gdy na ekranie pojawi się alert Touch ID. Wiem, że nasza aplikacja nie ma zdarzeń rotacji, gdy okno dialogowe się pojawi, a ja wiem, kiedy sprawdzam hierarchię widoku za pomocą Reveal.app Nie widzę widoku Touch ID w mojej hierarchii.

Czy można uruchomić aparat w trybie tła? To może załatwić sprawę, ale nie sądzę, aby korzystanie z kamery było dozwolone w tle.

+0

Co dokładnie masz na myśli, mówiąc "stracić kontrolę"?Ponieważ aplikacja przechodzi w stan 'applicationWillResignActive' z Touch ID i zwykle w tym stanie kamera działa dalej (np. Jeśli użytkownik dwukrotnie dotknie przycisku home). – Randomblue

+0

Dobrze, próbowałem uruchomić aparat w trybie tła (oba z 'dispatch_async' i' addOperationWithBlock'). Wciąż zamarza. – Randomblue

+1

applicationDidResignActive jest tym, co miałem na myśli. Czy to się dzieje? Wygląda na to, że kamera działa w tym stanie, chyba że Touch ID jest włączony. To śmierdzi dla ciebie. –

1

Zgadzam się z Paulem Cezanne, nie sądzę, że można zrobić przechwytywanie, gdy proces TouchID jest aktywny. Chociaż nie widzę żadnych konkretnych informacji ani w dokumentach, ani w plikach nagłówkowych, niektóre testy pozwalają sprawdzić, co się dzieje.

Po pierwsze, monit TouchID jest uruchamiany poza procesem.
1. Uruchom swoją aplikację TouchID na urządzeniu w debugerze.
2. Pobierz aplikację, aby wyświetlić monit TouchID.
3. W Xcode zatrzymaj aplikację.

Zwykle aplikacja została zatrzymana na urządzeniu, ale w takim przypadku możesz nadal używać odcisku palca lub przycisku anulowania, aby zamknąć okno dialogowe. Po zamknięciu zgłoszenia TouchID aplikacja zostanie wstrzymana, tak jak się spodziewałeś.

Ustaw punkt przerwania w wywołaniu zwrotnym evaluatePolicy. Zaakceptuj TouchID za pomocą odcisku palca, a zobaczysz, że blok jest wywoływany z 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) 
... 

Od TouchID jest wykorzystanie sprzętu urządzenie do odczytu odcisk palca i porównać go do druku przechowywane na chipie myślę, że musi ograniczyć dostęp do jakiegokolwiek innego sprzętu, urządzeń, gdy proces jest wykonywany.

Z twojego doświadczenia i aplikacji testowej po prostu wyrzuciłem razem, to wydaje się być prawdą. Otworzyłem kamerę za pomocą UIImagePickerController i gdy otworzyłem, nazwałem laContext evaluatePolicy: ... i wstrzymało przechwytywanie kamery.

Tak w skrócie, jeśli używasz walidacji TouchID:
- Twój proces jest nadal aktywna aplikacja, ale nazwali z procesu
- Apple jest ograniczanie dostępu do Twojego sprzętu na czas trwania