-
Notifications
You must be signed in to change notification settings - Fork 0
[QA] 여러 화면에서의 UI 오류 수정 #247
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Walkthrough여러 텍스트 입력 컴포넌트에 Changes
Sequence Diagram(s)sequenceDiagram
participant Caller as View / Initializer
participant BKTFV as BKTextFieldView
participant BKBase as BKBaseTextField
Note over Caller,BKTFV: 새 초기화에서 fontStyle 전달
Caller->>BKTFV: init(..., fontStyle)
BKTFV->>BKTFV: store fontStyle\ncreate BKBaseTextField(fontStyle)
BKTFV->>BKBase: init(..., fontStyle)
BKBase->>BKBase: textFont = fontStyle.uiFont\nplaceholderFont = defaultStyle.uiFont\napplyTypingAttributes()
BKBase-->>BKTFV: configured text field
BKTFV-->>Caller: view ready
(다른 제어 흐름 변경은 경미하여 별도 다이어그램 생략) Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes 검토 포인트:
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (3 passed)
✨ Finishing touches🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro 📒 Files selected for processing (2)
🧰 Additional context used🧠 Learnings (1)📓 Common learnings⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
🔇 Additional comments (3)
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. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/Projects/BKPresentation/Sources/Common/Extension/UINavigationController+.swift (1)
353-362:imageWithOffset메서드는 사용되지 않음 - 제거 권장검증 결과,
imageWithOffset메서드(353-362행)는 코드베이스 어디에서도 호출되지 않습니다. 이 메서드만 호출하는imageWithCustomRect도 더 이상 필요하지 않으므로 함께 제거하는 것을 권장합니다.
- 라인 353-362:
imageWithOffset제거- 라인 342-350:
imageWithCustomRect제거 (사용되지 않음)
🧹 Nitpick comments (3)
src/SupportingFiles/Booket/Info.plist (1)
24-24: CFBundleVersion도 증가시키는 것을 권장합니다.마케팅 버전(CFBundleShortVersionString)을 1.2.0으로 올린 것은 적절해 보입니다. 하지만 App Store에 제출할 때마다 CFBundleVersion(빌드 번호)도 함께 증가시켜야 합니다. 현재 "1"로 되어 있는데, 이전 빌드보다 큰 값으로 업데이트해주세요.
다음과 같이 수정하는 것을 권장합니다:
<key>CFBundleVersion</key> -<string>1</string> +<string>2</string>또는 빌드 자동화 시스템을 사용하는 경우 해당 시스템에서 자동으로 증가시키도록 설정되어 있는지 확인해주세요.
Also applies to: 38-39
.github/workflows/create-jira-issue.yml (2)
146-190: "Determine Issue Type" 단계의 반복적인 if-elif 체인은 유지보수성을 저하시킴.라벨별로 이슈 타입과 템플릿을 매핑하는 로직이 11개의 라벨에 대해 반복되고 있습니다. 이는 코드 중복으로 보이며, 새로운 라벨 추가 시 체인에 계속 추가해야 합니다.
라벨-타입 매핑을 JSON 맵으로 정의하여 단순화할 것을 권장합니다:
- name: Determine Issue Type id: type run: | LABELS_JSON=$(cat <<'JSON' ${{ toJson(github.event.issue.labels) }} JSON ) label_names=$(echo "$LABELS_JSON" | jq -r '.[].name') # 라벨-템플릿 매핑 정의 declare -A LABEL_MAP=( ["✨ feat"]="feature-task.yml" ["🐞 fix"]="fix-task.yml" ["🔨 refactor"]="refactor-task.yml" ["📃 docs"]="docs-task.yml" ["⚙️ chore"]="setting-task.yml" ["✅ test"]="test-task.yml" ["🎨 style"]="style-task.yml" ) # 라벨 순회하며 첫 매칭 찾기 for label in $label_names; do if [[ -n "${LABEL_MAP[$label]}" ]]; then echo "type=${label%% *}" >> $GITHUB_OUTPUT echo "template=${LABEL_MAP[$label]}" >> $GITHUB_OUTPUT break fi done # 기본값 if ! grep -q "template=" $GITHUB_OUTPUT; then echo "type=other" >> $GITHUB_OUTPUT echo "template=default.yml" >> $GITHUB_OUTPUT fi이 방식은 라벨 추가 시 매핑만 수정하면 되어 유지보수가 훨씬 용이합니다.
73-88: 브랜치 생성 로직이 두 작업에서 중복됨.Job 1 (라인 73-88)과 Job 2 (라인 272-287)에서 동일한 브랜치 생성 로직이 반복되고 있습니다. git 설정, 원격 확인, 브랜치 생성/푸시 단계가 모두 동일합니다.
향후 워크플로우 유지보수성 개선을 위해, 이 공통 로직을 다음과 같이 조직화할 것을 권장합니다:
재사용 가능한 워크플로우로 추출 (
.github/workflows/shared-create-branch.yml):name: Shared Create Branch on: workflow_call: inputs: branch_name: required: true type: string양쪽 작업에서 호출 (
uses: ./.github/workflows/shared-create-branch.yml):- name: Create branch using shared workflow uses: ./.github/workflows/shared-create-branch.yml@main with: branch_name: ${{ steps.branch.outputs.branch }}이는 버그 수정 시 한 곳만 수정하면 되므로 안정성이 높아집니다.
Also applies to: 272-287
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (18)
src/Projects/BKDesign/Resources/Assets.xcassets/checkbox/checkbox-filled-rectangle.imageset/checkbox-filled-rectangle.pngis excluded by!**/*.pngsrc/Projects/BKDesign/Resources/Assets.xcassets/checkbox/checkbox-filled-rectangle.imageset/checkbox-filled-rectangle@2x.pngis excluded by!**/*.pngsrc/Projects/BKDesign/Resources/Assets.xcassets/checkbox/checkbox-filled-rectangle.imageset/checkbox-filled-rectangle@3x.pngis excluded by!**/*.pngsrc/Projects/BKDesign/Resources/Assets.xcassets/checkbox/checkbox-filled.imageset/checkbox-filled.pngis excluded by!**/*.pngsrc/Projects/BKDesign/Resources/Assets.xcassets/checkbox/checkbox-filled.imageset/checkbox-filled@2x.pngis excluded by!**/*.pngsrc/Projects/BKDesign/Resources/Assets.xcassets/checkbox/checkbox-filled.imageset/checkbox-filled@3x.pngis excluded by!**/*.pngsrc/Projects/BKDesign/Resources/Assets.xcassets/checkbox/checkbox-icononly_active-rectangle.imageset/checkbox-icononly_active-rectangle.pngis excluded by!**/*.pngsrc/Projects/BKDesign/Resources/Assets.xcassets/checkbox/checkbox-icononly_active-rectangle.imageset/checkbox-icononly_active-rectangle@2x.pngis excluded by!**/*.pngsrc/Projects/BKDesign/Resources/Assets.xcassets/checkbox/checkbox-icononly_active-rectangle.imageset/checkbox-icononly_active-rectangle@3x.pngis excluded by!**/*.pngsrc/Projects/BKDesign/Resources/Assets.xcassets/checkbox/checkbox-icononly_active-round.imageset/checkbox-icononly_active-round.pngis excluded by!**/*.pngsrc/Projects/BKDesign/Resources/Assets.xcassets/checkbox/checkbox-icononly_active-round.imageset/checkbox-icononly_active-round@2x.pngis excluded by!**/*.pngsrc/Projects/BKDesign/Resources/Assets.xcassets/checkbox/checkbox-icononly_active-round.imageset/checkbox-icononly_active-round@3x.pngis excluded by!**/*.pngsrc/Projects/BKDesign/Resources/Assets.xcassets/checkbox/checkbox-stroke-rectangle.imageset/checkbox-stroke-rectangle.pngis excluded by!**/*.pngsrc/Projects/BKDesign/Resources/Assets.xcassets/checkbox/checkbox-stroke-rectangle.imageset/checkbox-stroke-rectangle@2x.pngis excluded by!**/*.pngsrc/Projects/BKDesign/Resources/Assets.xcassets/checkbox/checkbox-stroke-rectangle.imageset/checkbox-stroke-rectangle@3x.pngis excluded by!**/*.pngsrc/Projects/BKDesign/Resources/Assets.xcassets/checkbox/checkbox-stroke-round.imageset/checkbox-stroke-round.pngis excluded by!**/*.pngsrc/Projects/BKDesign/Resources/Assets.xcassets/checkbox/checkbox-stroke-round.imageset/checkbox-stroke-round@2x.pngis excluded by!**/*.pngsrc/Projects/BKDesign/Resources/Assets.xcassets/checkbox/checkbox-stroke-round.imageset/checkbox-stroke-round@3x.pngis excluded by!**/*.png
📒 Files selected for processing (15)
.github/ISSUE_TEMPLATE/qa-task.yml(1 hunks).github/workflows/PR_Label_Assign.yml(1 hunks).github/workflows/close-jira-issue.yml(2 hunks).github/workflows/create-jira-issue.yml(4 hunks).github/workflows/create_release_branch.yaml(0 hunks)src/Projects/BKDesign/Sources/Components/TextField/BKBaseTextField.swift(3 hunks)src/Projects/BKDesign/Sources/Components/TextField/BKSearchTextField.swift(1 hunks)src/Projects/BKDesign/Sources/Components/TextField/BKTextFieldView.swift(2 hunks)src/Projects/BKDesign/Sources/Components/TextField/BKTextView.swift(5 hunks)src/Projects/BKPresentation/Sources/Common/Extension/UINavigationController+.swift(1 hunks)src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift(1 hunks)src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceAppreciationView.swift(1 hunks)src/Projects/BKPresentation/Sources/MainFlow/NoteEdit/View/NoteEditView.swift(1 hunks)src/Projects/BKPresentation/Sources/MainFlow/Setting/Notification/View/NotificationSettingsView.swift(1 hunks)src/SupportingFiles/Booket/Info.plist(1 hunks)
💤 Files with no reviewable changes (1)
- .github/workflows/create_release_branch.yaml
🧰 Additional context used
🧠 Learnings (5)
📓 Common learnings
Learnt from: doyeonk429
Repo: YAPP-Github/Reed-iOS PR: 157
File: src/Projects/BKPresentation/Sources/AuthFlow/View/LoginView.swift:43-45
Timestamp: 2025-08-08T01:39:15.620Z
Learning: doyeonk429는 Reed-iOS 프로젝트에서 접근성 개선 작업을 별도의 전용 PR이나 이슈에서 일괄 처리하는 것을 선호한다. 개별 기능 구현 PR에서는 접근성 관련 제안을 하지 않고, 접근성 전담 작업에서 한번에 처리하는 방식을 원한다.
Learnt from: doyeonk429
Repo: YAPP-Github/Reed-iOS PR: 157
File: src/Projects/BKPresentation/Sources/MainFlow/Home/View/HomeViewController.swift:19-24
Timestamp: 2025-08-08T01:38:59.656Z
Learning: doyeonk429는 Reed-iOS 프로젝트에서 접근성(accessibility) 관련 개선사항은 현재 작업 중인 PR에서 즉시 처리하지 않고, 접근성 전용 PR이나 이슈를 별도로 만들어 한번에 처리하는 것을 선호한다.
Learnt from: doyeonk429
Repo: YAPP-Github/Reed-iOS PR: 163
File: src/Projects/BKData/Sources/DTO/Request/UserBookRegisterRequestDTO.swift:7-9
Timestamp: 2025-08-08T16:13:31.712Z
Learning: Reed-iOS에서 서버 스펙 변경으로 DTO 필드명이 바뀔 때, doyeonk429는 코드 전반의 파라미터/시그니처 리네이밍까지 확장하지 않고, 실제 요청 직렬화 키가 맞는지(예: isbn13)만 보장하면 충분하다는 범위 최소화 방식을 선호한다. (PR: YAPP-Github/Reed-iOS#163, 파일: BKData/Sources/DTO/Request/UserBookRegisterRequestDTO.swift)
📚 Learning: 2025-08-20T04:50:43.364Z
Learnt from: clxxrlove
Repo: YAPP-Github/Reed-iOS PR: 181
File: src/Projects/BKDesign/Sources/Components/TextField/BKTextView.swift:183-186
Timestamp: 2025-08-20T04:50:43.364Z
Learning: In BKTextView (src/Projects/BKDesign/Sources/Components/TextField/BKTextView.swift), the border width is intentionally kept at LayoutConstants.borderWidth even when there's no error message, with only the color changed to clear. This maintains layout consistency by preserving the border space.
Applied to files:
src/Projects/BKPresentation/Sources/MainFlow/Setting/Notification/View/NotificationSettingsView.swiftsrc/Projects/BKDesign/Sources/Components/TextField/BKTextFieldView.swiftsrc/Projects/BKDesign/Sources/Components/TextField/BKBaseTextField.swiftsrc/Projects/BKDesign/Sources/Components/TextField/BKTextView.swiftsrc/Projects/BKPresentation/Sources/MainFlow/NoteEdit/View/NoteEditView.swiftsrc/Projects/BKDesign/Sources/Components/TextField/BKSearchTextField.swiftsrc/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceAppreciationView.swift
📚 Learning: 2025-07-28T10:45:09.696Z
Learnt from: clxxrlove
Repo: YAPP-Github/Reed-iOS PR: 112
File: src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift:128-140
Timestamp: 2025-07-28T10:45:09.696Z
Learning: clxxrlove는 NoteView의 nextButtonTapped 메서드에서 폼 검증 실패 시 첫 번째 페이지로 되돌아가는 로직을 임시로 구현했으며, 추후 적절한 에러 처리 로직을 추가할 예정이라고 명시했다. 임시 화면 구현 단계에서는 기본 동작에 집중하고 에러 처리는 후속 작업으로 계획하는 것을 선호한다.
Applied to files:
src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift
📚 Learning: 2025-08-12T01:44:56.649Z
Learnt from: clxxrlove
Repo: YAPP-Github/Reed-iOS PR: 169
File: src/Projects/BKPresentation/Sources/MainFlow/BookDetail/ViewModel/BookDetailViewModel.swift:153-164
Timestamp: 2025-08-12T01:44:56.649Z
Learning: clxxrlove는 Reed-iOS 프로젝트에서 복잡한 액션 구조 변경보다는 throttling과 같은 간단한 해결책을 선호한다. nextPage 중복 증가 버그 해결에 대해 Action에 page 정보를 추가하는 방법보다 ViewController 레벨의 throttling을 선호했다.
Applied to files:
src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift
📚 Learning: 2025-08-26T07:08:40.739Z
Learnt from: clxxrlove
Repo: YAPP-Github/Reed-iOS PR: 203
File: src/Projects/BKDesign/Sources/Components/TextField/BKTextView.swift:102-110
Timestamp: 2025-08-26T07:08:40.739Z
Learning: In the Reed-iOS codebase, BKTextView's startEditing functionality is automatically triggered through ViewModel reactive bindings (likely via Combine), so manual focus calls after appendText are not needed as the focus is handled by the viewmodel layer.
Applied to files:
src/Projects/BKDesign/Sources/Components/TextField/BKTextFieldView.swiftsrc/Projects/BKDesign/Sources/Components/TextField/BKBaseTextField.swiftsrc/Projects/BKDesign/Sources/Components/TextField/BKTextView.swiftsrc/Projects/BKPresentation/Sources/MainFlow/NoteEdit/View/NoteEditView.swiftsrc/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceAppreciationView.swift
🧬 Code graph analysis (2)
src/Projects/BKDesign/Sources/Components/TextField/BKBaseTextField.swift (2)
src/Projects/BKDesign/Sources/Extensions/UIColor+.swift (1)
bkContentColor(52-63)src/Projects/BKDesign/Sources/Components/TextField/BKTextView.swift (1)
applyTypingAttributes(157-168)
src/Projects/BKDesign/Sources/Components/TextField/BKTextView.swift (2)
src/Projects/BKDesign/Sources/Components/TextField/BKBaseTextField.swift (1)
applyTypingAttributes(155-172)src/Projects/BKDesign/Sources/Components/Label/BKLabel.swift (1)
setFontStyle(100-103)
🪛 actionlint (1.7.8)
.github/workflows/create-jira-issue.yml
16-16: "github.event.issue.title" is potentially untrusted. avoid using it directly in inline scripts. instead, pass it through an environment variable. see https://docs.github.com/en/actions/reference/security/secure-use#good-practices-for-mitigating-script-injection-attacks for more details
(expression)
92-92: "github.event.issue.title" is potentially untrusted. avoid using it directly in inline scripts. instead, pass it through an environment variable. see https://docs.github.com/en/actions/reference/security/secure-use#good-practices-for-mitigating-script-injection-attacks for more details
(expression)
🔇 Additional comments (24)
.github/ISSUE_TEMPLATE/qa-task.yml (1)
6-40: QA 템플릿 구조가 잘 설계되었습니다.템플릿의 필드 구성과 유효성 검사 설정이 적절합니다. parentKey, description, tasks를 필수로 하고 links를 선택사항으로 둔 구조가 QA 작업 추적에 효과적입니다. 또한 명확한 한글 라벨과 적절한 placeholder를 제공하여 사용자 친화적입니다.
.github/workflows/PR_Label_Assign.yml (4)
15-15: GitHub Script 액션 버전 업그레이드가 적절합니다.actions/github-script를 v6에서 v7로 업그레이드한 것은 최신 기능과 보안 패치를 반영하는 좋은 개선입니다.
42-54: 에러 핸들링 추가가 훌륭합니다.라벨 추가 작업을 try/catch로 감싸고 실패 시 명확한 에러 메시지와 함께 워크플로우를 실패 처리하도록 한 것은 디버깅과 모니터링 측면에서 매우 좋은 개선입니다.
31-31: QA 라벨 매핑이 새로운 템플릿과 일관되게 추가되었습니다.새로 추가된 qa: 패턴과 '🛠️ qa' 라벨이
.github/ISSUE_TEMPLATE/qa-task.yml에서 정의한 라벨과 일치하여 일관성 있는 라벨링 자동화가 가능합니다.
21-21: 로깅 추가로 관찰성이 향상되었습니다.PR 제목 출력, 라벨 추가 성공/실패 메시지, 그리고 매칭되는 라벨이 없을 때의 팁 제공까지 추가한 로그들이 워크플로우 실행 추적과 디버깅에 유용합니다.
Also applies to: 40-40, 56-57
.github/workflows/close-jira-issue.yml (3)
19-45: 2단계 Jira 키 추출 로직이 명확하고 견고함.대괄호 내 키를 우선 추출 후 일반 패턴으로 폴백하는 설계는 명확하고, heredoc을 통한 신뢰할 수 없는 입력 처리도 보안적으로 적절합니다. 초기 종료 조건도 잘 설정되어 있습니다.
89-107: 성공/실패 피드백이 명확하게 분리되어 있음.라인 89-100에서 성공 시 GitHub 이슈에 댓글을 추가하고, 라인 102-107에서 실패 시 명시적인 로그를 남기는 방식은 워크플로우 상태를 명확하게 추적할 수 있게 합니다.
53-78: jq 필터의 견고성 검증 완료 — 엣지 케이스 처리가 올바르게 동작함라인 68의 select 필터와 라인 77의 전환 목록 필터는 모두 견고하게 설계되어 있습니다. 검증 결과:
- 빈 transitions 배열: 두 필터 모두 빈 출력을 반환하며 exit code 0 (정상)
- "개발 완료" 매칭 없음: HAS_TRANSITION은 빈 문자열 반환 →
[ -n "$HAS_TRANSITION" ]조건이 false로 올바르게 평가- 유효한 매칭: transition ID를 정확히 추출
따라서 라인 77의 jq 필터는 항상 성공하며,
continue-on-error: true는 API 응답 오류에 대한 적절한 방어 장치입니다..github/workflows/create-jira-issue.yml (3)
9-11: 2개 작업으로의 분리가 명확하고 선택적 흐름을 잘 구현함.qa 라벨 존재 여부에 따라 기존 Jira 이슈 연결과 새 이슈 생성을 분리한 설계는 로직이 명확하고 각 경로의 책임이 분명합니다. 라벨 기반 조건부 게이팅 (
if: contains(...),if: "!contains(...)")도 정확합니다.Also applies to: 141-143
90-103: 제목 업데이트 로직에서 신뢰할 수 없는 입력값 처리 개선 필요.라인 93의
"${{ github.event.issue.title }}"이 bash 문자열 비교에 직접 사용되고 있습니다. 비록 라인 17-24의 heredoc에서 이미 변수에 할당되었지만, 라인 93에서 직접 참조하면 주입 공격 가능성이 있습니다. 보안 모범 사례에 따라 환경변수를 통해 전달하세요.환경변수로 보안을 강화하는 예시:
- name: Check if title needs update id: check_title run: | + ISSUE_TITLE="${{ github.event.issue.title }}" JIRA_KEY="${{ steps.extract.outputs.jira_key }}" - if [[ "${{ github.event.issue.title }}" == *"$JIRA_KEY"* ]]; then + if [[ "$ISSUE_TITLE" == *"$JIRA_KEY"* ]]; then echo "skip=true" >> $GITHUB_OUTPUT echo "⚠️ Jira key already in title. Skipping update." else echo "skip=false" >> $GITHUB_OUTPUT - echo "new_title=[$JIRA_KEY] ${{ github.event.issue.title }}" >> $GITHUB_OUTPUT + echo "new_title=[$JIRA_KEY] $ISSUE_TITLE" >> $GITHUB_OUTPUT echo "✅ Will update title." fi
199-251: create-new-jira 작업의 Jira 이슈 생성 흐름이 정확함.이슈 파서에서 추출한 정보를 markdown-to-jira 변환하여 Jira에 생성하는 흐름 (라인 204-246)이 명확하고, 부모-자식 관계 설정도 올바릅니다. 로깅 단계 (라인 210-213, 248-251)도 디버깅에 유용합니다.
src/Projects/BKPresentation/Sources/MainFlow/Setting/Notification/View/NotificationSettingsView.swift (1)
249-249: LGTM!알림 권한 요청 영역과 토글 컨테이너 사이의 spacing을 확대하여 UI 일관성을 개선했습니다.
toggleEmptySpacing과 동일한 값을 사용하는 것이 적절합니다.src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift (1)
203-207: LGTM!페이지 위치에 따라 버튼 타이틀을 동적으로 변경하여 사용자 경험을 개선했습니다. 마지막 페이지에서는 "기록 완료", 그 외에는 "다음"을 표시하는 것이 직관적입니다.
src/Projects/BKPresentation/Sources/MainFlow/NoteEdit/View/NoteEditView.swift (1)
33-49: LGTM!세 개의 입력 컴포넌트에
fontStyle: .body2(weight: .medium)을 추가하여 폰트 속성(행간 등)이 일관되게 적용되도록 개선했습니다. PR 목표인 BKTextField/BKTextView 계열의 폰트 attribute 수정 사항이 잘 반영되었습니다.src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceAppreciationView.swift (1)
16-16: LGTM!안내 텍스트를 더 친근하고 자유로운 표현으로 개선하여 사용자가 부담 없이 감상을 작성할 수 있도록 했습니다.
src/Projects/BKDesign/Sources/Components/TextField/BKSearchTextField.swift (1)
33-48: LGTM!
BKSearchTextField의 초기화에fontStyle파라미터를 추가하여 typography 일관성을 확보했습니다. 기본값을 제공하여 기존 코드와의 호환성을 유지하면서도 필요한 경우 커스터마이징이 가능합니다.src/Projects/BKDesign/Sources/Components/TextField/BKTextView.swift (3)
66-76: LGTM!
BKTextView에fontStyle지원을 추가하여 typography 일관성을 확보했습니다.fontStyle을textView.font와placeholderLabel에 모두 적용하여 시각적 일관성을 유지합니다.Also applies to: 138-143
157-168: 핵심 수정사항: 행간 문제 해결
applyTypingAttributes()메서드 추가가 이번 PR의 핵심 수정사항입니다.fontStyle.paragraphStyle을typingAttributes에 적용함으로써 행간 등 폰트 attribute가 제대로 지정되지 않던 문제를 해결했습니다.
71-71: 컴포넌트 목적 차이 고려하여 재검토 필요
BKTextView는 새로 추가된 멀티라인 입력용 텍스트 뷰 컴포넌트이고,BKBaseTextField,BKSearchTextField,BKTextFieldView는 단일 라인 입력용 텍스트 필드 컴포넌트로 서로 다른 용도입니다.다만
.body2(weight: .regular)vs.body2(weight: .medium)차이가 의도된 디자인인지 아직 확인되지 않았으므로:
- 디자인 시스템 가이드나 PM/디자인팀의 명시적 지시사항 확인
- 필요시 일관성 있는 weight로 통일
src/Projects/BKDesign/Sources/Components/TextField/BKBaseTextField.swift (4)
45-58: LGTM!
fontStyle파라미터를 추가하고 이를 기반으로textFont와placeholderFont를 초기화합니다. placeholder는 항상.body2(weight: .regular)를 사용하여 본문 텍스트보다 가벼운 느낌을 주는 것이 좋은 디자인 결정입니다.
32-33: LGTM!
textFont와placeholderFont를 optional로 변경하여 타입 안전성을 개선했습니다. 이후 코드에서 guard 문으로 안전하게 처리하고 있습니다.
155-172: 핵심 수정사항: 행간 문제 해결
applyTypingAttributes()메서드가 이번 PR의 핵심입니다.fontStyle.paragraphStyle을typingAttributes와defaultTextAttributes에 적용하여 행간 등 폰트 attribute가 제대로 지정되지 않던 문제를 해결했습니다. BKTextView와 동일한 패턴을 사용하여 일관성을 유지합니다.
190-212: LGTM!placeholder 스타일 적용 시 optional 폰트를 안전하게 처리하고,
paragraphStyle을 적용하여 행간을 맞추며,baselineOffset을 계산하여 placeholder와 입력 텍스트의 수직 정렬을 개선했습니다.src/Projects/BKDesign/Sources/Components/TextField/BKTextFieldView.swift (1)
8-8: LGTM!
textField를 stored property로 변경하고fontStyle파라미터를 추가하여 초기화 시점에 내부BKBaseTextField에fontStyle을 전달합니다. 이를 통해 컴포넌트 계층 전체에서 typography 일관성이 유지됩니다.Also applies to: 14-14, 47-64
| .imageWithOffset(x: -4, y: 2) ?? BKImage.Icon.chevronLeft | ||
| .withAlignmentRectInsets( | ||
| UIEdgeInsets(top: 0, left: -16, bottom: 0, right: 0) | ||
| UIEdgeInsets(top: 0, left: -8, bottom: 0, right: 0) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
백버튼 인셋 조정 확인
인셋 값이 -16에서 -8로 조정되고 imageWithOffset 변환이 제거되어 백버튼 위치가 더 표준에 가까워졌습니다. 이는 PR 목표인 백버튼 인셋 통일과 일치합니다.
다음 스크립트로 이 스타일을 사용하는 모든 화면에서 백버튼이 올바르게 렌더링되는지 확인하세요:
🏁 Script executed:
#!/bin/bash
# Description: BKNavigationBarStyle.standard를 사용하는 모든 ViewController 찾기
# standard 스타일을 사용하는 모든 파일 검색
rg -n -A5 -B2 'BKNavigationBarStyle\.standard' --type=swiftLength of output: 0
검색 결과가 없어 추가 검증이 필요합니다. 파일 내용과 변경 영향을 확인하겠습니다.
---
🏁 Script executed:
```shell
#!/bin/bash
# Description: 파일 존재 확인 및 271줄 주변 내용 확인
# 파일 존재 확인
if [ -f "src/Projects/BKPresentation/Sources/Common/Extension/UINavigationController+.swift" ]; then
echo "=== File found ==="
echo "=== Lines 260-280 context ==="
sed -n '260,280p' "src/Projects/BKPresentation/Sources/Common/Extension/UINavigationController+.swift" | nl -v 260
else
echo "File not found"
fi
Length of output: 89
🏁 Script executed:
#!/bin/bash
# Description: imageWithOffset 메서드 사용 여부 확인
echo "=== Searching for imageWithOffset usage ==="
rg -n 'imageWithOffset' --type=swift -C3
echo -e "\n=== Searching for back button related code ==="
rg -n 'backButton\|back_button\|UIBarButtonItem' --type=swift -C2 | head -50Length of output: 941
🏁 Script executed:
#!/bin/bash
# Description: UINavigationController 확장에서 정의된 모든 메서드 확인
echo "=== Methods in UINavigationController extension ==="
ast-grep --pattern $'extension UINavigationController {
$$$
}'Length of output: 51
더 정확한 파일 내용 확인이 필요합니다.
---
🏁 Script executed:
```shell
#!/bin/bash
# Description: 271줄을 포함한 주변 코드 확인 및 imageWithOffset 호출 확인
echo "=== Lines 260-280 ==="
sed -n '260,280p' "src/Projects/BKPresentation/Sources/Common/Extension/UINavigationController+.swift"
echo -e "\n=== Lines 350-365 (imageWithOffset method) ==="
sed -n '350,365p' "src/Projects/BKPresentation/Sources/Common/Extension/UINavigationController+.swift"
echo -e "\n=== Searching for imageWithOffset() call (not just definition) ==="
rg 'imageWithOffset\(' --type=swift -n
Length of output: 1479
🏁 Script executed:
#!/bin/bash
# Description: 전체 파일에서 Back 버튼 관련 메서드 검색
echo "=== Searching for Back button setup methods ==="
rg -n 'setupBack|configureBack|backButtonImage|back.*Image' --type=swift -C2
echo -e "\n=== Checking file size and structure ==="
wc -l "src/Projects/BKPresentation/Sources/Common/Extension/UINavigationController+.swift"Length of output: 4455
Dead code 제거 필요: imageWithOffset 메서드는 사용되지 않습니다
Line 271의 인셋 조정은 configureBackButton 메서드에 올바르게 통합되어 있으며 line 129에서 호출되어 활성화됩니다. 변경된 -8 좌측 인셋 값이 모든 표준 네비게이션 바에 일관되게 적용되어 PR 목표(백버튼 인셋 통일)가 달성됩니다.
그러나 lines 353-361의 imageWithOffset 메서드는 파일 내 어디에서도 호출되지 않는 dead code입니다. 이 메서드를 제거하여 코드를 정리하세요.
// 제거 대상 (lines 353-361)
func imageWithOffset(x: CGFloat = 0, y: CGFloat = 0) -> UIImage? {
let newRect = CGRect(
x: x,
y: y,
width: size.width,
height: size.height
)
return imageWithCustomRect(newRect, canvasSize: size)
}🤖 Prompt for AI Agents
In
src/Projects/BKPresentation/Sources/Common/Extension/UINavigationController+.swift
around lines 353 to 361, remove the unused dead method `imageWithOffset(x:y:)`
(the entire function block shown in the comment) and any stray helper calls or
unused imports tied only to it; keep existing `configureBackButton` and the
inset at line 271 as-is, and run a quick project-wide search to confirm no
remaining references to `imageWithOffset` before committing.
doyeonk429
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수고하셨습니다. CI 통과 되면 바로 Merge하셔도 될 것 같아요.
955175e to
a9d810f
Compare
|
@doyeonk429 다시 돌려보니까 되네요... 외부 영향인듯... |
🔗 관련 이슈
📘 작업 유형
📙 작업 내역
🧪 테스트 내역
🎨 스크린샷 또는 시연 영상 (선택)
Summary by CodeRabbit
새로운 기능
UI/UX 개선
버전
잡무(Chores)