2016-07-08 74 views
20

Nella mia app sto usando card.io per scansionare le carte di credito. Funziona perfettamente con iOS 9. In iOS 10, l'app si arresta in modo anomalo e non riesco a trovare il registro degli arresti anomali nella console xcode 8 beta 2 in quanto genera molti messaggi inutili.requestAccessForMediaType che si interrompe in iOS 10

E poi ho controllato in privacy-> impostazioni per vedere se la fotocamera è disabilitata per la mia app, ma la mia app non è elencata in quella sezione. Sembra che iOS 10 non stia autorizzando la mia app a utilizzare la fotocamera.

Io uso il seguente codice per richiedere il permesso:

-(BOOL)checkCameraPermissions{ 

    AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]; 
    if(authStatus == AVAuthorizationStatusAuthorized) 
    { 
     // start card-io 
     return YES; 
    } 
    else if(authStatus == AVAuthorizationStatusNotDetermined) 
    { 

     [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) 
     { 
      if(granted) 
      { 
       //Start card-io 
       [self testIsNewCard]; 
      } 

     }]; 
    } 
    else if (authStatus == AVAuthorizationStatusRestricted) 
    { 
     //Alert 
     // Alert camera denied 

     UIAlertController *aCon=[UIAlertController alertControllerWithTitle:@"Camera denied" message:@"Camera cannot be used" preferredStyle:UIAlertControllerStyleAlert]; 
     UIAlertAction *ok =[UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { 
      [aCon dismissViewControllerAnimated:YES completion:nil]; 
     }]; 
     [aCon addAction:ok]; 
     [self presentViewController:aCon animated:YES completion:nil]; 

     return NO; 

    } 

    return NO; 

} 

Quando ho eseguito questo codice, l'authStatus viene restituito come AVAuthorizationStatusNotDetermined

e l'applicazione si è schiantato subito dopo entrare nel blocco requestAccessForMediaType:AVMediaTypeVideo

C'è così tanto di log di garbage visualizzati in console e non ho idea di trovare il messaggio di crash.

Edit: ho trovato un'opzione per disattivare i tutti i registri non necessari in Xcode 8. Risposta pubblicato here. Ma ancora Xcode non ha mostrato alcun crash log anche dopo la disattivazione del debug backtrace.

mio xcode8 mostra solo questo messaggio e l'applicazione appena si chiude:

App[1124:226447] [access] <private> 

Ho anche provato a ripristinare la posizione e la privacy, ma ancora l'applicazione si blocca quando si cerca di richiedere l'accesso ai supporti.

Qualche idea del perché questo sta accadendo?

+0

hai trovato qualche soluzione per questo? –

+0

No, sto ancora cercando di capirlo –

+0

esattamente come te, non ho nessun registro di crash !! –

risposta

27

Ho aggiunto il codice al mio file info.plist e funziona ora.

+0

Strano che ho aggiunto questo in precedenza e non ha funzionato l'ultima volta, ma ha funzionato ora. –

+1

Risposta stupenda! iOS 10 lo richiede. –

10

In iOS 10 è necessario dichiarare l'accesso a qualsiasi tipo di dati privati ​​dell'utente. A tale scopo, aggiungi una chiave di utilizzo all'app Info.plist. Per maggiori informazioni si prega di trovare l'immagine sottostante per lo stesso.

È necessario aggiungere la chiave Privacy - Descrizione dell'uso della fotocamera all'Info.plist della propria app e le relative informazioni di utilizzo.

Per ulteriori informazioni, consultare la GIF di seguito.

GIF

Oppure, se si desidera aggiungere tramite info.plist allora avete bisogno di aggiungere NSCameraUsageDescription chiave.

Basta copiare e incollare sotto stringa in info.plist.

<key>NSCameraUsageDescription</key> 
<string>Take the photo</string> 

Per ulteriori informazioni, consultare la GIF seguente.

GIF

Per ulteriori informazioni si prega di consultare il link.

7

iOS 10 ha continuato l'informativa sulla privacy e ha implementato nuove regole sulla privacy. E dovremmo ricordarci di implementarli nei nostri prossimi progetti.

Per il vostro problema è necessario aggiungere seguente riga in info.plist

<!-- Camera --> 
<key>NSCameraUsageDescription</key> 
<string><Your description goes here></string> 

Qui di seguito sono il resto delle regole sulla privacy:

<!-- Photo Library --> 
<key>NSPhotoLibraryUsageDescription</key> 
<string><Your description goes here></string> 

<!-- Camera --> 
<key>NSCameraUsageDescription</key> 
<string><Your description goes here></string> 

<!-- Microphone --> 
<key>NSMicrophoneUsageDescription</key> 
<string><Your description goes here></string> 

<!-- Location --> 
<key>NSLocationUsageDescription</key> 
<string><Your description goes here></string> 

<!-- Location When In Use --> 
<key>NSLocationWhenInUseUsageDescription</key> 
<string><Your description goes here></string> 

<!-- Location Always --> 
<key>NSLocationAlwaysUsageDescription</key> 
<string><Your description goes here></string> 

<!-- Calendars --> 
<key>NSCalendarsUsageDescription</key> 
<string><Your description goes here></string> 

<!-- ⏰ Reminders --> 
<key>NSRemindersUsageDescription</key> 
<string><Your description goes here></string> 

<!-- Motion --> 
<key>NSMotionUsageDescription</key> 
<string><Your description goes here></string> 

<!-- Health Update --> 
<key>NSHealthUpdateUsageDescription</key> 
<string><Your description goes here></string> 

<!-- Health Share --> 
<key>NSHealthShareUsageDescription</key> 
<string><Your description goes here></string> 

<!-- ᛒ Bluetooth Peripheral --> 
<key>NSBluetoothPeripheralUsageDescription</key> 
<string><Your description goes here></string> 

<!-- Media Library --> 
<key>NSAppleMusicUsageDescription</key> 
<string><Your description goes here></string> 

Spero che questo aiuti. :)

+0

Cosa succede se uso multiplo della fotocamera? come abbiamo il codice QR e anche la funzione di selfie. Basterà ricordare che "questa app utilizza la fotocamera per funzionalità multiple" – byJeevan

+0

Sì, è come chiedere l'autorizzazione per la posizione che è necessario definire una volta e che è possibile utilizzare più volte per più scopi, è necessario disporre di una descrizione generica per le autorizzazioni . –