Подтвердить что ты не робот

Сообщение об ошибке Picker on Exit (встречается при обнаружении расширений: Error Domain = Код PlugInKit = 13) С Swift 4 - Xcode 9

Похожий на

Ошибка обнаружения PhotoPicker: Ошибка Домена = PlugInKit Code = 13

а также для

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

НО я попробовал все эти предложения и все еще получаю ошибку в журнале отладки. Запуск Swift 4 XCode 9A235

То, что было предложено в разных местах, было...

  • некоторые люди сказали добавить @objc
  • некоторые люди сказали добавить внутренний
  • некоторые люди предложили добавить _ и убедиться, что используется Any, а не AnyObject
  • некоторые люди говорят, что используют didFinishPickingImageWithInfo (это не возвращает мне изображение)
  • некоторые люди сказали, что увольняет сборщика, другие говорят, что уволить себя, другие говорят, что уволить
  • некоторые сказали, что добавьте "Приватность..." к списку (сделано)
  • добавлен импорт фотографий
  • добавлен предварительный вызов для принудительного применения PHPhotoLibrary.requestAuthorization() {(status) → Void in...

Я не получил эти проблемы в Swift 3 - предыдущий xcode. Но в Swift 4 я пробовал все, что видел, предлагал, и все равно получаю следующую ошибку

[обнаружение] ошибки, обнаруженные при обнаружении расширений: Error Domain = PlugInKit Code = 13 "запрос отменен" UserInfo = {NSLocalizedDescription = запрос отменен}

Средство выбора работает нормально, и я действительно выбираю изображение из фотографий, но я получаю это сообщение об ошибке при выходе из средства выбора (отмена или выбор), каждый раз...

Любые предложения, как остановить сообщение об ошибке? Кроме списка вещей, предлагаемых по двум другим ссылкам (суммированы выше)

мой метод

@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)
}
4b9b3361

Ответ 1

  • добавьте "Конфиденциальность..." в plist
  • В меню Xcode откройте: Product > Scheme > Edit Scheme > На ваших переменных среды установите OS_ACTIVITY_MODE в значение set disable

см. в mc-system-group-container-and-mc-reading-from-public-effective-user-settings-err

Работайте отлично для меня

ИЗМЕНИТЬ

если он может помочь ниже моего кода (работа с 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)
    }
}

Ответ 2

У меня была одна и та же проблема, и я пытался найти любое решение, но ничего не помогло. Просто спросил себя, что может случиться с делегатом, чтобы он не срабатывал: освобождение делегата!

И это было в моем случае! При представлении UIImagePickerController мой экземпляр class ImagePickerController : NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate который не является контроллером представления представления, будет освобожден напрямую. Конечно, функции делегата больше не могут выполняться.

Просто поставьте точку останова в deinit (или dealloc в мире Objective-C) и посмотрите, освобожден ли ваш делегат.

Ответ 3

Пользователь спрашивает: "* Любые предложения, как остановить сообщение об ошибке? Кроме списка вещей, предлагаемых по двум другим ссылкам (суммированы выше)".

Я использовал два шага, чтобы устранить сообщение об ошибке. Престижность человеку выше Антуана Ришо https://stackoverflow.com/users/5767821/antoine-richeux.
Я думаю, что добавление конфиденциальности в pList может не понадобиться, по крайней мере, в моем случае

ШАГ 1. В строке меню выберите: Product> Scheme> Edit Scheme > выберите Run из левого списка Build, Run... Archive Выбрать аргументы из верхнего набора вариантов выбора справа - см. Прикрепленное изображение. Используйте кнопку + в разделе "Переменные среды", чтобы добавить новую запись. Имя: OS_ACTIVITY_MODE Значение: отключить

Это показывает, где добавить переменную среды

ШАГ 2. Очистить проект и восстановить

Ответ 4

Для Swift 4:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    guard let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage else {
        return
    }
    ...
}
  • Для параметра метода измените значение с [String: Any] на [UIImagePickerController.InfoKey: Any]
  • На выбранном изображении перейдите из info["UIImagePickerControllerOriginalImage"] в info[UIImagePickerController.InfoKey.originalImage]

Ответ 5

Это связано с тем, что ваше приложение использует библиотеку фотографий (в этом случае, используя UIImagePickerController), не запрашивая разрешения пользователя. В качестве примера, если я хочу показать сборщик изображений при нажатии кнопки добавления:

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

Кроме того, вам необходимо добавить это в свой слой:

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

которое является сообщением, отображаемым в диалоговом окне разрешения.

Ответ 6

Вы можете попробовать это?

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

Ответ 7

У меня тоже была эта проблема. Это очень раздражает, потому что появляется консольная ошибка, но приложение все еще загружает изображение. Я запросил статус авторизации, добавил свои ключи в .plst, но ничего не нашел, чтобы выполнить работу.

После того, как я зашел в Product → Scheme → Edit Scheme → Run, добавил ключ: значение " OS_ACTIVITY_MODE ": " отключить ", очистить и восстановить... ошибка исчезла.

Ответ 8

Убедитесь, что вы заявляете, что ваш класс реализует UINavigationControllerDelegate.

extension MyViewController: UINavigationControllerDelegate {}

По какой-то причине в Xcode 9.0 он предупредил меня объявить делегата как такового:

imagePicker.delegate = self as? UIImagePickerControllerDelegate & UINavigationControllerDelegate

Ответ 9

Была такая же проблема на Swift 4.2 и Xcode 10.0. Хотя средство выбора изображений работало правильно, Xcode показывал эту ошибку на консоли. Чтобы избавиться от этого:

  • В меню Xcode Product> Scheme> Edit Scheme
  • Выберите вкладку "Выполнить", затем "Аргументы"
  • В разделе "Переменные среды" добавьте переменную с именем OS_ACTIVITY_MOD E и значением отключить

Ответ 10

@objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

    guard let selectedImage = info[.originalImage] as? UIImage else {
        fatalError("Expected a dictionary containing an image, but was provided the following: \(info)")
    }
}

Ответ 11

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

Вам нужно получить UIImagePickerController.InfoKey.originalImage не UIImagePickerController.InfoKey.editedImage