-
Notifications
You must be signed in to change notification settings - Fork 5
221111_프로젝트 초기 구성
lymchgmk edited this page Nov 13, 2022
·
9 revisions
-
Clean Architecture 및 Coordinator 패턴을 적용한 프로젝트 구조
-
Application
: AppDelegate & SceneDelegate + AppCoordinator -
Resource
: 앱에 필요한 자원 모음 -
Data
: DTO 및 Repository class들 -
Domain
: Entity, Repository protocol, UseCase protocol 및 Usecase Class -
Presentation
: Scene 관련 파일들(ViewController, ViewModel, View Coordinator) -
Infrastructure
: 네트워킹, Extensions 등 앱 공용으로 사용되는 로직들 -
각 Scene은 ViewController, ViewModel, Coordinator를 가짐
-
미리 프로젝트 폴더와 레퍼런스 코드를 작성해 두자
- 트리 구조
- DIContainer를 이용한 의존성 주입
- Entity: 데이터 구조 및 함수 집합
-
Use cases: 시스템의 동작을 사용자의 입장에서 표현한 시나리오
- 엔티티와의 데이터 흐름을 조정
-
Interface Adapter: Use cases에 가장 편리한 format에서 DB 등과 같은 외부 프레임워크에 가장 편리한 format으로 변환되는 곳
- (View)Controllers, Gateways, Presenters 가 속함
- Data: Data 레포지토리에서 DTO를 가공해서 Usecase에 전달
- 레퍼런스 코드 미리 작성
/* VC의 Preview Canvas 코드 */
#if canImport(SwiftUI) && DEBUG
import SwiftUI
struct IntroViewController_Preview: PreviewProvider {
static var previews: some View {
IntroViewController().showPreview(.iPhone14Pro)
}
}
#endif
/* VC에 SwiftUI Representable 적용 코드 */
#if canImport(SwiftUI) && DEBUG
import SwiftUI
extension UIViewController {
private struct Preview: UIViewControllerRepresentable {
let viewController: UIViewController
func makeUIViewController(context: Context) -> UIViewController {
return viewController
}
func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
}
}
func showPreview(_ deviceType: DeviceType = .iPhone12Pro) -> some View {
Preview(viewController: self).previewDevice(PreviewDevice(rawValue: deviceType.name()))
}
}
#endif
/* UIViewPreview 생성 코드 */
#if canImport(SwiftUI) && DEBUG
import SwiftUI
struct UIViewPreview<View: UIView>: UIViewRepresentable {
let view: View
init(_ builder: @escaping () -> View) {
view = builder()
}
// MARK: - UIViewRepresentable
func makeUIView(context: Context) -> UIView {
return view
}
func updateUIView(_ view: UIView, context: Context) {
view.setContentHuggingPriority(.defaultHigh, for: .horizontal)
view.setContentHuggingPriority(.defaultHigh, for: .vertical)
}
}
#endif
- 모두 Apple M1으로 개발환경 동일
-
arch -x86_64 pod install
터미널 명령으로 설치
-
Copyright © 2022 NearTalk