type - wkwebview before ios 11.0(nscoding support was broken in previous versions)
Solicitar permiso para cámara y biblioteca en iOS 10-Info.plist (7)
Swift 4
Archivo: Info.plist
Cámara
<key>NSCameraUsageDescription</key>
<string>camera description.</string>
Fotos
<key>NSPhotoLibraryUsageDescription</key>
<string> photos description.</string>
Guardar las fotos
<key>NSPhotoLibraryAddUsageDescription</key>
<string> photos add description.</string>
Ubicación
<key> NSLocationWhenInUseUsageDescription</key>
<string> location description.</string>
Apple Music:
<key>NSAppleMusicUsageDescription</key>
<string>My description about why I need this capability</string>
Calendario
<key>NSCalendarsUsageDescription</key>
<string>My description about why I need this capability</string>
Siri
<key>NSSiriUsageDescription</key>
<string>My description about why I need this capability</string>
He implementado un WKWebView en una aplicación. hay una entrada de archivo en la página web que se muestra donde debe importar una imagen de las fotos. Cada vez que presiono esa entrada y selecciono "Tomar foto" o "Biblioteca de fotos", la aplicación se bloquea repentinamente, lo que creo es porque la aplicación no tiene el permiso para tomar una foto o importarla desde la biblioteca.
¿Cómo envío una solicitud de permiso cuando el usuario selecciona uno de los métodos mencionados (Tomar foto o Biblioteca de fotos)?
Yo uso Swift 3.0 con WKWebView.
Para solicitar permiso para la aplicación de fotos, debe agregar este código (Swift 3) :
PHPhotoLibrary.requestAuthorization({
(newStatus) in
if newStatus == PHAuthorizationStatus.authorized {
/* do stuff here */
}
})
También puede solicitar acceso mediante programación, lo cual prefiero porque en la mayoría de los casos necesita saber si tomó el acceso o no.
Actualización de Swift 4:
//Camera
AVCaptureDevice.requestAccess(for: AVMediaType.video) { response in
if response {
//access granted
} else {
}
}
//Photos
let photos = PHPhotoLibrary.authorizationStatus()
if photos == .notDetermined {
PHPhotoLibrary.requestAuthorization({status in
if status == .authorized{
...
} else {}
})
}
No comparte el código, así que no puedo estar seguro de si esto sería útil para usted, pero en términos generales lo uso como una mejor práctica.
Utilice la configuración de plist mencionada anteriormente y el descriptor de acceso apropiado (AVCaptureDevice o PHPhotoLibrary), pero también avíseles y envíelos a la configuración si realmente lo necesita, así:
Swift 4.0 y 4.1
func proceedWithCameraAccess(identifier: String){
// handler in .requestAccess is needed to process user''s answer to our request
AVCaptureDevice.requestAccess(for: .video) { success in
if success { // if request is granted (success is true)
DispatchQueue.main.async {
self.performSegue(withIdentifier: identifier, sender: nil)
}
} else { // if request is denied (success is false)
// Create Alert
let alert = UIAlertController(title: "Camera", message: "Camera access is absolutely necessary to use this app", preferredStyle: .alert)
// Add "OK" Button to alert, pressing it will bring you to the settings app
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!)
}))
// Show the alert with animation
self.present(alert, animated: true)
}
}
}
Debe agregar el siguiente permiso en Info.plist. Más referencia
Cámara:
Key : Privacy - Camera Usage Description
Value : $(PRODUCT_NAME) camera use
Foto:
Key : Privacy - Photo Library Usage Description
Value : $(PRODUCT_NAME) photo use
Archivo: Info.plist
Para la cámara :
<key>NSCameraUsageDescription</key>
<string>You can take photos to document your job.</string>
Para la Biblioteca de fotos , querrá que esta permita que el usuario de la aplicación explore la biblioteca de fotos.
<key>NSPhotoLibraryUsageDescription</key>
<string>You can select photos to attach to reports.</string>
Swift 4 La forma más fácil de agregar permisos sin tener que hacerlo programáticamente, es abrir su archivo info.plist y seleccionar el + junto a la lista de propiedades de información y desplazarse por la lista desplegable hasta las opciones de Privacidad y seleccionar Descripción de uso de la cámara de privacidad para Descripción de uso de la cámara de acceso o de la biblioteca de fotos de privacidad para acceder a la biblioteca de fotos Complete el valor de la cadena a la derecha después de haber hecho su selección para incluir el texto que desea que se muestre a su usuario cuando la alerta emergente solicite permisos.