
이전 개념편에 이어서
프로젝트 구성편으로 넘어 왔습니다.
이전편을 보지 않고 해당 편을 보아도 프로젝트는 구성이 가능합니다...만
개념을 알고 보시는게 도움이 되니 꼭 이전 개념편을 봐주시길 권장합니다.


위 사진처럼 Root를 구성해 보려고 합니다.
템플릿을통해 Root를 구성해 봅시다.

위 사진처럼 알아서 만들어 줄거에요
템플릿 세팅하실때 체크 박스중 View 여부에 따라 템플릿이 달라지는 체크박스가 있습니다.
View가 있음을 체크하고 만들어 주세요!
ViewableRouter
아마 라우터가 해당 프로토콜을 채택하고 있을거에요
이는 루트 라우터에서는 사용하지 않을 것이기에
LaunchRouter로 변경해주세요!
// 바꾸신후 RootBuilder 에서도 변경작업이 필요합니다.
// MARK: - Builder
protocol RootBuildable: Buildable {
func build() -> LaunchRouting
}
final class RootBuilder: Builder<RootDependency>, RootBuildable {
override init(dependency: RootDependency) {
super.init(dependency: dependency)
}
func build() -> LaunchRouting {
let viewController = RootViewController()
let component = RootComponent(dependency: dependency, rootVc: viewController)
let interactor = RootInteractor(presenter: viewController)
// MARK: 이부분은 무시하셔도 됩니다.
// 후에 하게 되요... ㅎㅎ
let loginBuilder = LoginBuilder(dependency: component)
let homeFlowBuilder = HomeFlowBuilder(dependency: component)
return RootRouter(
interactor: interactor,
viewController: viewController,
loginBuilder: loginBuilder,
homeFlowBuilder: homeFlowBuilder
)
}
}
import RIBs
class AppComponent: Component<EmptyComponent>, RootDependency {
init() {
super.init(dependency: EmptyComponent())
}
}
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
// 런치라우터를 변수선언
private var launchRouter: LaunchRouting?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let scene = (scene as? UIWindowScene) else { return }
let _window = UIWindow(windowScene: scene)
self.window = _window
// _window.makeKeyAndVisible() // 해당 함수를 실행하지 않아도 됩니다.
let appComponent = AppComponent()
let _launchRouter = RootBuilder(dependency: appComponent).build()
self.launchRouter = _launchRouter
_launchRouter.launch(from: _window)
}
// MARK: RIBs LaunchRouter 내부 코드중
/// The application root router base class, that acts as the root of the router tree.
open class LaunchRouter<InteractorType, ViewControllerType>: ViewableRouter<InteractorType, ViewControllerType>, LaunchRouting {
/// Initializer.
///
/// - parameter interactor: The corresponding `Interactor` of this `Router`.
/// - parameter viewController: The corresponding `ViewController` of this `Router`.
public override init(interactor: InteractorType, viewController: ViewControllerType) {
super.init(interactor: interactor, viewController: viewController)
}
/// Launches the router tree.
///
/// - parameter window: The window to launch the router tree in.
public final func launch(from window: UIWindow) {
window.rootViewController = viewControllable.uiviewController
window.makeKeyAndVisible()
interactable.activate()
load()
}
}
func launch(from window: UIWindow) 함수를 통해
내부에서 window.makeKeyAndVisible() 함수를 실행시키기 때문에
위와 같은 방식으로 SceneDelegate 를 구성합니다.
실행 시켜 보시면 넵 빈화면이 나오겠죠..?
이번시간에는 하지 않겠지만
로그인RIB 과 HomeRIB을 구성해서 로그인 화면으로 시작하여 Home으로
그 반대로도 구성해 보겠습니다.

이번시간에는 Root를 구성하는 과정을 글로 옮겨 보았습니다.
다음 시간부터 좀더 머리가 아파지기 시작합니다.
Login을 먼저 구성을 하구요
Root와 통신을 해서 Home으로 이동시키고
Home에선 로그아웃 버튼을 만들어서 Login 화면으로 이동하게 구성해보겠습니다.
오늘도 고생 하셨습니다.