uiimagepickercontroller - example - Mensaje de error del selector en Salir(encontrado al descubrir extensiones: Error Domain=PlugInKit Code=13) con Swift 4-Xcode 9
uiimagepickercontroller swift 4 example (9)
- añadir la ''Privacidad ...'' a plist
- Desde el menú de Xcode abierto: Producto> Esquema> Editar esquema> En sus variables de entorno, configure OS_ACTIVITY_MODE en el conjunto de valores deshabilitado
ver en mc-system-group-container-and-mc-reading-from-public-effective-user-settings-err
El trabajo esta bien para mi
EDITAR
Si puede ayudar debajo de mi código (trabajando con xcode 9)
if libraryAuthorization == .authorized {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary
imagePicker.allowsEditing = false
imagePicker.view.tag = button.tag
self.present(imagePicker, animated: true, completion: nil)
}
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let pickerImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
photoContainer.addImageToButton(pickerImage, buttonTag: picker.view.tag)
dismiss(animated: true)
}
}
Similar a
Error en el descubrimiento de PhotoPicker: dominio de error = código de PlugInKit = 13
y también a
https://forums.developer.apple.com/thread/82105
PERO he intentado todas estas sugerencias y aún obtengo un error en el registro de depuración. Ejecutando Swift 4 XCode 9A235
Lo que se sugirió en los distintos lugares fue ...
- algunas personas dijeron agregar @objc
- algunas personas dijeron agregar interno
- algunas personas sugirieron agregar _ y asegurarse de usar Any y no AnyObject
- algunas personas dijeron que usaron didFinishPickingImageWithInfo (esto no devuelve ninguna imagen para mí)
- algunas personas dijeron que desarmaban al recolector, otras decían que se despidieran a sí mismas, otras decían que desecharan ambas
- algunos dijeron agregar la ''Privacidad ...'' a plist (listo)
- Fotos de importación añadidas
- se agregó una llamada previa a la fuerza PHPhotoLibrary.requestAuthorization () {(status) -> Void in ...
NO obtuve estos problemas en Swift 3 - xcode anterior. Pero con Swift 4, intenté todo lo que vi sugerido y aún obtengo el siguiente error
[descubrimiento] errores encontrados al descubrir extensiones: Error Dominio = Código de PlugInKit = 13 "consulta cancelada" UserInfo = {NSLocalizedDescription = consulta cancelada}
El selector funciona bien y termino seleccionando una imagen de las fotos, pero aparece este mensaje de error al salir del selector (cancelar o seleccionar), cada vez que ...
¿Alguna sugerencia de cómo detener el mensaje de error? Aparte de la lista de cosas ofrecidas en los otros dos enlaces (resumido arriba)
mi metodo
@objc internal func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
imageSelected = nil
if let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage {
imageSelected = editedImage
} else if let originalImage = info["UIImagePickerControllerOriginalImage"] as? UIImage {
imageSelected = originalImage
}
if imageSelected != nil {
handleSelectedImage() // override in subclass to do something with the returned image
}
picker.dismiss(animated: true, completion: nil) // mess of calling both dismiss to see if it helps - it does not
dismiss(animated: true, completion: nil)
}
¿Puedes probarlo?
extension YourProfileViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
dismiss(animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
log.debug("Called imagePickerController function ")
let image = info[UIImagePickerControllerOriginalImage] as? UIImage
self.dismiss(animated: true) {
self.yourProfileImageView.image = image
}
}
}
Asegúrese de declarar que su clase implementa UINavigationControllerDelegate
.
extension MyViewController: UINavigationControllerDelegate {}
Por alguna razón, en Xcode 9.0 me advirtió que declarara al delegado como tal:
imagePicker.delegate = self as? UIImagePickerControllerDelegate & UINavigationControllerDelegate
El usuario pregunta: "¿Alguna sugerencia sobre cómo detener el mensaje de error? Aparte de la lista de cosas que se ofrece en los otros dos enlaces (que se resumen arriba)".
Utilicé dos pasos para eliminar el mensaje de error. Felicitaciones a la persona que se encuentra sobre Antoine Richeux .
Creo que la adición de Privacidad a pList puede no ser necesaria, al menos en mi caso
PASO 1. En la barra de menús, seleccione: Producto> Esquema> Editar esquema > seleccione Ejecutar en la lista del lado izquierdo de Construir, Ejecutar ... Archivar Seleccionar argumentos del conjunto superior de selecciones en el lado derecho - vea la imagen adjunta. Use el botón + en Variables de entorno para agregar una nueva entrada Nombre: OS_ACTIVITY_MODE Valor: deshabilitar
Esto muestra dónde agregar la variable de entorno
PASO 2. Limpia el proyecto y reconstruye.
Para Swift 4:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
guard let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage else {
return
}
...
}
- En el parámetro del método, cambie de
[String: Any]
a[UIImagePickerController.InfoKey : Any]
- En la imagen seleccionada, cambie de
info["UIImagePickerControllerOriginalImage"]
ainfo[UIImagePickerController.InfoKey.originalImage]
Se debe a que su aplicación utiliza una biblioteca de fotos (en este caso, utilizando UIImagePickerController
) sin pedir permiso al usuario. Como ejemplo, si quiero mostrar el selector de imágenes cuando se tocó el botón Agregar:
@IBAction func addButtonTapped(_ sender: UIBarButtonItem) {
checkPermission {
let picker = UIImagePickerController()
picker.sourceType = .photoLibrary
picker.mediaTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary)!
picker.delegate = self
picker.allowsEditing = false
self.present(picker, animated: true, completion: nil)
}
}
func checkPermission(hanler: @escaping () -> Void) {
let photoAuthorizationStatus = PHPhotoLibrary.authorizationStatus()
switch photoAuthorizationStatus {
case .authorized:
// Access is already granted by user
hanler()
case .notDetermined:
PHPhotoLibrary.requestAuthorization { (newStatus) in
if newStatus == PHAuthorizationStatus.authorized {
// Access is granted by user
hanler()
}
}
default:
print("Error: no access to photo album.")
}
}
Además, necesita agregar esto a su lista también:
<key>NSPhotoLibraryUsageDescription</key>
<string>So that you can add images for your cloth. </string>
que es el mensaje que se muestra en el diálogo de permiso.
También tuve este problema. Es muy molesto porque aparece el error de la consola pero la aplicación todavía está cargando la imagen. Solicité el estado de autorización, agregué mis claves a .plst, pero no encontré nada de esto para hacer el trabajo.
Una vez que fui a Producto -> Esquema -> Editar esquema -> Ejecutar, luego agregé la clave: " OS_ACTIVITY_MODE " valor: " deshabilitar ", limpiar y reconstruir ... el error desapareció.
Tenía este mismo problema en Swift 4.2 y Xcode 10.0 . Aunque el selector de imágenes funcionaba correctamente, Xcode mostraba este error en la consola. Para deshacerse de esto:
- En el menú de Xcode Producto> Esquema> Editar esquema
- Seleccione la pestaña ''Ejecutar'', luego ''Argumentos''
- En la sección ''Variables de entorno'', agregue una variable con el nombre OS_ACTIVITY_MOD E y deshabilite el valor
Tuve el mismo problema y probé todas las soluciones que pude encontrar, pero nada ayudó. Simplemente me pregunté qué podría pasarle al delegado si no se lo desencadena: ¡la desasignación del delegado!
Y eso fue todo en mi caso! Al presentar el UIImagePickerController mi instancia de la class ImagePickerController : NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate
que no es el controlador de vista de presentación, se asignará directamente. Por supuesto que las funciones de delegado ya no se pueden ejecutar.
Simplemente coloque un punto de interrupción en deinit
(o dealloc
en Objective-C world) y vea si su delegado está siendo desasignado.