애플은 HTML 을 처리해서 웹 브라우저를 구현할 수 있는 4가지 기능을 지원한다.
사파리 앱 호출
UIWebView , WKWebView 구현
웹 뷰 객체를 사용해서 웹 페이지를 보여준다.
WKWebView 이 더욱 최신버전.
웹 뷰의 사용은 뷰 컨트롤러에 추가해 URL을 인자로 넣어 메소드를 호출하기만 하면 된다. 이때 디바이스가 반드시 네트워크에 연결되어있어야 한다.
→ 인앱 브라우져
라고 함
→ 인앱 브라우져의 단점은 기본적인 UI 이외 편의 기능들을 대부분 직접 구현해야한다.
→ 단순히 URL 호출하는 기능 외에 앞으로가기, 뒤로가기, 북마크 등이 해당된다.
SFSafariViewController 구현
이 방법은 URL을 사파리 브라우저로 전달하여 원하는 웹 페이지를 여는 방법이다.
let url = URL(string: "<https://www.google.com/>")
UIApplication.shared.open(url!, options:[:])
호출할 URL을 담아 URL객체를 생성하고 이를 UIApplication.shared.open()메소드에 넣어 호출하기만 하면 된다.
그럼 자동으로 사파리 앱이 실행되면서 입력한 URL이 로드된다.
네트워크 통신 자체를 사파리 앱이 대신 처리하기 떄문에 App Transport security 처리를 해주지 않아도 된다.
SFSafariViewController는 뷰 기반의 ULWebketView와 달리 컨트롤러 객체에 해당한다. 따라서 UI에 삽입하는 것이 아니라 단순히 코드를 호출해주기만 하면 된다.
사파리 서비스 프레임워크를 통해 제공되기 때문에 이 프레임워크를 import해야하고, 특정 메소드를 호출하는 것이 아니라 화면을 전환하는 방식으로 해당 컨트롤러를 호출해야 한다. ( 이미지 피커 컨트롤러를 사용하는 방식과 유사)
import SafariServices
let url = URL(string:"https://.../")
let safariViewController = SFSafariViewController(url: url!)
present(satafiViewController, animated: true, completion: nil)
이 방식은 앱 내부에서 직접 네트워크 통신 관련 작업을 처리하기 때문에 사용할 HTTP 도메인에 대하여 미리 등록해놓아야 한다.
스토리보드상에서 UIWebView 객체가 이미 추가되어 있다는 가정 하에서, 이 객체를 사용하여 웹 페이지를 로드하는 방법은 다음과 같다.