본문 바로가기

ios

WKWebView

예전에 만들었던 앱소스를 수정할 일이 생겼습니다.

Xcode 7 9로 업데이트하고 기존 Swift 2로 짠 코드를 Swift 4로 변경하였습니다

사용한 Xcode 버전은 9.2 (9C40b) 입니다.

(정말 xx같은 Apple 1년마다 한번씩 언어를 바꾸네요. 전 예전 Objective-C ARC 나오기전부터 작업했었는데 개발자 무시하는 Apple의 정책에 대해서는 욕나오네요. iOS개발은 연차가 쌓여도 학습량은 줄지 않아요. ㅠㅠ)

Xcode 9에서 보니 Safe Area라는 개념이 새로 나와서

storyboard에서 수정할려고 하다 보니 다음과 같이 Web View  deprecated된다고 나와 있습니다

그래서 WebKit View 를 사용해보기로 마음먹고 진행해보았습니다(다시 욕나오는 상황입니다그냥 나두면 안되나..)

하던 습관대로 storyboard에서 Object 넣고 Auto Layout 설정하니 잘 돌아갑니다.

그런데 Deployment Target 9.0으로 주니 다음과 같이 에러 표시가 나왔습니다.

WKWebView before IOS 11.0 (NSCoding support was broken in previous versions)

stackoverflow에서 찾아보니 iOS 11 이전 버전인 경우 storyboard에서 WebKit View를 사용못하는거 같습니다.  

어쩔수 없이 코드로 생성시켜야겠습니다. 아래가 결과인데 Auto Layout 안해주면 이상하게 배치가 되서 최종결과가 이렇게 되었습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import UIKit
import WebKit
 
class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate {
 
    var webView: WKWebView!
 
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        view.backgroundColor = UIColor.lightGray
 
        // Initialize
        webView = WKWebView()
 
        // Recognize Auto Layout
        webView.translatesAutoresizingMaskIntoConstraints = false
 
        // Add to the view
        view.addSubview(webView)
 
        // Add constraints
        if #available(iOS 11.0*) {
 
            let safeArea = self.view.safeAreaLayoutGuide
            webView.leadingAnchor.constraint(equalTo: safeArea.leadingAnchor).isActive = true
            webView.topAnchor.constraint(equalTo: safeArea.topAnchor).isActive = true
            webView.trailingAnchor.constraint(equalTo: safeArea.trailingAnchor).isActive = true
            webView.bottomAnchor.constraint(equalTo: safeArea.bottomAnchor).isActive = true
 
        }
        else {
 
            webView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
            webView.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor).isActive = true
            webView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
            webView.bottomAnchor.constraint(equalTo: bottomLayoutGuide.topAnchor).isActive = true
 
        }
 
        let myBlog = "http://aircook.tistory.com/m"
        let url = URL(string: myBlog)
        let request = URLRequest(url: url!)
 
        webView.load(request)
 
    }
}
 
cs


실제사용중인 코드를 storyboard 사용하지 않고 이렇게 코드로 다 만들어야 된다면 정말 귀찮은 작업이 되겠네요. 안하고 싶습니다.

또 구글링 해보니 Cookie 관련해서는 기존 Web View와 다르게 동작한다고 나와있습니다

지금은 이걸 다 바꿔야 되나 말아야 되나 고민중입니다

(정말 오랜만의 포스팅인데 열심히 살아야겠다는 생각이 갑자기 들어서 글 작성하였습니다.)


'ios' 카테고리의 다른 글

Use Realm in Swift  (0) 2020.04.17
Tab Bar 사라지게 하는 방법  (0) 2020.04.03
Objective-C 메모리 관리  (1) 2011.06.13
[책] Objective-C 2.0  (0) 2011.05.04
[책] 맥과 아이폰 개발자를 위한 Xcode  (0) 2011.05.04