-
Notifications
You must be signed in to change notification settings - Fork 0
Fix/#149 1μ°¨ QA #154
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
Fix/#149 1μ°¨ QA #154
Conversation
|
Caution Review failedThe pull request is closed. π WalkthroughWalkthroughμ±λ¦°μ§ κ΄λ ¨ λ·°μ λ μ΄μμΒ·νμ΄ν¬κ·ΈλνΌ μ‘°μ , ChallengeProgressViewModelμ μλ£ νμ μμ±(isChallengeCompleted) μΆκ° λ° μλ£ μ Coordinatorλ‘ μ‘°κ±΄λΆ λ€λΉκ²μ΄μ λ‘μ§ μΆκ°, λ€μ μ΄λ―Έμ§ μμ°μ SVGμμ PNG(1x/2x/3x)λ‘ λ§μ΄κ·Έλ μ΄μ ν¨. Changes
Sequence Diagram(s)sequenceDiagram
participant View as ChallengeProgressView
participant VM as ChallengeProgressViewModel
participant Coord as ChallengeCoordinator
View->>VM: await viewModel.advanceDay()
Note right of VM: currentDay μ¦κ° λ° μν μ
λ°μ΄νΈ
VM-->>View: Published μν λ³κ²½
alt VM.isChallengeCompleted == true
View->>Coord: challengeCoordinator.push(.startChallenge)
else
Note right of View: μΆκ° λ€λΉκ²μ΄μ
μμ
end
Estimated code review effortπ― 4 (Complex) | β±οΈ ~45 minutes Possibly related PRs
Suggested reviewers
π₯ Pre-merge checks | β 3 | β 2β Failed checks (1 warning, 1 inconclusive)
β Passed checks (3 passed)
βοΈ Tip: You can configure your own custom pre-merge checks in the settings. β¨ Finishing touches
π§ͺ Generate unit tests (beta)
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
π€ Fix all issues with AI agents
In
`@Cherrish-iOS/Cherrish-iOS/Presentation/Feature/ChallengeView/Coordinator/ViewModel/ChallengeProgressViewModel.swift`:
- Around line 97-99: The isChallengeCompleted property currently hardcodes the
7-day completion check; change it to use a configurable duration value (e.g., a
Challenge.duration / totalDays constant or a value from the Challenge
model/repository) instead of the literal 7. Update ChallengeProgressViewModel to
reference that configurable property (for example challengeDuration or
challenge.totalDays) when evaluating currentDay in isChallengeCompleted so
different challenge lengths are supported. Ensure the new source is injected or
accessible in the ViewModel constructor or via its existing challenge/currentDay
data so you don't introduce globals.
In
`@Cherrish-iOS/Cherrish-iOS/Presentation/Feature/ChallengeView/View/ChallengeProgressView.swift`:
- Around line 160-175: The completion branch calls
challengeCoordinator.push(.startChallenge) regardless of whether
viewModel.advanceDay() succeeded; modify the branch handling in the
CherrishButton action so you await and verify success before navigating: call
viewModel.advanceDay() and check its result (or catch errors if it throws) and
only call challengeCoordinator.push(.startChallenge) when advanceDay reports
success; update viewModel.advanceDay() to return a Bool or throw if it currently
doesn't so you can gate navigation in the completion path (symbols:
CherrishButton, viewModel.isChallengeCompleted, viewModel.advanceDay(),
challengeCoordinator.push(.startChallenge)).
| var isChallengeCompleted: Bool { | ||
| currentDay == 7 | ||
| } |
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.
π§Ή Nitpick | π΅ Trivial
μλ£ κΈ°μ€(7μΌ) νλμ½λ© νμΈ νμ.
μ±λ¦°μ§ κΈ°κ°μ΄ κ³ μ 7μΌμ΄ μλλΌλ©΄ λ°μ΄ν°/μμλ‘ λΆλ¦¬ν΄ κΈ°μ€μ λ§μΆλ νΈμ΄ μμ ν©λλ€.
π€ Prompt for AI Agents
In
`@Cherrish-iOS/Cherrish-iOS/Presentation/Feature/ChallengeView/Coordinator/ViewModel/ChallengeProgressViewModel.swift`
around lines 97 - 99, The isChallengeCompleted property currently hardcodes the
7-day completion check; change it to use a configurable duration value (e.g., a
Challenge.duration / totalDays constant or a value from the Challenge
model/repository) instead of the literal 7. Update ChallengeProgressViewModel to
reference that configurable property (for example challengeDuration or
challenge.totalDays) when evaluating currentDay in isChallengeCompleted so
different challenge lengths are supported. Ensure the new source is injected or
accessible in the ViewModel constructor or via its existing challenge/currentDay
data so you don't introduce globals.
| CherrishButton( | ||
| title: "μ€λ λ―Έμ μ’ λ£νκΈ°", | ||
| title: viewModel.isChallengeCompleted ? "μ±λ¦°μ§ μ’ λ£νκΈ°":"μ€λ λ―Έμ μ’ λ£νκΈ°", | ||
| type: .small, | ||
| state: .constant(buttonState), | ||
| leadingIcon: nil, | ||
| trailingIcon: nil | ||
| ) { | ||
| Task { | ||
| await viewModel.advanceDay() | ||
| if viewModel.isChallengeCompleted { | ||
| Task { | ||
| await viewModel.advanceDay() | ||
| challengeCoordinator.push(.startChallenge) | ||
| } | ||
| }else { | ||
| Task { | ||
| await viewModel.advanceDay() | ||
| } |
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.
μλ£ λΆκΈ°μμ advanceDay μ€ν¨ μμλ λ€λΉκ²μ΄μ
λ©λλ€.
advanceDay()κ° μ€ν¨ν΄λ κ³§λ°λ‘ μ μ±λ¦°μ§λ‘ μ΄λνλ©΄ μλ² μνμ UIκ° μ΄κΈλ μ μμ΅λλ€. μ±κ³΅ νμΈ ν μ΄λνλλ‘ κ°λκ° νμν©λλ€.
β μμ μ μ
- if viewModel.isChallengeCompleted {
- Task {
- await viewModel.advanceDay()
- challengeCoordinator.push(.startChallenge)
- }
- }else {
- Task {
- await viewModel.advanceDay()
- }
- }
+ if viewModel.isChallengeCompleted {
+ Task {
+ await viewModel.advanceDay()
+ guard viewModel.errorMessage == nil else { return }
+ challengeCoordinator.push(.startChallenge)
+ }
+ } else {
+ Task {
+ await viewModel.advanceDay()
+ }
+ }π€ Prompt for AI Agents
In
`@Cherrish-iOS/Cherrish-iOS/Presentation/Feature/ChallengeView/View/ChallengeProgressView.swift`
around lines 160 - 175, The completion branch calls
challengeCoordinator.push(.startChallenge) regardless of whether
viewModel.advanceDay() succeeded; modify the branch handling in the
CherrishButton action so you await and verify success before navigating: call
viewModel.advanceDay() and check its result (or catch errors if it throws) and
only call challengeCoordinator.push(.startChallenge) when advanceDay reports
success; update viewModel.advanceDay() to return a Bool or throw if it currently
doesn't so you can gate navigation in the completion path (symbols:
CherrishButton, viewModel.isChallengeCompleted, viewModel.advanceDay(),
challengeCoordinator.push(.startChallenge)).
y-eonee
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.
soseoyo12
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.
μ~!!!~ μκ³ νμ
¨μ¨λμ
wotjs020708
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.
κ³ μνμ ¨μ΅λλ€. κ·Όλ° ν°νΈ λ§λ€ λμ΄ μ‘μμ£Όμ μΌ νλ κ±° μλκ°μ?
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: 4
π€ Fix all issues with AI agents
In
`@Cherrish-iOS/Cherrish-iOS/Presentation/Feature/ChallengeView/View/ChallengeLoadingView.swift`:
- Around line 16-29: The fixed frame heights applied to TypographyText in
ChallengeLoadingView (the TypographyText(...) calls with .frame(height: ...))
prevent Dynamic Type resizing and can truncate text; remove the explicit
.frame(height:) on those TypographyText instances (or replace with a flexible
.frame(minHeight: ...) or no height constraint), add .lineLimit(nil) and
.fixedSize(horizontal: false, vertical: true) so lines can grow, and ensure the
TypographyText view itself uses a scalable font (applies .font with a
.scaledFont / .dynamicType support or .environment(\.sizeCategory) handling) so
the text responds to accessibility Dynamic Type changes.
In
`@Cherrish-iOS/Cherrish-iOS/Presentation/Feature/ChallengeView/View/ChallengeProgressView.swift`:
- Around line 51-53: The ChallengeProgressView currently declares
`@EnvironmentObject` private var challengeCoordinator: ChallengeCoordinator which
can crash if not injected and declares `@StateObject` var viewModel:
ChallengeProgressViewModel with non-private visibility; update the view to
ensure safe EnvironmentObject usage by either (1) asserting or providing a
fallback when ChallengeCoordinator is missing at creation sites (verify all
ChallengeProgressView initializers call
.environmentObject(ChallengeCoordinator()) or wrap uses in a parent that injects
it) or (2) change the property to `@EnvironmentObject` private var
challengeCoordinator: ChallengeCoordinator? and guard/handle the nil case to
avoid runtime crashes; also make viewModel private (change to `@StateObject`
private var viewModel) and adopt the init-injection pattern for
ChallengeProgressView by adding an init(_ viewModel: ChallengeProgressViewModel)
that assigns _viewModel = StateObject(wrappedValue: viewModel) to satisfy
SwiftLint and visibility expectations, and then update all call sites to pass
the viewModel and ensure .environmentObject(ChallengeCoordinator) is applied
where the view is created.
In
`@Cherrish-iOS/Cherrish-iOS/Presentation/Feature/ChallengeView/View/ChallengeSelectRoutineView.swift`:
- Around line 21-31: The two TypographyText views inside the VStack are forced
to a fixed height via .frame(height: 27.adjustedH) which can cause truncation
for longer translations or Dynamic Type; remove the fixed height or replace it
with a dynamic-friendly approach for the TypographyText components used here
(e.g., allow flexible height, remove .frame(height:), and if necessary add
modifiers like lineLimit(nil) / fixedSize(horizontal: false, vertical: true) or
use .multilineTextAlignment and a minHeight constraint) so the text can grow
with accessibility font sizes and long locales while keeping the existing VStack
and TypographyText usages intact.
In
`@Cherrish-iOS/Cherrish-iOS/Presentation/Feature/ChallengeView/View/StartChallengeView.swift`:
- Around line 20-23: The two TypographyText instances (the one with "μ΄λ²μ μ΄λ€ 루ν΄μΌλ‘
κ΄λ¦¬ν κΉμ?" using .frame(height: 30.adjustedH) and the one with "루ν΄μ μ§ν¬μλ‘ μ²΄λ¦¬κ° μ±μ₯ν΄μ."
using .frame(height: 24.adjustedH)) use fixed heights that can truncate wrapped
or localized text; remove the fixed .frame(height: ...) or replace it with a
flexible layout approach and enable multiline by adding lineLimit(nil) and
allowing vertical expansion (e.g., fixedSize(horizontal: false, vertical: true)
or no explicit height constraint) so the text can grow for wrapping/localization
while keeping any intended spacing via surrounding containers or Spacer.
β»οΈ Duplicate comments (1)
Cherrish-iOS/Cherrish-iOS/Presentation/Feature/ChallengeView/View/ChallengeProgressView.swift (1)
169-183: μλ£ λΆκΈ°μμ advanceDay μ€ν¨ μ¬λΆ νμΈ μμ΄ λ€λΉκ²μ΄μ λ¨
advanceDay()κ° μ€ν¨ν΄λ μ’ λ£ νλ©΄μΌλ‘ μ΄λν μ μμ΄ μλ² μνμ UIκ° μ΄κΈλ μ μμ΅λλ€. μ±κ³΅ νμΈ ν μ΄λνλλ‘ κ°λκ° νμν©λλ€.β μμ μ μ
- if viewModel.isChallengeCompleted { - Task { - await viewModel.advanceDay() - challengeCoordinator.push(.startChallenge) - } - }else { - Task { - await viewModel.advanceDay() - } - } + if viewModel.isChallengeCompleted { + Task { + await viewModel.advanceDay() + guard viewModel.errorMessage == nil else { return } + challengeCoordinator.push(.startChallenge) + } + } else { + Task { + await viewModel.advanceDay() + } + }
| highlight(highlightText: viewModel.selectedRoutine?.description ?? "", normalText: "λ°©ν₯μ λ°νμΌλ‘") | ||
| .padding(.top, 113.adjustedH) | ||
| .frame(height: 27.adjustedH) | ||
| .padding(.top, 94.adjustedH) | ||
| TypographyText("TO-DO λ―Έμ μ λ§λ€κ³ μμ΄μ.", style: .title1_sb_18, color: .gray800) | ||
|
|
||
| LottieView(animationName: "splash", loopMode: .loop) | ||
| .frame(width: 130.adjustedW, height: 154.adjustedH) | ||
| .padding(.top, 60.adjustedH) | ||
|
|
||
| Spacer() | ||
| .frame(height: 80.adjustedH) | ||
|
|
||
| TypographyText("μ μλ§ κΈ°λ€λ €μ£ΌμΈμ!", style: .title2_sb_16, color: .gray800) | ||
| .frame(height: 27.adjustedH) | ||
| Image(.loading) | ||
| .frame(height: 364.adjustedH) | ||
| .padding(.top, 17.adjustedH) | ||
| TypographyText("μ μλ§ κΈ°λ€λ €μ£ΌμΈμ!", style: .title2_m_16, color: .gray800) | ||
| .frame(height: 24.adjustedH) | ||
| .padding(.top, 17.adjustedH) | ||
|
|
||
| Spacer() | ||
|
|
||
| TypographyText("AIκ° λ§μΆ€ν 루ν΄μ μ μνκ³ μμ΄μ.", style: .body3_m_12, color: .gray600) | ||
| .frame(height: 17.adjustedH) |
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
π Script executed:
# ChallengeLoadingView.swift νμΌ μμΉ λ° ν¬κΈ° νμΈ
find . -name "ChallengeLoadingView.swift" -type fRepository: TEAM-Cherrish/Cherrish-iOS
Length of output: 196
π Script executed:
# νμΌ λ΄μ© νμΈ (μ 체 ꡬ쑰 νμ
)
cat -n Cherrish-iOS/Cherrish-iOS/Presentation/Feature/ChallengeView/View/ChallengeLoadingView.swiftRepository: TEAM-Cherrish/Cherrish-iOS
Length of output: 1841
π Script executed:
# adjustedHκ° λ¬΄μμΈμ§ νμΈ (컀μ€ν
modifier λλ extension κ²μ)
rg "adjustedH" --type swift -B 2 -A 2Repository: TEAM-Cherrish/Cherrish-iOS
Length of output: 50383
π Script executed:
# TypographyText ꡬν νμΈ
find . -name "*.swift" -type f -exec grep -l "struct TypographyText" {} \;Repository: TEAM-Cherrish/Cherrish-iOS
Length of output: 139
π Script executed:
# λ€λ₯Έ λ·°μμ λμ νμ
μ²λ¦¬ λ°©μ νμΈ (lineLimit, minimumScaleFactor λ±)
rg "lineLimit|minimumScaleFactor|\.font\(" --type swift | head -30Repository: TEAM-Cherrish/Cherrish-iOS
Length of output: 585
π Script executed:
# TypographyText ꡬν μ°ΎκΈ°
find . -name "*.swift" -type f | xargs grep -l "struct TypographyText\|typealias TypographyText"Repository: TEAM-Cherrish/Cherrish-iOS
Length of output: 139
π Script executed:
# TypographyTextμ μ 체 ꡬν νμΈ
rg "struct TypographyText" -A 20 --type swiftRepository: TEAM-Cherrish/Cherrish-iOS
Length of output: 1678
π Script executed:
# Font+.swift νμΌ λ΄μ© νμΈ
cat -n ./Cherrish-iOS/Cherrish-iOS/Presentation/Global/Extension/Font+.swiftRepository: TEAM-Cherrish/Cherrish-iOS
Length of output: 3963
π Script executed:
# Adjust+.swift μ 체 λ΄μ© νμΈ
cat -n Cherrish-iOS/Cherrish-iOS/Presentation/Global/Extension/Adjust+.swiftRepository: TEAM-Cherrish/Cherrish-iOS
Length of output: 1218
TypographyText λμ νμ λμ κ²ν νμ
adjustedHλ κΈ°κΈ°λ³ λΉλ‘ μ€μΌμΌλ§μ΄λ―λ‘ SE/Pro Max κ° λμ΄ μ°¨μ΄λ μλ μ‘°μ λ©λλ€. κ·Έλ¬λ TypographyTextμ λͺ μμ frame(height:)μ λμ νμ ν¬κΈ° λ³νμ λμνμ§ μμ, μ κ·Όμ± μ€μ (Dynamic Type XL μ΄μ)μμ ν μ€νΈ μ λ¨ κ°λ₯μ±μ΄ μμ΅λλ€. λμ νμ νκ²½μμ ν μ€νΈνκ³ νμμ lineLimit λλ μ΅μ λμ΄ μ‘°μ μ κ³ λ €νμΈμ.
π€ Prompt for AI Agents
In
`@Cherrish-iOS/Cherrish-iOS/Presentation/Feature/ChallengeView/View/ChallengeLoadingView.swift`
around lines 16 - 29, The fixed frame heights applied to TypographyText in
ChallengeLoadingView (the TypographyText(...) calls with .frame(height: ...))
prevent Dynamic Type resizing and can truncate text; remove the explicit
.frame(height:) on those TypographyText instances (or replace with a flexible
.frame(minHeight: ...) or no height constraint), add .lineLimit(nil) and
.fixedSize(horizontal: false, vertical: true) so lines can grow, and ensure the
TypographyText view itself uses a scalable font (applies .font with a
.scaledFont / .dynamicType support or .environment(\.sizeCategory) handling) so
the text responds to accessibility Dynamic Type changes.
| @EnvironmentObject private var challengeCoordinator: ChallengeCoordinator | ||
| @StateObject var viewModel: ChallengeProgressViewModel | ||
|
|
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.
π§Ή Nitpick | π΅ Trivial
EnvironmentObject μ£Όμ
보μ₯ λ° @StateObject κ°μμ± μ 리 νμ
μλ‘ μΆκ°λ EnvironmentObjectκ° μμμμ μ£Όμ
λμ§ μμΌλ©΄ λ°νμ ν¬λμκ° λ©λλ€. μμ± μμΉμμ μ£Όμ
μ¬λΆλ₯Ό νμΈν΄ μ£ΌμΈμ. λν @StateObjectλ λ³΄ν΅ privateλ‘ λκ³ initμμ μ£Όμ
νλ ν¨ν΄μ΄ κΆμ₯λ©λλ€(SwiftLint κ²½κ³ ).
β»οΈ `@StateObject` μ κ·Όμ± μ 리 μ μ
- `@StateObject` var viewModel: ChallengeProgressViewModel
+ `@StateObject` private var viewModel: ChallengeProgressViewModel
+
+ init(viewModel: ChallengeProgressViewModel) {
+ _viewModel = StateObject(wrappedValue: viewModel)
+ }#!/bin/bash
# ChallengeProgressView μμ± μμΉμ EnvironmentObject μ£Όμ
μ¬λΆ νμΈ
rg -n --type=swift -C3 '\bChallengeProgressView\b'
rg -n --type=swift -C3 '\.environmentObject\([^)]*ChallengeCoordinator'π§° Tools
πͺ SwiftLint (0.57.0)
[Warning] 52-52: SwiftUI state properties should be private
(private_swiftui_state)
π€ Prompt for AI Agents
In
`@Cherrish-iOS/Cherrish-iOS/Presentation/Feature/ChallengeView/View/ChallengeProgressView.swift`
around lines 51 - 53, The ChallengeProgressView currently declares
`@EnvironmentObject` private var challengeCoordinator: ChallengeCoordinator which
can crash if not injected and declares `@StateObject` var viewModel:
ChallengeProgressViewModel with non-private visibility; update the view to
ensure safe EnvironmentObject usage by either (1) asserting or providing a
fallback when ChallengeCoordinator is missing at creation sites (verify all
ChallengeProgressView initializers call
.environmentObject(ChallengeCoordinator()) or wrap uses in a parent that injects
it) or (2) change the property to `@EnvironmentObject` private var
challengeCoordinator: ChallengeCoordinator? and guard/handle the nil case to
avoid runtime crashes; also make viewModel private (change to `@StateObject`
private var viewModel) and adopt the init-injection pattern for
ChallengeProgressView by adding an init(_ viewModel: ChallengeProgressViewModel)
that assigns _viewModel = StateObject(wrappedValue: viewModel) to satisfy
SwiftLint and visibility expectations, and then update all call sites to pass
the viewModel and ensure .environmentObject(ChallengeCoordinator) is applied
where the view is created.
| VStack(alignment: .leading, spacing: 0){ | ||
| TypographyText("μ§κΈ λμκ² κ°μ₯ νμν", | ||
| style: .title1_sb_18, | ||
| color: .gray1000 | ||
| ) | ||
| .frame(height: 27.adjustedH) | ||
| TypographyText("κ΄λ¦¬ 루ν΄μ μ νν΄μ£ΌμΈμ.", | ||
| style: .title1_sb_18, | ||
| color: .gray1000 | ||
| ) | ||
| .frame(height: 27.adjustedH) |
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
π Script executed:
# νμΌ κ΅¬μ‘° νμ
find . -type f -name "*.swift" | grep -i typography | head -20Repository: TEAM-Cherrish/Cherrish-iOS
Length of output: 196
π Script executed:
# ChallengeSelectRoutineView.swift μ 체 λ΄μ© νμΈ
find . -path "*ChallengeSelectRoutineView.swift" -type fRepository: TEAM-Cherrish/Cherrish-iOS
Length of output: 196
π Script executed:
# TypographyText μ μ μ°ΎκΈ°
rg "struct TypographyText|class TypographyText" -A 10Repository: TEAM-Cherrish/Cherrish-iOS
Length of output: 1081
π Script executed:
# adjustedH μ μ μ°ΎκΈ°
rg "adjustedH" -B 2 -A 2Repository: TEAM-Cherrish/Cherrish-iOS
Length of output: 50383
π Script executed:
# adjustedH νμ₯ ν¨μ μ μ μ°ΎκΈ°
rg "adjustedH" -B 5 -A 2 | grep -A 7 "func adjustedH\|extension.*adjustedH\|var adjustedH"Repository: TEAM-Cherrish/Cherrish-iOS
Length of output: 2224
π Script executed:
# TypographyText μ 체 ꡬν νμΈ
cat -n Cherrish-iOS/Cherrish-iOS/Presentation/Global/Extension/Font+.swift | head -100Repository: TEAM-Cherrish/Cherrish-iOS
Length of output: 3963
π Script executed:
# λ€μ΄λλ―Ή νμ
μ§μ μ¬λΆ νμΈ
rg "dynamicTypeSize|preferredContentSizeCategory|@Environment.*dynamicTypeSize" -A 3Repository: TEAM-Cherrish/Cherrish-iOS
Length of output: 52
κ³ μ λμ΄λ‘ λ€μ€ μΈμ΄ νλ λ° λ€μ΄λλ―Ή νμ μμ ν μ€νΈ μλ¦Ό μν
.frame(height: 27.adjustedH)λ νλ©΄ λΉμ¨λ§ μ‘°μ νκ³ λ€μ΄λλ―Ή νμ
(μμ€ν
ν°νΈ μ€μ )μ κ³ λ €νμ§ μμ΅λλ€. κΈ΄ λ²μμ΄ νμν λ‘μΌμΌμ΄λ μ¬μ©μκ° ν
μ€νΈ ν¬κΈ°λ₯Ό νλνμ λ λ μ€μ΄ μ§μ λ λμ΄λ₯Ό μ΄κ³Όνμ¬ μ릴 μ μμ΅λλ€.
π€ Prompt for AI Agents
In
`@Cherrish-iOS/Cherrish-iOS/Presentation/Feature/ChallengeView/View/ChallengeSelectRoutineView.swift`
around lines 21 - 31, The two TypographyText views inside the VStack are forced
to a fixed height via .frame(height: 27.adjustedH) which can cause truncation
for longer translations or Dynamic Type; remove the fixed height or replace it
with a dynamic-friendly approach for the TypographyText components used here
(e.g., allow flexible height, remove .frame(height:), and if necessary add
modifiers like lineLimit(nil) / fixedSize(horizontal: false, vertical: true) or
use .multilineTextAlignment and a minHeight constraint) so the text can grow
with accessibility font sizes and long locales while keeping the existing VStack
and TypographyText usages intact.
| TypographyText("μ΄λ²μ μ΄λ€ 루ν΄μΌλ‘ κ΄λ¦¬ν κΉμ?", style: .headline_sb_20, color: .gray1000) | ||
| .frame(height: 30.adjustedH) | ||
| TypographyText("루ν΄μ μ§ν¬μλ‘ μ²΄λ¦¬κ° μ±μ₯ν΄μ.", style: .title2_m_16, color: .gray800) | ||
| .frame(height: 24.adjustedH) |
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
π Script executed:
fd "StartChallengeView.swift" --type fRepository: TEAM-Cherrish/Cherrish-iOS
Length of output: 160
π Script executed:
find . -name "StartChallengeView.swift" -type fRepository: TEAM-Cherrish/Cherrish-iOS
Length of output: 162
π Script executed:
git ls-files | grep -i "startchallenge"Repository: TEAM-Cherrish/Cherrish-iOS
Length of output: 121
π Script executed:
wc -l "Cherrish-iOS/Cherrish-iOS/Presentation/Feature/ChallengeView/View/StartChallengeView.swift"Repository: TEAM-Cherrish/Cherrish-iOS
Length of output: 163
π Script executed:
cat -n "Cherrish-iOS/Cherrish-iOS/Presentation/Feature/ChallengeView/View/StartChallengeView.swift"Repository: TEAM-Cherrish/Cherrish-iOS
Length of output: 2345
π Script executed:
rg "\.adjustedH" --type swift | head -20Repository: TEAM-Cherrish/Cherrish-iOS
Length of output: 2610
π Script executed:
rg "extension.*Int\|extension.*CGFloat" --type swift -A 3 | grep -A 5 "adjustedH"Repository: TEAM-Cherrish/Cherrish-iOS
Length of output: 52
π Script executed:
fd "TypographyText" --type swiftRepository: TEAM-Cherrish/Cherrish-iOS
Length of output: 242
π Script executed:
rg "adjustedH" --type swift -B 2 -A 2 | grep -E "extension|computed|var" | head -20Repository: TEAM-Cherrish/Cherrish-iOS
Length of output: 2215
π Script executed:
find . -name "*TypographyText*" -o -name "*typography*" | grep -i swiftRepository: TEAM-Cherrish/Cherrish-iOS
Length of output: 52
π Script executed:
rg "struct TypographyText|class TypographyText" --type swiftRepository: TEAM-Cherrish/Cherrish-iOS
Length of output: 167
π Script executed:
cat -n "Cherrish-iOS/Cherrish-iOS/Presentation/Global/Extension/Adjust+.swift"Repository: TEAM-Cherrish/Cherrish-iOS
Length of output: 1218
π Script executed:
cat -n "Cherrish-iOS/Cherrish-iOS/Presentation/Global/Extension/Font+.swift"Repository: TEAM-Cherrish/Cherrish-iOS
Length of output: 3963
κ³ μ λμ΄κ° ν μ€νΈ λνκ³Ό λ‘컬λΌμ΄μ μ΄μ μ ν μ€νΈ μλ¦Ό μν κ°λ₯
ν
μ€νΈμ κ³ μ heightλ₯Ό μ§μ νλ©΄ λ€μ€ λΌμΈ ν
μ€νΈλ κΈ΄ μΈμ΄ λ¬Έμμ΄(νκ΅μ΄ λ±)μμ λμ΄ μ΄κ³Ό μ μ릴 μ μμ΅λλ€. νΉν 30.adjustedH(line 21)μ 24.adjustedH(line 23, 38)λ λ¨μΌ λΌμΈ κΈ°μ€μΌλ‘ μ€μ λμμΌλ, ν
μ€νΈκ° λνλ κ²½μ° μ½ν
μΈ λ₯Ό λ΄κΈ° λΆμ‘±ν μ μμ΅λλ€. νμμ lineLimit(nil) μΆκ°λ λμ λμ΄ μ‘°μ μ κ²ν ν΄ μ£ΌμΈμ.
π€ Prompt for AI Agents
In
`@Cherrish-iOS/Cherrish-iOS/Presentation/Feature/ChallengeView/View/StartChallengeView.swift`
around lines 20 - 23, The two TypographyText instances (the one with "μ΄λ²μ μ΄λ€
루ν΄μΌλ‘ κ΄λ¦¬ν κΉμ?" using .frame(height: 30.adjustedH) and the one with "루ν΄μ μ§ν¬μλ‘ μ²΄λ¦¬κ°
μ±μ₯ν΄μ." using .frame(height: 24.adjustedH)) use fixed heights that can truncate
wrapped or localized text; remove the fixed .frame(height: ...) or replace it
with a flexible layout approach and enable multiline by adding lineLimit(nil)
and allowing vertical expansion (e.g., fixedSize(horizontal: false, vertical:
true) or no explicit height constraint) so the text can grow for
wrapping/localization while keeping any intended spacing via surrounding
containers or Spacer.

π μ°κ²°λ μ΄μ
π μμ λ΄μ©
π κΈ°ν λ μ΄μΌκΈ°ν΄λ³Ό μ