web-dev-qa-db-ja.com

終了時のピッカーエラーメッセージ(拡張機能の検出中に発生:Error Domain = PlugInKit Code = 13)With Swift 4-Xcode 9

に似ている

PhotoPicker検出エラー:エラードメイン= PlugInKitコード= 1

そしてまた

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

しかし、これらの提案をすべて試しても、デバッグログにエラーが記録されます。実行中Swift 4 XCode 9A235

さまざまな場所で提案されたのは...

  • 一部の人々は@objcを追加すると言った
  • 一部の人々は内部を追加すると述べました
  • 一部の人々は、_を追加し、AnyObjectではなくAnyObjectを使用することを確認することを提案しました
  • 一部の人々はdidFinishPickingImageWithInfoを使用すると言いました(これは私には画像を返しません)
  • 一部の人々はピッカーをdismssと言い、他の人は自己を却下し、他の人は両方とも却下
  • 「プライバシー...」をplistに追加する(完了)
  • 追加されたインポート写真
  • pHPhotoLibrary.requestAuthorization(){(status)-> Void]を強制する事前呼び出しを追加しました...

DID Swift 3-以前のxcodeでこの問題が発生しません。しかし、Swift 4では、提案されたすべてのことを試してみましたが、まだ次のエラーが表示されます

[ディスカバリ]拡張機能の検出中にエラーが発生しました:Error Domain = PlugInKit Code = 13 "query cancelled" UserInfo = {NSLocalizedDescription = query cancelled}

ピッカーは正常に動作し、写真から画像を選択することになりますが、ピッカーを終了するたびにこのエラーメッセージが表示されます(キャンセルまたは選択)。

エラーメッセージを止める方法はありますか?他の2つのリンクで提供されているもののリスト以外(上記に要約)

私の方法

@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)
}
21
john
  1. 「Privacy ...」をplistに追加します
  2. Xcodeメニューから開きます:製品>スキーム>スキームの編集>環境変数で、値セットdisableにOS_ACTIVITY_MODEを設定します

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)
    }
}
15
Antoine Richeux

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]
3
Andre Racco

私は同じ問題を抱えていて、見つけることができるすべての解決策を試しましたが、何も助けませんでした。デリゲートがトリガーされない場合、デリゲートに何が起こるかを自問してみました:デリゲートの割り当て解除!

それが私の場合です! UIImagePickerControllerを提示するとき、提示するView Controllerではないclass ImagePickerController : NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegateの私のインスタンスは直接割り当て解除されます。もちろん、デリゲート関数はもう実行できません。

deinit(またはObjective-Cの世界ではdealloc)にブレークポイントを置くだけで、デリゲートが割り当て解除されているかどうかを確認できます。

2
Kai

ユーザーは次のように尋ねます。「*エラーメッセージを停止する方法はありますか?他の2つのリンクで提供されているもののリスト(上記に要約)以外」。

エラーメッセージを排除するために2つの手順を使用しました。アントワーヌ・リシューの上にいる人への称賛 https://stackoverflow.com/users/5767821/antoine-richeux
少なくとも私の場合、プライバシーをpListに追加する必要はないと思う

STEP 1。メニューバーから:製品>スキーム>スキームの編集>ビルド、実行...の左側のリストから実行を選択します。右側の上部の選択セットから選択引数をアーカイブします。添付の​​図を参照してください。環境変数の下の+ボタンを使用して、新しいエントリを追加します名前:OS_ACTIVITY_MODE値:無効

これは環境変数を追加する場所を示します

STEP 2。プロジェクトをクリーンアップして再構築

2
user6216481

試していただけますか?

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

アプリがユーザーの許可を求めずに写真ライブラリを使用しているためです(この場合、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.")
    }
}

さらに、これもplistに追加する必要があります。

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

これは、許可ダイアログに表示されるメッセージです。

1
Yuchen Zhong

私もこの問題を抱えていました。コンソールエラーが表示されますが、アプリはまだ画像をロードしているため、非常に迷惑です。認証ステータスをリクエストし、キーを.plstに追加しましたが、ジョブを実行するためのこれらのどれも見つかりませんでした。

Product-> Scheme-> Edit Scheme-> Runに行ったら、キーを追加: "OS_ACTIVITY_MODE" value: "disable"、clean再構築しました...エラーはなくなりました。

1
Richard Poutier
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 not UIImagePickerController.InfoKey.editedImage

0
Deviyani Swami

Swift 4.2Xcode 10.でこれと同じ問題がありました。画像ピッカーは正常に動作していましたが、Xcodeはコンソールにこのエラーを表示しました。これを取り除くには:

  • Xcodeメニューの[製品]> [スキーム]> [スキームの編集]
  • 「実行」タブを選択してから、「引数」を選択します
  • 「環境変数」セクションで、名前OS_ACTIVITY_MOD Eおよび値disableの変数を追加します
0
Marcos Reboucas

クラスがUINavigationControllerDelegateを実装することを必ず宣言してください。

extension MyViewController: UINavigationControllerDelegate {}

Xcode 9.0の何らかの理由で、デリゲートをそのように宣言するよう警告されました。

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