← 글 목록

notes

IOS - document (기본 참고용)

iOS 개발 기본 참고 문서와 프로젝트 설정·구조 확인 메모.

하이브리드 앱 잡으면서 WKWebView를 컨트롤러에 붙이는 흐름을 매번 까먹어서, “문서 참고용”으로 스크린샷 옆에 내 말로 적어 둔다.

왜 WKWebView인가

UIWebView는 deprecated. WKWebView는 프로세스 분리·JS 성능·쿠키/스토리지 정책이 다르다. 네이티브 브릿지 넣을 때도 WKUserContentController 기준으로 잡는다.

컨트롤러에 붙이는 뼈대

import WebKit

class WebViewController: UIViewController, WKNavigationDelegate, WKScriptMessageHandler {
    var webView: WKWebView!

    override func loadView() {
        let config = WKWebViewConfiguration()
        config.userContentController.add(self, name: "bridge")
        webView = WKWebView(frame: .zero, configuration: config)
        webView.navigationDelegate = self
        view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        if let url = URL(string: "https://example.com") {
            webView.load(URLRequest(url: url))
        }
    }

    func userContentController(_ userContentController: WKUserContentController,
                               didReceive message: WKScriptMessage) {
        // JS → Native
        print(message.name, message.body)
    }
}

새 창 / target=_blank

Web이 window.open 하면 WKUIDelegate.createWebViewWith가 안 오면 무시된다. child WebView를 만들거나 같은 webView에 load하는 정책을 정해야 한다.

내가 막혔던 것

  • ATS: http 섞이면 Info.plist 예외 없으면 로드 실패
  • Cookie: WKWebsiteDataStore.default()와 네이티브 URLSession 쿠키가 자동으로 안 맞을 때 있음
  • JS inject 타이밍: didFinish 전에 evaluate하면 씹힘
  • 파일 업로드 <input type=file>: WKUIDelegate + 권한(사진 라이브러리) 별도

상단 스크린샷은 Xcode에서 WebView 연결할 때 보던 화면. 아래 북마크는 본문에 녹였으니 지운다.