質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.37%

Swift: WKWebView で、HTMLのinput type="file"で選択した画像を反映

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,829

Y.fukayu

score 10

前提・実現したいこと

Swift: WKWebView で、HTMLのinput type="file"でフォトライブラリー起動後に、選択した画像を反映

発生している問題・エラーメッセージ

フォトライブラリー起動で画像を選択後に、以下エラーメッセージが発生しております。
info.plistには以下を設定しています
・Privacy - Photo Library Usage Description
・Privacy - Photo Library Additions Usage Description

エラーメッセージ
errors encountered while discovering extensions: Error Domain=PlugInKit Code=13 "query cancelled" UserInfo={NSLocalizedDescription=query cancelled}

該当のソースコード

import UIKit
import WebKit
import Photos

class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate {

    var webView: WKWebView!

    let imagePickerController = UIImagePickerController()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let statusBarHeight = UIApplication.shared.statusBarFrame.height
        let screenWidth: CGFloat = self.view.frame.size.width
        let screenHeight: CGFloat = self.view.frame.size.height

        let rect = CGRect(x: 0,
                          y: statusBarHeight,
                          width: screenWidth,
                          height: screenHeight - statusBarHeight)

        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: rect, configuration: webConfiguration)
        self.view.addSubview(webView)

        webView.navigationDelegate = self
        webView.uiDelegate = self
    }

    override func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) {
        if let _ = self.presentedViewController {
            super.dismiss(animated: flag, completion: completion)
        }
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        self.permissionPhoto()
        self.loadHtmlByLocal()
    }

    func permissionPhoto() {
        let photos = PHPhotoLibrary.authorizationStatus()
        if photos == .notDetermined {
            PHPhotoLibrary.requestAuthorization({status in
                if status == .authorized {
                    print("Alert of permission is displayed")
                } else {}
            })
        }
    }

    private func loadHtmlByLocal() {
        let path = Bundle.main.url(
            forResource: "permission_photo",
            withExtension: "html")!
        webView.loadFileURL(path, allowingReadAccessTo: path)
    }
}

extension ViewController: UINavigationControllerDelegate, UIImagePickerControllerDelegate {
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true, completion: nil)
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        picker.dismiss(animated: true, completion: nil)
        guard let _ = info[.originalImage] as? UIImage else {
            print("No image found")
            return
        }
    }
}

<html>
javascriptなどは省略...
<input type="file" accept="image/*" id="pngFile"/>

補足情報(FW/ツールのバージョンなど)

Xcode: 10.0
swift: 4.2
検証iOS: iO11、12

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • fuzzball

    2019/04/05 15:13

    で、質問はなんでしょうか?

    キャンセル

  • Y.fukayu

    2019/05/08 23:36

    返信いただきありがとうございます。また、返信できなく大変申し訳ございませんでした。

    記載しましたエラーメッセージが表示されており、エラーが出力されたままですとクラッシュ対象
    となるため、解決できればとの思いでした。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る