Codebase로 개발 - 1

Borysarang·2022년 6월 22일
1

swift

목록 보기
2/7
post-thumbnail

CodeBase로 개발 정리

tags: study

코드베이스 vs StoryBoard 차이?

-스토리 보드코드베이스
장점- WYSIWYG
결과물에 관해 예측하기 쉬움
- 속성확인가능
- 소스코드를 일일이 기억하지 않아도 됨
- 따로 무거워지지 않음
- Code만 보이면 모니터 크기는 그렇게 중요하지 않음
- 상대적으로 Diff를 알아보기 쉬움
- Conflict발생 가능성이 상대적으로 낮음
단점- 무거움
- 링크가 끊어질시 확인이 어려움
- 모니터가 작으면 짜증유발...
- 이전과 달라진점을 찾기 어려울 수 있음
- conflict 나면 고치기 빡셈
- 해당 Component의 속성을 어느정도 숙지하고 있어야함
-> Document를 자주 봅시다!(Cmd + Shift + 0)
- Source Code이기 때문에
어떤 화면이 만들어질지 알아보기 힘듬
- Code가 상당히 길어짐

0. 시작하기전 MainStroyBoard 제거

기존에 Main StoryBoard로 UI가 시작되게 설정되어있는걸 모두 끊어준다.

  1. MainStroyBoard 파일 제거
  2. Inpo.plist의 Main storyboard file base name속성 제거
  3. Inpo.plist의 Application Scene Manifest에서 스토리보드 관련 속성 제거

이렇게 Storyboard로 어플리케이션을 실행하겠다는 내용을 모두 제거하면 아무 기능없는 화면이 정상적으로 실행 된다.

1. Navigation Controller 및 Root ViewController로 시작하게 설정

어플리케이션이 시작하면서 화면을 어느 Scene에서 시작할지, 즉 Storyboard에서 지정해주던 start entry point를 설정해야한다. 물론 코드로.

//SceneDelegate.swift
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let _ = (scene as? UIWindowScene) else { return }
    }
    func sceneDidDisconnect(_ scene: UIScene) {}
    func sceneDidBecomeActive(_ scene: UIScene) {}
    func sceneWillResignActive(_ scene: UIScene) {}
    func sceneWillEnterForeground(_ scene: UIScene) {}
    func sceneDidEnterBackground(_ scene: UIScene) {}
}

여기서 scene()메서드를 통해 시작하고자 하는 뷰 컨트롤러를 인스턴스화하여 화면에 제공할 것이다. UINavigationCotroller는 바로 사용하였으며MainViewController는 구현을 직접 해준다.

//SceneDelegate.swift -> class(SceneDelegate) 내부
func scene(_ scene: UIScene, 
           willConnectTo session: UISceneSession, 
           options connectionOptions: UIScene.ConnectionOptions) 
{
    guard let windowScene = (scene as? UIWindowScene) else { return }
    let window = UIWindow(windowScene: windowScene)
    let mainViewController = MainViewController()
    let navigationController = UINavigationController(rootViewController: mainViewController)
    window.rootViewController = navigationController
    window.makeKeyAndVisible()
}
  1. 최초로 사용할 windowScene 인스턴스를 생성
  2. 이를 이용하여 화면을 구성하는 UIWindow 인스턴스 생성
  3. 실제 첫화면이 될 MainViewController 인스턴스 생성
  4. MainView Controller를 root 뷰컨트롤러로 갖는 NavigationController 생성
  5. UIWindow의 시작 ViewController를 위에서 생성한 NavigationController로 지정
  6. makeKeyAndVisible() 메서드 호출

이제 어플리케이션은 우리가 직접 생성한 MainViewController로 시작할 것이다. 시작하는것을 확인하기 위해 MainViewController의 view 배경으로 확인해보았다.

//MainViewController.swift
class MainViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = .red
    }
}

결과로 다음과 같이 깔끔하게 나오는것을 볼 수 있따.

참고 링크

이정우 개발자님 seesion
Apple developer document - Scene()
엘림 블로그
Apple developer Document - makeKeyAndVisible()

0개의 댓글