2017-01-24 30 views
1

Что я пытаюсь сделать, так это открыть веб-сайт в Safari, щелкнув по ссылке, отображаемой в моем UIWebView.Открыть ссылку в Safari от UIWebView

Я начал читать через вопрос/ответ на: Open specific link in Safari from UIWebView

Afterwhich я реализовал следующие:

class HomeInfoView: UIViewController, UIWebViewDelegate{ 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let localfilePath = NSBundle.mainBundle().URLForResource("homeInfo", withExtension: "html"); 
    let myRequest = NSURLRequest(URL: localfilePath!); 
    WebViewer.loadRequest(myRequest); 
    WebViewer.scrollView.bounces = false 
} 


func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
    if let url = request.URL where navigationType == UIWebViewNavigationType.LinkClicked { 
     UIApplication.sharedApplication().openURL(url) 
     return false 
    } 
    return true 
} 

Однако при попытке использовать ссылку я все еще получаю сообщение об ошибке

«App Transport Security заблокировала загрузку ресурсов с открытым текстом HTTP (http: //), поскольку она небезопасна. Временные исключения могут быть настроены через файл Info.plist вашего приложения».

Я думаю, что я на 90% из того, что есть, но я не уверен, как отредактировать мой .plist, чтобы разрешить исключение. Или если есть что-то еще, что я пропустил.

(я бы добавил это как комментарий к исходному сообщению, но мой рейтинг не достаточно высок еще)

ответ

0

Вы должны либо разрешений грантовый этой конкретной области, в вашем info.plist:

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSExceptionDomains</key> 
    <dict> 
     <key>testdomain.com</key> 
     <dict> 
      <key>NSIncludesSubdomains</key> 
      <true/> 
      <key>NSExceptionAllowsInsecureHTTPLoads</key> 
      <true/> 
      <key>NSExceptionRequiresForwardSecrecy</key> 
      <true/> 
      <key>NSExceptionMinimumTLSVersion</key> 
      <string>TLSv1.2</string> 
      <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> 
      <false/> 
      <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> 
      <true/> 
      <key>NSThirdPartyExceptionMinimumTLSVersion</key> 
      <string>TLSv1.2</string> 
      <key>NSRequiresCertificateTransparency</key> 
      <false/> 
     </dict> 
    </dict> 
</dict> 

Эта информация в вашем plist в основном устанавливает исключение в вашем приложении. Он позволяет получить доступ к домену testdomain.com (вставить любой домен, к которому вы пытаетесь получить доступ). Он позволяет получить доступ ко всем субдоменам, а затем устанавливает минимальную версию TLS, чтобы гарантировать, что сайт, к которому вы подключаетесь, является тем, который вы хотите.

Или вы можете просто разрешить доступ ко всем http-сайтам, что не рекомендуется.

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
</dict> 

Это не рекомендуется, так как это позволяет вашему приложению доступ к любой HTTP: // домен, который может быть проблема безопасности, потому что это может сделать приложение уязвимым для человека-в-середине атак.

Ознакомьтесь с документацией Apple для получения дополнительной информации. https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33

+0

Не могли бы вы добавить немного больше подробностей о том, как работает первый, почему второй не рекомендуется? Спасибо за помощь :) Я все еще очень новичок в Xcode/Swift – Diesel

+0

Спасибо за редактирование! Эта дополнительная деталь помогает. Проблема, которую я имею сейчас, состоит в том, что ссылки открываются в том же UIWebView, а не в Safari. Какие-либо предложения? – Diesel

+0

У вас все еще есть UIApplication.sharedApplication(). Здесь есть код openURL? – faircloud