SFSafariViewController crash: The specified URL has an unsupported scheme - Printable Version +- 0Day Forums (https://zeroday.vip) +-- Forum: Coding (https://zeroday.vip/Forum-Coding) +--- Forum: Swift (https://zeroday.vip/Forum-Swift) +--- Thread: SFSafariViewController crash: The specified URL has an unsupported scheme (/Thread-SFSafariViewController-crash-The-specified-URL-has-an-unsupported-scheme) |
SFSafariViewController crash: The specified URL has an unsupported scheme - publicly839765 - 07-19-2023 My code: if let url = NSURL(string: "www.google.com") { let safariViewController = SFSafariViewController(URL: url) safariViewController.view.tintColor = UIColor.primaryOrangeColor() presentViewController(safariViewController, animated: true, completion: nil) } This crashes on initialization only with exception: > The specified URL has an unsupported scheme. Only HTTP and HTTPS URLs are supported When I use `url = NSURL(string: "http://www.google.com") `, everything is fine. I am actually loading URL's from API and hence, I can't be sure that they will be prefixed with `http(s)://`. How to tackle this problem? Should I check and prefix `http://` always, or there's a workaround? RE: SFSafariViewController crash: The specified URL has an unsupported scheme - laundryman4353 - 07-19-2023 you can add to NSString* webStringURL = [url stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; NSURL *URL = [NSURL URLWithString: webStringURL]; RE: SFSafariViewController crash: The specified URL has an unsupported scheme - incavation323377 - 07-19-2023 Use WKWebView's method (starting iOS 11), class func handlesURLScheme(_ urlScheme: String) -> Bool RE: SFSafariViewController crash: The specified URL has an unsupported scheme - error684745 - 07-19-2023 Try checking scheme of `URL` before making an instance of `SFSafariViewController`. **Swift 3**: func openURL(_ urlString: String) { guard let url = URL(string: urlString) else { // not a valid URL return } if ["http", "https"].contains(url.scheme?.lowercased() ?? "") { // Can open with SFSafariViewController let safariViewController = SFSafariViewController(url: url) self.present(safariViewController, animated: true, completion: nil) } else { // Scheme is not supported or no scheme is given, use openURL UIApplication.shared.open(url, options: [:], completionHandler: nil) } } **Swift 2**: func openURL(urlString: String) { guard let url = NSURL(string: urlString) else { // not a valid URL return } if ["http", "https"].contains(url.scheme.lowercaseString) { // Can open with SFSafariViewController let safariViewController = SFSafariViewController(URL: url) presentViewController(safariViewController, animated: true, completion: nil) } else { // Scheme is not supported or no scheme is given, use openURL UIApplication.sharedApplication().openURL(url) } } RE: SFSafariViewController crash: The specified URL has an unsupported scheme - syntagmata377762 - 07-19-2023 I did a combination of Yuvrajsinh's & hoseokchoi's answers. func openLinkInSafari(withURLString link: String) { guard var url = NSURL(string: link) else { print("INVALID URL") return } /// Test for valid scheme & append "http" if needed if !(["http", "https"].contains(url.scheme.lowercaseString)) { let appendedLink = "http://".stringByAppendingString(link) url = NSURL(string: appendedLink)! } let safariViewController = SFSafariViewController(URL: url) presentViewController(safariViewController, animated: true, completion: nil) } RE: SFSafariViewController crash: The specified URL has an unsupported scheme - elkae - 07-19-2023 You can check for availability of **http** in your `url` string before creating `NSUrl` object. Put following code before your code and it will solve your problem (you can check for `https` also in same way) var strUrl : String = "www.google.com" if strUrl.lowercaseString.hasPrefix("http://")==false{ strUrl = "http://".stringByAppendingString(strUrl) } |