Hereby i'm sharing the whole demo code that i'm trying to achive the result :
CocoaPod Used :
platform :ios, '11.0'
inhibit_all_warnings!
use_frameworks!
target 'LocalWKWebView' do
pod 'Alamofire'
source 'https://github.com/CocoaPods/Specs.git'
pod 'Zip', '~> 1.1'
pod 'Swifter', '~> 1.4.7'
end
Source Code :
import UIKit
import WebKit
import Alamofire
import Zip
import Swifter
import Dispatch
//class ViewController: UIViewController, WKNavigationDelegate {
class ViewController: UIViewController,UIWebViewDelegate {
@IBOutlet weak var webView : UIWebView!
/*
Used to download and unzip the zip file with the custom CSS, JS
*/
func downloadFile(completionHandler: @escaping (URL?, Error?) -> ()) {
let destination: DownloadRequest.DownloadFileDestination = { _, _ in
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let fileURL = documentsURL.appendingPathComponent("314431eb61594e1f9ad759e579760ef8.zip")
return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
}
let downloadURL = "https://abc.s3.amazonaws.com/314431eb61594e1f9ad759e579760ef8.zip"
let downloadParameters : Parameters = ["":""]
Alamofire.download(downloadURL, method: .get, parameters: downloadParameters, encoding: JSONEncoding.default, to: destination)
.downloadProgress { progress in
print("Download Progress: \(progress.fractionCompleted)")
}
.response(completionHandler: { (DefaultDownloadResponse) in
if DefaultDownloadResponse.response?.statusCode == 200 {
let fm = FileManager.default
let documentsURL = try! fm.url(for:.documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let fileURL = documentsURL.appendingPathComponent("314431eb61594e1f9ad759e579760ef8.zip")
if(fm.fileExists(atPath: fileURL.path)) {
print("Download complete at: \(fileURL.absoluteString)")
do {
try Zip.unzipFile(fileURL, destination: documentsURL, overwrite: true, password: "", progress: { (progress) -> () in
print("Unzip Progress: \(progress)")
})
completionHandler(fileURL, nil)
}
catch {
print("Couldn't unzip")
completionHandler(nil, error)
}
}
}
})
}
override func viewDidLoad() {
super.viewDidLoad()
let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
let url = NSURL(fileURLWithPath: path)
if let pathComponent = url.appendingPathComponent("314431eb61594e1f9ad759e579760ef8") {
let filePath = pathComponent.path
let fileManager = FileManager.default
if fileManager.fileExists(atPath: filePath) {
print("FILE AVAILABLE")
let folderURL = url
let htmlPath = folderURL.appendingPathComponent("ator.html")?.path
let folderPath = folderURL.path
print(folderPath)
let baseUrl = URL(fileURLWithPath: folderPath!, isDirectory: true)
print(baseUrl)
let htmlURL = URL(fileURLWithPath: htmlPath!, isDirectory: false)
// webView.loadFileURL(htmlURL, allowingReadAccessTo: folderURL!)
//Thitrd party swiftwer used to create localhost server
let httpServer = demoServer(folderPath ?? "")
// httpServer["/:prince"] = shareFilesFromDirectory(Bundle.main.path(forResource: "Web", ofType: nil)!)
httpServer["/:path"] = shareFilesFromDirectory(folderPath ?? "")
do {
try httpServer.start(8080)
let myRequest = NSURLRequest(url: NSURL(string: "http://localhost:8080/story_html5.html")! as URL)
print("myRequest>>",myRequest)
self.webView.loadRequest(myRequest as URLRequest)
}catch{
print("erororor")
}
} else {
print("FILE NOT AVAILABLE")
self.downlaodfileandunzip()
}
} else {
print("FILE PATH NOT AVAILABLE")
self.downlaodfileandunzip()
}
}
func downlaodfileandunzip(){
let loadCustomFiles = true
if(loadCustomFiles) {
// download & load custom files from remote URL
downloadFile(completionHandler: { url, error in
if(url != nil) {
let folderURL = url?.deletingPathExtension()
let htmlPath = folderURL?.appendingPathComponent("ator.html").path
let folderPath = folderURL?.path
print(folderPath)
let baseUrl = URL(fileURLWithPath: folderPath!, isDirectory: true)
print(baseUrl)
let htmlURL = URL(fileURLWithPath: htmlPath!, isDirectory: false)
// webView.loadFileURL(htmlURL, allowingReadAccessTo: folderURL!)
let httpServer = demoServer(folderPath ?? "")
// httpServer["/:prince"] = shareFilesFromDirectory(Bundle.main.path(forResource: "Web", ofType: nil)!)
httpServer["/:path"] = shareFilesFromDirectory(folderPath ?? "")
do {
try httpServer.start(8080)
let myRequest = NSURLRequest(url: NSURL(string: "http://localhost:8080/ator.html.html")! as URL)
print("myRequest>>",myRequest)
self.webView.loadRequest(myRequest as URLRequest)
}catch{
print("erororor")
}
} else {
print(error)
}
})
} else {
// load normal files from /web
let htmlPath = Bundle.main.path(forResource: "index", ofType: "html")
let folderPath = Bundle.main.bundlePath
let baseUrl = URL(fileURLWithPath: folderPath, isDirectory: true)
do {
let htmlString = try NSString(contentsOfFile: htmlPath!, encoding: String.Encoding.utf8.rawValue)
webView.loadHTMLString(htmlString as String, baseURL: baseUrl)
// / webView.navigationDelegate = self
self.view = webView
} catch {
// error handling
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
issue : I'm trying to load the file using localhost as well as using webView.loadFileURL(htmlURL, allowingReadAccessTo: folderURL!) but it wont work.
Reference link Stack Overflow : https://stackoverflow.com/questions/58946593/load-local-file-in-webview-ios-using-http-protocol-create-webview-server-in-an
DropBox : https://www.dropbox.com/sh/70fgj7bwcmwz0k9/AACR5sLB-zrE7rkEmta_GoVqa?dl=0
Can anyone help me with the localhost server setup?