iMinion
iMinion

Reputation: 159

iOS 13 Swift 5 wkwebview - display image from documents directory into wkwebview real device

I have an app with downloaded images to be displayed in local html in WKWEBVIEW. Everything is working fine but it is not showing image on iPhone device

the html is

"\n

<img src="images/d35fb6a3-8a21-4196-9616-ad2c6db60669/fd21b894-38c0-42c5-aa69-a938abe40e4b2467857252325869136.png">

\n

<img src="images/d35fb6a3-8a21-4196-9616-ad2c6db60669/c927a2a6-4ef0-481d-b27d-525cec7ed3814195490571216387044.png">

\n"

matching to this HTML it is to be displayed in a wkwebview which gets displayed perfectly on simulator with the following code

let baseURL = Functions.FileIO.contentFolderURL()
static func contentFolderURL() -> URL? {
            guard let folderURL = DataManager.shared.applicationDocumentsURL?.appendingPathComponent("content") else {
                return nil
            }
            
            do {
                let properties = try (folderURL as NSURL).resourceValues(forKeys: [URLResourceKey.isDirectoryKey])
                if let isDirectory = properties[URLResourceKey.isDirectoryKey] as? Bool , isDirectory == false {
                    return nil
                }
            } catch let error as NSError where error.code != NSFileReadNoSuchFileError {
                return nil
            } catch {
                // No folder, so we create it.
                do {
                    try FileManager.default.createDirectory(atPath: folderURL.path, withIntermediateDirectories: true, attributes: nil)
                } catch {
                    return nil
                }
            }
            
            return folderURL
        }

and then finally displaying

baseURL comes to be

Optional ▿ some : file:///Users/paza/Library/Developer/CoreSimulator/Devices/D2204E03-8A8F-4EF4-8924-683CF519DD19/data/Containers/Data/Application/E4ED56CF-B247-4471-9F9B-23384FD6D6B3/Documents/content/ - _url : file:///Users/paza/Library/Developer/CoreSimulator/Devices/D2204E03-8A8F-4EF4-8924-683CF519DD19/data/Containers/Data/Application/E4ED56CF-B247-4471-9F9B-23384FD6D6B3/Documents/content/

self.webView?.loadHTMLString(HTML, baseURL: baseURL)

working in simulator below does not work in Device

as https://stackoverflow.com/a/52838445/3455426[ ]2

suggested I tried

self.webView?.loadFileURL(baseURL, allowingReadAccessTo: baseURL)

but the result this comes blank on real device

any leads will be appreciated , Thanks in advance

Upvotes: 2

Views: 1918

Answers (1)

iMinion
iMinion

Reputation: 159

In WKWebview if we have to show HTML with Cached resources ,firstly we have to save the html string in HTML file in documents directory.

make sure ur cached resources path and the path of HTML file are same also , the cached resources are identified by the lastPathComponent only .

So the fault was the HTML which should have been

let HTML = "<html><body>\n<p><img src=\"fd21b894-38c0-42c5-aa69-a938abe40e4b2467857252325869136.png\"></p>\n<p><img src=\"c927a2a6-4ef0-481d-b27d-525cec7ed3814195490571216387044.png\"><br></p>\n</body></html>"

Specifically the last path component should be there .

Also I followed https://en.it1352.com/article/9f185d4d185243cc92128148443ca660.html here the explanation is almost perfect , I just saved in documents directory for swift.

Upvotes: 2

Related Questions