[Swift] RIBs 맛보기

요즘 RIBs 아키텍쳐(프레임워크?) 가 많이 트렌드인거 같아서 한번 맛보기(찍먹)용으로 샘플 프로젝트를 만들어봤다. 무려 네이버 뉴스 파싱해오는 앱… 네이버 뉴스 API가 있는지 잘 몰라서 SwiftSoup를 통해 파싱해오기로 했다.

일단 RIBs는 다른 아키텍쳐(MVC, MVP, MVVM, VIPER, VIP)와는 다르게 라이브러리를 설치해야한다. 필자는 CocoaPods으로 설치함. 이번에 만들앱은 (가짜) 스플래시 컨트롤러 -> 메인 컨트롤러 순으로 이동되게 할 예정이라 window의 viewController를 두번 교체할 예정이다.

일단, AppDelegate에 아래의 코드를 작성한다.

import RIBs

final class AppComponent: Component, SplashDependency {
   init() {
     super.init(dependency: EmptyComponent())
   }
 }

@main
 class AppDelegate: UIResponder, UIApplicationDelegate {
 var window: UIWindow?
 private let component = AppComponent()
 private var launcher: LaunchRouting?
 
 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
     // Override point for customization after application launch.
     window = UIWindow(frame: UIScreen.main.bounds)
     self.launcher = SplashBuilder(dependency: self.component).build()
     self.launcher?.launch(from: self.window!)
     return true
}

AppComponent는 Splash 화면의 디펜던시를 갖고있는 컴포넌트이다. 이제 스플래시 화면을 생성해주자. RIBs 아키텍쳐의 경우 기본적으로 파일 템플릿을 제공하니 제공되는 템플릿으로 파일을 생성하도록 하자.

파일을 생성하게되면 위와 같은 구조로 생성되는데, 간단하게 설명하자면 Builder에서 RIBs 파일을 초기화하고 Router 에서 화면 전환이 이루어지며 Interactor에서 비즈니스 로직을 처리한다. 일단 위의 오류를 해결하기 위해 Builder 부분을 수정해주어야한다.

파일 템플릿으로 생성된 파일들은 기본적으로 LaunchRouting이 아닌 본인의 라우터와 listner등을 받기 때문이다. 아래와 같이 교체해주자.

protocol SplashBuildable: Buildable {
   func build() -> LaunchRouting
}

그리고 SplashBuilder에서의 함수도 바꿔주면 스플래시 화면 까지 뜨는걸 확인할 수 있다.

깃헙 링크