読者です 読者をやめる 読者になる 読者になる

リハビリエンジニア

エンジニアリングのリハビリ中

SwiftでWebView(1)

題通り、SwiftでWebViewを表示させるという基本的なことをやってみました。
[環境]iOS SDK 9.0, Xcode7.0.1

いろんなWebView

Objective-CにてUIWebViewをちちくり回していた時代とは異なり、

  • WKWebView
  • SafariViewController

という二つのWebViewが用意されていました。

WKWebView

iOS8から導入のWebKitFrameWorkのクラス。
UIWebViewよりも高速な処理を実現できるWebViewだそうです。
参考: http://grandbig.github.io/blog/2014/09/23/wkwebview2/

SafariViewController

iOS9から追加された新たなクラス。 以下の点が今までのWebViewとは異なる。

SafariのUIを使用できる
Safariツールバープログレスバーを利用することができる。

Safari の機能を使用できる
Safari AutoFill (クレジットカード、パスワード、連絡先の自動入力)
Safari Reader (サイトのテキストだけを抽出)
Content Blocking(コンテンツ制御 例:広告ブロック) など

・クッキーなどのデータをSafariと共有できる

WKWebViewでYahooを表示して見る

まずはじめにWKWebViewを使ってYahoo(http://www.yahoo.co.jp/)を表示してみた。
注意点は、iOS9より実装されたATS(App Transport Security)。
iOS9ではHTTPSでの通信が推奨されているため、
HTTP通信を行う際には、Info.plistにATSによる制限を回避するキーを含めてあげる必要があります。

Info.plist

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

ViewController

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {
    
    var _webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        _webView                    = WKWebView(frame: self.view.bounds)
        _webView.navigationDelegate = self
        _webView.UIDelegate         = self
        self.view.addSubview(_webView)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        
        let url = NSURL(string: "http://www.yahoo.co.jp/")
        let request = NSURLRequest(URL: url!)
        _webView.loadRequest(request)
    }
}

ATSを知らなかったので、
たかだか、やほおも表示させられない腕の落ちっぷりに焦りました。 ブランクは怖いですね。