Search code examples
iosswiftwebviewios-simulator

WebView is not loading for specific URL in Xcode 9 simulator


I am trying to load a URL using webView in swift 4. I tried https://www.google.co.in and it works fine. and the mobile site for the specific URL works fine with android. But when I tried this in the simulator, it is loading forever.

my code is below:

import UIKit

class WebViewController: UIViewController, UIWebViewDelegate {

    @IBOutlet weak var webView: UIWebView!

    let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge)

  override func viewDidLoad() {
        super.viewDidLoad()

        webView.delegate = self
        if let url = URL(string: "https://www.myurl.com") {
            let request = URLRequest(url: url)
            webView.loadRequest(request)
        }


    }


   public func webViewDidStartLoad(_ webView: UIWebView)
    {
        activityIndicator.center =  CGPoint(x: self.view.bounds.size.width/2, y: self.view.bounds.size.height/2)
        self.view.addSubview(activityIndicator)
        activityIndicator.color = UIColor.red
        self.activityIndicator.startAnimating()
    }
    public func webViewDidFinishLoad(_ webView: UIWebView)
    {
        self.activityIndicator.stopAnimating()
    }

}

I don't think that my code is wrong. but I was wondering if I can do anything to make it work on simulator.

Thanks


Solution

  • I just made a small project with your code and no problem in the simulator, https://www.google.co.in loaded just fine.

    I noticed you mention you are using Swift 4, I think you should consider using WebKit View (WKWebView) since UIWebView is deprecated. In Apple's documentation you can see how to implement it, it's pretty straight forward.

    If your certificate is not trusted you must add to Info.plist App Transport Security Settings, Allow Arbitrary Loads to YES. (This is not recommended).

    The code is really simple, give it a try:

    import UIKit
    import WebKit
    
    class WebViewController: UIViewController, WKUIDelegate, WKNavigationDelegate {
        @IBOutlet weak var webView: WKWebView!
    
        override func loadView() {
            let webConfiguration = WKWebViewConfiguration()
            webView = WKWebView(frame: .zero, configuration: webConfiguration)
            webView.uiDelegate = self
            webView.navigationDelegate = self
            view = webView
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
    
            let myURL = URL(string: "https://www.myurl.com")
            let myRequest = URLRequest(url: myURL!)
            webView.load(myRequest)
        }
    
    
        func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
            if let serverTrust = challenge.protectionSpace.serverTrust {
                completionHandler(.useCredential, URLCredential(trust: serverTrust))
            }
        }
    }