Skip to content

Design/#49 - 사이드바 디자인 수정 및 온보딩/잠금 화면 구현 - #50

Merged
dlguszoo merged 10 commits into
developfrom
design/#49
Jul 25, 2026
Merged

Design/#49 - 사이드바 디자인 수정 및 온보딩/잠금 화면 구현#50
dlguszoo merged 10 commits into
developfrom
design/#49

Conversation

@dlguszoo

@dlguszoo dlguszoo commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

✨ What’s this PR?

📌 관련 이슈 (Related Issue)


🧶 주요 변경 내용 (Summary)

  • 사이드바 Notice 메뉴 추가 및 메뉴별 아이콘·색상 디자인 반영
  • OnboardingFeature/OnboardingView 구현 (step 1.0 Welcome ~ 1.3 Syncing)
  • LockFeature/LockView 구현 (온보딩 마지막 단계 및 재진입 잠금화면 공유)
  • Lottie SDK(4.6.0) 추가 및 progress.lottie 연동

📸 스크린샷 (Optional)

스크린샷 2026-07-23 오후 3 29 40 스크린샷 2026-07-23 오후 3 26 12 스크린샷 2026-07-23 오후 3 26 23 스크린샷 2026-07-23 오후 3 26 30 스크린샷 2026-07-23 오후 3 26 35 스크린샷 2026-07-23 오후 3 27 50

🧪 테스트 / 검증 내역

  • 사이드바 Notice 메뉴 선택 시 하이라이트 및 아이콘 색상(warning) 확인
  • 사이드바 Expired 메뉴 아이콘 색상(danger) 확인
  • 온보딩 step 순서대로 진행 (Welcome → Security → iCloud Sync → Syncing)
  • Not Now 탭 시 delegate(.completed) 발송 확인
  • LockView isPostOnboarding true/false 프리뷰 확인
  • DVStepIndicator step 인덱스 각 화면에서 정확한지 확인

💬 기타 공유 사항

컴포넌트 수정 및 배경 커스텀 수정자 추가

  • DVCategory: iconColor: Color 파라미터 추가로 필터별 아이콘 색상 개별 지정 가능
  • DVButton: primarySmall 스타일 추가 (width 134, 나란히 배치되는 버튼에 사용)
  • View+DVColor: dvScreenBackground() 수정자 추가 — gray100 전체 배경 공통 처리

🙇🏻‍♀️ 리뷰 가이드 (선택)

  • syncingCompleted 액션은 추후 실제 iCloud sync 완료 콜백 시 연결 예정
  • OnboardingView → LockView DVStepIndicator 연속 애니메이션은 다음 이슈(OnboardingContainerFeature)에서 처리
  • AppFeature scene 분기(onboarding/locked/main) 및 진입점 연결도 다음 이슈에서 처리

Summary by CodeRabbit

  • 새로운 기능

    • 환영, 보안, iCloud 동기화, 동기화 완료 단계로 구성된 온보딩 흐름을 추가했습니다.
    • Touch ID로 잠금 해제할 수 있는 화면을 추가했습니다.
    • 동기화 진행 애니메이션을 제공합니다.
    • 사이드바에 Notice 필터를 추가하고 필터별 아이콘 색상을 구분했습니다.
  • 개선 사항

    • 작은 기본 버튼 스타일을 추가했습니다.
    • 단계 표시와 화면 배경의 시각적 스타일을 개선했습니다.
    • 잠금 해제 및 온보딩 상태별 화면 미리보기를 지원합니다.

@dlguszoo dlguszoo linked an issue Jul 23, 2026 that may be closed by this pull request
5 tasks
@dlguszoo dlguszoo self-assigned this Jul 23, 2026
@dlguszoo dlguszoo added the 🎨 Design UI 디자인 작업 label Jul 23, 2026
@dlguszoo
dlguszoo requested review from doyeonk429 and yeseonglee and removed request for doyeonk429 July 23, 2026 06:45
@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

온보딩 및 잠금 화면을 TCA 기반으로 추가하고, Lottie 애니메이션과 관련 의존성을 연결했습니다. 사이드바에 Notice 필터와 아이콘 색상을 반영했으며, 공통 디자인 컴포넌트와 화면 배경 처리를 확장했습니다.

Changes

프레젠테이션 디자인 및 화면 플로우

Layer / File(s) Summary
공통 디자인 컴포넌트
Projects/DVDesign/Sources/Components/*, Projects/DVDesign/Sources/Foundations/Color/View+DVColor.swift
primarySmall 버튼 스타일, 주입 가능한 카테고리 아이콘 색상, 비활성 단계 색상, 전체 화면 배경 modifier를 추가했습니다.
Lottie 리소스 및 의존성 연동
Projects/DVDesign/Resources/progress.lottie, Tuist/Package.swift, Tuist/ProjectDescriptionHelpers/TargetDependency+External.swift, Projects/DVPresentation/Project.swift
Lottie SPM 의존성과 Presentation 타깃 연결을 추가하고 progress.lottie 리소스를 포함했습니다.
사이드바 필터 및 아이콘 표시
Projects/DVPresentation/Sources/Features/Sidebar/*
notice 필터와 아이콘 매핑을 추가하고, 필터별 아이콘 색상 및 목록 레이아웃을 변경했습니다.
온보딩 상태 머신 및 화면
Projects/DVPresentation/Sources/Features/Onboarding/*
온보딩 단계 전환, 완료 delegate, 단계별 화면, 버튼 액션, Lottie 진행 애니메이션 및 프리뷰를 구현했습니다.
잠금 화면 및 잠금 해제 이벤트
Projects/DVPresentation/Sources/Features/Lock/*
잠금 상태 리듀서와 Touch ID 해제 화면을 추가하고, 재진입 상태에 따른 단계 표시 및 프리뷰를 구성했습니다.
메인 화면 배경 연결
Projects/DVPresentation/Sources/Features/Main/MainView.swift
MainView에 전체 화면 배경 modifier를 적용했습니다.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant OnboardingView
  participant OnboardingFeature
  participant LottieView
  participant DotLottieFile
  OnboardingView->>OnboardingFeature: 단계별 버튼 액션 전송
  OnboardingFeature->>OnboardingFeature: 온보딩 단계 전환
  OnboardingView->>LottieView: progress 애니메이션 표시
  LottieView->>DotLottieFile: progress 리소스 비동기 로드
  DotLottieFile-->>LottieView: Lottie 파일 반환
  OnboardingFeature-->>OnboardingView: completed delegate 전달
Loading

Possibly related PRs

Suggested reviewers: yeseonglee

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed 직접 링크된 #49의 Notice 메뉴, 아이콘 색상, Lottie 추가, 온보딩, 잠금 화면 요구사항이 모두 반영되었습니다.
Out of Scope Changes check ✅ Passed 추가된 DVButton, DVCategory, 배경 modifier, step indicator 변경은 온보딩·사이드바 디자인을 뒷받침하는 범위 내입니다.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 사이드바 디자인 수정, 온보딩 흐름, 잠금 화면 구현이라는 PR의 핵심 변경을 정확히 요약합니다.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch design/#49

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🧹 Nitpick comments (3)
Projects/DVDesign/Sources/Components/DVButton.swift (1)

14-46: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

레이아웃 계산 프로퍼티의 노출 범위를 줄이세요.

cornerRadius, height, horizontalPadding, width, fontDVButtonStyle에서만 사용되므로 fileprivate로 제한해 모듈 API 노출을 줄이는 편이 좋습니다. As per path instructions, “접근 제어가 가능한 가장 엄격한 수준인지 확인하세요. (private > fileprivate > internal)”.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Projects/DVDesign/Sources/Components/DVButton.swift` around lines 14 - 46,
Update the cornerRadius, height, horizontalPadding, width, and font properties
on DVButtonStyle to use fileprivate access, keeping them available to
DVButtonStyle usage while reducing their exposure from the current default
scope.

Source: Path instructions

Projects/DVDesign/Sources/Foundations/Color/View+DVColor.swift (1)

14-16: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

public extension 대신 메서드별 접근 제어를 사용하세요.

이 메서드를 추가하면서 View의 모든 확장 멤버가 public이 됩니다. extension View로 바꾸고 필요한 메서드에만 public을 직접 선언하세요.

수정 예시
-public extension View {
-    func dvForegroundColor(_ token: DVColor) -> some View {
+extension View {
+    public func dvForegroundColor(_ token: DVColor) -> some View {
         self.foregroundStyle(token.color)
     }

-    func dvBackgroundColor(_ token: DVColor) -> some View {
+    public func dvBackgroundColor(_ token: DVColor) -> some View {
         self.background(token.color)
     }

-    func dvScreenBackground(_ token: DVColor = .gray100) -> some View {
+    public func dvScreenBackground(_ token: DVColor = .gray100) -> some View {
         self.background(token.color.ignoresSafeArea())
     }
 }

As per path instructions, “public extension 패턴 대신 각 선언에 직접 접근 제어가 명시되어 있는지 확인하세요.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Projects/DVDesign/Sources/Foundations/Color/View`+DVColor.swift around lines
14 - 16, Replace the public extension around dvScreenBackground with a
non-public extension View, then explicitly mark only dvScreenBackground as
public. Ensure no other View extension members become public implicitly.

Source: Path instructions

Projects/DVPresentation/Sources/Features/Lock/LockView.swift (1)

14-14: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Store의 공개 가변 API와 불필요한 @Bindable을 줄이세요.

현재 뷰는 $store 바인딩을 사용하지 않고 상태 조회와 send만 수행하므로 @Bindable public var store가 필요하지 않습니다. private let store: StoreOf<LockFeature>로 변경해 외부의 Store 재할당과 불필요한 API 노출을 막으세요.

As per path instructions: 접근 제어가 가능한 가장 엄격한 수준인지 확인하세요.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Projects/DVPresentation/Sources/Features/Lock/LockView.swift` at line 14,
LockView의 store 선언에서 불필요한 `@Bindable과` public 가변성을 제거하고, 상태 조회와 send 호출에 맞게
private let store: StoreOf<LockFeature>로 변경하세요.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@Projects/DVPresentation/Sources/Features/Lock/LockFeature.swift`:
- Around line 49-50: LockFeature의 didTapUnlock 처리에서 즉시 unlockCompleted를 보내지 말고
LocalUserAuthenticationServiceImpl 의존성을 주입해 authenticate를 호출하세요. 인증 성공 결과에서만
delegate unlockCompleted를 전송하고, 실패·취소·미지원 결과는 잠금 상태를 유지하거나 기존 에러 전달 경로로 처리하세요.

In `@Projects/DVPresentation/Sources/Features/Onboarding/OnboardingFeature.swift`:
- Around line 75-77: Update the didTapEnableTouchID handling in
OnboardingFeature so it advances to .icloudSync only after the authentication
client’s success callback or the parent delegate’s success event is received.
Keep the current step unchanged and avoid emitting the transition for canceled
or failed Touch ID attempts.
- Around line 82-87: Connect the actual synchronization client to the
didTapEnableSync case, dispatching syncingCompleted only after a successful sync
so the existing completed delegate is reached. Handle synchronization failures
by updating the appropriate failure state and provide the retry path from the
syncing flow, using the feature’s existing TCA dependency and action/state
symbols.
- Around line 31-38: Update the currentStepIndex computed property so the
.syncing case returns index 3, making it the fourth indicator step while
preserving the existing indices for .welcome, .security, and .icloudSync.

In `@Projects/DVPresentation/Sources/Features/Sidebar/SidebarView.swift`:
- Around line 183-184: Change the extension containing SidebarFilter.iconColor
from private to fileprivate so SidebarView can access the property within the
same file while keeping its visibility as narrow as possible.

---

Nitpick comments:
In `@Projects/DVDesign/Sources/Components/DVButton.swift`:
- Around line 14-46: Update the cornerRadius, height, horizontalPadding, width,
and font properties on DVButtonStyle to use fileprivate access, keeping them
available to DVButtonStyle usage while reducing their exposure from the current
default scope.

In `@Projects/DVDesign/Sources/Foundations/Color/View`+DVColor.swift:
- Around line 14-16: Replace the public extension around dvScreenBackground with
a non-public extension View, then explicitly mark only dvScreenBackground as
public. Ensure no other View extension members become public implicitly.

In `@Projects/DVPresentation/Sources/Features/Lock/LockView.swift`:
- Line 14: LockView의 store 선언에서 불필요한 `@Bindable과` public 가변성을 제거하고, 상태 조회와 send
호출에 맞게 private let store: StoreOf<LockFeature>로 변경하세요.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: a7537cc9-5e7c-46c5-a167-e0c6b984d53c

📥 Commits

Reviewing files that changed from the base of the PR and between 08faf66 and b14aa79.

📒 Files selected for processing (15)
  • Projects/DVDesign/Resources/progress.lottie
  • Projects/DVDesign/Sources/Components/DVButton.swift
  • Projects/DVDesign/Sources/Components/DVCategory.swift
  • Projects/DVDesign/Sources/Components/DVStepIndicator.swift
  • Projects/DVDesign/Sources/Foundations/Color/View+DVColor.swift
  • Projects/DVPresentation/Project.swift
  • Projects/DVPresentation/Sources/Features/Lock/LockFeature.swift
  • Projects/DVPresentation/Sources/Features/Lock/LockView.swift
  • Projects/DVPresentation/Sources/Features/Main/MainView.swift
  • Projects/DVPresentation/Sources/Features/Onboarding/OnboardingFeature.swift
  • Projects/DVPresentation/Sources/Features/Onboarding/OnboardingView.swift
  • Projects/DVPresentation/Sources/Features/Sidebar/SidebarFeature.swift
  • Projects/DVPresentation/Sources/Features/Sidebar/SidebarView.swift
  • Tuist/Package.swift
  • Tuist/ProjectDescriptionHelpers/TargetDependency+External.swift

Comment on lines +49 to +50
case .didTapUnlock:
return .send(.delegate(.unlockCompleted))

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🔴 Critical | 🏗️ Heavy lift

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Repo files matching LockFeature.swift:"
fd -a 'LockFeature\.swift$' . | sed 's#^\./##'

file="$(fd 'LockFeature\.swift$' . | head -n1)"
if [ -n "${file:-}" ]; then
  echo
  echo "File: $file"
  wc -l "$file"
  echo
  echo "Outline:"
  ast-grep outline "$file" || true
  echo
  echo "Relevant source:"
  sed -n '1,180p' "$file" | cat -n
fi

echo
echo "Search for unlockCompleted and delegate usages:"
rg -n "unlockCompleted|didTapUnlock|unlockRequested|delegate\(" . -g '*.swift' | head -n 200

Repository: DevaultProject/Devault-macOS

Length of output: 3801


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "LockView.swift:"
sed -n '1,160p' ./Projects/DVPresentation/Sources/Features/Lock/LockView.swift | cat -n

echo
echo "Files containing LockFeature / lock references:"
rg -n "LockFeature|\\bunlockCompleted\\b|didTapUnlock|LocalAuthentication|Touch ID|touch id|biometric|Face ID|face id|authenticate" . -g '*.swift'

Repository: DevaultProject/Devault-macOS

Length of output: 5929


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Authentication service interface:"
sed -n '1,120p' ./Projects/DVDomain/Sources/Service/Interface/UserAuthenticationService.swift | cat -n

echo
echo "LockFeature references and delegates:"
rg -n "delegate\\(.*unlockCompleted|unlockCompleted\\)|LockFeature\\(|\\.lock|LockFeature\\.init|store: StoreOf<LockFeature>|StoreOf<LockFeature>" . -g '*.swift' | head -n 200

echo
echo "Lock files:"
fd -a 'Lock.*\.swift$' . | sed 's#^\./##'

echo
echo "User auth impl:"
sed -n '1,180p' ./Projects/DVData/Sources/ServiceImpl/Authentication/LocalUserAuthenticationServiceImpl.swift | cat -n

Repository: DevaultProject/Devault-macOS

Length of output: 3157


unlockCompleted 전송을 인증 성공 결과로 바꾸세요.

didTapUnlock가 버튼을 누르는 즉시 delegate를 보내고 있어, 현재 UserAuthenticationService.authenticate가 호출되지 않습니다. LockFeature에서 LocalUserAuthenticationServiceImpl 의존성을 받아 인증을 트리거하고, 성공 시에만 unlockCompleted를 보냅니다. 실패/취소/미지원은 잠금 상태를 유지하거나 에러(delegate/state)로 전달하세요.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Projects/DVPresentation/Sources/Features/Lock/LockFeature.swift` around lines
49 - 50, LockFeature의 didTapUnlock 처리에서 즉시 unlockCompleted를 보내지 말고
LocalUserAuthenticationServiceImpl 의존성을 주입해 authenticate를 호출하세요. 인증 성공 결과에서만
delegate unlockCompleted를 전송하고, 실패·취소·미지원 결과는 잠금 상태를 유지하거나 기존 에러 전달 경로로 처리하세요.

Comment on lines +31 to +38
var currentStepIndex: Int {
switch step {
case .welcome: return 0
case .security: return 1
case .icloudSync: return 2
case .syncing: return 2
}
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Syncing 단계를 네 번째 indicator로 표시하세요.

DVStepIndicator(totalSteps: 4, ...)를 사용하지만 .syncing이 2를 반환해 iCloud Sync 단계와 같은 세 번째 상태로 표시됩니다.

수정 예시
-      case .syncing:    return 2
+      case .syncing:    return 3
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
var currentStepIndex: Int {
switch step {
case .welcome: return 0
case .security: return 1
case .icloudSync: return 2
case .syncing: return 2
}
}
var currentStepIndex: Int {
switch step {
case .welcome: return 0
case .security: return 1
case .icloudSync: return 2
case .syncing: return 3
}
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Projects/DVPresentation/Sources/Features/Onboarding/OnboardingFeature.swift`
around lines 31 - 38, Update the currentStepIndex computed property so the
.syncing case returns index 3, making it the fourth indicator step while
preserving the existing indices for .welcome, .security, and .icloudSync.

Comment on lines +75 to +77
case .didTapEnableTouchID:
state.step = .icloudSync
return .none

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

Touch ID 성공 확인 후에만 다음 단계로 진행하세요.

현재 didTapEnableTouchID는 인증·등록 결과와 무관하게 즉시 iCloud Sync 화면으로 전환됩니다. 취소·실패 시에도 “Enable Touch ID”가 완료된 것처럼 진행되므로, 인증 클라이언트의 성공 콜백 또는 부모 delegate 이벤트를 받은 뒤 상태를 변경하세요.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Projects/DVPresentation/Sources/Features/Onboarding/OnboardingFeature.swift`
around lines 75 - 77, Update the didTapEnableTouchID handling in
OnboardingFeature so it advances to .icloudSync only after the authentication
client’s success callback or the parent delegate’s success event is received.
Keep the current step unchanged and avoid emitting the transition for canceled
or failed Touch ID attempts.

Comment on lines +82 to +87
case .didTapEnableSync:
state.step = .syncing
return .none

case .syncingCompleted:
return .send(.delegate(.completed))

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

실제 동기화 완료 이벤트를 연결하세요.

didTapEnableSync.syncing으로만 전환하고, 이 리듀서 내에서는 syncingCompleted를 보내는 효과가 없습니다. 따라서 사용자는 Syncing 화면에 계속 머뭅니다. 동기화 클라이언트를 의존성으로 주입해 성공 시 완료 delegate를 보내고, 실패·재시도 상태도 처리하세요. 원하시면 TCA effect 구조로 정리해드릴 수 있습니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Projects/DVPresentation/Sources/Features/Onboarding/OnboardingFeature.swift`
around lines 82 - 87, Connect the actual synchronization client to the
didTapEnableSync case, dispatching syncingCompleted only after a successful sync
so the existing completed delegate is reached. Handle synchronization failures
by updating the appropriate failure state and provide the retry path from the
syncing flow, using the feature’s existing TCA dependency and action/state
symbols.

Comment on lines +183 to +184
private extension SidebarFilter {
var iconColor: Color {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

file="Projects/DVPresentation/Sources/Features/Sidebar/SidebarView.swift"

rg -n '^private extension SidebarFilter' "$file"
rg -n 'iconColor: filter\.iconColor' "$file"

Repository: DevaultProject/Devault-macOS

Length of output: 248


🏁 Script executed:

#!/bin/bash
set -euo pipefail

file="Projects/DVPresentation/Sources/Features/Sidebar/SidebarView.swift"

printf '--- SidebarView.swift relevant lines ---\n'
sed -n '60,90p;170,192p' "$file" | cat -n

printf '\n--- Search for iconColor usages ---\n'
rg -n '\biconColor\b' "$file"

Repository: DevaultProject/Devault-macOS

Length of output: 257


🏁 Script executed:

#!/bin/bash
set -euo pipefail

file="Projects/DVPresentation/Sources/Features/Sidebar/SidebarView.swift"

cat -n "$file" | sed -n '60,90p;170,192p'

printf '\n--- Search for iconColor usages ---\n'
rg -n '\biconColor\b' "$file"

Repository: DevaultProject/Devault-macOS

Length of output: 2032


iconColorfileprivate extension에 두세요.

Line 78의 SidebarView가 다른 타입의 SidebarFilter.iconColor를 사용하는데, private extension의 멤버는 같은 타입의 extension 내부에서만 접근할 수 있습니다. 같은 파일의 SidebarView에서만 쓰므로 fileprivate extension이 허용하면서 가능한 만큼 좁은 범위입니다.

권장 수정
-private extension SidebarFilter {
+fileprivate extension SidebarFilter {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
private extension SidebarFilter {
var iconColor: Color {
fileprivate extension SidebarFilter {
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Projects/DVPresentation/Sources/Features/Sidebar/SidebarView.swift` around
lines 183 - 184, Change the extension containing SidebarFilter.iconColor from
private to fileprivate so SidebarView can access the property within the same
file while keeping its visibility as narrow as possible.

Source: Path instructions

@dlguszoo
dlguszoo merged commit e3abdca into develop Jul 25, 2026
1 check passed
@dlguszoo
dlguszoo deleted the design/#49 branch July 25, 2026 01:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🎨 Design UI 디자인 작업

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Design: Sidebar 디자인 수정사항 적용 및 온보딩 뷰 구현

2 participants