Skip to content

Conversation

@clxxrlove
Copy link
Member

🔗 관련 이슈

📙 작업 내역

  • 초대 코드 제공 화면 구현

🎨 스크린샷 또는 시연 영상 (선택)

기능 미리보기 기능 미리보기
초대 코드 복사

💬 추가 설명 or 리뷰 포인트 (선택)

  • ..

@coderabbitai
Copy link

coderabbitai bot commented Jan 28, 2026

Important

Review skipped

Auto reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • 🔍 Trigger a full review
📝 Walkthrough

Walkthrough

온보딩 흐름 전체를 구현합니다. 커플 연결 화면(Connect)과 코드 입력 화면(CodeInput)을 포함한 NavigationStack 기반 코디네이터, 해당 상태 관리 Reducer, 그리고 관련 SwiftUI 뷰들을 추가합니다. 디자인 시스템에 새로운 아이콘, 일러스트레이션, 네비게이션 바 스타일을 확장하고, 앱 설정을 업데이트합니다.

Changes

Cohort / File(s) 요약
온보딩 Reducer 구현
Projects/Feature/Onboarding/Sources/CodeInput/OnboardingCodeInputReducer.swift, Projects/Feature/Onboarding/Sources/Connect/OnboardingConnectReducer.swift, Projects/Feature/Onboarding/Sources/OnboardingCoordinator.swift
코드 입력 화면 상태 관리(입력 검증, 포커스, 클립보드 복사), 커플 연결 화면 상태 관리(공유 시트), 네비게이션 스택 기반 코디네이터 Reducer 추가
온보딩 View 구현
Projects/Feature/Onboarding/Sources/CodeInput/OnboardingCodeInputView.swift, Projects/Feature/Onboarding/Sources/Connect/OnboardingConnectView.swift, Projects/Feature/Onboarding/Sources/OnboardingCoordinatorView.swift, Projects/Feature/Onboarding/Sources/Connect/ShareSheet.swift
코드 입력 다중 문자 입력 필드, 커플 연결 화면 UI, 네비게이션 스택 기반 코디네이터 뷰, iOS 공유 시트 래퍼 추가
온보딩 구성 및 진입점
Projects/Feature/Onboarding/Project.swift, Projects/Feature/Onboarding/Sources/Source.swift, Projects/App/Project.swift, Projects/Feature/Onboarding/Example/Sources/OnboardingApp.swift
온보딩 모듈 의존성(ComposableArchitecture, DesignSystem) 추가, 예제 앱 진입점을 온보딩 코디네이터 뷰로 변경, 기존 Source.swift 파일 제거, UI 스타일을 Light로 고정
디자인 시스템 - 이미지 자산
Projects/Shared/DesignSystem/Resources/Image/ImageAssets.xcassets/Icons/Symbol/ic_arrow1_l_left.imageset/Contents.json, Projects/Shared/DesignSystem/Resources/Image/ImageAssets.xcassets/Icons/Symbol/ic_copy.imageset/Contents.json, Projects/Shared/DesignSystem/Resources/Image/ImageAssets.xcassets/Illustration/illust_connect.imageset/Contents.json, Projects/Shared/DesignSystem/Sources/Resources/Image/Images.swift
좌향 화살표, 복사 아이콘, 커플 연결 일러스트레이션 이미지 자산 추가 및 공개 접근자 생성
디자인 시스템 - 컴포넌트
Projects/Shared/DesignSystem/Sources/Components/Bar/Navigation/TXNavigationBar+Style.swift, Projects/Shared/DesignSystem/Sources/Components/Bar/Navigation/TXNavigationBar.swift
네비게이션 바 스타일에 iconOnly(IconStyle) 추가 (기존 noTitle 대체), 백 버튼과 닫기 버튼 구분
디자인 시스템 - 색상
Projects/Shared/DesignSystem/Sources/Resources/Color/ColorStyle.swift
비활성화(disabled) 상태 색상 스타일 추가
스크립트
Scripts/GenerateModule.swift
모듈 생성 시 예제 타겟의 Info.plist에 UIUserInterfaceStyle: Light 자동 추가

Sequence Diagram(s)

sequenceDiagram
    participant User as 사용자
    participant CoordinatorView as OnboardingCoordinatorView
    participant Coordinator as OnboardingCoordinator<br/>(Reducer)
    participant ConnectView as OnboardingConnectView
    participant ConnectReducer as OnboardingConnectReducer
    participant CodeInputView as OnboardingCodeInputView
    participant CodeInputReducer as OnboardingCodeInputReducer

    User->>CoordinatorView: 앱 진입
    CoordinatorView->>Coordinator: 초기화 (myInviteCode, shareContent)
    Coordinator-->>CoordinatorView: State (path: [], connect)
    
    CoordinatorView->>ConnectView: 렌더링
    
    User->>ConnectView: directConnectCardTapped 또는 sendInvitationButtonTapped
    ConnectView->>ConnectReducer: Action 전달
    ConnectReducer->>Coordinator: delegate(navigateToCodeInput)
    Coordinator->>Coordinator: path 스택에 .codeInput 추가
    
    Coordinator-->>CoordinatorView: 업데이트 (path: [.codeInput])
    CoordinatorView->>CodeInputView: 렌더링
    
    User->>CodeInputView: 코드 입력 또는 백 버튼
    alt 코드 완성
        CodeInputView->>CodeInputReducer: completeButtonTapped
        CodeInputReducer->>Coordinator: delegate(coupleConnected)
        Coordinator-->>Coordinator: onboardingCompleted 전달
    else 백 버튼
        CodeInputView->>CodeInputReducer: backButtonTapped
        CodeInputReducer->>Coordinator: delegate(navigateBack)
        Coordinator->>Coordinator: path 스택에서 .codeInput 제거
        Coordinator-->>CoordinatorView: 업데이트 (path: [])
        CoordinatorView->>ConnectView: 재렌더링
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@clxxrlove
Copy link
Member Author

@coderabbitai summary

@coderabbitai
Copy link

coderabbitai bot commented Jan 28, 2026

@clxxrlove: I'll regenerate the summary for this PR.

✅ Actions performed

Summary regeneration triggered.

Copy link

@jihun32 jihun32 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

굿굿 고생했어 궁금한것들 코멘트 남겨놨고 확인해줘~~

case codeFieldTapped
case delegate(Delegate)

@CasePathable
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기도 그런데 일단 UI 작업 한거고, 아직 Interface랑 Sources로 나눠서 구현 안한 거 같으니까 그 때 Action 주석, CasePathable 관련 코멘트 적용 해도 될듯?

var focusedIndex: Int? = nil

/// 초대 코드 총 자릿수
static let codeLength = 7
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기 왜 static let으로 한거야?

Comment on lines 232 to 240
private extension OnboardingCodeInputView {
enum Constants {
static let horizontalPadding: CGFloat = 48
static let titleBodySpacing: CGFloat = 92
static let sectionSpacing: CGFloat = 52
static let cellWidth: CGFloat = 38
static let cellHeight: CGFloat = 58
}
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

나는 상수처리하는거 View에서 하면 subView가 여러개라 굳이라는 느낌이 있긴한데 통일성을 맞추려면 내가 정의할까? 어떻게 생각해?
그리고 특정 상수만 정의한 거 같은데 이유가 있어?

Comment on lines +51 to +54
@Reducer(state: .equatable)
public enum Path {
case codeInput(OnboardingCodeInputReducer)
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아직 interface 분리를 안해서 이렇게 해도 되는 거 같은데 interface 분리하면 이렇게 navigation 관리 못하더라구..(내 이전 PR관련 내용)

근데 Onboarding에서 다른 Feature모듈에 의존 안하면 interface를 의존할 필요 없으니까 이렇게 해도 될 거 같긴한데 난 통일성 지키기 위해서 내가 했던대로 하는게 좋을 거 같은데 어떻게 생각해?

Comment on lines +13 to +18
public struct OnboardingCoordinatorView: View {
@Bindable var store: StoreOf<OnboardingCoordinator>

public init(store: StoreOf<OnboardingCoordinator>) {
self.store = store
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

나는 Root라고 네이밍했는데 Coordinator가 더 직관적이려나 내가 다음 PR에서 Coordinator로 바꿀게

@jihun32 jihun32 self-requested a review January 30, 2026 03:19
@clxxrlove clxxrlove merged commit ab617a1 into feat/#80 Jan 30, 2026
2 checks passed
@clxxrlove clxxrlove deleted the feat/#82 branch January 30, 2026 04:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants