webentwicklung-frage-antwort-db.com.de

Picker-Fehlermeldung beim Beenden (beim Erkennen von Erweiterungen aufgetreten: Fehlerdomäne = PlugInKit-Code = 13) Mit Swift 4 - Xcode 9

Ähnlich zu 

PhotoPicker-Erkennungsfehler: Fehler Domain = PlugInKit-Code = 13

und auch zu 

https://forums.developer.Apple.com/thread/82105

ABER ich habe alle diese Vorschläge ausprobiert und bekomme immer noch einen Fehler im Debug-Protokoll. Läuft Swift 4 XCode 9A235

Was an den verschiedenen Orten vorgeschlagen wurde, war ...

  • einige Leute sagten hinzufügen @objc
  • einige Leute sagten, intern hinzufügen
  • einige Leute schlugen vor, _ hinzuzufügen und sicherzustellen, dass Any und nicht AnyObject verwendet werden
  • einige Leute sagten, didFinishPickingImageWithInfo zu verwenden (dies gibt das Bild für mich zurück.)
  • einige Leute sagten, dass sie den Picker abgewiesen hätten, andere sagten, sie selbst zu entlassen, andere ... sagten, beide abzulehnen
  • einige sagten, fügen Sie die "Datenschutz ..." zu plist hinzu (erledigt)
  • importfotos hinzugefügt
  • voraufruf zum Erzwingen von PHPhotoLibrary.requestAuthorization () { (Status) -> Void in hinzugefügt ...

Ich habe DID diese Probleme NICHT in Swift 3 erhalten - früherer xcode ... __ Aber mit Swift 4 habe ich versucht, alles zu tun, was ich sah, und ich bekomme immer noch die folgende Fehlermeldung

[discovery] -Fehler beim Erkennen von Erweiterungen: Fehler Domain = PlugInKit Code = 13 "Abfrage abgebrochen" UserInfo = {NSLocalizedDescription = Abfrage abgebrochen}

Der Picker funktioniert einwandfrei und ich kann am Ende ein Bild aus Fotos auswählen, aber ich bekomme diese Fehlermeldung beim Beenden des Pickers (Abbrechen oder Auswählen), jedes Mal ... 

Vorschläge, wie Sie die Fehlermeldung beenden können? Andere als die Liste der Dinge, die bei den beiden anderen Links angeboten werden (oben zusammengefasst)

meine Methode

@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)
}
19
john
  1. fügen Sie die "Privatsphäre ..." der Liste hinzu
  2. Öffnen Sie das Xcode-Menü: Produkt> Schema> Schema bearbeiten> Setzen Sie für Ihre Umgebungsvariablen OS_ACTIVITY_MODE im Wertset disable

siehe in mc-system-group-container-und-mc-reading-from-public-effektive-user-settings-err

Arbeit ist gut für mich

BEARBEITEN

wenn es unter meinem Code helfen kann (Arbeiten mit 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)
    }
}
15
Antoine Richeux

Ich hatte das gleiche Problem und versuchte jede Lösung, die ich finden konnte, aber nichts half. Ich habe mich nur gefragt, was mit dem Delegierten passieren könnte, wenn er nicht ausgelöst wird: Freigabe des Delegierten!

Und das war es in meinem Fall! Wenn der UIImagePickerController präsentiert wird, wird meine Instanz von class ImagePickerController : NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate, Die nicht der präsentierende View-Controller ist, direkt freigegeben. Natürlich können die Delegatfunktionen nicht mehr ausgeführt werden.

Setzen Sie einfach einen Haltepunkt in deinit (oder dealloc in Objective-C-Welt) und prüfen Sie, ob Ihr Delegat freigegeben wird.

2
Kai

Der Benutzer fragt: "* Vorschläge zur Behebung der Fehlermeldung? Andere als die Liste der Dinge, die unter den beiden anderen Links angeboten werden (oben zusammengefasst)".

Ich habe die Fehlermeldung in zwei Schritten beseitigt. Kudos für die Person über Antoine Richeux https://stackoverflow.com/users/5767821/antoine-richeux .
.__ Ich denke, dass der Zusatz zum Datenschutz in pList zumindest in meinem Fall nicht erforderlich ist

SCHRITT 1.Wählen Sie in der Menüleiste Folgendes aus: Product> Scheme> Edit Scheme> Wählen Sie Run in der linken Liste von Build, Run ... ArchiveSelect Arguments Von der oberen Auswahlgruppe auf der rechten Seite - siehe Abbildung . Fügen Sie mit der Schaltfläche + unter Umgebungsvariablen einen neuen Eintrag hinzu Name: OS_ACTIVITY_MODE Wert: disable

Dies zeigt, wo die Umgebungsvariable hinzugefügt werden soll

STEP 2. Reinigen Sie das Projekt und erstellen Sie es neu

2
user6216481

Kannst du es ausprobieren?

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
        }
    }
}
1
elia

Dies ist darauf zurückzuführen, dass Ihre App eine Fotobibliothek verwendet (in diesem Fall UIImagePickerController), ohne dass Sie um Erlaubnis des Benutzers gefragt werden. Wenn ich beispielsweise die Bildauswahl anzeigen möchte, wenn auf die Schaltfläche "Hinzufügen" geklickt wurde: 

@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.")
    }
}

Darüber hinaus müssen Sie dies auch in Ihre Liste aufnehmen:

<key>NSPhotoLibraryUsageDescription</key>
<string>So that you can add images for your cloth. </string>

dies ist die Nachricht, die im Berechtigungsdialogfeld angezeigt wird. 

1
Yuchen Zhong

Ich hatte auch dieses Problem. Das ist sehr ärgerlich, da der Konsolenfehler auftritt, aber die App das Bild immer noch lädt. Ich forderte den Autorisierungsstatus an, fügte meine Schlüssel zur .plst hinzu, fand aber nichts davon, um die Aufgabe zu erledigen. 

Nachdem ich zu Product -> Scheme -> Edit Scheme -> Run gegangen bin, habe ich dann den Schlüssel hinzugefügt: " OS_ACTIVITY_MODE " value: " disable ", bereinigt und neu aufgebaut ... der Fehler ging weg . 

1
Richard Poutier

Für Swift 4:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    guard let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage else {
        return
    }
    ...
}
  • Ändern Sie im Methodenparameter von [String: Any] in [UIImagePickerController.InfoKey : Any].
  • Ändern Sie im ausgewählten Bild von info["UIImagePickerControllerOriginalImage"] in info[UIImagePickerController.InfoKey.originalImage].
1
Andre Racco
var messageImage = UIImage()

    @objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        self.dismiss(animated: true, completion: { () -> Void in

        })
        if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage
        {
            messageImage = image

        }
        print("Image Captured")
    }

Sie müssen UIImagePickerController.InfoKey.originalImage Und nicht UIImagePickerController.InfoKey.editedImage Abrufen.

0
Deviyani Swami

Hatte das gleiche Problem auf Swift 4.2 und Xcode 10.0 . Obwohl der Bildwähler korrekt funktioniert hat Xcode diesen Fehler auf der Konsole angezeigt. Um das loszuwerden:

  • Im Xcode-Menü Produkt> Schema> Schema bearbeiten
  • Wählen Sie die Registerkarte "Ausführen" und dann "Argumente".
  • Fügen Sie im Abschnitt "Umgebungsvariablen" eine Variable mit Name OS_ACTIVITY_MOD E und Wert disable hinzu.
0
Marcos Reboucas

Stellen Sie sicher, dass Sie erklären, dass Ihre Klasse UINavigationControllerDelegate implementiert.

extension MyViewController: UINavigationControllerDelegate {}

Aus irgendeinem Grund in Xcode 9.0 wurde ich gewarnt, den Delegierten als solchen zu deklarieren:

imagePicker.delegate = self as? UIImagePickerControllerDelegate & UINavigationControllerDelegate
0
user339946