본문 바로가기
모바일앱/iOS

MyWebBrowser프로젝트를 통한 웹뷰 뜯어먹기

by GeekCode 2022. 4. 8.
반응형

 

일단 앞으로 여러가지 기능을 앞으로 구현하기위해  간단하게 기능을 추가해보려고 한다. 

그리고 편의상 모든 포스팅은 편의 말투로 작성합니당

 

프로젝트생성

프로젝트는 원하는 폴더에 생성합니다. 

 

세팅

sceneDelegate는 사용하지 않을 예정이기 때문에 아래 세가지 작업을 진행한다. 

- SceneDelegate.swift 파일 삭제 

- AppDelegate

  • var window: UIWindow! 입력
  • AppDelegate에 있는 UISceneSession과 관련된 두 메소드 삭제

  • info.plist에 등록된 Application Scene Manifest 삭제  -> 삭제 안할경우 AppDelegate에 정상작동을 안해요

 iOS13을 지원하게 된 이후부터 프로젝트엔 자동으로 SceneDelegate가 세팅되어있다. Scene기능은 아이패드나 맥에서 지원하는 스플릿뷰를 이용하는 기능이다. 나는 딱히 필요없으니 삭제! 

 

추가세팅

- https가 아닌 http 링크를 사용하는 경우

  • info.plist - App Transport Security Settings - Allow Arbitary Loads 생성 : YES로 설정

 

UI 구성

  • 스토리보드에서 ViewController에 WebKit View 추가
  • 오토레이아웃 설정

 

코드구현

앱에서 웹을 여는 방법은 아래 세가지가 있는데 오늘은 2번으로 진행하려고 한다.

1. 앱에서 사파리앱을 실행

2. WKWebView사용

3. SFSafariViewController사용

 

 

1. 스토리보드에 구현한 요소를 IBOutlet으로 변수선언

import UIKit
import WebKit

class ViewController: UIViewController {

    
    // webkit를 import하지않으면 에러발생
    @IBOutlet weak var myWebView: WKWebView!
    
    
 }

 

2.ViewDidLoad()함수에 url선언과 함께  웹뷰에서 호출

 

 override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view
//        self.myWebView.navigationDelegate = self
        
//방법1        
        if let url = URL(string:"https://h1guitar.tistory.com") {
            let request = URLRequest(url: url)
            myWebView.load(request)
        }
     
//방법2     
//        guard let url = URL(string:"https://h1guitar.tistory.com") else {return}
//        let request = URLRequest(url: url)
//        myWebView.load(request)

       
  
    }

여기선 딱히 뭘로하든 상관없지만 If let 과 guard let의 차이점 밖에 없다.  두 경우 모두 url이 유효하지 않으면 url이라는 변수가 동작하지않게 된다. 

 

 

결과화면

 

 

 

이제 해야할 작업은 버튼을 생성해서 제어할 수 있도록 세팅할 예정입니다. 

다음글에서 이어서 하도록하겠습니다.

반응형