diff --git a/SoloDeveloperTraining/SoloDeveloperTraining.xcodeproj/project.pbxproj b/SoloDeveloperTraining/SoloDeveloperTraining.xcodeproj/project.pbxproj index b99869b4..01aa4309 100644 --- a/SoloDeveloperTraining/SoloDeveloperTraining.xcodeproj/project.pbxproj +++ b/SoloDeveloperTraining/SoloDeveloperTraining.xcodeproj/project.pbxproj @@ -14,20 +14,12 @@ remoteGlobalIDString = 08267F2A2F0D06BC005A0066; remoteInfo = SoloDeveloperTraining; }; - BCFC85502F32022C00447A9A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 08267F232F0D06BC005A0066 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 08267F2A2F0D06BC005A0066; - remoteInfo = SoloDeveloperTraining; - }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 08267F2B2F0D06BC005A0066 /* SoloDeveloperTraining.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SoloDeveloperTraining.app; sourceTree = BUILT_PRODUCTS_DIR; }; 2896AE422F100CD600D38732 /* SoloDeveloperTraining-Dev.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "SoloDeveloperTraining-Dev.app"; sourceTree = BUILT_PRODUCTS_DIR; }; BCFC85392F31FED800447A9A /* SoloDeveloperTrainingTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SoloDeveloperTrainingTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - BCFC854A2F32022C00447A9A /* SoloDeveloperTrainingUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SoloDeveloperTrainingUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ @@ -96,11 +88,6 @@ path = SoloDeveloperTrainingTests; sourceTree = ""; }; - BCFC854B2F32022C00447A9A /* SoloDeveloperTrainingUITests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = SoloDeveloperTrainingUITests; - sourceTree = ""; - }; /* End PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFrameworksBuildPhase section */ @@ -125,13 +112,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - BCFC85472F32022C00447A9A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -140,7 +120,6 @@ children = ( 08267F2D2F0D06BC005A0066 /* SoloDeveloperTraining */, BCFC853A2F31FED800447A9A /* SoloDeveloperTrainingTests */, - BCFC854B2F32022C00447A9A /* SoloDeveloperTrainingUITests */, 08267F2C2F0D06BC005A0066 /* Products */, ); sourceTree = ""; @@ -151,7 +130,6 @@ 08267F2B2F0D06BC005A0066 /* SoloDeveloperTraining.app */, 2896AE422F100CD600D38732 /* SoloDeveloperTraining-Dev.app */, BCFC85392F31FED800447A9A /* SoloDeveloperTrainingTests.xctest */, - BCFC854A2F32022C00447A9A /* SoloDeveloperTrainingUITests.xctest */, ); name = Products; sourceTree = ""; @@ -228,29 +206,6 @@ productReference = BCFC85392F31FED800447A9A /* SoloDeveloperTrainingTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; - BCFC85492F32022C00447A9A /* SoloDeveloperTrainingUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = BCFC85522F32022C00447A9A /* Build configuration list for PBXNativeTarget "SoloDeveloperTrainingUITests" */; - buildPhases = ( - BCFC85462F32022C00447A9A /* Sources */, - BCFC85472F32022C00447A9A /* Frameworks */, - BCFC85482F32022C00447A9A /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - BCFC85512F32022C00447A9A /* PBXTargetDependency */, - ); - fileSystemSynchronizedGroups = ( - BCFC854B2F32022C00447A9A /* SoloDeveloperTrainingUITests */, - ); - name = SoloDeveloperTrainingUITests; - packageProductDependencies = ( - ); - productName = SoloDeveloperTrainingUITests; - productReference = BCFC854A2F32022C00447A9A /* SoloDeveloperTrainingUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -268,10 +223,6 @@ CreatedOnToolsVersion = 26.2; TestTargetID = 08267F2A2F0D06BC005A0066; }; - BCFC85492F32022C00447A9A = { - CreatedOnToolsVersion = 26.2; - TestTargetID = 08267F2A2F0D06BC005A0066; - }; }; }; buildConfigurationList = 08267F262F0D06BC005A0066 /* Build configuration list for PBXProject "SoloDeveloperTraining" */; @@ -291,7 +242,6 @@ 08267F2A2F0D06BC005A0066 /* SoloDeveloperTraining */, 2896AE3A2F100CD600D38732 /* SoloDeveloperTraining-Dev */, BCFC85382F31FED800447A9A /* SoloDeveloperTrainingTests */, - BCFC85492F32022C00447A9A /* SoloDeveloperTrainingUITests */, ); }; /* End PBXProject section */ @@ -318,13 +268,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - BCFC85482F32022C00447A9A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -388,13 +331,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - BCFC85462F32022C00447A9A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ @@ -403,11 +339,6 @@ target = 08267F2A2F0D06BC005A0066 /* SoloDeveloperTraining */; targetProxy = BCFC853D2F31FED800447A9A /* PBXContainerItemProxy */; }; - BCFC85512F32022C00447A9A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 08267F2A2F0D06BC005A0066 /* SoloDeveloperTraining */; - targetProxy = BCFC85502F32022C00447A9A /* PBXContainerItemProxy */; - }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ @@ -559,7 +490,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.1.1; + MARKETING_VERSION = 1.1.2; PRODUCT_BUNDLE_IDENTIFIER = kr.codesquad.boostcamp10.SoloDeveloperTraining; PRODUCT_NAME = "$(TARGET_NAME)"; STRING_CATALOG_GENERATE_SYMBOLS = YES; @@ -601,7 +532,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.1.1; + MARKETING_VERSION = 1.1.2; PRODUCT_BUNDLE_IDENTIFIER = kr.codesquad.boostcamp10.SoloDeveloperTraining; PRODUCT_NAME = "$(TARGET_NAME)"; STRING_CATALOG_GENERATE_SYMBOLS = YES; @@ -748,48 +679,6 @@ }; name = Release; }; - BCFC85532F32022C00447A9A /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = B3PWYBKFUK; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = sunghun.SoloDeveloperTrainingUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRING_CATALOG_GENERATE_SYMBOLS = NO; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = SoloDeveloperTraining; - }; - name = Debug; - }; - BCFC85542F32022C00447A9A /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = B3PWYBKFUK; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = sunghun.SoloDeveloperTrainingUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRING_CATALOG_GENERATE_SYMBOLS = NO; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = SoloDeveloperTraining; - }; - name = Release; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -829,15 +718,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - BCFC85522F32022C00447A9A /* Build configuration list for PBXNativeTarget "SoloDeveloperTrainingUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BCFC85532F32022C00447A9A /* Debug */, - BCFC85542F32022C00447A9A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; /* End XCConfigurationList section */ }; rootObject = 08267F232F0D06BC005A0066 /* Project object */; diff --git a/SoloDeveloperTraining/SoloDeveloperTraining/DesignSystem/Components/ItemRow.swift b/SoloDeveloperTraining/SoloDeveloperTraining/DesignSystem/Components/ItemRow.swift index 18cb7a7d..5e8be5ae 100644 --- a/SoloDeveloperTraining/SoloDeveloperTraining/DesignSystem/Components/ItemRow.swift +++ b/SoloDeveloperTraining/SoloDeveloperTraining/DesignSystem/Components/ItemRow.swift @@ -72,7 +72,7 @@ struct ItemRow: View { PriceButton( cost: cost, state: state, - axis: .horizontal, + axis: .vertical, width: Constant.priceButtonWidth, action: action, onLongPressRepeat: onLongPressAction diff --git a/SoloDeveloperTraining/SoloDeveloperTraining/DesignSystem/Components/PriceButton.swift b/SoloDeveloperTraining/SoloDeveloperTraining/DesignSystem/Components/PriceButton.swift index 629fb551..2ed3d5c1 100644 --- a/SoloDeveloperTraining/SoloDeveloperTraining/DesignSystem/Components/PriceButton.swift +++ b/SoloDeveloperTraining/SoloDeveloperTraining/DesignSystem/Components/PriceButton.swift @@ -10,7 +10,7 @@ import SwiftUI private enum Constant { enum Layout { static let cornerRadius: CGFloat = 5 - static let buttonHeight: CGFloat = 38 + static let buttonHeight: CGFloat = 44 static let contentSpacing: CGFloat = 3 static let horizontalPadding: CGFloat = 8 } @@ -133,31 +133,32 @@ struct PriceButton: View { @ViewBuilder var contentViews: some View { - HStack { + Group { if state == .reachedMax { Text("Max") .textStyle(.caption) .foregroundStyle(.white) - } - else if cost.gold > 0 { - CurrencyLabel( - axis: .horizontal, - icon: .gold, - textStyle: .caption, - value: cost.gold - ) - .foregroundStyle(.white) - .fixedSize() - } - else if cost.diamond > 0 { - CurrencyLabel( - axis: .horizontal, - icon: .diamond, - textStyle: .caption, - value: cost.diamond - ) - .foregroundStyle(.white) - .fixedSize() + } else { + if cost.gold > 0 { + CurrencyLabel( + axis: .horizontal, + icon: .gold, + textStyle: .caption, + value: cost.gold + ) + .foregroundStyle(.white) + .fixedSize() + } + if cost.diamond > 0 { + CurrencyLabel( + axis: .horizontal, + icon: .diamond, + textStyle: .caption, + value: cost.diamond + ) + .foregroundStyle(.white) + .fixedSize() + } } } .fixedSize() diff --git a/SoloDeveloperTraining/SoloDeveloperTraining/DesignSystem/Components/Toast.swift b/SoloDeveloperTraining/SoloDeveloperTraining/DesignSystem/Components/Toast.swift index ad3dcdaf..e34a42dd 100644 --- a/SoloDeveloperTraining/SoloDeveloperTraining/DesignSystem/Components/Toast.swift +++ b/SoloDeveloperTraining/SoloDeveloperTraining/DesignSystem/Components/Toast.swift @@ -17,7 +17,7 @@ private enum Constant { } enum Width { - static let maxRatio: CGFloat = 0.7 + static let maxRatio: CGFloat = 0.9 } enum Shadow { diff --git a/SoloDeveloperTraining/SoloDeveloperTraining/Extensions/LongPressRepeatModifier.swift b/SoloDeveloperTraining/SoloDeveloperTraining/Extensions/LongPressRepeatModifier.swift index b154e844..a5924221 100644 --- a/SoloDeveloperTraining/SoloDeveloperTraining/Extensions/LongPressRepeatModifier.swift +++ b/SoloDeveloperTraining/SoloDeveloperTraining/Extensions/LongPressRepeatModifier.swift @@ -6,8 +6,8 @@ import SwiftUI private enum Constant { - static let minimumDuration: Double = 1 - static let repeatInterval: TimeInterval = 0.2 + static let minimumDuration: Double = 0.5 + static let repeatInterval: TimeInterval = 0.1 } struct LongPressRepeatModifier: ViewModifier { diff --git a/SoloDeveloperTraining/SoloDeveloperTrainingUITests/SkillViewUITests.swift b/SoloDeveloperTraining/SoloDeveloperTrainingUITests/SkillViewUITests.swift deleted file mode 100644 index 55acad97..00000000 --- a/SoloDeveloperTraining/SoloDeveloperTrainingUITests/SkillViewUITests.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// SoloDeveloperTrainingTests.swift -// SoloDeveloperTrainingTests -// -// Created by sunjae on 2/3/26. -// - -import XCTest - -final class SkillViewUITests: XCTestCase { - - override func setUpWithError() throws { - // 실패 시 바로 종료 - continueAfterFailure = false - } - - @MainActor - func test_스킬_최고레벨도달시_버튼상태가_올바른지() throws { - // TODO: 시나리오 수정 - let app = XCUIApplication() - app.launch() - app.tap() - app.buttons["스킬"].tap() - - let element = app.images.matching(identifier: "icon_coin_bag").element( - boundBy: 1 - ) - // 업그레이드 반복 (최고레벨까지) - var reachedMax = false - // 충분히 많이 탭한다고 가정 - for _ in 0..<100000 { - element.tap() - // 업그레이드 후 상태 확인 - let stateLabel = app.staticTexts.matching(identifier: "Max").element( - boundBy: 1 - ) - if stateLabel.exists { - reachedMax = true - break - } - } - // 검증 - XCTAssertTrue(reachedMax, "스킬이 최고 레벨에 도달해야 합니다") - } -}