Skip to content

앱 최초실행 시 OnboardingPage, 그 이후에는 MainTabBarController의 Home 화면을 보여줍니다.#3

Merged
just1103 merged 3 commits intodevelopfrom
feature/home
May 26, 2022
Merged

앱 최초실행 시 OnboardingPage, 그 이후에는 MainTabBarController의 Home 화면을 보여줍니다.#3
just1103 merged 3 commits intodevelopfrom
feature/home

Conversation

@yanghojoon
Copy link
Copy Markdown
Collaborator

배경

앱을 처음 설치하여 실행한 경우에만 OnboardingPage를 보여주고 이후에는 Home 화면을 바로 보여주도록 했습니다.
앱을 실행할 때마다 OnboardingPage를 보여주는 것은 비효율적이라 판단했고, 대부분의 상용 앱도 이런 형태롤 갖추고 있어 해당 방식을 택했습니다.

작업 내용

1. MainTabBarController를 통한 Tab Bar 구현

생성자 주입을 통해 Tab Bar에 반영할 화면정보를 전달했습니다. Home 화면에서 Tab BarNavigation Bar가 모두 존재합니다.

MainTabBarController를 초기화하는 과정에서 일부 프로퍼티가 viewDidLoad 호출 이후에 초기화되는 문제가 발생했습니다.
확인 결과, UITabBarController 이니셜라이저 내부에 super.init이 호출되면서 비정상적인 side-effect가 발생하는 것이 원인이었습니다.
따라서 일반적으로 viewDidLoad에 배치했던 메서드를 부득이 viewWillAppear에서 호출하여 문제를 해결했습니다.

2. UserDefault를 활용하여 앱이 처음 실행되었는지 확인

FirstLaunchChecker를 생성하여 UserDefault가 "isFirstLaunched"를 키로 값을 가지고 있는지에 따라 Bool 타입을 반환하도록 구현했습니다.
이를 통해 첫 실행일 경우 OnboardingPage를, 첫 실행이 아니면 MainTabBarController를 보여주도록 했습니다.

3. FlowCoordinator를 통한 MVVM-C 구현

FlowCoordinator를 통해 의존성 주입을 관리하고, 화면전환 역할을 담당하도록 했습니다.
생성자 주입을 통해 navigationController를 주입받고, 화면전환 시 해당 navigationController가 다음 화면을 push 하도록 했습니다.
이때 화면전환 관련 정보는 ViewModel이 알고 있는 것이 적절하다고 판단했습니다. 따라서 화면전환 동작을 클로저 타입으로 actions에 저장하고, actions를 ViewModel의 생성자 주입으로 전달했습니다.

테스트 방법

  • Simulator를 통해 테스트를 진행합니다. 앱 실행 이후, 앱을 삭제하고 다시 빌드하면 OnboardingPage가 다시 나타나는 것을 확인 가능합니다.

리뷰 노트

  • 함께 메뉴 결정, 혼밥 메뉴 결정 탭을 눌렀을 때 나오는 페이지 구현 예정입니다.

스크린샷

just1103 and others added 3 commits May 26, 2022 12:30
- HomeViewController 추가
- TapBarContentProtocol 추가
- FlowCoordinator 추가하여 화면전환 구현 (ViewModel의 actions를 통해 전환), 의존성 주입 관리
@yanghojoon yanghojoon added the feature 앱 출시에 한 발자국 다가간다... label May 26, 2022
@just1103 just1103 merged commit 35fea28 into develop May 26, 2022
@just1103
Copy link
Copy Markdown
Owner

  1. FlowCoordinator를 통한 MVVM-C 구현
    항목과 관련하여 리팩토링 과정에서 actions 클로저를 사용하는 부분을 삭제했습니다.

화면전환 동작을 Coordinator의 메서드로 생성하고, ViewModel의 생성자 주입으로 coordinator를 전달한 뒤 ViewModel에서 해당 메서드를 호출하도록 변경했습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature 앱 출시에 한 발자국 다가간다...

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants