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 연결할 때 보던 화면. 아래 북마크는 본문에 녹였으니 지운다.