2015-09-29 5 views
7

Ho la seguente funzione che visualizza un foglio di azione con due diverse opzioni. Attualmente, l'unica opzione implementata è il titolo "Foto". Il foglio di azione viene presentato correttamente e viene richiamata l'azione appropriata. Il mio problema è che sul simulatore e su un dispositivo reale, non riesco a visualizzare il prompt che richiede l'accesso alla libreria di foto.PHPhotoLibrary.requestAuthorization() non attiva la richiesta di autorizzazione su iOS 9

PHPhotoLibrary.authorizationStatus() rendimenti .Denied e presenta il modal informare l'applicazione corrente non ha accesso alle foto: enter image description here

@IBAction func attachPhotoButtonTapped(sender: AnyObject) { 
    let actionSheetController = UIAlertController(title: "Images", message: "Select image source...", preferredStyle: .ActionSheet) 
    let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { 
     (action) in 
     // ... 
    } 
    actionSheetController.addAction(cancelAction) 

    let takePictureAction = UIAlertAction(title: "Camera", style: .Default) { 
     (action) in 
     // ... 
    } 
    actionSheetController.addAction(takePictureAction) 

    let choosePictureAction = UIAlertAction(title: "Photos", style: .Default) { 
     (action) in 
     PHPhotoLibrary.requestAuthorization({(status:PHAuthorizationStatus) in 
      switch status{ 
       case .Authorized: 
        dispatch_async(dispatch_get_main_queue(), { 
         print("Authorized") 
        }) 
        break 
       case .Denied: 
        dispatch_async(dispatch_get_main_queue(), { 
         print("Denied") 
        }) 
        break 
       default: 
        dispatch_async(dispatch_get_main_queue(), { 
         print("Default") 
        }) 
        break 
      } 
     }) 
    } 
    actionSheetController.addAction(choosePictureAction) 

    presentViewController(actionSheetController, animated: true, completion: nil) 
} 

ho già "ripulito" il progetto e ripristinare le impostazioni di simulazione, ma ancora non ottenere il prompt per essere visualizzato.

+0

Eventuali duplicati di [App non ha accesso alle vostre foto o video iOS 9] (http://stackoverflow.com/questions/32768012/app-does-not-have-access-to- your-photos-or-videos-ios-9) – bummi

risposta

7

Ciò si verifica perché la chiave CFBundleDisplayName nel file Info.plist ha un valore vuoto e non è possibile creare il messaggio nell'avviso che richiede l'autorizzazione per accedere alla Raccolta foto. Aggiungendo le seguenti righe, pulire il progetto e la costruzione di nuovo risolve il problema:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>CFBundleDisplayName</key> 
    <string>$(PRODUCT_NAME)</string> 
    <!-- More keys and values --> 
</dict> 
</plist> 

Grazie a Vladimir Gorbenko per avermi aiutato a risolvere questo problema.

+0

lifesaver - non l'avrei mai capito da solo – Tys

+0

Non funziona su iOS 10.1 simulator. Ho pubblicato un problema qui. http://stackoverflow.com/questions/40386819/ios-request-permission-does-not-show/40386997#40386997 –

1

Vai a Info.plist e aggiungi Nome visualizzazione pacchetto. Quindi aggiungi il codice.

enter image description here