2017-01-24 5 views
1

내가하려는 것은 Safari에서 사용자가 내 UIWebView에 표시된 링크를 클릭하도록하는 것입니다. 난 여전히 오류Safari에서 UIWebView의 링크 열기

을 얻을 수있는 링크를 사용하려고 할 때

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 
} 

:

난에 질문을 통해/답변을 읽기 시작 : Open specific link in Safari from UIWebView

Afterwhich 나는 다음과 같은 구현 "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 웹 사이트에 대한 액세스를 허용 할 수는 있지만 권장되지 않습니다. // 도메인은 man-in-the-middle 공격에 앱이 취약해질 수 있기 때문에 보안 문제가 될 수 있습니다

<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에서 열린다는 것입니다. 어떤 제안? – Diesel

+0

아직 UIApplication.sharedApplication(). openURL 코드가 있습니까? – faircloud