iOS 개발을 하다 보면 앱 내부에서 웹 콘텐츠를 표시해야 하는 상황을 자주 마주하게 됩니다. 이때 사용하는 것이 바로 WebView입니다.
Apple의 공식 정의에 따르면, WebView는 인앱 브라우저처럼 상호작용 가능한 웹 콘텐츠를 화면에 표시하는 객체입니다. 즉, 앱 안에서 웹사이트나 HTML 콘텐츠를 손쉽게 보여줄 수 있도록 도와주는 강력한 도구라고 할 수 있습니다.
이번 포스트에서는 Swift를 활용해 WKWebView를 생성하고, 원하는 URL의 데이터를 로드하는 방법을 단계별로 자세히 알아보겠습니다.
Swift로 WebView 만들기 – 단계별 가이드
1단계: Xcode 프로젝트 생성
Xcode를 실행하고 Single View Application 템플릿으로 새 프로젝트를 생성한 뒤, 프로젝트 이름을 WebViewSample로 지정합니다.
2단계: WebKit 모듈 임포트
ViewController.swift 파일을 열고 WebKit 모듈을 임포트합니다.
import WebKit
3단계: WKWebView 프로퍼티 추가
ViewController.swift에 WKWebView 타입의 프로퍼티를 선언합니다.
var webView: WKWebView!
4단계: WKUIDelegate 채택
ViewController 클래스가 WKUIDelegate 델리게이트를 채택하도록 선언합니다. 이 델리게이트를 통해 웹 콘텐츠와 관련된 다양한 UI 이벤트를 처리할 수 있습니다.
5단계: loadView() 메서드 오버라이드
ViewController.swift에 아래와 같이 loadView 함수를 오버라이드하여 추가합니다. 이 단계에서 WKWebViewConfiguration을 설정하고, webView의 uiDelegate를 self로 지정한 후 뷰를 webView로 교체합니다.
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
view = webView
}6단계: viewDidLoad에서 URL 요청 및 로드
viewDidLoad 메서드에서 로드하고자 하는 URL 요청(Request)을 생성한 후, 해당 URL을 로드합니다.
override func viewDidLoad() {
super.viewDidLoad()
let myURL = URL(string:"https://www.apple.com")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}7단계: 앱 실행
모든 설정이 끝났다면 앱을 빌드하고 실행합니다. 시뮬레이터에서 Apple 홈페이지가 정상적으로 로드되는 것을 확인할 수 있습니다.
전체 코드 정리
지금까지의 과정을 모두 합친 전체 코드는 아래와 같습니다.
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate {
var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
let myURL = URL(string:"https://www.apple.com")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
view = webView
}
}
마무리
지금까지 Swift의 WebKit 프레임워크를 활용해 iOS 앱에 WKWebView를 구현하는 기본적인 방법을 살펴보았습니다. 이 기본 구조를 바탕으로 JavaScript와의 통신, 네비게이션 델리게이트 처리, 파일 업로드 등 더욱 다양한 기능을 확장해 나갈 수 있습니다. 실제 프로젝트에 적용하면서 WKNavigationDelegate 등 추가 델리게이트도 함께 학습해 보시길 권장합니다.