diff --git a/.github/workflows/baetti-folder-check.yml b/.github/workflows/baetti-folder-check.yml new file mode 100644 index 0000000..d7e2ec9 --- /dev/null +++ b/.github/workflows/baetti-folder-check.yml @@ -0,0 +1,24 @@ +name: baetti folder enforcement + +on: + push: + branches: + - baetti + pull_request: + branches: + - main + +jobs: + verify-folder: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Check baetti branch modifies only baetti folder + run: | + if git diff --name-only HEAD^ HEAD | grep -v '^baetti/'; then + echo "❌ Error: 'baetti' 브랜치에서는 'baetti/' 폴더 외 파일 수정 금지" + exit 1 + fi + echo "✅ OK: baetti 폴더만 수정됨." diff --git a/baetti/MEGABOX/MEGABOX.xcodeproj/project.xcworkspace/xcuserdata/junghwan.xcuserdatad/UserInterfaceState.xcuserstate b/baetti/MEGABOX/MEGABOX.xcodeproj/project.xcworkspace/xcuserdata/junghwan.xcuserdatad/UserInterfaceState.xcuserstate index 382daab..9a4fdec 100644 Binary files a/baetti/MEGABOX/MEGABOX.xcodeproj/project.xcworkspace/xcuserdata/junghwan.xcuserdatad/UserInterfaceState.xcuserstate and b/baetti/MEGABOX/MEGABOX.xcodeproj/project.xcworkspace/xcuserdata/junghwan.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/gonny/MegaBox/MegaBox.xcodeproj/xcuserdata/bagbyeongseon.xcuserdatad/xcschemes/xcschememanagement.plist b/baetti/MEGABOX/MEGABOX.xcodeproj/xcuserdata/junghwan.xcuserdatad/xcschemes/xcschememanagement.plist similarity index 87% rename from gonny/MegaBox/MegaBox.xcodeproj/xcuserdata/bagbyeongseon.xcuserdatad/xcschemes/xcschememanagement.plist rename to baetti/MEGABOX/MEGABOX.xcodeproj/xcuserdata/junghwan.xcuserdatad/xcschemes/xcschememanagement.plist index b4e59cf..9226226 100644 --- a/gonny/MegaBox/MegaBox.xcodeproj/xcuserdata/bagbyeongseon.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/baetti/MEGABOX/MEGABOX.xcodeproj/xcuserdata/junghwan.xcuserdatad/xcschemes/xcschememanagement.plist @@ -4,7 +4,7 @@ SchemeUserState - MegaBox.xcscheme_^#shared#^_ + MEGABOX.xcscheme_^#shared#^_ orderHint 0 diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/CameraImagePicker/ImagePicker.swift b/baetti/MEGABOX/MEGABOX/ImagePicker.swift similarity index 65% rename from gogo/MEGABOX/MEGABOX/MEGABOX/CameraImagePicker/ImagePicker.swift rename to baetti/MEGABOX/MEGABOX/ImagePicker.swift index de3e7c6..c6555cb 100644 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/CameraImagePicker/ImagePicker.swift +++ b/baetti/MEGABOX/MEGABOX/ImagePicker.swift @@ -2,22 +2,23 @@ // ImagePicker.swift // MEGABOX // -// Created by 고석현 on 11/25/25. - +// Created by 박정환 on 11/30/25. +// import SwiftUI import PhotosUI struct ImagePicker: UIViewControllerRepresentable { @Environment(\.dismiss) var dismiss - @Binding var selectedImage: UIImage? + @Binding var image: UIImage? + var selectedLimit: Int func makeUIViewController(context: Context) -> PHPickerViewController { var config = PHPickerConfiguration(photoLibrary: PHPhotoLibrary.shared()) - config.selectionLimit = 1 + config.selectionLimit = selectedLimit config.filter = .images - let picker = PHPickerViewController(configuration: config) + let picker = PHPickerViewController(configuration: config) picker.delegate = context.coordinator return picker } @@ -38,12 +39,12 @@ struct ImagePicker: UIViewControllerRepresentable { func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) { parent.dismiss() - guard let result = results.first else { return } - - result.itemProvider.loadObject(ofClass: UIImage.self) { object, error in - if let image = object as? UIImage { - DispatchQueue.main.async { - self.parent.selectedImage = image + for result in results { + result.itemProvider.loadObject(ofClass: UIImage.self) { object, error in + if let image = object as? UIImage { + DispatchQueue.main.async { + self.parent.image = image + } } } } diff --git a/baetti/MEGABOX/MEGABOX/View/LoginView.swift b/baetti/MEGABOX/MEGABOX/View/LoginView.swift index 2496b14..98c4133 100644 --- a/baetti/MEGABOX/MEGABOX/View/LoginView.swift +++ b/baetti/MEGABOX/MEGABOX/View/LoginView.swift @@ -25,7 +25,6 @@ struct LoginView: View { VStack { navigationBar Spacer() - InputSection .padding(.bottom, 75) @@ -64,12 +63,6 @@ struct LoginView: View { .font(.medium16) .foregroundColor(.gray03) .padding(.bottom, 4) - - - Divider() - .padding(.bottom, 40) - - Divider() .padding(.bottom, 40) diff --git a/baetti/MEGABOX/MEGABOX/View/MemberInfoView.swift b/baetti/MEGABOX/MEGABOX/View/MemberInfoView.swift index 2c1eeea..73db566 100644 --- a/baetti/MEGABOX/MEGABOX/View/MemberInfoView.swift +++ b/baetti/MEGABOX/MEGABOX/View/MemberInfoView.swift @@ -11,6 +11,8 @@ struct MemberInfoView: View { @Environment(NavigationRouter.self) var router @AppStorage("nickname") private var nickname: String = "" + @State private var showImagePicker = false + @State private var profileImage: UIImage? = nil var body: some View { VStack { @@ -27,55 +29,73 @@ struct MemberInfoView: View { Spacer() } + .sheet(isPresented: $showImagePicker) { + ImagePicker(image: $profileImage, selectedLimit: 1) + } .padding(.horizontal, 14) - .padding(.top, 103) + .padding(.top, 29) } //상단 헤더 private var MemberHeader: some View { - VStack(alignment: .leading) { - HStack(spacing: 0) { - Text(nickname) - .font(.bold24) - Text("님") - .font(.bold24) - .padding(.trailing, 5) - - Text("WELCOME") - .font(.medium14) - .foregroundColor(.white) - .padding(.horizontal, 8) - .padding(.vertical, 4) - .background( - RoundedRectangle(cornerRadius: 6, style: .continuous) - .fill(Color.tag) - ) - Spacer() - - Button { - // 회원정보 버튼 액션 자리 - router.push(.profile) - } label: { - Text("회원정보") - .font(.semiBold14) - .foregroundStyle(.white) - .padding(.horizontal, 11) + HStack(alignment: .center, spacing: 14) { + Circle() + .fill(.gray) + .frame(width: 50, height: 50) + .overlay { + if let profileImage { + Image(uiImage: profileImage) + .resizable() + .scaledToFill() + .clipShape(Circle()) + } + } + .onLongPressGesture(minimumDuration: 1) { + showImagePicker = true + } + VStack(alignment: .leading) { + HStack(spacing: 0) { + Text(nickname) + .font(.bold24) + Text("님") + .font(.bold24) + .padding(.trailing, 5) + + Text("WELCOME") + .font(.medium14) + .foregroundColor(.white) + .padding(.horizontal, 8) .padding(.vertical, 4) - .background(Capsule().fill(Color.gray07)) + .background( + RoundedRectangle(cornerRadius: 6, style: .continuous) + .fill(Color.tag) + ) + Spacer() + + Button { + router.push(.profile) + } label: { + Text("회원정보") + .font(.semiBold14) + .foregroundStyle(.white) + .padding(.horizontal, 11) + .padding(.vertical, 4) + .background(Capsule().fill(Color.gray07)) + } + .padding(.vertical, 6) } - .padding(.vertical, 6) - } - - HStack { - Text("멤버십 포인트") - .font(.semiBold14) - .foregroundColor(.gray04) - Text("500P") - .font(.medium14) - .foregroundColor(.black) - Spacer() + HStack { + Text("멤버십 포인트") + .font(.semiBold14) + .foregroundColor(.gray04) + Text("500P") + .font(.medium14) + .foregroundColor(.black) + + Spacer() + } } } } diff --git a/baetti/MEGABOX/MEGABOX/ViewModel/ReservationViewModel.swift b/baetti/MEGABOX/MEGABOX/ViewModel/ReservationViewModel.swift index 1e4b406..f7ad07d 100644 --- a/baetti/MEGABOX/MEGABOX/ViewModel/ReservationViewModel.swift +++ b/baetti/MEGABOX/MEGABOX/ViewModel/ReservationViewModel.swift @@ -247,7 +247,7 @@ final class ReservationViewModel: ObservableObject { } ?? [] dict[theater] = showtimes } -ㅈ + return dict } } diff --git a/wizzy/week4/week4_practice/week4_practice.xcodeproj/project.pbxproj b/baetti/week9/PhotoPractice/PhotoPractice.xcodeproj/project.pbxproj similarity index 80% rename from wizzy/week4/week4_practice/week4_practice.xcodeproj/project.pbxproj rename to baetti/week9/PhotoPractice/PhotoPractice.xcodeproj/project.pbxproj index 80dfbd0..27ac05d 100644 --- a/wizzy/week4/week4_practice/week4_practice.xcodeproj/project.pbxproj +++ b/baetti/week9/PhotoPractice/PhotoPractice.xcodeproj/project.pbxproj @@ -7,19 +7,19 @@ objects = { /* Begin PBXFileReference section */ - 614F55EA2E922C8B005BE32C /* week4_practice.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = week4_practice.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 88B3D29E2EDAE2770077B4FE /* PhotoPractice.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PhotoPractice.app; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedRootGroup section */ - 614F55EC2E922C8B005BE32C /* week4_practice */ = { + 88B3D2A02EDAE2770077B4FE /* PhotoPractice */ = { isa = PBXFileSystemSynchronizedRootGroup; - path = week4_practice; + path = PhotoPractice; sourceTree = ""; }; /* End PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFrameworksBuildPhase section */ - 614F55E72E922C8B005BE32C /* Frameworks */ = { + 88B3D29B2EDAE2770077B4FE /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -29,18 +29,18 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 614F55E12E922C8B005BE32C = { + 88B3D2952EDAE2770077B4FE = { isa = PBXGroup; children = ( - 614F55EC2E922C8B005BE32C /* week4_practice */, - 614F55EB2E922C8B005BE32C /* Products */, + 88B3D2A02EDAE2770077B4FE /* PhotoPractice */, + 88B3D29F2EDAE2770077B4FE /* Products */, ); sourceTree = ""; }; - 614F55EB2E922C8B005BE32C /* Products */ = { + 88B3D29F2EDAE2770077B4FE /* Products */ = { isa = PBXGroup; children = ( - 614F55EA2E922C8B005BE32C /* week4_practice.app */, + 88B3D29E2EDAE2770077B4FE /* PhotoPractice.app */, ); name = Products; sourceTree = ""; @@ -48,64 +48,64 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 614F55E92E922C8B005BE32C /* week4_practice */ = { + 88B3D29D2EDAE2770077B4FE /* PhotoPractice */ = { isa = PBXNativeTarget; - buildConfigurationList = 614F55F52E922C8F005BE32C /* Build configuration list for PBXNativeTarget "week4_practice" */; + buildConfigurationList = 88B3D2A92EDAE2790077B4FE /* Build configuration list for PBXNativeTarget "PhotoPractice" */; buildPhases = ( - 614F55E62E922C8B005BE32C /* Sources */, - 614F55E72E922C8B005BE32C /* Frameworks */, - 614F55E82E922C8B005BE32C /* Resources */, + 88B3D29A2EDAE2770077B4FE /* Sources */, + 88B3D29B2EDAE2770077B4FE /* Frameworks */, + 88B3D29C2EDAE2770077B4FE /* Resources */, ); buildRules = ( ); dependencies = ( ); fileSystemSynchronizedGroups = ( - 614F55EC2E922C8B005BE32C /* week4_practice */, + 88B3D2A02EDAE2770077B4FE /* PhotoPractice */, ); - name = week4_practice; + name = PhotoPractice; packageProductDependencies = ( ); - productName = week4_practice; - productReference = 614F55EA2E922C8B005BE32C /* week4_practice.app */; + productName = PhotoPractice; + productReference = 88B3D29E2EDAE2770077B4FE /* PhotoPractice.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 614F55E22E922C8B005BE32C /* Project object */ = { + 88B3D2962EDAE2770077B4FE /* Project object */ = { isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = 1; LastSwiftUpdateCheck = 2600; LastUpgradeCheck = 2600; TargetAttributes = { - 614F55E92E922C8B005BE32C = { + 88B3D29D2EDAE2770077B4FE = { CreatedOnToolsVersion = 26.0.1; }; }; }; - buildConfigurationList = 614F55E52E922C8B005BE32C /* Build configuration list for PBXProject "week4_practice" */; + buildConfigurationList = 88B3D2992EDAE2770077B4FE /* Build configuration list for PBXProject "PhotoPractice" */; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); - mainGroup = 614F55E12E922C8B005BE32C; + mainGroup = 88B3D2952EDAE2770077B4FE; minimizedProjectReferenceProxies = 1; preferredProjectObjectVersion = 77; - productRefGroup = 614F55EB2E922C8B005BE32C /* Products */; + productRefGroup = 88B3D29F2EDAE2770077B4FE /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 614F55E92E922C8B005BE32C /* week4_practice */, + 88B3D29D2EDAE2770077B4FE /* PhotoPractice */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 614F55E82E922C8B005BE32C /* Resources */ = { + 88B3D29C2EDAE2770077B4FE /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -115,7 +115,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 614F55E62E922C8B005BE32C /* Sources */ = { + 88B3D29A2EDAE2770077B4FE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -125,7 +125,7 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 614F55F32E922C8F005BE32C /* Debug */ = { + 88B3D2A72EDAE2790077B4FE /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -160,7 +160,6 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = XRY42MG75P; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -189,7 +188,7 @@ }; name = Debug; }; - 614F55F42E922C8F005BE32C /* Release */ = { + 88B3D2A82EDAE2790077B4FE /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -224,7 +223,6 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = XRY42MG75P; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -246,16 +244,16 @@ }; name = Release; }; - 614F55F62E922C8F005BE32C /* Debug */ = { + 88B3D2AA2EDAE2790077B4FE /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = XRY42MG75P; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "사진 앨범 접근 권한이 필요합니다."; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; @@ -266,7 +264,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "com.wizzy.week4-practice"; + PRODUCT_BUNDLE_IDENTIFIER = junghwan.PhotoPractice; PRODUCT_NAME = "$(TARGET_NAME)"; STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_APPROACHABLE_CONCURRENCY = YES; @@ -278,16 +276,16 @@ }; name = Debug; }; - 614F55F72E922C8F005BE32C /* Release */ = { + 88B3D2AB2EDAE2790077B4FE /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = XRY42MG75P; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "사진 앨범 접근 권한이 필요합니다."; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; @@ -298,7 +296,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "com.wizzy.week4-practice"; + PRODUCT_BUNDLE_IDENTIFIER = junghwan.PhotoPractice; PRODUCT_NAME = "$(TARGET_NAME)"; STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_APPROACHABLE_CONCURRENCY = YES; @@ -313,25 +311,25 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 614F55E52E922C8B005BE32C /* Build configuration list for PBXProject "week4_practice" */ = { + 88B3D2992EDAE2770077B4FE /* Build configuration list for PBXProject "PhotoPractice" */ = { isa = XCConfigurationList; buildConfigurations = ( - 614F55F32E922C8F005BE32C /* Debug */, - 614F55F42E922C8F005BE32C /* Release */, + 88B3D2A72EDAE2790077B4FE /* Debug */, + 88B3D2A82EDAE2790077B4FE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 614F55F52E922C8F005BE32C /* Build configuration list for PBXNativeTarget "week4_practice" */ = { + 88B3D2A92EDAE2790077B4FE /* Build configuration list for PBXNativeTarget "PhotoPractice" */ = { isa = XCConfigurationList; buildConfigurations = ( - 614F55F62E922C8F005BE32C /* Debug */, - 614F55F72E922C8F005BE32C /* Release */, + 88B3D2AA2EDAE2790077B4FE /* Debug */, + 88B3D2AB2EDAE2790077B4FE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 614F55E22E922C8B005BE32C /* Project object */; + rootObject = 88B3D2962EDAE2770077B4FE /* Project object */; } diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/baetti/week9/PhotoPractice/PhotoPractice.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from gogo/MEGABOX/MEGABOX/MEGABOX.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to baetti/week9/PhotoPractice/PhotoPractice.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/baetti/week9/PhotoPractice/PhotoPractice.xcodeproj/project.xcworkspace/xcuserdata/junghwan.xcuserdatad/UserInterfaceState.xcuserstate b/baetti/week9/PhotoPractice/PhotoPractice.xcodeproj/project.xcworkspace/xcuserdata/junghwan.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..2dda82c Binary files /dev/null and b/baetti/week9/PhotoPractice/PhotoPractice.xcodeproj/project.xcworkspace/xcuserdata/junghwan.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/gonny/Week1_Practice/Week1_Practice.xcodeproj/xcuserdata/bagbyeongseon.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/baetti/week9/PhotoPractice/PhotoPractice.xcodeproj/xcuserdata/junghwan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist similarity index 69% rename from gonny/Week1_Practice/Week1_Practice.xcodeproj/xcuserdata/bagbyeongseon.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist rename to baetti/week9/PhotoPractice/PhotoPractice.xcodeproj/xcuserdata/junghwan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index ee3a9c8..76d7d48 100644 --- a/gonny/Week1_Practice/Week1_Practice.xcodeproj/xcuserdata/bagbyeongseon.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/baetti/week9/PhotoPractice/PhotoPractice.xcodeproj/xcuserdata/junghwan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -1,21 +1,21 @@ diff --git a/yoon/week7/TestMoya/TestMoya.xcodeproj/xcuserdata/jeongseung-yun.xcuserdatad/xcschemes/xcschememanagement.plist b/baetti/week9/PhotoPractice/PhotoPractice.xcodeproj/xcuserdata/junghwan.xcuserdatad/xcschemes/xcschememanagement.plist similarity index 86% rename from yoon/week7/TestMoya/TestMoya.xcodeproj/xcuserdata/jeongseung-yun.xcuserdatad/xcschemes/xcschememanagement.plist rename to baetti/week9/PhotoPractice/PhotoPractice.xcodeproj/xcuserdata/junghwan.xcuserdatad/xcschemes/xcschememanagement.plist index a4ae438..baea914 100644 --- a/yoon/week7/TestMoya/TestMoya.xcodeproj/xcuserdata/jeongseung-yun.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/baetti/week9/PhotoPractice/PhotoPractice.xcodeproj/xcuserdata/junghwan.xcuserdatad/xcschemes/xcschememanagement.plist @@ -4,7 +4,7 @@ SchemeUserState - TestMoya.xcscheme_^#shared#^_ + PhotoPractice.xcscheme_^#shared#^_ orderHint 0 diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/AccentColor.colorset/Contents.json b/baetti/week9/PhotoPractice/PhotoPractice/Assets.xcassets/AccentColor.colorset/Contents.json similarity index 100% rename from gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/AccentColor.colorset/Contents.json rename to baetti/week9/PhotoPractice/PhotoPractice/Assets.xcassets/AccentColor.colorset/Contents.json diff --git a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/AppIcon.appiconset/Contents.json b/baetti/week9/PhotoPractice/PhotoPractice/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/AppIcon.appiconset/Contents.json rename to baetti/week9/PhotoPractice/PhotoPractice/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/Contents.json b/baetti/week9/PhotoPractice/PhotoPractice/Assets.xcassets/Contents.json similarity index 100% rename from gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/Contents.json rename to baetti/week9/PhotoPractice/PhotoPractice/Assets.xcassets/Contents.json diff --git a/baetti/week9/PhotoPractice/PhotoPractice/CameraPicker/CameraContentView.swift b/baetti/week9/PhotoPractice/PhotoPractice/CameraPicker/CameraContentView.swift new file mode 100644 index 0000000..04d6deb --- /dev/null +++ b/baetti/week9/PhotoPractice/PhotoPractice/CameraPicker/CameraContentView.swift @@ -0,0 +1,42 @@ +// +// CameraContentView.swift +// PhotoPractice +// +// Created by 박정환 on 11/29/25. +// + +import SwiftUI +import PhotosUI + +struct CameraContentView: View { + @State private var showCamera = false + @State private var capturedImage: UIImage? + + var body: some View { + VStack(spacing: 20) { + if let image = capturedImage { + Image(uiImage: image) + .resizable() + .scaledToFit() + .frame(height: 300) + } else { + Text("사진을 찍어보세요!") + } + + Button("📷 카메라 열기") { + showCamera = true + } + .padding() + .sheet(isPresented: $showCamera) { + CameraPicker { image in + self.capturedImage = image + } + } + } + .padding() + } +} + +#Preview { + CameraContentView() +} diff --git a/baetti/week9/PhotoPractice/PhotoPractice/CameraPicker/CameraPicker.swift b/baetti/week9/PhotoPractice/PhotoPractice/CameraPicker/CameraPicker.swift new file mode 100644 index 0000000..e5ca377 --- /dev/null +++ b/baetti/week9/PhotoPractice/PhotoPractice/CameraPicker/CameraPicker.swift @@ -0,0 +1,52 @@ +// +// CameraPicker.swift +// PhotoPractice +// +// Created by 박정환 on 11/29/25. +// + +/* + NSCameraUsageDescription + 카메라 접근 권한이 필요합니다. + */ + +import SwiftUI +import UIKit + +struct CameraPicker: UIViewControllerRepresentable { + @Environment(\.dismiss) var dismiss + var onImagePicked: (UIImage) -> Void + + func makeCoordinator() -> Coordinator { + Coordinator(self) + } + + func makeUIViewController(context: Context) -> UIImagePickerController { + let picker = UIImagePickerController() + picker.sourceType = .camera + picker.delegate = context.coordinator + return picker + } + + func updateUIViewController(_ uiViewController: UIImagePickerController, context: Context) {} + + class Coordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate { + var parent: CameraPicker + + init(_ parent: CameraPicker) { + self.parent = parent + } + + func imagePickerController(_ picker: UIImagePickerController, + didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { + if let image = info[.originalImage] as? UIImage { + parent.onImagePicked(image) + } + parent.dismiss() + } + + func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { + parent.dismiss() + } + } +} diff --git a/baetti/week9/PhotoPractice/PhotoPractice/ImagePicker/ContentView.swift b/baetti/week9/PhotoPractice/PhotoPractice/ImagePicker/ContentView.swift new file mode 100644 index 0000000..b753903 --- /dev/null +++ b/baetti/week9/PhotoPractice/PhotoPractice/ImagePicker/ContentView.swift @@ -0,0 +1,39 @@ +// +// ContentView.swift +// PhotoPractice +// +// Created by 박정환 on 11/29/25. +// + +import SwiftUI + +struct ContentView: View { + @State private var showImagePicker = false + @State private var selectedImages: [UIImage] = [] + + var body: some View { + VStack { + ScrollView(.horizontal) { + HStack { + ForEach(selectedImages, id: \.self) { image in + Image(uiImage: image) + .resizable() + .scaledToFit() + .frame(width: 100, height: 100) + } + } + } + + Button("앨범에서 사진 선택") { + showImagePicker = true + } + .sheet(isPresented: $showImagePicker) { + ImagePicker(images: $selectedImages, selectedLimit: 5) + } + } + } +} + +#Preview { + ContentView() +} diff --git a/baetti/week9/PhotoPractice/PhotoPractice/ImagePicker/ImagePicker.swift b/baetti/week9/PhotoPractice/PhotoPractice/ImagePicker/ImagePicker.swift new file mode 100644 index 0000000..3cf8366 --- /dev/null +++ b/baetti/week9/PhotoPractice/PhotoPractice/ImagePicker/ImagePicker.swift @@ -0,0 +1,58 @@ +// +// ImagePicker.swift +// PhotoPractice +// +// Created by 박정환 on 11/29/25. +// + +/* + NSPhotoLibraryUsageDescription + 사진 앨범 접근 권한이 필요합니다. + */ + +import SwiftUI +import PhotosUI + +struct ImagePicker: UIViewControllerRepresentable { // SwiftUI에서 사용하기 위한 브릿지 프로토콜 + @Environment(\.dismiss) var dismiss + @Binding var images: [UIImage] + var selectedLimit: Int + + func makeUIViewController(context: Context) -> PHPickerViewController { + var config = PHPickerConfiguration(photoLibrary: PHPhotoLibrary.shared()) + config.selectionLimit = selectedLimit + config.filter = .images + + let picker = PHPickerViewController(configuration: config) + picker.delegate = context.coordinator + return picker + } + + func updateUIViewController(_ uiViewController: PHPickerViewController, context: Context) {} + + func makeCoordinator() -> Coordinator { + Coordinator(parent: self) + } + + class Coordinator: NSObject, PHPickerViewControllerDelegate { + var parent: ImagePicker + + init(parent: ImagePicker) { + self.parent = parent + } + + func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) { + parent.dismiss() + + for result in results { + result.itemProvider.loadObject(ofClass: UIImage.self) { object, error in + if let image = object as? UIImage { + DispatchQueue.main.async { + self.parent.images.append(image) + } + } + } + } + } + } +} diff --git a/wizzy/week3/3rd_Practice/3st_Practice/_st_PracticeApp.swift b/baetti/week9/PhotoPractice/PhotoPractice/PhotoPracticeApp.swift similarity index 52% rename from wizzy/week3/3rd_Practice/3st_Practice/_st_PracticeApp.swift rename to baetti/week9/PhotoPractice/PhotoPractice/PhotoPracticeApp.swift index 4975718..4d1c01b 100644 --- a/wizzy/week3/3rd_Practice/3st_Practice/_st_PracticeApp.swift +++ b/baetti/week9/PhotoPractice/PhotoPractice/PhotoPracticeApp.swift @@ -1,14 +1,14 @@ // -// _st_PracticeApp.swift -// 3st_Practice +// PhotoPracticeApp.swift +// PhotoPractice // -// Created by 이서현 on 3/31/25. +// Created by 박정환 on 11/29/25. // import SwiftUI @main -struct _st_PracticeApp: App { +struct PhotoPracticeApp: App { var body: some Scene { WindowGroup { ContentView() diff --git a/baetti/week9/PhotoPractice/PhotoPractice/PhotosPicker/PhotosContentView.swift b/baetti/week9/PhotoPractice/PhotoPractice/PhotosPicker/PhotosContentView.swift new file mode 100644 index 0000000..2335b65 --- /dev/null +++ b/baetti/week9/PhotoPractice/PhotoPractice/PhotosPicker/PhotosContentView.swift @@ -0,0 +1,72 @@ +// +// PhotosContentView.swift +// PhotoPractice +// +// Created by 박정환 on 11/29/25. +// + +/* +import PhotosUI + +@State private var selectedItems: [PhotosPickerItem] = [] +@State private var images: [UIImage] = [] + +PhotosPicker( + "사진 선택", + selection: $selectedItems, + maxSelectionCount: 3, + matching: .images +) +.onChange(of: selectedItems) { newItems in + for item in newItems { + Task { + if let data = try? await item.loadTransferable(type: Data.self), + let image = UIImage(data: data) { + images.append(image) + } + } + } +} +*/ + +import SwiftUI +import PhotosUI + +struct PhotoContentView: View { + @State private var selectedItems: [PhotosPickerItem] = [] + @State private var selectedImages: [UIImage] = [] + + var body: some View { + VStack(spacing: 20) { + PhotosPicker("📁 사진 선택하기", selection: $selectedItems, maxSelectionCount: 5, matching: .images) + + ScrollView(.horizontal) { + HStack { + ForEach(selectedImages, id: \.self) { image in + Image(uiImage: image) + .resizable() + .scaledToFill() + .frame(width: 100, height: 100) + .clipped() + } + } + } + } + .padding() + .onChange(of: selectedItems) { oldItems, newItems in + selectedImages.removeAll() + for item in newItems { + Task { + if let data = try? await item.loadTransferable(type: Data.self), + let image = UIImage(data: data) { + selectedImages.append(image) + } + } + } + } + } +} + +#Preview { + PhotoContentView() +} diff --git a/gogo/MEGABOX/MEGABOX/.gitignore b/gogo/MEGABOX/MEGABOX/.gitignore deleted file mode 100644 index ac3456e..0000000 --- a/gogo/MEGABOX/MEGABOX/.gitignore +++ /dev/null @@ -1 +0,0 @@ -Secret.xcconfig diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX.xcodeproj/project.pbxproj b/gogo/MEGABOX/MEGABOX/MEGABOX.xcodeproj/project.pbxproj deleted file mode 100644 index 396135b..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX.xcodeproj/project.pbxproj +++ /dev/null @@ -1,751 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXBuildFile section */ - D73D4F2D2EBC21E600C1744F /* KakaoSDK in Frameworks */ = {isa = PBXBuildFile; productRef = D73D4F2C2EBC21E600C1744F /* KakaoSDK */; }; - D73D4F2F2EBC21E600C1744F /* KakaoSDKAuth in Frameworks */ = {isa = PBXBuildFile; productRef = D73D4F2E2EBC21E600C1744F /* KakaoSDKAuth */; }; - D73D4F312EBC21E600C1744F /* KakaoSDKCert in Frameworks */ = {isa = PBXBuildFile; productRef = D73D4F302EBC21E600C1744F /* KakaoSDKCert */; }; - D73D4F332EBC21E600C1744F /* KakaoSDKCertCore in Frameworks */ = {isa = PBXBuildFile; productRef = D73D4F322EBC21E600C1744F /* KakaoSDKCertCore */; }; - D73D4F352EBC21E600C1744F /* KakaoSDKCommon in Frameworks */ = {isa = PBXBuildFile; productRef = D73D4F342EBC21E600C1744F /* KakaoSDKCommon */; }; - D767A2392EC4B0B300D059DD /* CombineMoya in Frameworks */ = {isa = PBXBuildFile; productRef = D767A2382EC4B0B300D059DD /* CombineMoya */; }; - D767A23B2EC4B0B300D059DD /* Moya in Frameworks */ = {isa = PBXBuildFile; productRef = D767A23A2EC4B0B300D059DD /* Moya */; }; - D767A23D2EC4B0B300D059DD /* ReactiveMoya in Frameworks */ = {isa = PBXBuildFile; productRef = D767A23C2EC4B0B300D059DD /* ReactiveMoya */; }; - D767A23F2EC4B0B300D059DD /* RxMoya in Frameworks */ = {isa = PBXBuildFile; productRef = D767A23E2EC4B0B300D059DD /* RxMoya */; }; - D7E32BC82EC4C9F500A58F50 /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = D7E32BC72EC4C9F500A58F50 /* Kingfisher */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - D735EBA62E7A6AD300474A00 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D735EB8F2E7A6AD200474A00 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D735EB962E7A6AD200474A00; - remoteInfo = MEGABOX; - }; - D735EBB02E7A6AD300474A00 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D735EB8F2E7A6AD200474A00 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D735EB962E7A6AD200474A00; - remoteInfo = MEGABOX; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - D735EB972E7A6AD200474A00 /* MEGABOX.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MEGABOX.app; sourceTree = BUILT_PRODUCTS_DIR; }; - D735EBA52E7A6AD300474A00 /* MEGABOXTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MEGABOXTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - D735EBAF2E7A6AD300474A00 /* MEGABOXUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MEGABOXUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ - D735EBDF2E7A6C6300474A00 /* Exceptions for "MEGABOX" folder in "MEGABOX" target */ = { - isa = PBXFileSystemSynchronizedBuildFileExceptionSet; - membershipExceptions = ( - Info.plist, - ); - target = D735EB962E7A6AD200474A00 /* MEGABOX */; - }; -/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - D735EB992E7A6AD200474A00 /* MEGABOX */ = { - isa = PBXFileSystemSynchronizedRootGroup; - exceptions = ( - D735EBDF2E7A6C6300474A00 /* Exceptions for "MEGABOX" folder in "MEGABOX" target */, - ); - path = MEGABOX; - sourceTree = ""; - }; - D735EBA82E7A6AD300474A00 /* MEGABOXTests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = MEGABOXTests; - sourceTree = ""; - }; - D735EBB22E7A6AD300474A00 /* MEGABOXUITests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = MEGABOXUITests; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - D735EB942E7A6AD200474A00 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D73D4F332EBC21E600C1744F /* KakaoSDKCertCore in Frameworks */, - D73D4F312EBC21E600C1744F /* KakaoSDKCert in Frameworks */, - D767A2392EC4B0B300D059DD /* CombineMoya in Frameworks */, - D73D4F2D2EBC21E600C1744F /* KakaoSDK in Frameworks */, - D7E32BC82EC4C9F500A58F50 /* Kingfisher in Frameworks */, - D73D4F352EBC21E600C1744F /* KakaoSDKCommon in Frameworks */, - D767A23D2EC4B0B300D059DD /* ReactiveMoya in Frameworks */, - D767A23F2EC4B0B300D059DD /* RxMoya in Frameworks */, - D767A23B2EC4B0B300D059DD /* Moya in Frameworks */, - D73D4F2F2EBC21E600C1744F /* KakaoSDKAuth in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D735EBA22E7A6AD300474A00 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D735EBAC2E7A6AD300474A00 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - D735EB8E2E7A6AD200474A00 = { - isa = PBXGroup; - children = ( - D735EB992E7A6AD200474A00 /* MEGABOX */, - D735EBA82E7A6AD300474A00 /* MEGABOXTests */, - D735EBB22E7A6AD300474A00 /* MEGABOXUITests */, - D735EB982E7A6AD200474A00 /* Products */, - ); - sourceTree = ""; - }; - D735EB982E7A6AD200474A00 /* Products */ = { - isa = PBXGroup; - children = ( - D735EB972E7A6AD200474A00 /* MEGABOX.app */, - D735EBA52E7A6AD300474A00 /* MEGABOXTests.xctest */, - D735EBAF2E7A6AD300474A00 /* MEGABOXUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - D735EB962E7A6AD200474A00 /* MEGABOX */ = { - isa = PBXNativeTarget; - buildConfigurationList = D735EBB92E7A6AD300474A00 /* Build configuration list for PBXNativeTarget "MEGABOX" */; - buildPhases = ( - D735EB932E7A6AD200474A00 /* Sources */, - D735EB942E7A6AD200474A00 /* Frameworks */, - D735EB952E7A6AD200474A00 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - D735EB992E7A6AD200474A00 /* MEGABOX */, - ); - name = MEGABOX; - packageProductDependencies = ( - D73D4F2C2EBC21E600C1744F /* KakaoSDK */, - D73D4F2E2EBC21E600C1744F /* KakaoSDKAuth */, - D73D4F302EBC21E600C1744F /* KakaoSDKCert */, - D73D4F322EBC21E600C1744F /* KakaoSDKCertCore */, - D73D4F342EBC21E600C1744F /* KakaoSDKCommon */, - D767A2382EC4B0B300D059DD /* CombineMoya */, - D767A23A2EC4B0B300D059DD /* Moya */, - D767A23C2EC4B0B300D059DD /* ReactiveMoya */, - D767A23E2EC4B0B300D059DD /* RxMoya */, - D7E32BC72EC4C9F500A58F50 /* Kingfisher */, - ); - productName = MEGABOX; - productReference = D735EB972E7A6AD200474A00 /* MEGABOX.app */; - productType = "com.apple.product-type.application"; - }; - D735EBA42E7A6AD300474A00 /* MEGABOXTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = D735EBBC2E7A6AD300474A00 /* Build configuration list for PBXNativeTarget "MEGABOXTests" */; - buildPhases = ( - D735EBA12E7A6AD300474A00 /* Sources */, - D735EBA22E7A6AD300474A00 /* Frameworks */, - D735EBA32E7A6AD300474A00 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - D735EBA72E7A6AD300474A00 /* PBXTargetDependency */, - ); - fileSystemSynchronizedGroups = ( - D735EBA82E7A6AD300474A00 /* MEGABOXTests */, - ); - name = MEGABOXTests; - packageProductDependencies = ( - ); - productName = MEGABOXTests; - productReference = D735EBA52E7A6AD300474A00 /* MEGABOXTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - D735EBAE2E7A6AD300474A00 /* MEGABOXUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = D735EBBF2E7A6AD300474A00 /* Build configuration list for PBXNativeTarget "MEGABOXUITests" */; - buildPhases = ( - D735EBAB2E7A6AD300474A00 /* Sources */, - D735EBAC2E7A6AD300474A00 /* Frameworks */, - D735EBAD2E7A6AD300474A00 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - D735EBB12E7A6AD300474A00 /* PBXTargetDependency */, - ); - fileSystemSynchronizedGroups = ( - D735EBB22E7A6AD300474A00 /* MEGABOXUITests */, - ); - name = MEGABOXUITests; - packageProductDependencies = ( - ); - productName = MEGABOXUITests; - productReference = D735EBAF2E7A6AD300474A00 /* MEGABOXUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - D735EB8F2E7A6AD200474A00 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1640; - LastUpgradeCheck = 2600; - TargetAttributes = { - D735EB962E7A6AD200474A00 = { - CreatedOnToolsVersion = 16.4; - }; - D735EBA42E7A6AD300474A00 = { - CreatedOnToolsVersion = 16.4; - TestTargetID = D735EB962E7A6AD200474A00; - }; - D735EBAE2E7A6AD300474A00 = { - CreatedOnToolsVersion = 16.4; - TestTargetID = D735EB962E7A6AD200474A00; - }; - }; - }; - buildConfigurationList = D735EB922E7A6AD200474A00 /* Build configuration list for PBXProject "MEGABOX" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = D735EB8E2E7A6AD200474A00; - minimizedProjectReferenceProxies = 1; - packageReferences = ( - D73D4F2B2EBC21E600C1744F /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */, - D767A2372EC4B0B300D059DD /* XCRemoteSwiftPackageReference "Moya" */, - D7E32BC62EC4C9F500A58F50 /* XCRemoteSwiftPackageReference "Kingfisher" */, - ); - preferredProjectObjectVersion = 77; - productRefGroup = D735EB982E7A6AD200474A00 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - D735EB962E7A6AD200474A00 /* MEGABOX */, - D735EBA42E7A6AD300474A00 /* MEGABOXTests */, - D735EBAE2E7A6AD300474A00 /* MEGABOXUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - D735EB952E7A6AD200474A00 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D735EBA32E7A6AD300474A00 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D735EBAD2E7A6AD300474A00 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - D735EB932E7A6AD200474A00 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D735EBA12E7A6AD300474A00 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D735EBAB2E7A6AD300474A00 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - D735EBA72E7A6AD300474A00 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = D735EB962E7A6AD200474A00 /* MEGABOX */; - targetProxy = D735EBA62E7A6AD300474A00 /* PBXContainerItemProxy */; - }; - D735EBB12E7A6AD300474A00 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = D735EB962E7A6AD200474A00 /* MEGABOX */; - targetProxy = D735EBB02E7A6AD300474A00 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - D735EBB72E7A6AD300474A00 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReferenceAnchor = D735EB992E7A6AD200474A00 /* MEGABOX */; - baseConfigurationReferenceRelativePath = Security/Secret.xcconfig; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = KX93JF4Y2Z; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - D735EBB82E7A6AD300474A00 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReferenceAnchor = D735EB992E7A6AD200474A00 /* MEGABOX */; - baseConfigurationReferenceRelativePath = Security/Secret.xcconfig; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = KX93JF4Y2Z; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SWIFT_COMPILATION_MODE = wholemodule; - }; - name = Release; - }; - D735EBBA2E7A6AD300474A00 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_ENTITLEMENTS = MEGABOX/MEGABOX.entitlements; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEVELOPMENT_TEAM = KX93JF4Y2Z; - ENABLE_APP_SANDBOX = YES; - ENABLE_HARDENED_RUNTIME = YES; - ENABLE_PREVIEWS = YES; - ENABLE_USER_SELECTED_FILES = readonly; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = MEGABOX/Info.plist; - INFOPLIST_KEY_LSApplicationCategoryType = ""; - "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; - "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; - "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; - "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; - "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; - "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; - "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; - "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 15.5; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = Koh.MEGABOX; - PRODUCT_NAME = "$(TARGET_NAME)"; - REGISTER_APP_GROUPS = YES; - SDKROOT = auto; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,7"; - XROS_DEPLOYMENT_TARGET = 2.5; - }; - name = Debug; - }; - D735EBBB2E7A6AD300474A00 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_ENTITLEMENTS = MEGABOX/MEGABOX.entitlements; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEVELOPMENT_TEAM = KX93JF4Y2Z; - ENABLE_APP_SANDBOX = YES; - ENABLE_HARDENED_RUNTIME = YES; - ENABLE_PREVIEWS = YES; - ENABLE_USER_SELECTED_FILES = readonly; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = MEGABOX/Info.plist; - INFOPLIST_KEY_LSApplicationCategoryType = ""; - "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; - "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; - "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; - "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; - "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; - "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; - "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; - "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 15.5; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = Koh.MEGABOX; - PRODUCT_NAME = "$(TARGET_NAME)"; - REGISTER_APP_GROUPS = YES; - SDKROOT = auto; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,7"; - XROS_DEPLOYMENT_TARGET = 2.5; - }; - name = Release; - }; - D735EBBD2E7A6AD300474A00 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEVELOPMENT_TEAM = KX93JF4Y2Z; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - MACOSX_DEPLOYMENT_TARGET = 15.5; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = Koh.MEGABOXTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = auto; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,7"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MEGABOX.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/MEGABOX"; - XROS_DEPLOYMENT_TARGET = 2.5; - }; - name = Debug; - }; - D735EBBE2E7A6AD300474A00 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEVELOPMENT_TEAM = KX93JF4Y2Z; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - MACOSX_DEPLOYMENT_TARGET = 15.5; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = Koh.MEGABOXTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = auto; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,7"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MEGABOX.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/MEGABOX"; - XROS_DEPLOYMENT_TARGET = 2.5; - }; - name = Release; - }; - D735EBC02E7A6AD300474A00 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEVELOPMENT_TEAM = KX93JF4Y2Z; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - MACOSX_DEPLOYMENT_TARGET = 15.5; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = Koh.MEGABOXUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = auto; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,7"; - TEST_TARGET_NAME = MEGABOX; - XROS_DEPLOYMENT_TARGET = 2.5; - }; - name = Debug; - }; - D735EBC12E7A6AD300474A00 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEVELOPMENT_TEAM = KX93JF4Y2Z; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - MACOSX_DEPLOYMENT_TARGET = 15.5; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = Koh.MEGABOXUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = auto; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,7"; - TEST_TARGET_NAME = MEGABOX; - XROS_DEPLOYMENT_TARGET = 2.5; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - D735EB922E7A6AD200474A00 /* Build configuration list for PBXProject "MEGABOX" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D735EBB72E7A6AD300474A00 /* Debug */, - D735EBB82E7A6AD300474A00 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D735EBB92E7A6AD300474A00 /* Build configuration list for PBXNativeTarget "MEGABOX" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D735EBBA2E7A6AD300474A00 /* Debug */, - D735EBBB2E7A6AD300474A00 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D735EBBC2E7A6AD300474A00 /* Build configuration list for PBXNativeTarget "MEGABOXTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D735EBBD2E7A6AD300474A00 /* Debug */, - D735EBBE2E7A6AD300474A00 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D735EBBF2E7A6AD300474A00 /* Build configuration list for PBXNativeTarget "MEGABOXUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D735EBC02E7A6AD300474A00 /* Debug */, - D735EBC12E7A6AD300474A00 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCRemoteSwiftPackageReference section */ - D73D4F2B2EBC21E600C1744F /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/kakaO/kakao-ios-sdk"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 2.25.0; - }; - }; - D767A2372EC4B0B300D059DD /* XCRemoteSwiftPackageReference "Moya" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/Moya/Moya"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 15.0.3; - }; - }; - D7E32BC62EC4C9F500A58F50 /* XCRemoteSwiftPackageReference "Kingfisher" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/onevcat/Kingfisher.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 8.6.1; - }; - }; -/* End XCRemoteSwiftPackageReference section */ - -/* Begin XCSwiftPackageProductDependency section */ - D73D4F2C2EBC21E600C1744F /* KakaoSDK */ = { - isa = XCSwiftPackageProductDependency; - package = D73D4F2B2EBC21E600C1744F /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; - productName = KakaoSDK; - }; - D73D4F2E2EBC21E600C1744F /* KakaoSDKAuth */ = { - isa = XCSwiftPackageProductDependency; - package = D73D4F2B2EBC21E600C1744F /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; - productName = KakaoSDKAuth; - }; - D73D4F302EBC21E600C1744F /* KakaoSDKCert */ = { - isa = XCSwiftPackageProductDependency; - package = D73D4F2B2EBC21E600C1744F /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; - productName = KakaoSDKCert; - }; - D73D4F322EBC21E600C1744F /* KakaoSDKCertCore */ = { - isa = XCSwiftPackageProductDependency; - package = D73D4F2B2EBC21E600C1744F /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; - productName = KakaoSDKCertCore; - }; - D73D4F342EBC21E600C1744F /* KakaoSDKCommon */ = { - isa = XCSwiftPackageProductDependency; - package = D73D4F2B2EBC21E600C1744F /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; - productName = KakaoSDKCommon; - }; - D767A2382EC4B0B300D059DD /* CombineMoya */ = { - isa = XCSwiftPackageProductDependency; - package = D767A2372EC4B0B300D059DD /* XCRemoteSwiftPackageReference "Moya" */; - productName = CombineMoya; - }; - D767A23A2EC4B0B300D059DD /* Moya */ = { - isa = XCSwiftPackageProductDependency; - package = D767A2372EC4B0B300D059DD /* XCRemoteSwiftPackageReference "Moya" */; - productName = Moya; - }; - D767A23C2EC4B0B300D059DD /* ReactiveMoya */ = { - isa = XCSwiftPackageProductDependency; - package = D767A2372EC4B0B300D059DD /* XCRemoteSwiftPackageReference "Moya" */; - productName = ReactiveMoya; - }; - D767A23E2EC4B0B300D059DD /* RxMoya */ = { - isa = XCSwiftPackageProductDependency; - package = D767A2372EC4B0B300D059DD /* XCRemoteSwiftPackageReference "Moya" */; - productName = RxMoya; - }; - D7E32BC72EC4C9F500A58F50 /* Kingfisher */ = { - isa = XCSwiftPackageProductDependency; - package = D7E32BC62EC4C9F500A58F50 /* XCRemoteSwiftPackageReference "Kingfisher" */; - productName = Kingfisher; - }; -/* End XCSwiftPackageProductDependency section */ - }; - rootObject = D735EB8F2E7A6AD200474A00 /* Project object */; -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/gogo/MEGABOX/MEGABOX/MEGABOX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved deleted file mode 100644 index 324b679..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ /dev/null @@ -1,60 +0,0 @@ -{ - "originHash" : "0da66ea479258855596f9a38336bd5d3900a4000d2d616cdb7adeea235f2c842", - "pins" : [ - { - "identity" : "alamofire", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Alamofire/Alamofire.git", - "state" : { - "revision" : "513364f870f6bfc468f9d2ff0a95caccc10044c5", - "version" : "5.10.2" - } - }, - { - "identity" : "kakao-ios-sdk", - "kind" : "remoteSourceControl", - "location" : "https://github.com/kakaO/kakao-ios-sdk", - "state" : { - "revision" : "e14a8d1fad75645fd5677a295a8b1956ebd14d3d", - "version" : "2.25.0" - } - }, - { - "identity" : "kingfisher", - "kind" : "remoteSourceControl", - "location" : "https://github.com/onevcat/Kingfisher.git", - "state" : { - "revision" : "4d75de347da985a70c63af4d799ed482021f6733", - "version" : "8.6.1" - } - }, - { - "identity" : "moya", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Moya/Moya", - "state" : { - "revision" : "c263811c1f3dbf002be9bd83107f7cdc38992b26", - "version" : "15.0.3" - } - }, - { - "identity" : "reactiveswift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/ReactiveCocoa/ReactiveSwift.git", - "state" : { - "revision" : "c43bae3dac73fdd3cb906bd5a1914686ca71ed3c", - "version" : "6.7.0" - } - }, - { - "identity" : "rxswift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/ReactiveX/RxSwift.git", - "state" : { - "revision" : "5004a18539bd68905c5939aa893075f578f4f03d", - "version" : "6.9.1" - } - } - ], - "version" : 3 -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX.xcodeproj/xcshareddata/xcschemes/MEGABOX.xcscheme b/gogo/MEGABOX/MEGABOX/MEGABOX.xcodeproj/xcshareddata/xcschemes/MEGABOX.xcscheme deleted file mode 100644 index 09b59f7..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX.xcodeproj/xcshareddata/xcschemes/MEGABOX.xcscheme +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/API Services/MovieEndpoints.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/API Services/MovieEndpoints.swift deleted file mode 100644 index 9f43b55..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/API Services/MovieEndpoints.swift +++ /dev/null @@ -1,78 +0,0 @@ -// -// MovieEndpoints.swift -// MEGABOX -// -// Created by 고석현 on 11/12/25. -// - - - -import Foundation -import Moya - -// MARK: - 엔드포인트 정의! -enum MovieEndpoints { - case nowPlaying - -} - -// MARK: - TargetType !! -extension MovieEndpoints: TargetType { - - // 기본 URL - var baseURL: URL { - return URL(string: "https://api.themoviedb.org/3")! - } - - // 요청 경로 - var path: String { - switch self { - case .nowPlaying: - return "/movie/now_playing" - } - } - - // HTTP 메서드 -> GET - var method: Moya.Method { - return .get - } - - // 파라미터 설정 (쿼리)~ / query에 API KEY 같이 보냄! - // 쿼리 파라미터에서 &는 순서 상관 없대 ! - // 쿼리 파라미터는 path var 아님 !! - //https://api.themoviedb.org/3/movie/now_playing?language=ko-KR&page=1®ion=KR 에서 ? 뒤에가 모두 쿼리 파라미터임. - - var task: Task { - switch self { - case .nowPlaying: - let params: [String: Any] = [ - "api_key": Secret.tmdbAPIKey, - "language": "ko-KR", - "region": "KR", - "page": 1 - ] - return .requestParameters(parameters: params, encoding: URLEncoding.queryString) - } - } - - var headers: [String: String]? { - return [ - "accept": "application/json", - "Authorization": "Bearer \(Secret.tmdbReadAccessToken)" - - ] - } - - // 샘플 데이터 (테스트용) - var sampleData: Data { - switch self { - case .nowPlaying: - return """ - { - "page": 1, - "results": [] - } - """.data(using: .utf8)! - } - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/API Services/MovieResponseDTO.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/API Services/MovieResponseDTO.swift deleted file mode 100644 index ff620c4..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/API Services/MovieResponseDTO.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// MovieResponseDTO.swift -// MEGABOX -// -// Created by 고석현 on 11/12/25. -// - -import Foundation - -// MARK: - 메인 DTO -struct MovieResponseDTO: Decodable { - let dates: DatesDTO? - let page: Int - let results: [MovieResultDTO] - let totalPages: Int? - let totalResults: Int? -//Decodable 선언 - enum CodingKeys: String, CodingKey { - case dates, page, results - case totalPages = "total_pages" - case totalResults = "total_results" - } -} - -// MARK: - 날짜 정보 -struct DatesDTO: Decodable { - let maximum: String - let minimum: String -} - -// MARK: - 영화 결과 아이템 -struct MovieResultDTO: Decodable { - let id: Int - let originalTitle: String? - let overview: String? - let releaseDate: String? - let popularity: Double? - let backdropPath: String? - let posterPath: String? - let title: String? - let voteAverage: Double? - let voteCount: Int? - let genreIds: [Int]? - let originalLanguage: String? - let adult: Bool? - let video: Bool? -} - - -// MARK: - DTO → Domain 매핑 -extension MovieResponseDTO { - func toDomain() -> [MovieModel] { - return results.map { dto in - // TMDB 이미지 Base URL ! Kingfisher에게 URL 로 전달 - let posterBaseURL = "https://image.tmdb.org/t/p/w342" - let backdropBaseURL = "https://image.tmdb.org/t/p/w780" - - let posterURL = dto.posterPath.map { posterBaseURL + $0 } ?? "" - let backdropURL = dto.backdropPath.map { backdropBaseURL + $0 } - - return MovieModel( - title: dto.title ?? dto.originalTitle ?? "제목 없음", - poster: posterURL, - countAudience: "고정!명", // 과제용 하드코딩 - description: dto.overview ?? "줄거리 정보가 없습니다.", - releaseDate: dto.releaseDate ?? "미정", - rating: "고정 관람가", // 과제용 하드코딩 - backdrop: backdropURL //영화 상세 화면 탑 배너 이미지 - ) - } - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/API Services/MovieScheduleDTO.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/API Services/MovieScheduleDTO.swift deleted file mode 100644 index 182de27..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/API Services/MovieScheduleDTO.swift +++ /dev/null @@ -1,275 +0,0 @@ -// -// MovieScheduleDTO.swift -// MEGABOX -// -// Created by 고석현 on 11/6/25. -// - -import Foundation - - -struct APIResponse: Codable { - let status: String - let msg: String - let data: MoviesDTO - - enum CodingKeys: String, CodingKey { - case status = "status" - case msg = "message" - case data = "data" - } -} -extension APIResponse { - func toDomain() -> TopDomainModel { - return TopDomainModel( - status: status, - msg: msg, - data: data.toDomain() - ) - } -} - -struct MoviesDTO: Codable { - let movies: [MovieDTO] - - enum CodingKeys: String, CodingKey { - case movies = "movies" - } -} -extension MoviesDTO { - func toDomain() -> MoviesDomainModel { - return MoviesDomainModel( - movies: movies.map { $0.toDomain() } - ) - } -} - -struct MovieDTO: Codable { - let id: String - let title: String - let age: String - let schedules: [SchedulesDTO] - - enum CodingKeys: String, CodingKey { - case id = "id" - case title = "title" - case age = "age_rating" - case schedules = "schedules" - } -} -extension MovieDTO { - func toDomain() -> MovieDomainModel { - return MovieDomainModel( - id: id, - title: title, - age: Int(age) ?? 0, - schedules: schedules.map { $0.toDomain() } - ) - } -} - -struct SchedulesDTO: Codable { - let date: String? - let areas: [AreasDTO] - - enum CodingKeys: String, CodingKey { - case date = "date" - case areas = "areas" - } -} -extension SchedulesDTO { - func toDomain() -> SchedulesDomainModel { - - guard let date = date else { - return SchedulesDomainModel( - date: "undefined", - areas: areas.map { $0.toDomain() } - ) - } - return SchedulesDomainModel( - date: date, - areas: areas.map { $0.toDomain() } - ) - } -} - -struct AreasDTO: Codable { - let id: UUID = UUID() - let area: String - let items: [ItemsDTO] - - enum CodingKeys: String, CodingKey { - case area = "area" - case items = "items" - } -} -extension AreasDTO { - func toDomain() -> AreasDomainModel { - return AreasDomainModel( - id: id, - area: area, - items: items.map { $0.toDomain() } - ) - } -} - -struct ItemsDTO: Codable, Identifiable, Hashable { - let id: UUID = UUID() - let auditorium: String - let format: String - let showtimes: [ShowtimesDTO] - - enum CodingKeys: String, CodingKey { - case auditorium = "auditorium" - case format = "format" - case showtimes = "showtimes" - } -} -extension ItemsDTO { - func toDomain() -> ItemsDomainModel { - return ItemsDomainModel( - id: id, - auditorium: auditorium, - format: format, - showtimes: showtimes.map { $0.toDomain() } - ) - } -} - -struct ShowtimesDTO: Codable, Identifiable, Hashable { - let id: UUID = UUID() - let start: String - let end: String - let available: Int - let total: Int - - enum CodingKeys: String, CodingKey { - case start = "start" - case end = "end" - case available = "available" - case total = "total" - } -} -extension ShowtimesDTO { - func toDomain() -> ShowtimesDomainModel { - return ShowtimesDomainModel( - id: id, - start: start, - end: end, - available: available, - total: total - ) - } -} - - -struct TopDomainModel { - let status: String - let msg: String - let data: MoviesDomainModel -} -extension TopDomainModel { - func toDTO() -> APIResponse { - return APIResponse( - status: status, - msg: msg, - data: data.toDTO() - ) - } -} - -struct MoviesDomainModel { - let movies: [MovieDomainModel] -} -extension MoviesDomainModel { - func toDTO() -> MoviesDTO { - return MoviesDTO( - movies: movies.map { $0.toDTO() } - ) - } -} - -struct MovieDomainModel { - let id: String - let title: String - let age: Int - let schedules: [SchedulesDomainModel] -} -extension MovieDomainModel { - func toDTO() -> MovieDTO { - return MovieDTO( - id: id, - title: title, - age: String(age), - schedules: schedules.map { $0.toDTO() } - ) - } -} - -struct SchedulesDomainModel { - let date: String? - let areas: [AreasDomainModel] -} -extension SchedulesDomainModel { - func toDTO() -> SchedulesDTO { - - guard let date = date else { - return SchedulesDTO( - date: "undefined", - areas: areas.map { $0.toDTO() } - ) - } - return SchedulesDTO( - date: date, - areas: areas.map { $0.toDTO() } - ) - } -} - -struct AreasDomainModel: Identifiable, Hashable { - let id: UUID - let area: String - let items: [ItemsDomainModel] -} -extension AreasDomainModel { - func toDTO() -> AreasDTO { - return AreasDTO( - area: area, - items: items.map { $0.toDTO() } - ) - } -} - -struct ItemsDomainModel: Identifiable, Hashable { - let id: UUID - let auditorium: String - let format: String - let showtimes: [ShowtimesDomainModel] -} -extension ItemsDomainModel { - func toDTO() -> ItemsDTO { - return ItemsDTO( - auditorium: auditorium, - format: format, - showtimes: showtimes.map { $0.toDTO() } - ) - } -} - -struct ShowtimesDomainModel: Identifiable, Hashable { - let id: UUID - let start: String - let end: String - let available: Int - let total: Int -} -extension ShowtimesDomainModel { - func toDTO() -> ShowtimesDTO { - return ShowtimesDTO( - start: start, - end: end, - available: available, - total: total - ) - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/API Services/MovieService.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/API Services/MovieService.swift deleted file mode 100644 index 854fb20..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/API Services/MovieService.swift +++ /dev/null @@ -1,127 +0,0 @@ -// -// MovieService.swift -// MEGABOX -// -// Created by 고석현 on 11/12/25. -// - -import Foundation -import Moya - -// MARK: - MovieService 파일 !!!! -final class MovieService { - static let shared = MovieService() // 싱글톤! - private let provider = MoyaProvider() - - private init() {} - - // MARK: - Now Playing 현재 상영중 영화 목록 요청~! - func fetchNowPlayingMovies( - completion: @escaping (Result) -> Void - ) { - print("🎬 [MovieService] Now Playing 영화 데이터 요청 시작...") - - - - //do-catch 문 + Moya의 Result 타입 사용 - provider.request(.nowPlaying) { result in - switch result { - case .success(let response): - do { - let decoder = JSONDecoder() - decoder.keyDecodingStrategy = .convertFromSnakeCase - let decodedData = try decoder.decode(MovieResponseDTO.self, from: response.data) - - print("✅ [MovieService] 영화 데이터 로딩 성공 (\(decodedData.results.count)편)") - decodedData.results.prefix(3).forEach { movie in - print(""" - 🎞️ [DEBUG] Movie: - Title: \(movie.title ?? "제목 없음") - Poster Path: \(movie.posterPath ?? "nil") - Overview: \(movie.overview ?? "nil") - Release Date: \(movie.releaseDate ?? "nil") - """) - } - completion(.success(decodedData)) - - } catch { - print("❌ [MovieService] 디코딩 실패: \(error.localizedDescription)") - if let jsonString = String(data: response.data, encoding: .utf8) { - print("📄 [DEBUG] Response Raw JSON: \(jsonString)") - } - completion(.failure(.decodingError)) - } - - case .failure(let error): - print("🚨 [MovieService] 네트워크 요청 실패: \(error.localizedDescription)") - completion(.failure(.networkFailure)) - } - } - } - - - // MARK: - async/await 버전으로도 ! (로그로 서버랑 연결 확인 가능) - func fetchNowPlayingMoviesAsync() async throws -> MovieResponseDTO { - print("🎬 [MovieService] async/await 로딩중...") - - // ✅ 디버그용 로그 추가 - let target = MovieEndpoints.nowPlaying - print(""" - 🌐 [DEBUG-REQUEST] - ➤ Base URL: \(target.baseURL) - ➤ Path: \(target.path) - ➤ Full URL: \(target.baseURL)\(target.path) - ➤ Method: \(target.method) - ➤ Headers: \(target.headers ?? [:]) - """) - - // params 로그도 찍기 (있다면) - if case let .requestParameters(parameters, _) = target.task { - print(" ➤ Parameters: \(parameters)") - } - - // 요청 실행 - let response = try await provider.asyncRequest(target) - print("✅ [MovieService] async 로딩 성공") - - let decoder = JSONDecoder() - decoder.keyDecodingStrategy = .convertFromSnakeCase - let decodedData = try decoder.decode(MovieResponseDTO.self, from: response.data) - - print("✅ [MovieService] 영화 데이터 로딩 성공 (\(decodedData.results.count)편)") - decodedData.results.prefix(3).forEach { movie in - print(""" - 🎞️ [DEBUG-ASYNC] Movie: - Title: \(movie.originalTitle ?? movie.title ?? "제목 없음") - Poster Path: \(movie.posterPath ?? "nil") - Overview: \(movie.overview ?? "nil") - Release Date: \(movie.releaseDate ?? "nil") - """) - } - - return decodedData - } -} - -// MARK: - NetworkError Enum -enum NetworkError: Error { - case decodingError - case networkFailure - case unknown -} - -// MARK: - MoyaProvider async/await 확장 -private extension MoyaProvider { - func asyncRequest(_ target: Target) async throws -> Response { - try await withCheckedThrowingContinuation { continuation in - self.request(target) { result in - switch result { - case .success(let response): - continuation.resume(returning: response) - case .failure(let error): - continuation.resume(throwing: error) - } - } - } - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Info.plist b/gogo/MEGABOX/MEGABOX/MEGABOX/Info.plist deleted file mode 100644 index 2929014..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Info.plist +++ /dev/null @@ -1,34 +0,0 @@ - - - - - KAKAO_NATIVE_APP_KEY - $KAKAO_NATIVE_APP_KEY - LSApplicationQueriesSchemes - - kakaompathauth - kakaolink - kakaoplus - kakaotalk - - NSPhotoLibraryUsageDescription - 사진 앨범 접근 권한이 필요합니다. - TMDB_API_KEY - $(TMDB_API_KEY) - TMDB_READ_ACCESS_TOKEN - $(TMDB_READ_ACCESS_TOKEN) - UIAppFonts - - Pretendard-Black.otf - Pretendard-Bold.otf - Pretendard-ExtraBold.otf - Pretendard-ExtraLight.otf - Pretendard-Light.otf - Pretendard--Medium.otf - Pretendard-Regular.otf - Pretendard-SemiBold.otf - Pretendard-Thin.otf - - - - diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/MEGABOX.entitlements b/gogo/MEGABOX/MEGABOX/MEGABOX/MEGABOX.entitlements deleted file mode 100644 index 0c67376..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/MEGABOX.entitlements +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/MEGABOXApp.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/MEGABOXApp.swift deleted file mode 100644 index d0aab88..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/MEGABOXApp.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// MEGABOXApp.swift -// MEGABOX -// -// Created by 고석현 on 9/17/25. -// - -import SwiftUI -@main -struct MegaBoxApp: App { - @State private var router = NavigationRouter() - @State private var viewModel = MovieViewModel() - var body: some Scene { - WindowGroup { - - SourceView() - .environment(router) - .environmentObject(viewModel) - } - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Model/LoginModel.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Model/LoginModel.swift deleted file mode 100644 index accc0f9..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Model/LoginModel.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// LoginModel.swift -// MEGABOX -// -// Created by 고석현 on 9/26/25. -// - -import Foundation - - -struct LoginModel { - var id: String = "" - var pwd: String = "" - var name: String = "" -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Model/MenuItemModel.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Model/MenuItemModel.swift deleted file mode 100644 index 1d1036d..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Model/MenuItemModel.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// MenuItemModel.swift -// MEGABOX -// -// Created by 고석현 on 11/15/25. -// - - -import Foundation - -struct MenuItemModel: Identifiable, Hashable { - let id = UUID() - - let imageName: String - let title: String - let price: Int - - // 추가 - let isBest: Bool // BEST 배지 - let isRecommended: Bool // 추천 배지 (추천 상품) - let isSoldOut: Bool // 품절 여부 -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Model/MovieModel.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Model/MovieModel.swift deleted file mode 100644 index 0eb5b04..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Model/MovieModel.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// MovieModel.swift -// MEGABOX -// -// Created by 고석현 on 10/2/25. -// - -import Foundation - -import Foundation - -struct MovieModel: Identifiable, Hashable { - let id = UUID() - let title: String - let poster: String - let countAudience: String? - //F1 상세 화면용 추가 변수 - let description: String? - let releaseDate: String? - let rating: String? - let backdrop: String? -} - -enum Theater: String, CaseIterable, Hashable, Identifiable { - case gangnam = "강남" - case hongdae = "홍대" - case shinchon = "신촌" - var id: String { rawValue } -} - -struct Showtime: Identifiable, Hashable { - let id = UUID() - let theater: Theater - let screenName: String - let format: String - let start: Date - let end: Date - let remaining: Int - let capacity: Int -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/MovieSchedule.json b/gogo/MEGABOX/MEGABOX/MEGABOX/MovieSchedule.json deleted file mode 100644 index b95dbe7..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/MovieSchedule.json +++ /dev/null @@ -1,385 +0,0 @@ -{ - "status": "success", - "message": "Showtimes fetched successfully", - "data": { - "movies": [ - { - "id": "m-001", - "title": "어쩔수가없다", - "age_rating": "15", - "schedules": [ - { - "date": "2025-09-22", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "크리클라이너 1관", - "format": "2D", - "showtimes": [ - { "start": "11:30", "end": "13:58", "available": 109, "total": 116 }, - { "start": "14:20", "end": "16:48", "available": 19, "total": 116 }, - { "start": "17:05", "end": "19:28", "available": 1, "total": 116 }, - { "start": "19:45", "end": "22:02", "available": 100, "total": 116 }, - { "start": "22:20", "end": "00:04", "available": 116, "total": 116 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "BTS관 (7층 1관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "09:30", "end": "11:50", "available": 75, "total": 116 }, - { "start": "12:00", "end": "14:26", "available": 102, "total": 116 }, - { "start": "14:45", "end": "17:04", "available": 88, "total": 116 } - ] - }, - { - "auditorium": "BTS관 (9층 2관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "11:30", "end": "13:58", "available": 34, "total": 116 }, - { "start": "14:10", "end": "16:32", "available": 100, "total": 116 }, - { "start": "16:50", "end": "19:00", "available": 13, "total": 116 }, - { "start": "19:20", "end": "21:40", "available": 92, "total": 116 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-23", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "크리클라이너 1관", - "format": "2D", - "showtimes": [ - { "start": "10:30", "end": "12:58", "available": 112, "total": 116 }, - { "start": "13:40", "end": "16:08", "available": 54, "total": 116 }, - { "start": "16:20", "end": "18:48", "available": 22, "total": 116 }, - { "start": "19:30", "end": "21:58", "available": 97, "total": 116 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "BTS관 (7층 1관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "09:50", "end": "12:10", "available": 81, "total": 116 }, - { "start": "12:30", "end": "14:56", "available": 99, "total": 116 }, - { "start": "15:20", "end": "17:39", "available": 61, "total": 116 } - ] - }, - { - "auditorium": "BTS관 (9층 2관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "11:10", "end": "13:38", "available": 45, "total": 116 }, - { "start": "14:00", "end": "16:22", "available": 88, "total": 116 }, - { "start": "16:40", "end": "18:58", "available": 24, "total": 116 }, - { "start": "19:10", "end": "21:30", "available": 90, "total": 116 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-24", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "크리클라이너 1관", - "format": "2D", - "showtimes": [ - { "start": "11:00", "end": "13:28", "available": 106, "total": 116 }, - { "start": "13:50", "end": "16:18", "available": 33, "total": 116 }, - { "start": "16:40", "end": "19:08", "available": 5, "total": 116 }, - { "start": "19:20", "end": "21:48", "available": 84, "total": 116 }, - { "start": "22:10", "end": "00:34", "available": 116, "total": 116 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "BTS관 (7층 1관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "10:10", "end": "12:30", "available": 72, "total": 116 }, - { "start": "12:50", "end": "15:16", "available": 104, "total": 116 }, - { "start": "15:40", "end": "18:00", "available": 76, "total": 116 } - ] - }, - { - "auditorium": "BTS관 (9층 2관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "11:40", "end": "14:08", "available": 29, "total": 116 }, - { "start": "14:20", "end": "16:42", "available": 93, "total": 116 }, - { "start": "17:10", "end": "19:30", "available": 18, "total": 116 }, - { "start": "19:40", "end": "22:00", "available": 87, "total": 116 } - ] - } - ] - } - ] - } - ] - }, - { - "id": "m-002", - "title": "F1 더 무비", - "age_rating": "12", - "schedules": [ - { - "date": "2025-09-22", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "IMAX 1관", - "format": "IMAX", - "showtimes": [ - { "start": "10:00", "end": "12:15", "available": 45, "total": 50 }, - { "start": "13:30", "end": "15:45", "available": 12, "total": 50 }, - { "start": "17:00", "end": "19:15", "available": 8, "total": 50 }, - { "start": "20:30", "end": "22:45", "available": 35, "total": 50 } - ] - }, - { - "auditorium": "4DX 2관", - "format": "4DX", - "showtimes": [ - { "start": "11:15", "end": "13:30", "available": 28, "total": 40 }, - { "start": "15:45", "end": "18:00", "available": 5, "total": 40 }, - { "start": "19:15", "end": "21:30", "available": 22, "total": 40 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "IMAX 3관", - "format": "IMAX", - "showtimes": [ - { "start": "09:45", "end": "12:00", "available": 38, "total": 50 }, - { "start": "13:15", "end": "15:30", "available": 15, "total": 50 }, - { "start": "16:45", "end": "19:00", "available": 3, "total": 50 }, - { "start": "20:15", "end": "22:30", "available": 42, "total": 50 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-23", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "IMAX 1관", - "format": "IMAX", - "showtimes": [ - { "start": "10:30", "end": "12:45", "available": 48, "total": 50 }, - { "start": "14:00", "end": "16:15", "available": 25, "total": 50 }, - { "start": "17:30", "end": "19:45", "available": 18, "total": 50 }, - { "start": "21:00", "end": "23:15", "available": 41, "total": 50 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "IMAX 3관", - "format": "IMAX", - "showtimes": [ - { "start": "10:00", "end": "12:15", "available": 33, "total": 50 }, - { "start": "13:30", "end": "15:45", "available": 7, "total": 50 }, - { "start": "17:00", "end": "19:15", "available": 12, "total": 50 }, - { "start": "20:30", "end": "22:45", "available": 39, "total": 50 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-24", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "IMAX 1관", - "format": "IMAX", - "showtimes": [ - { "start": "09:30", "end": "11:45", "available": 42, "total": 50 }, - { "start": "12:45", "end": "15:00", "available": 18, "total": 50 }, - { "start": "15:30", "end": "17:45", "available": 6, "total": 50 }, - { "start": "18:15", "end": "20:30", "available": 29, "total": 50 }, - { "start": "21:00", "end": "23:15", "available": 44, "total": 50 } - ] - }, - { - "auditorium": "4DX 2관", - "format": "4DX", - "showtimes": [ - { "start": "10:30", "end": "12:45", "available": 15, "total": 40 }, - { "start": "14:00", "end": "16:15", "available": 3, "total": 40 }, - { "start": "17:30", "end": "19:45", "available": 1, "total": 40 }, - { "start": "20:00", "end": "22:15", "available": 25, "total": 40 } - ] - } - ] - } - ] - } - ] - }, - { - "id": "m-003", - "title": "귀멸의 칼날: 무한성", - "age_rating": "15", - "schedules": [ - { - "date": "2025-09-22", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:30", "end": "12:20", "available": 85, "total": 120 }, - { "start": "13:00", "end": "15:50", "available": 23, "total": 120 }, - { "start": "16:30", "end": "19:20", "available": 2, "total": 120 }, - { "start": "20:00", "end": "22:50", "available": 78, "total": 120 }, - { "start": "23:30", "end": "02:20", "available": 95, "total": 120 } - ] - }, - { - "auditorium": "4DX 3관", - "format": "4DX", - "showtimes": [ - { "start": "10:45", "end": "13:35", "available": 15, "total": 40 }, - { "start": "14:15", "end": "17:05", "available": 4, "total": 40 }, - { "start": "17:45", "end": "20:35", "available": 1, "total": 40 }, - { "start": "21:15", "end": "00:05", "available": 28, "total": 40 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:00", "end": "11:50", "available": 67, "total": 120 }, - { "start": "12:30", "end": "15:20", "available": 19, "total": 120 }, - { "start": "16:00", "end": "18:50", "available": 5, "total": 120 }, - { "start": "19:30", "end": "22:20", "available": 89, "total": 120 } - ] - }, - { - "auditorium": "Dolby Cinema 4관", - "format": "Dolby", - "showtimes": [ - { "start": "11:00", "end": "13:50", "available": 22, "total": 60 }, - { "start": "14:30", "end": "17:20", "available": 8, "total": 60 }, - { "start": "18:00", "end": "20:50", "available": 3, "total": 60 }, - { "start": "21:30", "end": "00:20", "available": 45, "total": 60 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-23", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:45", "end": "12:35", "available": 92, "total": 120 }, - { "start": "13:15", "end": "16:05", "available": 31, "total": 120 }, - { "start": "16:45", "end": "19:35", "available": 7, "total": 120 }, - { "start": "20:15", "end": "23:05", "available": 84, "total": 120 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:30", "end": "12:20", "available": 74, "total": 120 }, - { "start": "13:00", "end": "15:50", "available": 26, "total": 120 }, - { "start": "16:30", "end": "19:20", "available": 11, "total": 120 }, - { "start": "20:00", "end": "22:50", "available": 96, "total": 120 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-24", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "돌비시네마", - "format": "2D", - "showtimes": [ - { "start": "09:15", "end": "12:05", "available": 88, "total": 120 }, - { "start": "12:45", "end": "15:35", "available": 25, "total": 120 }, - { "start": "16:15", "end": "19:05", "available": 4, "total": 120 }, - { "start": "19:45", "end": "22:35", "available": 81, "total": 120 }, - { "start": "23:15", "end": "02:05", "available": 98, "total": 120 } - ] - } - ] - } - ] - } - ] - } - ] - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Navigation/NavigationRouter.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Navigation/NavigationRouter.swift deleted file mode 100644 index f21ceaa..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Navigation/NavigationRouter.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// NavigationRouter.swift -// MEGABOX -// -// Created by 고석현 on 10/2/25. -// - -import SwiftUI -import Foundation - -@Observable -class NavigationRouter { - var path = NavigationPath() - - func push(_ route: Route) { - path.append(route) - } - - func pop() { - if !path.isEmpty { - path.removeLast() - } - } - - func reset() { - path = NavigationPath() - } - -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Navigation/Route.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Navigation/Route.swift deleted file mode 100644 index a121110..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Navigation/Route.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// Route.swift -// MEGABOX -// -// Created by 고석현 on 10/2/25. -// - -import SwiftUI - -enum Route: Hashable { - case home - case login - case memberInfo - case movieDetail(movie: MovieModel) - case menuDetail -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Navigation/SourceView.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Navigation/SourceView.swift deleted file mode 100644 index 768d5aa..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Navigation/SourceView.swift +++ /dev/null @@ -1,87 +0,0 @@ -// -// SourceView.swift -// MEGABOX -// -// Created by 고석현 on 10/2/25. -// -import Foundation -import SwiftUI -import KakaoSDKCommon -import KakaoSDKAuth - -struct SourceView: View { - - @Environment(NavigationRouter.self) var router - @EnvironmentObject var viewModel: MovieViewModel - @State private var isLoggedIn: Bool = false - // Provide a single MobileOrderViewModel instance for the flow - @State private var mobileOrderViewModel = MobileOrderViewModel() - - var body: some View { - @Bindable var router = router - - NavigationStack(path: $router.path) { - Group { - if isLoggedIn { - TabBarView() - .navigationBarBackButtonHidden(true) - } else { - LoginView(isLoggedIn: $isLoggedIn) - .environment(router) - .environmentObject(viewModel) - } - } - .navigationDestination(for: Route.self) { route in - switch route { - case .home: - HomeView() - .navigationBarBackButtonHidden(true) - case .movieDetail(let movie): - MovieDetailView(movie: movie) - .navigationBarBackButtonHidden(true) - case .login: - TabBarView() - .navigationBarBackButtonHidden(true) - case .memberInfo: - InfoManageView(isLoggedIn: $isLoggedIn) - .navigationBarBackButtonHidden(true) - case .menuDetail: - // Pass the Observation-based view model - MenuDetailView(viewModel: mobileOrderViewModel) - .navigationBarBackButtonHidden(true) - - } - } - } - .task { - KakaoSDK.initSDK(appKey: Bundle.kakaoNativeAppKey) - } - .onOpenURL { url in - if AuthApi.isKakaoTalkLoginUrl(url) { - _ = AuthController.handleOpenUrl(url: url) - } - } - .onAppear { - autoLoginCheck() - } - } - - //키체인 자동 로그인 - private func autoLoginCheck() { - let id = KeychainService.shared.read(KeychainService.Key.userID) - let pw = KeychainService.shared.read(KeychainService.Key.userPassword) - if id != nil && pw != nil { - isLoggedIn = true - } - } -} - -// 번들 - -private extension Bundle { - static var kakaoNativeAppKey: String { - (Bundle.main.object(forInfoDictionaryKey: "KAKAO_NATIVE_APP_KEY") as? String) ?? "" - } -} - -#Preview { SourceView() } diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index ffdfe15..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "16x16" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "16x16" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "32x32" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "32x32" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "128x128" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "128x128" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "256x256" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "256x256" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "512x512" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "512x512" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/DetailMovieView/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/DetailMovieView/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/DetailMovieView/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/DetailMovieView/f1bottom.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/DetailMovieView/f1bottom.imageset/Contents.json deleted file mode 100644 index 7176c1f..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/DetailMovieView/f1bottom.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "f1bottom.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/DetailMovieView/f1bottom.imageset/f1bottom.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/DetailMovieView/f1bottom.imageset/f1bottom.pdf deleted file mode 100644 index de80075..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/DetailMovieView/f1bottom.imageset/f1bottom.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/DetailMovieView/f1top.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/DetailMovieView/f1top.imageset/Contents.json deleted file mode 100644 index 021e993..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/DetailMovieView/f1top.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "f1top.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/DetailMovieView/f1top.imageset/f1top.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/DetailMovieView/f1top.imageset/f1top.pdf deleted file mode 100644 index 107e9be..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/DetailMovieView/f1top.imageset/f1top.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/New Folder/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/New Folder/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/New Folder/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/goback.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/goback.imageset/Contents.json deleted file mode 100644 index 4281721..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/goback.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Leading.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/goback.imageset/Leading.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/goback.imageset/Leading.pdf deleted file mode 100644 index 5c4d530..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/goback.imageset/Leading.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/meboxLogo.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/meboxLogo.imageset/Contents.json deleted file mode 100644 index b810cc9..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/meboxLogo.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "meboxLogo.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/meboxLogo.imageset/meboxLogo.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/meboxLogo.imageset/meboxLogo.pdf deleted file mode 100644 index 8515baf..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/meboxLogo.imageset/meboxLogo.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/movieFeed1.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/movieFeed1.imageset/Contents.json deleted file mode 100644 index f0f3163..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/movieFeed1.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "movieFeed1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/movieFeed1.imageset/movieFeed1.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/movieFeed1.imageset/movieFeed1.pdf deleted file mode 100644 index 3f8c463..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/movieFeed1.imageset/movieFeed1.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/movieFeed2.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/movieFeed2.imageset/Contents.json deleted file mode 100644 index 9ea9d37..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/movieFeed2.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "movieFeed2.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/movieFeed2.imageset/movieFeed2.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/movieFeed2.imageset/movieFeed2.pdf deleted file mode 100644 index 1613df5..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/movieFeed2.imageset/movieFeed2.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/movieFeed3.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/movieFeed3.imageset/Contents.json deleted file mode 100644 index c9712e1..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/movieFeed3.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "movieFeed23.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/movieFeed3.imageset/movieFeed23.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/movieFeed3.imageset/movieFeed23.pdf deleted file mode 100644 index 8c0a486..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/movieFeed3.imageset/movieFeed23.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster1.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster1.imageset/Contents.json deleted file mode 100644 index 6fc835b..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster1.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "poster1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster1.imageset/poster1.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster1.imageset/poster1.pdf deleted file mode 100644 index 13624c5..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster1.imageset/poster1.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster2.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster2.imageset/Contents.json deleted file mode 100644 index a11ca18..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster2.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "poster3.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster2.imageset/poster3.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster2.imageset/poster3.pdf deleted file mode 100644 index b25029a..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster2.imageset/poster3.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster3.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster3.imageset/Contents.json deleted file mode 100644 index 345005c..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster3.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "poster2.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster3.imageset/poster2.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster3.imageset/poster2.pdf deleted file mode 100644 index 9323f73..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster3.imageset/poster2.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster4.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster4.imageset/Contents.json deleted file mode 100644 index c25fcc7..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster4.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "poster4.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster4.imageset/poster4.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster4.imageset/poster4.pdf deleted file mode 100644 index d67a1ce..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster4.imageset/poster4.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster5.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster5.imageset/Contents.json deleted file mode 100644 index a4859c1..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster5.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "poster5.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster5.imageset/poster5.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster5.imageset/poster5.pdf deleted file mode 100644 index 6831229..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster5.imageset/poster5.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster6.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster6.imageset/Contents.json deleted file mode 100644 index 1fe2d8c..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster6.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "poster6.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster6.imageset/poster6.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster6.imageset/poster6.pdf deleted file mode 100644 index 41ce273..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster6.imageset/poster6.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster7.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster7.imageset/Contents.json deleted file mode 100644 index b4558f5..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster7.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "poster7.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster7.imageset/poster7.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster7.imageset/poster7.pdf deleted file mode 100644 index 1ed5cc5..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster7.imageset/poster7.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster8.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster8.imageset/Contents.json deleted file mode 100644 index 4bcfe75..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster8.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "poster8.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster8.imageset/poster8.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster8.imageset/poster8.pdf deleted file mode 100644 index 27f2397..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/poster8.imageset/poster8.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/right.imageset/Button - Liquid Glass - Symbol.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/right.imageset/Button - Liquid Glass - Symbol.pdf deleted file mode 100644 index 127165c..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/right.imageset/Button - Liquid Glass - Symbol.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/right.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/right.imageset/Contents.json deleted file mode 100644 index e3f5fba..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/HomeView/right.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Button - Liquid Glass - Symbol.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/InfoManageView/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/InfoManageView/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/InfoManageView/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/InfoManageView/back.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/InfoManageView/back.imageset/Contents.json deleted file mode 100644 index 29580f1..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/InfoManageView/back.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "⮑ Button 1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/InfoManageView/back.imageset/\342\256\221 Button 1.pdf" "b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/InfoManageView/back.imageset/\342\256\221 Button 1.pdf" deleted file mode 100644 index 3a43fd4..0000000 Binary files "a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/InfoManageView/back.imageset/\342\256\221 Button 1.pdf" and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/appleLogo.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/appleLogo.imageset/Contents.json deleted file mode 100644 index 3007839..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/appleLogo.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "appleLogo.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/appleLogo.imageset/appleLogo.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/appleLogo.imageset/appleLogo.pdf deleted file mode 100644 index 3edb09b..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/appleLogo.imageset/appleLogo.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/kakaoLogo.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/kakaoLogo.imageset/Contents.json deleted file mode 100644 index a401fa4..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/kakaoLogo.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "kakaoLogo.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/kakaoLogo.imageset/kakaoLogo.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/kakaoLogo.imageset/kakaoLogo.pdf deleted file mode 100644 index 5fb6e23..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/kakaoLogo.imageset/kakaoLogo.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/naverLogo.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/naverLogo.imageset/Contents.json deleted file mode 100644 index 7ebf6fc..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/naverLogo.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "naverLogo.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/naverLogo.imageset/naverLogo.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/naverLogo.imageset/naverLogo.pdf deleted file mode 100644 index 9984eab..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/naverLogo.imageset/naverLogo.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/umcBanner.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/umcBanner.imageset/Contents.json deleted file mode 100644 index cc81f82..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/umcBanner.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "umcBanner.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/umcBanner.imageset/umcBanner.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/umcBanner.imageset/umcBanner.pdf deleted file mode 100644 index 787aaa2..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/LoginView/umcBanner.imageset/umcBanner.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/Vector.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/Vector.imageset/Contents.json deleted file mode 100644 index c6f97a0..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/Vector.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Vector.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/Vector.imageset/Vector.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/Vector.imageset/Vector.pdf deleted file mode 100644 index 0ee5910..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/Vector.imageset/Vector.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/location2.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/location2.imageset/Contents.json deleted file mode 100644 index 8baec95..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/location2.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "location.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/location2.imageset/location.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/location2.imageset/location.pdf deleted file mode 100644 index 7c42244..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/location2.imageset/location.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/movie.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/movie.imageset/Contents.json deleted file mode 100644 index a8f1c68..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/movie.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "film-reel 1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/movie.imageset/film-reel 1.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/movie.imageset/film-reel 1.pdf deleted file mode 100644 index 2502b63..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/movie.imageset/film-reel 1.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/popcorn.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/popcorn.imageset/Contents.json deleted file mode 100644 index 8c6e524..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/popcorn.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "popcorn.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/popcorn.imageset/popcorn.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/popcorn.imageset/popcorn.pdf deleted file mode 100644 index 7296486..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/popcorn.imageset/popcorn.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/seat.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/seat.imageset/Contents.json deleted file mode 100644 index fdb7b5b..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/seat.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "seat.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/seat.imageset/seat.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/seat.imageset/seat.pdf deleted file mode 100644 index ad806d0..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MemberInfoView/seat.imageset/seat.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/bag.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/bag.imageset/Contents.json deleted file mode 100644 index e187a68..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/bag.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "material-symbols-light_shopping-cart-outline.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/bag.imageset/material-symbols-light_shopping-cart-outline.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/bag.imageset/material-symbols-light_shopping-cart-outline.pdf deleted file mode 100644 index 6c319a6..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/bag.imageset/material-symbols-light_shopping-cart-outline.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best.imageset/Contents.json deleted file mode 100644 index ae68702..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "best.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best.imageset/best.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best.imageset/best.pdf deleted file mode 100644 index 6592edb..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best.imageset/best.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best1.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best1.imageset/Contents.json deleted file mode 100644 index 3ce9dee..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best1.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "best1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best1.imageset/best1.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best1.imageset/best1.pdf deleted file mode 100644 index 832def4..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best1.imageset/best1.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best2.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best2.imageset/Contents.json deleted file mode 100644 index 1396447..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best2.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "best3.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best2.imageset/best3.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best2.imageset/best3.pdf deleted file mode 100644 index 4f823c5..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best2.imageset/best3.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best3.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best3.imageset/Contents.json deleted file mode 100644 index 31aa9c6..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best3.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "best2.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best3.imageset/best2.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best3.imageset/best2.pdf deleted file mode 100644 index 896204e..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best3.imageset/best2.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best4.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best4.imageset/Contents.json deleted file mode 100644 index 69581dd..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best4.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "best4.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best4.imageset/best4.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best4.imageset/best4.pdf deleted file mode 100644 index b5866ae..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/best4.imageset/best4.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/insideout.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/insideout.imageset/Contents.json deleted file mode 100644 index be343c5..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/insideout.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "image 5.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/insideout.imageset/image 5.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/insideout.imageset/image 5.pdf deleted file mode 100644 index 739ec94..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/insideout.imageset/image 5.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/location.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/location.imageset/Contents.json deleted file mode 100644 index c6f97a0..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/location.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Vector.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/location.imageset/Vector.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/location.imageset/Vector.pdf deleted file mode 100644 index 2490824..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/location.imageset/Vector.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/location1.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/location1.imageset/Contents.json deleted file mode 100644 index c6f97a0..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/location1.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Vector.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/location1.imageset/Vector.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/location1.imageset/Vector.pdf deleted file mode 100644 index cf4d38b..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/location1.imageset/Vector.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/motor.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/motor.imageset/Contents.json deleted file mode 100644 index 80991b9..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/motor.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "healthicons_vespa-motorcycle-outline.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/motor.imageset/healthicons_vespa-motorcycle-outline.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/motor.imageset/healthicons_vespa-motorcycle-outline.pdf deleted file mode 100644 index 23fbe89..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/motor.imageset/healthicons_vespa-motorcycle-outline.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/popcorn1.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/popcorn1.imageset/Contents.json deleted file mode 100644 index d3b0a90..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/popcorn1.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "lucide_popcorn.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/popcorn1.imageset/lucide_popcorn.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/popcorn1.imageset/lucide_popcorn.pdf deleted file mode 100644 index 75296b4..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/popcorn1.imageset/lucide_popcorn.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/present.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/present.imageset/Contents.json deleted file mode 100644 index c1dd4c5..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/present.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "basil_present-outline.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/present.imageset/basil_present-outline.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/present.imageset/basil_present-outline.pdf deleted file mode 100644 index 0726d30..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/present.imageset/basil_present-outline.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend.imageset/Contents.json deleted file mode 100644 index 0e9d1bf..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "메뉴 뱃지.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend.imageset/\353\251\224\353\211\264 \353\261\203\354\247\200.pdf" "b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend.imageset/\353\251\224\353\211\264 \353\261\203\354\247\200.pdf" deleted file mode 100644 index a728ec7..0000000 Binary files "a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend.imageset/\353\251\224\353\211\264 \353\261\203\354\247\200.pdf" and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend1.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend1.imageset/Contents.json deleted file mode 100644 index 5db41e2..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend1.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "recommend1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend1.imageset/recommend1.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend1.imageset/recommend1.pdf deleted file mode 100644 index 524ed7b..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend1.imageset/recommend1.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend2.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend2.imageset/Contents.json deleted file mode 100644 index 332c280..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend2.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "recommend2.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend2.imageset/recommend2.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend2.imageset/recommend2.pdf deleted file mode 100644 index f2e8fc5..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend2.imageset/recommend2.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend3.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend3.imageset/Contents.json deleted file mode 100644 index e2a4d56..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend3.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "recommend3.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend3.imageset/recommend3.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend3.imageset/recommend3.pdf deleted file mode 100644 index e7196b0..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/recommend3.imageset/recommend3.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/store.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/store.imageset/Contents.json deleted file mode 100644 index d5d51f2..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/store.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "iconamoon_ticket-light.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/store.imageset/iconamoon_ticket-light.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/store.imageset/iconamoon_ticket-light.pdf deleted file mode 100644 index 303300c..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/store.imageset/iconamoon_ticket-light.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/ticketbook.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/ticketbook.imageset/Contents.json deleted file mode 100644 index ac2eba5..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/ticketbook.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "image 6.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/ticketbook.imageset/image 6.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/ticketbook.imageset/image 6.pdf deleted file mode 100644 index 026aa1f..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/MobileOrder/ticketbook.imageset/image 6.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/SplashView/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/SplashView/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/SplashView/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/SplashView/megaboxLogo1.imageset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/SplashView/megaboxLogo1.imageset/Contents.json deleted file mode 100644 index a5dd72e..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/SplashView/megaboxLogo1.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "megaboxLogo1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/SplashView/megaboxLogo1.imageset/megaboxLogo1.pdf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/SplashView/megaboxLogo1.imageset/megaboxLogo1.pdf deleted file mode 100644 index db1c307..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Assets.xcassets/SplashView/megaboxLogo1.imageset/megaboxLogo1.pdf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Calender/CalenderDay.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Calender/CalenderDay.swift deleted file mode 100644 index fa2c4d9..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Calender/CalenderDay.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// CalenderDay.swift -// MEGABOX -// -// Created by 고석현 on 10/9/25. -// - -import Foundation -import SwiftUI - -struct CalendarDay: Identifiable { - var id: UUID = .init() - let day: Int - let date: Date - let isCurrentMonth: Bool -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Calender/CalenderView.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Calender/CalenderView.swift deleted file mode 100644 index 1e79f5d..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Calender/CalenderView.swift +++ /dev/null @@ -1,124 +0,0 @@ -// -// CalenderView.swift -// MEGABOX -// -// Created by 고석현 on 10/9/25. -// - -import SwiftUI - - -struct Cell: View { - - var calendarDay: CalendarDay - var isSelected: Bool - @Bindable var viewModel: CalendarViewModel - - var body: some View { - ZStack { - if isSelected { - Circle() - .fill(Color.yellow.opacity(0.6)) - .frame(width: 26, height: 27) - .transition(.scale.combined(with: .opacity)) - } - - Text("\(calendarDay.day)") - .font(.caption) - .foregroundStyle(textColor) - .animation(.easeInOut(duration: 0.2), value: viewModel.selectedDate) - } - .frame(height: 30) - .onTapGesture { - withAnimation(.spring(response: 0.4, dampingFraction: 0.5, blendDuration: 0)) { - viewModel.changeSelectedDate(calendarDay.date) - } - } - } - - private var textColor: Color { - if calendarDay.isCurrentMonth { - return Color.black - } else { - return Color.gray.opacity(0.7) - } - } -} - -struct CalendarView: View { - - @Bindable var viewModel: CalendarViewModel = .init() - - var body: some View { - VStack(spacing: 24, content: { - hedarController // 상단 월 변경 컨트롤러 - - calendarView // 달력 본체 - }) - .padding(.vertical, 30) - .padding(.horizontal, 16) - .background(Color.white) - } - - - /// 상단 월 변경 컨틀롤러 뷰 - private var hedarController: some View { - HStack(spacing: 47, content: { - Button(action: { - viewModel.changeMonth(by: -1) - }, label: { - Image(systemName: "chevron.left") - }) - - Text(viewModel.currentMonth, formatter: calendarHeaderDateFormatter) - .font(.title3) - .foregroundStyle(Color.black) - - - Button(action: { - viewModel.changeMonth(by: 1) - }, label: { - Image(systemName: "chevron.right") - }) - }) - } - - /// 달력 본체 뷰 - private var calendarView: some View { - LazyVGrid(columns: Array(repeating: GridItem(.flexible(), spacing: 0), count: 7), spacing: 5, content: { - /// 요일 헤더 (일 ~ 토) - ForEach(localizedWeekdaySymbols.indices, id: \.self) { index in - Text(localizedWeekdaySymbols[index]) - .foregroundStyle(index == 0 ? Color.red : index == 6 ? Color.blue : Color.gray) // 일요일, 토요일, 평일 색 따로 두기 - .frame(maxWidth: .infinity) - .font(.caption) - } - .padding(.bottom, 30) // 요일 아래 여백 - - ForEach(viewModel.daysForCurrentGrid(), id: \.id) { calendarDay in - let isSelectedDate = viewModel.calendar.isDate(calendarDay.date, inSameDayAs: viewModel.selectedDate) - Cell(calendarDay: calendarDay, isSelected: isSelectedDate, viewModel: viewModel) - - } - }) - .frame(height: 250, alignment: .top) - } - - /// 요일 이름 한글로 가져오기 - let localizedWeekdaySymbols: [String] = { - let formatter = DateFormatter() - formatter.locale = Locale(identifier: "ko_KR") - return formatter.shortWeekdaySymbols ?? [] - }() - - /// 헤더 날짜 표시 포맷터 - let calendarHeaderDateFormatter: DateFormatter = { - let formatter = DateFormatter() - formatter.dateFormat = "yyyy.MM" - return formatter - }() -} - -#Preview { - CalendarView() -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Calender/CalenderViewModel.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Calender/CalenderViewModel.swift deleted file mode 100644 index 69d2f0f..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Calender/CalenderViewModel.swift +++ /dev/null @@ -1,139 +0,0 @@ -// -// CalenderViewModel.swift -// MEGABOX -// -// Created by 고석현 on 10/9/25. -// - -import Foundation - -@Observable -class CalendarViewModel { - var currentMonth: Date // 현재 보고 있는 달의 기준 날짜 - var selectedDate: Date // 사용자가 현재 선택한 날짜 - var calendar: Calendar // 날짜 계싼을 위한 Calendar 객체 - - var currentMonthYear: Int { // 현재 보고 있는 연도를 계산해서 연도로 반환 - Calendar.current.component(.year, from: currentMonth) - } - - init(currentMonth: Date = Date(), selectedDate: Date = Date(), calendar: Calendar = Calendar.current) { - self.currentMonth = currentMonth - self.selectedDate = selectedDate - self.calendar = calendar - } - - - /// 현재 보고 있는 월을 앞/뒤로 이동합니다 - /// - Parameter value: 양수면 다음 달, 음수면 이전 달로 이동해요!, currentMonth를 새로 계산된 월로 갱신합니다. - func changeMonth(by value: Int) { - let calendar = Calendar.current - if let newMonth = calendar.date(byAdding: .month, value: value, to: currentMonth) { - currentMonth = newMonth - } - } - - /// 달력 그리드를 구성하는 CalendarDay 배열을 생성합니다. - /// - Returns: 달력에 표시할 날짜들을 CalendarDay 배열로 생성합니다. 뷰에서 LazyVGrid를 통해 달력 UI를 구성할거에요! - func daysForCurrentGrid() -> [CalendarDay] { - let calendar = Calendar.current - /* - 현재 월의 정보를 계산합니다. - 이 달의 첫 날짜를 기준으로 시작 요일, 일 수 계산을 합니다. - */ - let firstDay = firstDayOfMonth() - let firstWeekDay = calendar.component(.weekday, from: firstDay) - let daysInMonth = numberOfDays(in: currentMonth) - - var days: [CalendarDay] = [] - - /* - 이번 달이 무슨 요일에 시작하는지에 따라, 앞에 몇 개의 셀을 이전 달의 날짜로 채울지 계산합니다. - */ - let leadingDays = (firstWeekDay - calendar.firstWeekday + 7) % 7 - - /* - 달력은 보통 7일 단위 그리드로 구성됩니다. - 어떤 달이 수요일에 시작한다면 앞의 일/월/화는 빈공간이 아닌 이전 달의 날짜로 미리보기로 보이도록 할 수 있죠! - 그래서 이 코드는 그 앞 부분 회색을 생성하는 부분입니다. - */ - if leadingDays > 0, let previousMonth = calendar.date(byAdding: .month, value: -1, to: currentMonth) { - let daysInPreviousMonth = numberOfDays(in: previousMonth) - for i in 0.. 0, - let nextMonth = calendar.date(byAdding: .month, value: 1, to: currentMonth) { - - let daysInNextMonth = numberOfDays(in: nextMonth) - - for day in 1...remaining { - let validDay = min(day, daysInNextMonth) - if let date = calendar.date(bySetting: .day, value: validDay, of: nextMonth) { - days.append(CalendarDay(day: validDay, date: date, isCurrentMonth: false)) - } - } - } - - return days - - } - - /// 입력된 date가 속한 해당 달의 총 일 수를 반환합니다. - /// - Parameter date: date 입력 - /// - Returns: 총 일 수 반환 - func numberOfDays(in date: Date) -> Int { - Calendar.current.range(of: .day, in: .month, for: date)?.count ?? 0 - } - - /// 입력된 date가 속한 달의 첫 번째 날짜가 무슨 요일에 시작하는지 구합니다. - /// - Parameter date: date 입력 - /// - Returns: 요일 값을 반환합니다. 일요일 = 1, 월요일 = 2 .... - private func firstWeekdayOfMonth(in date: Date) -> Int { - let components = Calendar.current.dateComponents([.year, .month], from: date) - let firstDay = Calendar.current.date(from: components)! - return Calendar.current.component(.weekday, from: firstDay) - } - - /// 주어진 date가 속한 일주일 범위의 Date 배열을 반환합니다. weekDay를 기준으로 그 주의 일요일부터 토요일까지 계산합니다. - /// - Returns: 현재 보고 있는 달의 1일 날짜 반환합니다. - func firstDayOfMonth() -> Date { - let compoents = Calendar.current.dateComponents([.year, .month], from: currentMonth) - return Calendar.current.date(from: compoents) ?? Date() - } - - /// 사용자가 날짜를 선택했을 때, 기존 선택된 날짜와 비교하여 필요할 경우에만 선택 날짜를 갱신할 수 있도록 합니다. 달력 앱에서 불필요한 상태 업데이트를 방지하고, 성능을 높이기 위해 자주 사용하는 방식이에요! - /// - Parameter date: 선택한 날짜 업데이트 - public func changeSelectedDate(_ date: Date) { - if calendar.isDate(selectedDate, inSameDayAs: date) { - return - } else { - selectedDate = date - } - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue00.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue00.colorset/Contents.json deleted file mode 100644 index a82536e..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue00.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "0.200", - "blue" : "0x00", - "green" : "0x00", - "red" : "0x00" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "0.200", - "blue" : "0x00", - "green" : "0x00", - "red" : "0x00" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue01.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue01.colorset/Contents.json deleted file mode 100644 index 83e57dc..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue01.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF7", - "green" : "0xF2", - "red" : "0xED" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF7", - "green" : "0xF2", - "red" : "0xED" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue02.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue02.colorset/Contents.json deleted file mode 100644 index c1c58df..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue02.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEF", - "green" : "0xE5", - "red" : "0xDA" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEF", - "green" : "0xE5", - "red" : "0xDA" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue03.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue03.colorset/Contents.json deleted file mode 100644 index a586a7e..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue03.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xCC", - "green" : "0xAA", - "red" : "0x88" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xCC", - "green" : "0xAA", - "red" : "0x88" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue04.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue04.colorset/Contents.json deleted file mode 100644 index 497d343..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue04.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xB8", - "green" : "0x99", - "red" : "0x7A" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xB8", - "green" : "0x99", - "red" : "0x7A" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue05.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue05.colorset/Contents.json deleted file mode 100644 index 8772f8e..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue05.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA3", - "green" : "0x88", - "red" : "0x6D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA3", - "green" : "0x88", - "red" : "0x6D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue06.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue06.colorset/Contents.json deleted file mode 100644 index f2bb34c..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue06.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x99", - "green" : "0x80", - "red" : "0x66" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x99", - "green" : "0x80", - "red" : "0x66" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue07.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue07.colorset/Contents.json deleted file mode 100644 index e2d0333..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue07.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x7A", - "green" : "0x66", - "red" : "0x52" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x7A", - "green" : "0x66", - "red" : "0x52" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue08.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue08.colorset/Contents.json deleted file mode 100644 index a8fe629..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue08.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5C", - "green" : "0x4C", - "red" : "0x3D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5C", - "green" : "0x4C", - "red" : "0x3D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue09.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue09.colorset/Contents.json deleted file mode 100644 index be7f767..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/blue09.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x47", - "green" : "0x3B", - "red" : "0x30" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x47", - "green" : "0x3B", - "red" : "0x30" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray00.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray00.colorset/Contents.json deleted file mode 100644 index d2e4805..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray00.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF2", - "green" : "0xF2", - "red" : "0xF2" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF2", - "green" : "0xF2", - "red" : "0xF2" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray01.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray01.colorset/Contents.json deleted file mode 100644 index 771d19d..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray01.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEB", - "green" : "0xEB", - "red" : "0xEB" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEB", - "green" : "0xEB", - "red" : "0xEB" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray02.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray02.colorset/Contents.json deleted file mode 100644 index 68cea4f..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray02.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD5", - "green" : "0xD5", - "red" : "0xD5" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD5", - "green" : "0xD5", - "red" : "0xD5" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray03.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray03.colorset/Contents.json deleted file mode 100644 index 6676967..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray03.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x78", - "green" : "0x78", - "red" : "0x78" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x78", - "green" : "0x78", - "red" : "0x78" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray04.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray04.colorset/Contents.json deleted file mode 100644 index 5a493e5..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray04.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x6C", - "green" : "0x6C", - "red" : "0x6C" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x6C", - "green" : "0x6C", - "red" : "0x6C" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray05.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray05.colorset/Contents.json deleted file mode 100644 index 7e45b56..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray05.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x60", - "green" : "0x60", - "red" : "0x60" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x60", - "green" : "0x60", - "red" : "0x60" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray06.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray06.colorset/Contents.json deleted file mode 100644 index 3db5e58..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray06.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5A", - "green" : "0x5A", - "red" : "0x5A" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5A", - "green" : "0x5A", - "red" : "0x5A" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray07.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray07.colorset/Contents.json deleted file mode 100644 index 3f9d5b5..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray07.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x48", - "green" : "0x48", - "red" : "0x48" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x48", - "green" : "0x48", - "red" : "0x48" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray08.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray08.colorset/Contents.json deleted file mode 100644 index 85ca7a9..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray08.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x36", - "green" : "0x36", - "red" : "0x36" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x36", - "green" : "0x36", - "red" : "0x36" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray09.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray09.colorset/Contents.json deleted file mode 100644 index 85730c1..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/gray09.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x2A", - "green" : "0x2A", - "red" : "0x2A" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x2A", - "green" : "0x2A", - "red" : "0x2A" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple00.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple00.colorset/Contents.json deleted file mode 100644 index a56e9a7..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple00.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFB", - "green" : "0xE7", - "red" : "0xF0" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFB", - "green" : "0xE7", - "red" : "0xF0" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple01.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple01.colorset/Contents.json deleted file mode 100644 index 054d393..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple01.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF9", - "green" : "0xDB", - "red" : "0xE8" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF9", - "green" : "0xDB", - "red" : "0xE8" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple02.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple02.colorset/Contents.json deleted file mode 100644 index 1e7b4e7..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple02.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF3", - "green" : "0xB4", - "red" : "0xCF" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF3", - "green" : "0xB4", - "red" : "0xCF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple03.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple03.colorset/Contents.json deleted file mode 100644 index 4029bef..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple03.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD8", - "green" : "0x0E", - "red" : "0x65" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD8", - "green" : "0x0E", - "red" : "0x65" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple04.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple04.colorset/Contents.json deleted file mode 100644 index 45b8d3c..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple04.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xC2", - "green" : "0x0D", - "red" : "0x5B" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xC2", - "green" : "0x0D", - "red" : "0x5B" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple05.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple05.colorset/Contents.json deleted file mode 100644 index 2f6c7ed..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple05.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xAD", - "green" : "0x0B", - "red" : "0x51" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xAD", - "green" : "0x0B", - "red" : "0x51" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple06.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple06.colorset/Contents.json deleted file mode 100644 index ed745b4..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple06.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA2", - "green" : "0x0B", - "red" : "0x4C" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA2", - "green" : "0x0B", - "red" : "0x4C" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple07.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple07.colorset/Contents.json deleted file mode 100644 index f753c3d..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple07.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x82", - "green" : "0x08", - "red" : "0x3D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x82", - "green" : "0x08", - "red" : "0x3D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple08.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple08.colorset/Contents.json deleted file mode 100644 index 9490850..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple08.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x61", - "green" : "0x06", - "red" : "0x2D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x61", - "green" : "0x06", - "red" : "0x2D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple09.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple09.colorset/Contents.json deleted file mode 100644 index 333e234..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/purple09.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x4C", - "green" : "0x05", - "red" : "0x23" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x4C", - "green" : "0x05", - "red" : "0x23" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/tag.colorset/Contents.json b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/tag.colorset/Contents.json deleted file mode 100644 index f2ebe2b..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Colors.xcassets/tag.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD2", - "green" : "0xCD", - "red" : "0x47" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD2", - "green" : "0xCD", - "red" : "0x47" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Fonts.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Fonts.swift deleted file mode 100644 index c78b360..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Fonts.swift +++ /dev/null @@ -1,88 +0,0 @@ -// -// Fonts.swift -// MEGABOX -// -// Created by 고석현 on 9/17/25. -// - -import Foundation -import SwiftUI - -extension Font { - enum Pretend { - case extraBold - case bold - case semibold - case medium - case regular - case light - case extraLight - case thin - - var value: String { - switch self { - case .extraBold: - return "Pretendard-ExtraBold" - case .bold: - return "Pretendard-Bold" - case .semibold: - return "Pretendard-SemiBold" - case .medium: - return "Pretendard-Medium" - case .regular: - return "Pretendard-Regular" - case .light: - return "Pretendard-Light" - case .extraLight: - return "Pretendard-ExtraLight" - case .thin: - return "Pretendard-Thin" - } - } - } - - static func pretend(type: Pretend, size: CGFloat) -> Font { - return .custom(type.value, size: size) - } - - static func PretendardBold(size: CGFloat) -> Font { - return .pretend(type: .bold, size: size) - } - - static func PretendardMedium(size: CGFloat) -> Font { - return .pretend(type: .medium, size: size) - } - - static func PretendardExtraBold(size: CGFloat) -> Font { - return .pretend(type: .extraBold, size: size) - } - - static func PretendardRegular(size: CGFloat) -> Font { - return .pretend(type: .regular, size: size) - } - - static func PretendardSemiBold(size: CGFloat) -> Font { - return .pretend(type: .semibold, size: size) - } - - static func PretendardLight(size: CGFloat) -> Font { - return .pretend(type: .medium, size: size) - } - - static func PretendardExtraLight(size: CGFloat) -> Font { - return .pretend(type: .extraLight, size: size) - } - - static func PretendardThin(size: CGFloat) -> Font { - return .pretend(type: .thin, size: size) - } - - - /* - 나중에 사용할 때에는 이렇게 씀 - - Text("Hello, SwiftUI!") - .font(.PretendardMedium(size: 16)) - - */ -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-Black.otf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-Black.otf deleted file mode 100644 index a0d849e..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-Black.otf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-Bold.otf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-Bold.otf deleted file mode 100644 index 8e5e30a..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-Bold.otf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-ExtraBold.otf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-ExtraBold.otf deleted file mode 100644 index 388f3ca..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-ExtraBold.otf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-ExtraLight.otf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-ExtraLight.otf deleted file mode 100644 index 40c8b69..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-ExtraLight.otf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-Light.otf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-Light.otf deleted file mode 100644 index 228679e..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-Light.otf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-Medium.otf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-Medium.otf deleted file mode 100644 index 0575069..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-Medium.otf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-Regular.otf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-Regular.otf deleted file mode 100644 index 08bf4cf..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-Regular.otf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-SemiBold.otf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-SemiBold.otf deleted file mode 100644 index e7e36ab..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-SemiBold.otf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-Thin.otf b/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-Thin.otf deleted file mode 100644 index 77e792d..0000000 Binary files a/gogo/MEGABOX/MEGABOX/MEGABOX/Resources/Fonts/Pretendard-Thin.otf and /dev/null differ diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Security/KeychainService.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Security/KeychainService.swift deleted file mode 100644 index 97af3f1..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Security/KeychainService.swift +++ /dev/null @@ -1,112 +0,0 @@ -// -// KeychainService.swift -// MEGABOX -///Users/koh/Documents/GitHub/UMC-9th-iOS-Study/gogo/MEGABOX/MEGABOX/MEGABOX/Security/KeychainService.swift -// Created by 고석현 on 11/6/25. -// - -// -// KeychainService.swift - -// - -import Foundation -import Security - -/// Keychain에 문자열을 저장/조회/삭제 -/// - 앱 환경에서 "아이디/비밀번호, 토큰" 등을 안전하게 보관할 때 사용 -/// - 내부적으로 kSecClassGenericPassword 영역을 사용 -final class KeychainService { - static let shared = KeychainService() - - /// 동일 기기 내 다른 앱과 키 충돌 방지 - private let service: String = Bundle.main.bundleIdentifier ?? "com.example.app" - - - /// - 자동 로그인/백그라운드 동작을 고려하.afterFirstUnlockThisDeviceOnly 사용!! - private let accessibility = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly - - private init() {} - - // MARK: - 프로젝트 전역에서 재사용 - enum Key { - static let userID = "user_id" - static let userPassword = "user_password" - static let userName = "user_name" - // 필요 시: static let accessToken = "access_token" - // 필요 시: static let refreshToken = "refresh_token" - } - - // MARK: - 저장 - /// 값 저장(동일 키가 있으면 덮어쓰기) - @discardableResult - func save(_ value: String, for key: String) -> Bool { - let data = Data(value.utf8) - - // 기존 항목 삭제 후 새로 추가(업데이트 간소화) - delete(key) - - let query: [String: Any] = [ - kSecClass as String: kSecClassGenericPassword, - kSecAttrService as String: service, - kSecAttrAccount as String: key, - kSecAttrAccessible as String: accessibility, - kSecValueData as String: data - ] - - let status = SecItemAdd(query as CFDictionary, nil) - print(" Keychain Save → key: \(key), value: \(value), success: \(status == errSecSuccess)") - return status == errSecSuccess - } - - // MARK: - 계정 조회 - /// 문자열로 값 조회(없으면 nil) - func read(_ key: String) -> String? { - let query: [String: Any] = [ - kSecClass as String: kSecClassGenericPassword, - kSecAttrService as String: service, - kSecAttrAccount as String: key, - kSecReturnData as String: true, - kSecMatchLimit as String: kSecMatchLimitOne - ] - - var item: CFTypeRef? - let status = SecItemCopyMatching(query as CFDictionary, &item) - - guard status == errSecSuccess, - let data = item as? Data, - let value = String(data: data, encoding: .utf8) else { - return nil - } - return value - } - - // MARK: - 삭제 - /// 항목 삭제(존재하지 않아도 false 대신 true 취급해도 무방) - @discardableResult - func delete(_ key: String) -> Bool { - let query: [String: Any] = [ - kSecClass as String: kSecClassGenericPassword, - kSecAttrService as String: service, - kSecAttrAccount as String: key - ] - let status = SecItemDelete(query as CFDictionary) - print("🗑️ Keychain Delete → key: \(key), success: \(status == errSecSuccess || status == errSecItemNotFound)") - return status == errSecSuccess || status == errSecItemNotFound - } - - // MARK: - 다수 저장,삭제 - /// 여러 값을 한 번에 저장(모두 성공 시 true) - @discardableResult - func saveMany(_ pairs: [String: String]) -> Bool { - print("🔐 Keychain SaveMany → keys: \(pairs.keys)") - return pairs.allSatisfy { save($0.value, for: $0.key) } - } - - /// 여러 키를 한 번에 삭제(모두 성공 시 true) - @discardableResult - func deleteMany(_ keys: [String]) -> Bool { - print("🗑️ Keychain DeleteMany → keys: \(keys)") - return keys.allSatisfy { delete($0) } - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Security/Secret.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Security/Secret.swift deleted file mode 100644 index 22e51bc..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Security/Secret.swift +++ /dev/null @@ -1,28 +0,0 @@ -// -// Secret.swift -// MEGABOX -// -// Created by 고석현 on 11/12/25. -// - -import Foundation - - -// Secret.swift -// MEGABOX - -import Foundation - -enum Secret { - static var kakaoNativeAppKey: String { - Bundle.main.object(forInfoDictionaryKey: "KAKAO_NATIVE_APP_KEY") as? String ?? "" - } - - static var tmdbAPIKey: String { - Bundle.main.object(forInfoDictionaryKey: "TMDB_API_KEY") as? String ?? "" - } - - static var tmdbReadAccessToken: String { - Bundle.main.object(forInfoDictionaryKey: "TMDB_READ_ACCESS_TOKEN") as? String ?? "" - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Security/Secret.xcconfig b/gogo/MEGABOX/MEGABOX/MEGABOX/Security/Secret.xcconfig deleted file mode 100644 index 8712329..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Security/Secret.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -// -// Secret.xcconfig -// MEGABOX -// -// Created by 고석현 on 11/6/25. -// - -// Configuration settings file format documentation can be found at: -// https://developer.apple.com/documentation/xcode/adding-a-build-configuration-file-to-your-project - -KAKAO_NATIVE_APP_KEY = 31bbb9a72c6cf437e4e1f047b7d8b946 -TMDB_API_KEY = b0197340145a957070984258cc33b288 -TMDB_READ_ACCESS_TOKEN = eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJiMDE5NzM0MDE0NWE5NTcwNzA5ODQyNThjYzMzYjI4OCIsIm5iZiI6MTc2Mjk1MTM0OS4xNDUsInN1YiI6IjY5MTQ4MGI1YWViZGMxOTkzZDg3NjFhMCIsInNjb3BlcyI6WyJhcGlfcmVhZCJdLCJ2ZXJzaW9uIjoxfQ.UlC69iJZn2cL6re0moKEITs-ffWL_aS_iCV7hRZejvw - diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/ViewModel/LoginViewModel.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/ViewModel/LoginViewModel.swift deleted file mode 100644 index 7d11c6f..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/ViewModel/LoginViewModel.swift +++ /dev/null @@ -1,63 +0,0 @@ -// -// LoginViewModel.swift -// MEGABOX -// -// Created by 고석현 on 9/26/25. -// - -import Foundation -import KakaoSDKAuth -import KakaoSDKUser - - -// MARK: - 로그인 뷰모델 -@Observable -class LoginViewModel { - var loginModel: LoginModel = LoginModel() - var id: String = "" - var password: String = "" - var isLoginSuccess: Bool = false - - // 로그인 동작: 저장은 View 쪽에서 처리 , 키체인 이용 - func login() { - if id.isEmpty || password.isEmpty { - return - } - KeychainService.shared.save(id, for: KeychainService.Key.userID) - KeychainService.shared.save(password, for: KeychainService.Key.userPassword) - isLoginSuccess = true - } -} - -//MARK: - 카카오 로그인 구현 - -extension LoginViewModel { - /// 카카오 로그인: 카카오톡 가능 시 우선 시도, 불가능/실패 시 계정(브라우저) 로그인으로 폴백! - /// - : 성공 여부 반환 ! - func kakaoLogin(completion: @escaping (Bool) -> Void) { - if UserApi.isKakaoTalkLoginAvailable() { - UserApi.shared.loginWithKakaoTalk { oauthToken, error in - if let _ = oauthToken { - // Keychain 등에 토큰 저장 - completion(true) - } else { - // 카카오톡 실패하면 계정 로그인으로 재시도 - self.loginWithKakaoAccount(completion: completion) - } - } - } else { - self.loginWithKakaoAccount(completion: completion) - } - } - - /// 카카오 계정로그인 , escapijng으로 비동기화 처리 !! - fileprivate func loginWithKakaoAccount(completion: @escaping (Bool) -> Void) { - UserApi.shared.loginWithKakaoAccount { oauthToken, error in - if let _ = oauthToken { - completion(true) - } else { - completion(false) - } - } - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/ViewModel/MobileOrderViewModel.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/ViewModel/MobileOrderViewModel.swift deleted file mode 100644 index 46a373f..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/ViewModel/MobileOrderViewModel.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// MobileOrderViewMOdel.swift -// MEGABOX -// -// Created by 고석현 on 11/15/25. -// - -import Foundation -import Observation - -@Observable -final class MobileOrderViewModel { - - // MARK: - 추천 메뉴 - let recommendedMenus: [MenuItemModel] = [ - MenuItemModel(imageName: "recommend1", title: "러브 콤보", price: 10900, isBest: true, isRecommended: true, isSoldOut: false), - MenuItemModel(imageName: "recommend2", title: "더블 콤보", price: 24900, isBest: true, isRecommended: true, isSoldOut: false), - MenuItemModel(imageName: "recommend3", title: "디즈니 픽사 포스터", price: 15900, isBest: false, isRecommended: true, isSoldOut: false) - ] - - // MARK: - 베스트 메뉴 - let bestMenus: [MenuItemModel] = [ - MenuItemModel(imageName: "best1", title: "싱글 콤보", price: 10900, isBest: true, isRecommended: false, isSoldOut: false), - MenuItemModel(imageName: "best2", title: "더블 콤보", price: 24900, isBest: true, isRecommended: false, isSoldOut: false), - MenuItemModel(imageName: "best3", title: "러브 콤보 패키지", price: 32900, isBest: false, isRecommended: false, isSoldOut: false) - ] - - // MARK: - 상세 메뉴 전체 - let menus: [MenuItemModel] = [ - MenuItemModel(imageName: "best1", title: "싱글 콤보", price: 10900, isBest: true, isRecommended: false, isSoldOut: false), - MenuItemModel(imageName: "recommend1", title: "러브 콤보", price: 10900, isBest: true, isRecommended: false, isSoldOut: false), - MenuItemModel(imageName: "recommend2", title: "더블 콤보", price: 24900, isBest: true, isRecommended: false, isSoldOut: false), - MenuItemModel(imageName: "best3", title: "러브 콤보 패키지", price: 32900, isBest: false, isRecommended: false, isSoldOut: false), - MenuItemModel(imageName:"best4",title:"패밀리 콤보 패키지",price:47000,isBest:false,isRecommended:false,isSoldOut:false), - MenuItemModel(imageName:"ticketbook",title:"메가박스 오리지널 티켓북 시즌4 돌비시네마 에디션 단품", price:10900,isBest:false,isRecommended:true,isSoldOut:false), - MenuItemModel(imageName: "recommend3", title: "디즈니 픽사 포스터", price: 15900, isBest: false, isRecommended: false, isSoldOut: true), - MenuItemModel(imageName:"insideout",title:"인사이다드 아웃 2 감정", price:29900,isBest:false,isRecommended:false,isSoldOut:false) - ] - -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/ViewModel/MovieSearchViewModel.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/ViewModel/MovieSearchViewModel.swift deleted file mode 100644 index a5d61ba..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/ViewModel/MovieSearchViewModel.swift +++ /dev/null @@ -1,100 +0,0 @@ -// -// MovieSearchViewModel.swift -// MEGABOX -// -// Created by 고석현 on 10/9/25. -// - -import Foundation - -// -// MovieSearchViewModel.swift -// MEGABOX -// -// Created by 고석현 on 10/10/25. -// - -import SwiftUI -import Combine - -// MARK: - 영화 검색 뷰모델 -// 사용자가 입력한 검색어(query)에 따라 더미 영화 목록을 필터링해서 결과로 보여줌 -final class MovieSearchViewModel: ObservableObject { - - // MARK: - 영화 더미 데이터 - // 실제 얍에서는 API로 대체. 지금은 MovieModel 구조에 맞게 정의함. - @Published var movies: [MovieModel] = [ - .init(title: "어쩔 수가 없다", poster: "poster1", countAudience: "20만", description: nil, releaseDate: nil, rating: nil, backdrop: nil), - .init(title: "극장판 귀멸의 칼날", poster: "poster2", countAudience: "1", description: nil, releaseDate: nil, rating: nil,backdrop: nil), - .init(title: "F1 더 무비", poster: "poster3", countAudience: "30만", - description: "최고가 되지 못한 전설 VS 최고가 되고 싶은 루키\n\n한때 주목받는 유망주였지만 끔찍한 사고로 F1에서 우승하지 못하고\n한순간에 추락한 드라이버 ‘손; 헤이스’(브래드 피트).\n그의 오랜 동료인 ‘루벤 세르반테스’(하비에르 바르뎀)에게\n레이싱 복귀를 제안받으며 최하위 팀인 APGX에 합류한다.", - releaseDate: "2025.06.25 개봉", - rating: "12세 이상 관람가",backdrop: nil), - .init(title: "얼굴", poster: "poster4", countAudience: nil, description: nil, releaseDate: nil, rating: nil,backdrop: nil), - .init(title: "모노노케 히메", poster: "poster5", countAudience: nil, description: nil, releaseDate: nil, rating: nil,backdrop: nil), - .init(title: "보스", poster: "poster6", countAudience: nil, description: nil, releaseDate: nil, rating: nil,backdrop: nil), - .init(title: "야당", poster: "poster7", countAudience: nil, description: nil, releaseDate: nil, rating: nil,backdrop: nil), - .init(title: "THE ROSES", poster: "poster8", countAudience: nil, description: nil, releaseDate: nil, rating: nil,backdrop: nil) - ] - - // MARK: - 상태 관리용 프로퍼티 - @Published var query: String = "" // 검색어 - @Published var results: [MovieModel] = [] // 검색 결과 - @Published var isLoading: Bool = false // 로딩 상태 - @Published var errorMessage: String? = nil // 에러 메시지 - @Published var selectedMovie: MovieModel? = nil // 사용자가 선택한 영화 - - private var cancellables = Set() - - // MARK: - 초기화 - init() { - setupSearchPipeline() - } - - // MARK: - 검색 파이프라인 구성 - // query 값이 바뀔 때마다 debounce → filter → 결과 업데이트 순으로 처리됨 - private func setupSearchPipeline() { - $query - .debounce(for: .milliseconds(400), scheduler: DispatchQueue.main) // 입력 딜레이 (타이핑 안정화) - .removeDuplicates() // 같은 단어 반복 입력 방지 - .handleEvents(receiveOutput: { [weak self] _ in - self?.errorMessage = nil // 새 검색 시 에러 초기화 - }) - .flatMap { [weak self] query in - self?.performSearch(for: query) ?? Just([]).setFailureType(to: Error.self).eraseToAnyPublisher() - } - .receive(on: DispatchQueue.main) - .sink { [weak self] completion in - if case .failure(let err) = completion { - self?.errorMessage = "검색 실패: \(err.localizedDescription)" - self?.results = [] - } - } receiveValue: { [weak self] foundMovies in - self?.results = foundMovies - } - .store(in: &cancellables) - } - - // MARK: - 실제 검색 로직 (더미 데이터 기반) - // 입력된 query가 포함된 영화 제목을 필터링함 - private func performSearch(for query: String) -> AnyPublisher<[MovieModel], Error> { - Future<[MovieModel], Error> { [weak self] promise in - guard let self else { return } - let delay = Double(Int.random(in: 300...700)) / 1000.0 // 약간의 지연 효과 - DispatchQueue.global().asyncAfter(deadline: .now() + delay) { - let lowerQuery = query.lowercased() - let filtered = self.movies.filter { $0.title.lowercased().contains(lowerQuery) } - promise(.success(filtered)) - } - } - .handleEvents( - receiveSubscription: { _ in - DispatchQueue.main.async { self.isLoading = true } - }, - receiveCompletion: { _ in - DispatchQueue.main.async { self.isLoading = false } - } - ) - .eraseToAnyPublisher() - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/ViewModel/MovieViewModel.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/ViewModel/MovieViewModel.swift deleted file mode 100644 index 951e449..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/ViewModel/MovieViewModel.swift +++ /dev/null @@ -1,157 +0,0 @@ -// -// MovieViewModel.swift -// MEGABOX -// -// Created by 고석현 on 10/10/25. -// - -import Foundation -import Combine -import SwiftUI - -// MARK: - 영화 관련 상태를 전부 관리하는 뷰모델 -// Combine을 사용해서 영화 선택 → 극장 선택 → 날짜 선택 → 상영시간 표시까지 순서대로 반응하도록 구성함 -final class MovieViewModel: ObservableObject { - - private let movieService = MovieService.shared - - // MARK: - 영화 목록 - @Published var movies: [MovieModel] = [] - - // MARK: - 사용자가 선택한 요소들 - @Published var pickedMovie: MovieModel? = nil // 선택한 영화 - @Published var chosenTheaters: Set = [] // 선택한 극장들 - @Published var pickedDate: Date? = nil // 선택한 날짜 - - - @Published private(set) var weekDays: [Date] = [] // 오늘부터 7일 - @Published private(set) var isTheaterActive = false // 영화 선택 후 → 극장 버튼 활성화 - @Published private(set) var isDateActive = false // 영화+극장 선택 후 → 날짜 선택 활성화 - @Published private(set) var showtimeSchedule: [Theater: [Showtime]] = [:] // 상영정보 저장소 - @Published private(set) var canDisplayShowtimes = false // 영화, 극장, 날짜 모두 선택 시 상영정보 표시 - - // Combine 구독 저장소 (Publisher를 다시 저장하는 용도) - private var cancellables = Set() - - // MARK: - 초기화 - init() { - setupBindings() // 상태 변화 연결 - createWeekDates() // 주간 날짜 초기화 - Task { - await fetchNowPlayingMovies() - } - } - - @MainActor - func fetchNowPlayingMovies() async { - do { - let response = try await movieService.fetchNowPlayingMoviesAsync() - let domainMovies = response.toDomain() - self.movies = domainMovies - print("성공: \(domainMovies.count) 개") - } catch { - print("실패: \(error)") - } - } - - // MARK: - Combine 바인딩 설정 - // 상태가 바뀔 때마다 자동으로 다음 단계가 활성화되도록 구성함 - private func setupBindings() { - - // 1. 영화가 선택되면 극장 선택이 가능해짐 - $pickedMovie - .map { $0 != nil } // 영화가 nil이 아니면 true - .assign(to: &$isTheaterActive) - - // 2. 영화 + 극장이 모두 선택되면 날짜 선택 가능 - Publishers.CombineLatest( - $pickedMovie.map { $0 != nil }, - $chosenTheaters.map { !$0.isEmpty } - ) - .map { $0 && $1 } // 둘 다 true일 때만 true - .assign(to: &$isDateActive) - - // 3. 영화 + 극장 + 날짜 모두 선택되면 상영정보가 나타남 - Publishers.CombineLatest3($pickedMovie, $chosenTheaters, $pickedDate) - .map { movie, theaters, date in - movie != nil && !theaters.isEmpty && date != nil - } - .assign(to: &$canDisplayShowtimes) - - // 4. 세 가지 모두 선택되면 더미 상영정보를 불러옴 - Publishers.CombineLatest3( - $pickedMovie.compactMap { $0 }, // nil 제거 - $chosenTheaters.filter { !$0.isEmpty }, - $pickedDate.compactMap { $0 } - ) - .flatMap { movie, theaters, date in - // 실제 API 대신 더미데이터를 반환하는 부분 - Just(Self.generateMockShowtimes(for: theaters)) - .eraseToAnyPublisher() - } - .receive(on: DispatchQueue.main) - .assign(to: &$showtimeSchedule) - } - - // MARK: - 이번 주 날짜 만들기 - // 오늘 기준으로 7일치 날짜를 계산함 - private func createWeekDates() { - let calendar = Calendar.current - let today = calendar.startOfDay(for: Date()) - weekDays = (0..<7).compactMap { offset in - calendar.date(byAdding: .day, value: offset, to: today) - } - } - - // MARK: - 더미 상영정보 생성 - // 실제로는 서버 응답이 들어올 부분. 지금은 고정된 시간(12시, 15시, 18시)으로 생성함. - private static func generateMockShowtimes(for theaters: Set) -> [Theater: [Showtime]] { - var result: [Theater: [Showtime]] = [:] - let calendar = Calendar.current - let today = calendar.startOfDay(for: Date()) - - for theater in theaters { - // 첫 번째 상영 더미데이터 (12:00 ~ 14:00) - let firstStart = calendar.date(byAdding: .hour, value: 12, to: today)! - let firstEnd = calendar.date(byAdding: .hour, value: 14, to: today)! - let first = Showtime( - theater: theater, - screenName: "1관", - format: "2D", - start: firstStart, - end: firstEnd, - remaining: Int.random(in: 60...120), - capacity: 120 - ) - - // 두 번째 상영 더미 데이터 (15:00 ~ 17:00) - let secondStart = calendar.date(byAdding: .hour, value: 15, to: today)! - let secondEnd = calendar.date(byAdding: .hour, value: 17, to: today)! - let second = Showtime( - theater: theater, - screenName: "2관", - format: "IMAX", - start: secondStart, - end: secondEnd, - remaining: Int.random(in: 40...110), - capacity: 120 - ) - - // 세 번째 상영 구라데이터 더미데이터 (18:00 ~ 20:00) - let thirdStart = calendar.date(byAdding: .hour, value: 18, to: today)! - let thirdEnd = calendar.date(byAdding: .hour, value: 20, to: today)! - let third = Showtime( - theater: theater, - screenName: "3관", - format: "4DX", - start: thirdStart, - end: thirdEnd, - remaining: Int.random(in: 20...90), - capacity: 120 - ) - - result[theater] = [first, second, third] - } - return result - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/ViewModel/ReservationViewModel.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/ViewModel/ReservationViewModel.swift deleted file mode 100644 index 46256b3..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/ViewModel/ReservationViewModel.swift +++ /dev/null @@ -1,230 +0,0 @@ -// -// ReservationViewModel.swift -// MEGABOX -// -// Rewritten to be self-contained (no external DTO type name assumptions) -// - -import Foundation -import Combine -import SwiftUI - -// MARK: - DTO -> json 파일 -//Codable 프로토콜 사용 -> Encodable,Decodable -// JSON 구조: { status, message, data: { movies: [...] } } -fileprivate struct RVMResponse: Codable { - let status: String - let message: String - let data: RVMData -} -fileprivate struct RVMData: Codable { - let movies: [RVMMovie] -} -fileprivate struct RVMMovie: Codable { - let title: String - let ageRating: String - let schedules: [RVMSchedule] -} -fileprivate struct RVMSchedule: Codable { - let date: String // yyyy-MM-dd - let areas: [RVMArea] -} -fileprivate struct RVMArea: Codable { - let area: String // ex) "강남", "홍대", "신촌" - let items: [RVMItem] -} -fileprivate struct RVMItem: Codable { - let auditorium: String // ex) "1관" - let format: String // ex) "2D", "IMAX", "4DX" - let showtimes: [RVMShowtime] -} -fileprivate struct RVMShowtime: Codable { - let start: String // "HH:mm" - let end: String // "HH:mm" - let available: Int - let total: Int -} - -// MARK: - 날짜 -fileprivate let ymdFormatter: DateFormatter = { - let f = DateFormatter() - f.calendar = Calendar(identifier: .gregorian) - f.locale = Locale(identifier: "ko_KR_POSIX") - f.timeZone = TimeZone(secondsFromGMT: 0) - f.dateFormat = "yyyy-MM-dd" - return f -}() -fileprivate let hmFormatter: DateFormatter = { - let f = DateFormatter() - f.calendar = Calendar(identifier: .gregorian) - f.locale = Locale(identifier: "ko_KR_POSIX") - f.timeZone = TimeZone(secondsFromGMT: 0) - f.dateFormat = "HH:mm" - return f -}() - -final class ReservationViewModel: ObservableObject { - - // MARK: - Domain 데이터 (View에서 직접 쓰는 상태) - @Published var movies: [MovieModel] = [] // 포스터/타이틀 등 표시용 - @Published var pickedMovie: MovieModel? = nil // 선택한 영화 - @Published var chosenTheaters: Set = [] // 선택한 극장들 - @Published var pickedDate: Date? = nil // 선택한 날짜 - - // UI - @Published private(set) var weekDays: [Date] = [] - @Published private(set) var isTheaterActive: Bool = false - @Published private(set) var isDateActive: Bool = false - @Published private(set) var canDisplayShowtimes: Bool = false - - // 극장별 상영정보 (뷰에서 그대로 렌더) - @Published private(set) var showtimeSchedule: [Theater: [Showtime]] = [:] - - // MARK: - JSON 디코딩 관련 - private var rvmMovies: [RVMMovie] = [] // JSON 디코딩 결과(원본) - private var cancellables = Set() - - // MARK: - 시작 초기화 - init() { - setupBindings() - createWeekDates() - fetchMovies() - } -} - -// MARK: - 매핑 -extension ReservationViewModel { - /// 로컬 JSON(MovieSchedule.json) 로드 → DTO → Domain 변환 - func fetchMovies() { - DispatchQueue.global(qos: .background).async { - guard let url = Bundle.main.url(forResource: "MovieSchedule", withExtension: "json") else { - print("❌ MovieSchedule.json not found. Check Target Membership!") - return - } - do { - let data = try Data(contentsOf: url) - let decoder = JSONDecoder() - decoder.keyDecodingStrategy = .convertFromSnakeCase - - // 실제 JSON 구조: { status, message, data: { movies: [...] } } - let api = try decoder.decode(RVMResponse.self, from: data) - let decodedMovies = api.data.movies - - DispatchQueue.main.async { - self.rvmMovies = decodedMovies - - // 포스터는 JSON 순서대로 poster1~poster8 매핑 - let posters = ["poster1","poster2","poster3","poster4","poster5","poster6","poster7","poster8"] - self.movies = decodedMovies.enumerated().map { idx, dto in - let posterName = posters.indices.contains(idx) ? posters[idx] : "poster1" - return MovieModel( - title: dto.title, - poster: posterName, - countAudience: nil, - description: nil, - releaseDate: nil, - rating: dto.ageRating, - backdrop: nil - ) - } - } - } catch { - print("❌ JSON Decoding Failed:", error) - } - } - } -} - -extension ReservationViewModel { - /// JSON과 동일한 날짜 범위를 만들기 위해 오늘을 2025-09-22로 고정 - private func createWeekDates() { - let base = ymdFormatter.date(from: "2025-09-22") ?? Date() - let cal = Calendar.current - let start = cal.startOfDay(for: base) - weekDays = (0..<7).compactMap { cal.date(byAdding: .day, value: $0, to: start) } - } -} - - -extension ReservationViewModel { - private func setupBindings() { - // 영화가 선택되면 극장 선택 활성화 - $pickedMovie - .map { $0 != nil } - .assign(to: &$isTheaterActive) - - // 영화 + 극장 선택되면 날짜 선택 활성화 - Publishers.CombineLatest( - $pickedMovie.map { $0 != nil }, - $chosenTheaters.map { !$0.isEmpty } - ) - .map { $0 && $1 } - .assign(to: &$isDateActive) - - // 영화 + 극장 + 날짜 모두 선택되면 상영정보 표시 가능 - Publishers.CombineLatest3($pickedMovie, $chosenTheaters, $pickedDate) - .map { m, t, d in m != nil && !t.isEmpty && d != nil } - .assign(to: &$canDisplayShowtimes) - - // 세 조건이 모두 만족되면 실제 상영정보 생성 - Publishers.CombineLatest3( - $pickedMovie.compactMap { $0 }, - $chosenTheaters.filter { !$0.isEmpty }, - $pickedDate.compactMap { $0 } - ) - .map { movie, theaters, date in - self.generateShowtimes(for: movie, theaters: theaters, on: date) - } - .assign(to: &$showtimeSchedule) - } -} - -// MARK: - Showtime Mapping -extension ReservationViewModel { - /// 선택된 영화/극장/날짜에 맞춰 상영정보 사전을 생성 - private func generateShowtimes(for movie: MovieModel, theaters: Set, on date: Date) -> [Theater: [Showtime]] { - // 1) 선택 영화의 원본 DTO 찾기 - guard let dto = rvmMovies.first(where: { $0.title == movie.title }) else { return [:] } - - // 2) 날짜 매칭 (yyyy-MM-dd 고정) - let target = ymdFormatter.string(from: date) - guard let schedule = dto.schedules.first(where: { $0.date == target }) else { return [:] } - - // 3) DTO → Domain 매핑 (Theater : [Showtime]) - var result: [Theater: [Showtime]] = [:] - let cal = Calendar.current - for area in schedule.areas { - guard let theater = Theater(rawValue: area.area) else { continue } - var shows: [Showtime] = [] - for item in area.items { - for st in item.showtimes { - // 날짜 + 시각 합치기 (동일한 day 기준) - guard let day = ymdFormatter.date(from: target), - let startTime = hmFormatter.date(from: st.start), - let endTime = hmFormatter.date(from: st.end) else { continue } - - let start = cal.date(bySettingHour: cal.component(.hour, from: startTime), - minute: cal.component(.minute, from: startTime), - second: 0, of: day) ?? day - let end = cal.date(bySettingHour: cal.component(.hour, from: endTime), - minute: cal.component(.minute, from: endTime), - second: 0, of: day) ?? day - - shows.append(Showtime( - theater: theater, - screenName: item.auditorium, - format: item.format, - start: start, - end: end, - remaining: st.available, - capacity: st.total - )) - } - } - // 시간 오름차순 정렬 - shows.sort { $0.start < $1.start } - result[theater] = shows - } - return result.filter { theaters.contains($0.key) } - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/HomeView.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Views/HomeView.swift deleted file mode 100644 index 6a54d08..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/HomeView.swift +++ /dev/null @@ -1,296 +0,0 @@ -// -// HomeView.swift -// MEGABOX -// -// Created by 고석현 on 10/2/25. -// - -import SwiftUI -import Kingfisher - - - - -struct HomeView: View { - @Environment(NavigationRouter.self) var router - @EnvironmentObject var viewModel: MovieViewModel - - @State private var selectedTab: String = "홈" - @State private var tab: MovieTab = .chart - - var body: some View { - VStack { - TopBarView(selectedTab: $selectedTab) - Group { - switch selectedTab { - case "홈": - homeMainView - case "이벤트": - VStack { - Text("이벤트 뷰 작성 예정") - Spacer() - } - case "스토어": - VStack { - Text("스토어 뷰 작성 예정") - Spacer() - } - case "선호극장": - VStack { - Text("선호극장 뷰 작성 예정") - Spacer() - } - default: - EmptyView() - } - } - } - - } -} - -//MARK: - 홈 메인 뷰 extension으로 처리 ("홈" 눌렀을때만 나오도록) -private extension HomeView { - var homeMainView: some View { - ScrollView(.vertical, showsIndicators: false) { - TopButtonView(select: $tab) - switch tab { - case .chart: - MovieScrollView(movies: viewModel.movies, onSelect: {movie in - router.push(.movieDetail(movie: movie)) - }) - case .upcoming: - Text("상영예정 하위뷰 작성 예정!!!!!!") - .font(.PretendardBold(size: 20)) - //TODO: - 상영예정 하위뷰 - - } - TopFeedView - BottomFeedView - } - - } -} - -//MARK: - 상단바 뷰 -struct TopBarView: View { - @Binding var selectedTab: String - var body: some View { - VStack(alignment: .leading, spacing: 0) { - HStack(spacing: 0) { - Spacer().frame(width: 20) - Image(.meboxLogo) - .resizable() - .frame(width: 149, height: 30) - .padding(.bottom, 8) - Spacer() - } - .padding(.bottom, 8) - HStack(spacing: 0) { - Spacer().frame(width: 20) - Button(action: { selectedTab = "홈" }) { - Text("홈") - .foregroundStyle(selectedTab == "홈" ? .black : .gray04) - .font(.PretendardSemiBold(size:24)) - } - Spacer() - Button(action: { selectedTab = "이벤트" }) { - Text("이벤트") - .foregroundStyle(selectedTab == "이벤트" ? .black : .gray04) - .font(.PretendardSemiBold(size:24)) - } - Spacer() - Button(action: { selectedTab = "스토어" }) { - Text("스토어") - .foregroundStyle(selectedTab == "스토어" ? .black : .gray04) - .font(.PretendardSemiBold(size:24)) - } - Spacer() - Button(action: { selectedTab = "선호극장" }) { - Text("선호극장") - .foregroundStyle(selectedTab == "선호극장" ? .black : .gray04) - .font(.PretendardSemiBold(size:24)) - } - } - .padding(.trailing, 70) - } - .padding(.bottom, 9) - } -} - - - -//MARK: -무비차트/상영예정 탭 Enum -enum MovieTab: String, CaseIterable { - case chart = "무비차트" - case upcoming = "상영예정" -} - -//MARK: - 무비차트/상영예정 -struct TopButtonView: View { - @Binding var select: MovieTab - var body: some View { - HStack(spacing: 10) { - ForEach(MovieTab.allCases, id: \.self) { tab in - Button { - select = tab - } label: { - Text(tab.rawValue) - .font(.PretendardMedium(size: 14)) - .frame(width: 84, height: 38, alignment: .center) - .background( - Capsule() - .fill(select == tab ? Color.gray08 : Color.gray02) - ) - .foregroundStyle(select == tab ? .white : .gray04) - } - } - } - .frame(maxWidth: .infinity, alignment: .leading) - .padding(.horizontal, 20) - .padding(.vertical, 6) - } -} -//MARK: - 무비 카드 (하위 블럭) -struct MovieCard: View { - let movieModel: MovieModel - let onTap: () -> Void - var body: some View { - VStack(alignment: .leading, spacing: 0) { - Button(action: onTap) { - KFImage(URL(string: movieModel.poster)) - .placeholder { - Image(systemName: "photo") - .resizable() - .scaledToFit() - .frame(width: 150, height: 220) - .foregroundColor(.gray) - } - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 150) - .padding(.bottom, 8) - } - - Button(action: {}) { - ZStack { - RoundedRectangle(cornerRadius: 10) - .stroke(Color.purple03) - .frame(width: 150, height: 36) - .foregroundStyle(.white) - Text("바로 예매") - .foregroundStyle(.purple03) - .font(.PretendardMedium(size:16)) - - } - .padding(.bottom, 8) - } - Spacer().frame(height: 4) - - Text(movieModel.title) - .font(.PretendardBold(size:22)) - Spacer().frame(height: 2) - Text("누적관객수 \(movieModel.countAudience ?? "")") - .font(.PretendardMedium(size:18)) - } - } -} - -//MARK: - 무비차트 가로 스크롤뷰 -struct MovieScrollView: View { - let movies: [MovieModel] - let onSelect: (MovieModel) -> Void - var body: some View { - ScrollView(.horizontal, showsIndicators: false) { - HStack(spacing: 15) { - ForEach(movies) { movie in - MovieCard(movieModel: movie) { - onSelect(movie) - } - } - } - .padding(.horizontal, 20) - - } - .frame(height: 320) - } -} - - -//MARK: -알고보면 더 재밌는 무비피드 -private var TopFeedView: some View { - VStack(spacing: 0) { - HStack { - Text("알고보면 더 재밌는 무비피드") - .font(.PretendardBold(size:24)) - Spacer() - Button(action: { - //TODO: -"알고보면 더 재밌는 무비 피드" 이동 - }) { - Image("right") - .tint(.gray08) - .frame(width: 50, height: 50) -// .glassEffect(.clear.interactive()) - } - } - Image(.movieFeed1) - .resizable() - .aspectRatio(contentMode: .fit) -// .frame(width: .infinity) - .padding(.bottom, 25) - } - .padding(.horizontal, 20) - -} - -//MARK: -하단 영화 피드 -private var BottomFeedView: some View { - VStack(alignment: .leading, spacing: 0) { - HStack(spacing: 12) { - Image(.movieFeed2) - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 100) - VStack(alignment: .leading, spacing: 0) { - Text("9월, 메가박스의 영화들(1) - 명작들의 재개봉") - .font(.PretendardSemiBold(size:18)) - .foregroundStyle(.black) - .padding(.bottom, 25) - Text("<모노노케 히메>,<퍼펙트 블루>") - .font(.PretendardSemiBold(size:13)) - .foregroundStyle(.gray03) - } - } -// .padding(.horizontal, 20) - .padding(.bottom, 39) - - HStack(spacing: 12) { - Image(.movieFeed3) - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 100) - VStack(alignment: .leading, spacing: 0) { - Text("메가박스 오리지널 티켓 Re.37 <얼굴>") - .font(.PretendardSemiBold(size:18)) - .foregroundStyle(.black) - .padding(.bottom, 25) - Text("영화 속 양극적인 감정의 대비") - .font(.PretendardSemiBold(size:13)) - .foregroundStyle(.gray03) - } - } -// .padding(.horizontal, 20) - } - .padding(.horizontal, 20) - -} - - - - - -#Preview { - HomeView() - .environment(NavigationRouter()) - .environmentObject(MovieViewModel()) -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/InfoManageView.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Views/InfoManageView.swift deleted file mode 100644 index 5a17337..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/InfoManageView.swift +++ /dev/null @@ -1,108 +0,0 @@ -// -// InfoManagerView.swift -// MEGABOX -// -// Created by 고석현 on 9/26/25. -// - -import SwiftUI - -struct InfoManageView: View { - @Binding var isLoggedIn: Bool - - @Environment(\.dismiss) private var dismiss - - private var userId: String { - KeychainService.shared.read(KeychainService.Key.userID) ?? "" - } - @AppStorage("userName") private var savedName: String = "고석현" - @State private var tempName: String = "" - - //MARK: -바디 - - var body: some View { - VStack(alignment: .leading, spacing: 16) { - - - HStack { - Button(action: { - dismiss() - }) { - Image("back") - .resizable() - .frame(width: 26, height: 24) - } - Spacer() - - Text("회원정보 관리") - .font(.PretendardMedium(size: 16)) - Spacer() - Spacer().frame(width: 24) - } - .padding(.vertical, 8) - - Text("기본정보") - .font(.PretendardBold(size: 18)) - .padding(.top, 20) - - - HStack { - Text(userId) - Spacer() - } - .padding(.vertical, 12) - .overlay(Rectangle().frame(height: 1).foregroundColor(Color("gray02")), alignment: .bottom) - - - HStack { - TextField("이름", text: $tempName) - .textFieldStyle(PlainTextFieldStyle()) - - - Spacer() - - Button("변경") { - savedName = tempName - } - .font(.PretendardMedium(size: 10)) - .foregroundColor(Color("gray03")) - .padding(.horizontal, 8) - .padding(.vertical, 4) - .overlay( - RoundedRectangle(cornerRadius: 12) - .stroke(Color("gray03"), lineWidth: 1) - ) - } - .padding(.vertical, 12) - .overlay(Rectangle().frame(height: 1).foregroundColor(Color("gray02")), alignment: .bottom) - - Button("로그아웃") { - KeychainService.shared.deleteMany([ - KeychainService.Key.userID, - KeychainService.Key.userPassword, - KeychainService.Key.userName - ]) - isLoggedIn = false - } - .font(.PretendardMedium(size: 14)) - .foregroundColor(Color.red) - .padding(.top, 20) - - Spacer() - } - .padding(.horizontal, 16) - .onAppear { - - tempName = savedName - } - } -} - -//프리뷰 (과제용/아이폰 11, 16프로) -#Preview("iPhone 11") { - InfoManageView(isLoggedIn: .constant(true)) -} - -#Preview("iPhone 16 Pro") { - InfoManageView(isLoggedIn: .constant(true)) -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/LoginView.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Views/LoginView.swift deleted file mode 100644 index 6b86b59..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/LoginView.swift +++ /dev/null @@ -1,148 +0,0 @@ -// -// LoginView.swift -// MEGABOX -// -// Created by 고석현 on 9/17/25. -// - -import SwiftUI -import Observation - - -struct LoginView: View { - @Environment(NavigationRouter.self) var router - @Binding var isLoggedIn: Bool - - @State private var viewModel = LoginViewModel() - var body: some View { - VStack { - navigationBarView - .padding(.bottom, 125) - loginInputView - .padding(.bottom, 35) - loginButtonView - .padding(.bottom, 10) - signUpTextView - .padding(.bottom, 22) - socialLoginView - .padding(.bottom,22) - umcBannerView - Spacer() - } - } - - private var navigationBarView: some View { - HStack { - Spacer() - Text("로그인") - .font(.PretendardSemiBold(size:24)) - .foregroundStyle(.black) - Spacer() - } - } - - private var loginInputView: some View { - VStack(alignment: .leading, spacing: 35) { - VStack(alignment: .leading, spacing: 0) { - TextField("아이디", text: $viewModel.loginModel.id) - .textInputAutocapitalization(.never) - .autocorrectionDisabled() - .font(.PretendardMedium(size:16)) - .foregroundStyle(Color("gray03")) - .padding(.bottom, 8) - .overlay( - Divider() - .background(Color("gray02")), - alignment: .bottom - ) - } - VStack(alignment: .leading, spacing: 0) { - SecureField("비밀번호", text: $viewModel.loginModel.pwd) - .font(.PretendardMedium(size:16)) - .foregroundStyle(Color("gray03")) - .padding(.bottom, 8) - .overlay( - Divider() - .background(Color("gray02")), - alignment: .bottom - ) - } - } - .padding(.horizontal, 16) - } - - private var loginButtonView: some View { - Button(action: { - let id = viewModel.loginModel.id - let pwd = viewModel.loginModel.pwd - KeychainService.shared.save(id, for: KeychainService.Key.userID) - KeychainService.shared.save(pwd, for: KeychainService.Key.userPassword) - isLoggedIn = true - }) { - HStack { - Spacer() - Text("로그인") - .font(.PretendardBold(size:18)) - .foregroundStyle(.white) - Spacer() - } - .padding(.vertical, 9) - .frame(maxWidth: .infinity, minHeight: 54, maxHeight: 54, alignment: .center) - .background(Color(red: 0.4, green: 0.05, blue: 0.85)) - .cornerRadius(10) - .padding(.horizontal, 16) - } - } - - private var signUpTextView: some View { - Text("회원가입") - .font(.PretendardMedium(size:13)) - .foregroundStyle(Color("gray04")) - } - - private var socialLoginView: some View { - HStack(spacing: 73) { - Image("naverLogo") - .resizable() - .scaledToFit() - .frame(width: 40, height: 40) - Button(action: { - viewModel.kakaoLogin { success in - if success { - isLoggedIn = true - } - } - }) { - Image("kakaoLogo") - .resizable() - .scaledToFit() - .frame(width: 40, height: 40) - } - Image("appleLogo") - .resizable() - .scaledToFit() - .frame(width: 40, height: 40) - } - } - - private var umcBannerView: some View { - Image("umcBanner") - .resizable() - .scaledToFit() - .padding(.horizontal, 16) - } - - - -} - -//프리뷰 (과제용/아이폰 11, 16프로) -#Preview("iPhone 11") { - LoginView(isLoggedIn: .constant(false)) - .environment(NavigationRouter()) -} - -#Preview("iPhone 16 Pro") { - LoginView(isLoggedIn: .constant(false)) - .environment(NavigationRouter()) -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/MemberInfoView.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Views/MemberInfoView.swift deleted file mode 100644 index 701a810..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/MemberInfoView.swift +++ /dev/null @@ -1,254 +0,0 @@ -// -// MemberInfoView.swift -// MEGABOX -// -// Created by 고석현 on 9/26/25. -// - -import SwiftUI - -//MARK: -헤더뷰 -struct MemberInfoView: View { - @AppStorage("userName") private var userName: String = "고석현" - @AppStorage("userPoints") private var userPoints: Int = 500 - @Environment(NavigationRouter.self) var router - @EnvironmentObject var viewModel: MovieViewModel - - - //MARK: - 프로필 이미지 상태 변수 추가 - @State private var showImagePicker = false - @State private var profileImage: UIImage? = nil - - //MARK: -바디 뷰 - var body: some View { - VStack(spacing: 16) { - Spacer().frame(height:55) - headerView - clubMembershipButton - Spacer().frame(height:5) - statusInfoView - Spacer().frame(height:3) - bottomMenuView - Spacer() - } - .padding(.horizontal) - .sheet(isPresented: $showImagePicker) { - ImagePicker(selectedImage: $profileImage) - } - } - - //MARK: -이름 가운데 글자 마스킹 - //이름이 3글자가 아닌 경우도 고려함. - var maskedUserName: String { - guard userName.count >= 3 else { return userName + "님" } - let firstChar = userName.prefix(1) - let lastChar = userName.suffix(1) - return "\(firstChar)*\(lastChar)님" - } - - //MARK: -헤더 뷰 - private var headerView: some View { - HStack(alignment: .center) { - VStack(alignment: .leading, spacing: 0) { - HStack(spacing: 8) { - Group { - if let profileImage = profileImage { - Image(uiImage: profileImage) - .resizable() - .scaledToFill() - .frame(width: 50, height: 50) - .clipShape(Circle()) - } else { - Image(systemName: "person.circle") - .resizable() - .frame(width: 50, height: 50) - } - } - .onLongPressGesture(minimumDuration: 1.0) { - showImagePicker = true - } - - Text(maskedUserName) - .font(.PretendardBold(size:24)) - HStack(alignment: .center, spacing: 10) { - Text("WELCOME") - .font( - .PretendardMedium(size:14) - ) - .multilineTextAlignment(.trailing) - .foregroundColor(.white) - .padding(.horizontal, 8) - .padding(.vertical, 4) - } - .background(Color(red: 0.28, green: 0.8, blue: 0.82)) - .cornerRadius(6) - Spacer() - Button(action: { - router.path.append(Route.memberInfo) - }) { - HStack(alignment: .center, spacing: 0) { - - Text("회원정보") - .font( - Font.custom("Pretendard", size: 14) - .weight(.semibold) - ) - .multilineTextAlignment(.trailing) - .foregroundColor(.white) - .padding(.leading, 11) - .padding(.trailing, 12) - .padding(.vertical, 4) - } - //피그마 그대로 색상 가져옴 - .background(Color(red: 0.28, green: 0.28, blue: 0.28)) - .cornerRadius(16) - } - } - HStack(spacing: 2) { - Spacer().frame(width: 57) - Text("멤버십 포인트") - .font(.PretendardSemiBold(size:14)) - .foregroundColor(.gray04) - Spacer().frame(width: 10) - Text("\(userPoints)P") - .font(.PretendardMedium(size:14)) - - } - } - Spacer() - - } - } - - //MARK: -클럽 멤버쉽 버튼 - private var clubMembershipButton: some View { - Button(action: { - //TODO: - 클럽 멤버쉽 버튼 클릭 시 동작 - }) { - HStack { - Spacer().frame(width:5) - Text("클럽 멤버십") - .font(.PretendardSemiBold(size:16)) - .multilineTextAlignment(.trailing) - .foregroundColor(.white) - Image("Vector") - - } - .frame(maxWidth: .infinity, alignment: .leading) - .frame(height:45) - .background( - LinearGradient( - stops: [ - Gradient.Stop(color: Color(red: 0.67, green: 0.55, blue: 1), location: 0.00), - Gradient.Stop(color: Color(red: 0.56, green: 0.68, blue: 0.95), location: 0.53), - Gradient.Stop(color: Color(red: 0.36, green: 0.8, blue: 0.93), location: 1.00), - ], - startPoint: UnitPoint(x: 0, y: 2), - endPoint: UnitPoint(x: 1, y: 2) - ) - ) - - .cornerRadius(8) - .overlay( - RoundedRectangle(cornerRadius: 8) - .inset(by: 0.5) - .stroke(.black, lineWidth: 1) - ) - } - } - - //MARK: -상태정보 뷰 - //좀 기네.. 재사용할 수 있으면 좋았을텐데 - private var statusInfoView: some View { - HStack { - VStack(spacing: 6) { - Text("쿠폰") - .font(.PretendardSemiBold(size: 16)) - .foregroundColor(Color("gray02")) - Text("2") - .font(.PretendardSemiBold(size: 18)) - - } - .padding(.leading, 20) - Spacer().frame(width:43) - - Rectangle() - .foregroundColor(Color("gray02")) - .frame(width: 1, height: 31) - - VStack(spacing: 6) { - Text("스토어 교환권") - .font(.PretendardSemiBold(size: 16)) - .foregroundColor(Color("gray02")) - Text("0") - .font(.PretendardSemiBold(size: 18)) - - } - .frame(maxWidth: .infinity) - - Rectangle() - .foregroundColor(Color("gray02")) - .frame(width: 1, height: 31) - - VStack(spacing: 6) { - Text("모바일 티켓") - .font(.PretendardSemiBold(size: 16)) - .foregroundColor(Color("gray02")) - Text("0") - .font(.PretendardSemiBold(size: 18)) - - } - .frame(maxWidth: .infinity) - } - .frame(height: 64) - .background( - RoundedRectangle(cornerRadius: 8) - .stroke(Color("gray02"), lineWidth: 1) - ) - } - - //MARK: -하단 메뉴 뷰 - private var bottomMenuView: some View { - HStack(alignment: .center) { - VStack { - Image("movie") - Text("영화별예매") - .font(.PretendardMedium(size:16)) - } - Spacer() - VStack { - Image("location2") - Text("극장별예매") - .font(.PretendardMedium(size:16)) - } - Spacer() - VStack { - Image("seat") - Text("특별관예매") - .font(.PretendardMedium(size:16)) - } - Spacer() - VStack { - Image("popcorn") - Text("모바일오더") - .font(.PretendardMedium(size:16)) - } - } - .padding(0) - .frame(maxWidth: .infinity, alignment: .center) - } -} - - -// MARK: - Preview -#Preview { - // Dummy Router - let router = NavigationRouter() - - // Dummy ViewModel - let viewModel = MovieViewModel() - - MemberInfoView() - .environment(router) - .environmentObject(viewModel) -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/MenuDetailView.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Views/MenuDetailView.swift deleted file mode 100644 index ffb4e99..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/MenuDetailView.swift +++ /dev/null @@ -1,270 +0,0 @@ -// -// MenuDetailView.swift -// MEGABOX -// -// Created by 고석현 on 11/15/25. -// - -import SwiftUI - - -/// MARK: - 메뉴 상세 페이지 -/// 선택된 메뉴를 보여주고, 상단 네비게이션과 극장 선택, 메뉴 리스트를 구성 -struct MenuDetailView: View { - - @Environment(\.dismiss) private var dismiss - - - var viewModel: MobileOrderViewModel - - var body: some View { - ScrollView(showsIndicators: false) { - VStack(alignment: .leading, spacing: 20) { - - /// 상단 뒤로가기 / 장바구니 / 제목 영역 - HStack { - Button(action: { - dismiss() - }) { - Image(systemName: "chevron.left") - .font(.system(size: 18, weight: .medium)) - .foregroundColor(.black) - .padding(8) - .background(.ultraThinMaterial) // ← Liquid Glass 효과 - .clipShape(Circle()) - } - - Spacer() - - Text("바로주문") - .font(.PretendardSemiBold(size: 20)) - - Spacer() - - Button(action: {}) { - Image("bag") - .font(.system(size: 18)) - .foregroundColor(.black) - .padding(8) - .background(.ultraThinMaterial) // ← Liquid Glass 효과 - .clipShape(Circle()) - } - } - .padding(.top, 10) - .padding(.horizontal, 20) - - /// 극장 선택 헤더 (상세 페이지용 밝은 스타일) - TheaterSelectHeaderDetailsView() - - /// 메뉴 카드 그리드 (2열 구성) - let columns = [ - GridItem(.flexible(), spacing: 20), - GridItem(.flexible(), spacing: 10) - ] - - LazyVGrid(columns: columns, spacing: 10) { - ForEach(viewModel.menus) { item in - - MenuCardsView(item: item) - } - } - .padding(.top, 10) - .padding(.horizontal, 20) - } -// .padding(.horizontal, 20) - } - .navigationBarBackButtonHidden() - } -} - -/// MARK: - 헤더 색상 변경 Modifier -/// 상세 페이지용 밝은 헤더 배경 스타일 구성 -struct TheaterHeaderStyle: ViewModifier { - func body(content: Content) -> some View { - content - .background(.white) // 상세페이지용 밝은 그레이 - } -} - -extension View { - func theaterHeaderLight() -> some View { - modifier(TheaterHeaderStyle()) - } -} - -/// MARK: - 극장 선택 헤더 Wrapper -/// TheaterSelectHeadersView 에 Modifier 적용 -struct TheaterSelectHeaderDetailsView: View { - var body: some View { - TheaterSelectHeadersView() - .theaterHeaderLight() - } -} - -/// MARK: - 극장 선택 헤더 -/// 현재 극장 위치 표시 + 극장 변경 버튼 UI -struct TheaterSelectHeadersView: View { - var body: some View { - HStack(alignment: .center) { - - - - - Spacer() - - - HStack { - - // 왼쪽: 위치 아이콘 + 강남 - HStack(spacing: 8) { - /// 위치 아이콘 - Image("location1") - .resizable() - .frame(width: 24, height: 24) - - - - Text("강남") - .font(.PretendardSemiBold(size: 13)) - .foregroundColor(.black) - } - - Spacer() - - // 오른쪽: 극장 변경 버튼 - Button { - print("극장 변경 눌림") - } label: { - Text("극장 변경") - .font(.PretendardSemiBold(size:13)) - .foregroundColor(Color(red: 0.4, green: 0.05, blue: 0.85)) - .padding(.vertical,8) - .padding(.horizontal, 5) - .background( - RoundedRectangle(cornerRadius: 5) - .stroke(Color.gray, lineWidth: 1) - ) - } - } - - Spacer() - - - } - - .padding(.vertical,10) - - } -} - -/// MARK: - 메뉴 카드 -/// 이미지 + 이름 + 가격 + 배지/품절 표시를 포함하는 단일 카드 -struct MenuCardsView: View { - let item: MenuItemModel - - var body: some View { - VStack(alignment: .leading, spacing: 6) { - - /// 메뉴 이미지 + 배지/품절 Modifier 적용 - Image(item.imageName) - .resizable() - .scaledToFit() - .frame(width: 170, height: 170) - .clipShape(RoundedRectangle(cornerRadius: 10)) - //뷰 modifiers 적용 - .bestBadge(item.isBest) - .recommendBadge(item.isRecommended) - .soldOut(item.isSoldOut) - - /// 메뉴 제목 - Text(item.title) - .font(.PretendardRegular(size: 13)) - .foregroundColor(.black) - .lineLimit(1) - - /// 메뉴 가격 - Text("\(item.price)원") - .font(.PretendardBold(size: 13)) - .foregroundColor(.black) - } - .frame(width: 191) - } -} - -/// MARK: - BEST 배지 Modifier -/// 메뉴가 BEST 상품일 때 좌측 상단에 배지를 표시 -struct BestBadgeModifier: ViewModifier { - let isBest: Bool - - func body(content: Content) -> some View { - ZStack(alignment: .topLeading) { - content - - if isBest { - Image("best") - .resizable() - .frame(width: 44, height: 20) -// .padding(8) - } - } - } -} - -/// MARK: - 추천 배지 Modifier -/// 추천 상품 표시용 배지 -struct RecommendBadgeModifier: ViewModifier { - let isRecommended: Bool - - func body(content: Content) -> some View { - ZStack(alignment: .topLeading) { - content - - if isRecommended { - Image("recommend") // 필요 시 에셋 구성 - .resizable() - .frame(width: 44, height: 20) -// .padding(8) - } - } - } -} - -/// MARK: - 품절 오버레이 Modifier -/// 품절 상태일 때 어둡게 처리 후 ‘품절’ 텍스트 표시 -struct SoldOutModifier: ViewModifier { - let isSoldOut: Bool - - func body(content: Content) -> some View { - ZStack { - content - - if isSoldOut { - Rectangle() - .fill(Color.black.opacity(0.8)) - .frame(width: 170, height: 170) - .shadow(color: .black.opacity(0.25), radius: 25, x: 0, y: 4) - - Text("품절") - .font(.PretendardBold(size: 16)) - .foregroundColor(.white) - } - } - } -} - -/// MARK: - 메뉴 배지 및 품절 Modifier Extension -extension View { - func bestBadge(_ value: Bool) -> some View { - modifier(BestBadgeModifier(isBest: value)) - } - func recommendBadge(_ value: Bool) -> some View { - modifier(RecommendBadgeModifier(isRecommended: value)) - } - func soldOut(_ value: Bool) -> some View { - modifier(SoldOutModifier(isSoldOut: value)) - } -} - -#Preview { - MenuDetailView(viewModel: MobileOrderViewModel()) -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/MobileOrderView.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Views/MobileOrderView.swift deleted file mode 100644 index 222ea77..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/MobileOrderView.swift +++ /dev/null @@ -1,358 +0,0 @@ -// -// MobileOrderView.swift -// MEGABOX -// -// Created by 고석현 on 11/15/25. -// - -import SwiftUI - -// MARK: - 모바일 오더 메인 화면 -// 전체 모바일 오더 UI 구성과 네비게이션을 담당하는 화면 -struct MobileOrderView: View { - @State private var viewModel = MobileOrderViewModel() - @Environment(NavigationRouter.self) private var router - - var body: some View { - VStack(spacing: 0) { - /// 상단 MEBOX 로고 영역 - HStack { - Spacer().frame(width: 45) - Image("meboxLogo") - .resizable() - .frame(width: 149, height: 30) - - Spacer() - } -// .padding(.leading, 10) - - - ScrollView(showsIndicators: false) { - VStack(alignment: .leading, spacing: 28) { - - //MARK: - 극장 변경 헤더 - TheaterSelectHeaderView() - .padding(.horizontal, 0.01) - - /// 바로 주문 / 스토어 교환권 / 선물하기 카드 섹션 - //스토어 교환권, 선물하기는 재사용 - - HStack(spacing: 12) { - //MARK: - 바로 주문 박스 - DirectOrderCard() - .padding(.leading, 20) - .onTapGesture { - router.push(.menuDetail) - } - - VStack(spacing: 12) { - //MARK: - 스토어 교환권 / 선물하기 박스 - SmallMenuCard(title: "스토어 교환권", imageName: "store") - SmallMenuCard(title: "선물하기", imageName: "present") - } - } - - - - - //어디서든 팝콘 만나기 - //MARK: - 어디서든 팝콘 만나기 카드 - DeliveryCard() - .padding(.leading, 20) - - - /// 추천 메뉴 섹션 - MenuHorizontalSectionView( - title: "추천 메뉴", - menus: viewModel.recommendedMenus, - router: router - ) - .padding(.leading, 20) - - - /// 베스트 메뉴 섹션 - MenuHorizontalSectionView( - title: "베스트 메뉴", - menus: viewModel.bestMenus, - router: router - ) - .padding(.leading, 20) - - } -// .padding(.leading, 20) - .padding(.top, 20) - - - } - } - .navigationBarTitleDisplayMode(.inline) - } -} - -// MARK: - 바로 주문 카드 - -struct DirectOrderCard: View { - var body: some View { - VStack(alignment: .leading) { - /// 카드 제목 - Text("바로 주문") - .font(.PretendardBold(size: 24)) - .foregroundColor(.black) - - /// 안내 문구 - Text("이제 줄서지 말고\n모바일로 주문하고 픽업!") - .font(.PretendardRegular(size: 12)) - .foregroundColor(Color(red: 0.47, green: 0.47, blue: 0.47)) - - .padding(.top, 6) - - Spacer() - - /// 우측 팝콘 이미지 - HStack { - Spacer() - Image("popcorn1") - .resizable() - .scaledToFit() - .frame(width: 44, height: 44) - } - } - .padding(.horizontal, 12) - .padding(.vertical, 15) - .frame(width: 200, height: 308, alignment: .leading) - .background(Color.white) - .cornerRadius(10) - .overlay( - RoundedRectangle(cornerRadius: 10) - .inset(by: 0.5) - .stroke(Color(red: 0.79, green: 0.77, blue: 0.77), lineWidth: 1) - ) - } -} - -// MARK: - 작은 메뉴 카드 ->재사용 -// 스토어 교환권 / 선물하기 카드 UI -struct SmallMenuCard: View { - let title: String - let imageName: String - - var body: some View { - VStack(alignment: .leading) { - /// 카드 제목 - Text(title) - .font(.PretendardBold(size: 22)) - .foregroundColor(.black) - - Spacer() - - /// 우측 아이콘 이미지 - HStack { - Spacer() - Image(imageName) - .resizable() - .scaledToFit() - .frame(width: 36, height: 36) - } - } - .padding(.horizontal,20) - .padding(.vertical, 10) - .frame(width: 150, height: 150, alignment: .leading) - .background(Color.white) - .cornerRadius(10) - .overlay( - RoundedRectangle(cornerRadius: 10) - .inset(by: 0.5) - .stroke(Color(red: 0.79, green: 0.77, blue: 0.77), lineWidth: 1) - ) - } -} - -// MARK: - 배달 카드 -// 팝콘·스낵 배달 가능 안내 카드 UI -struct DeliveryCard: View { - var body: some View { - HStack(alignment: .top) { - VStack(alignment: .leading, spacing: 8) { - /// 배달 안내 텍스트 - Text("어디서든 팝콘 만나기") - .font(.PretendardBold(size: 24)) - .foregroundColor(.black) - - Text("팝콘 콜라 스낵 모든 메뉴 배달 가능!") - .font(.PretendardRegular(size: 12)) - .foregroundColor(Color(red: 0.47, green: 0.47, blue: 0.47)) - - } - - Spacer() - - /// 우측 오토바이 이미지 - Image("motor") - .resizable() - .scaledToFit() - .frame(width: 46, height: 46) - } - .padding(.horizontal, 12) - .padding(.vertical, 25) - .frame(width: 360, alignment: .top) - .background(Color.white) - .cornerRadius(10) - .overlay( - RoundedRectangle(cornerRadius: 10) - .inset(by: 0.5) - .stroke(Color(red: 0.79, green: 0.77, blue: 0.77), lineWidth: 1) - ) - } -} - -// MARK: - 극장 선택 헤더 -// 현재 선택된 극장 표시 + 극장 변경 버튼 UI -struct TheaterSelectHeaderView: View { - var body: some View { - HStack(alignment: .center) { - - - - - Spacer() - - - HStack { - - // 왼쪽: 위치 아이콘 + 강남 - HStack(spacing: 8) { - Image("location") - .resizable() - .frame(width: 24, height: 24) - - - Text("강남") - .font(.PretendardSemiBold(size: 13)) - .foregroundColor(.white) - } - - Spacer() - - // 오른쪽: 극장 변경 버튼 - Button { - print("극장 변경 눌림") - } label: { - Text("극장 변경") - .font(.PretendardSemiBold(size:13)) - .foregroundStyle(.white) - .padding(.vertical,8) - .padding(.horizontal, 5) - .background( - RoundedRectangle(cornerRadius: 5) - .stroke(Color.white, lineWidth: 1) - ) - } - } - - Spacer() - - - } - - .padding(.vertical,10) - .background(Color(red: 0.40, green: 0.05, blue: 0.85)) - } -} - - - - - -// MARK: - 단일 메뉴 카드 -// 메뉴 이미지, 제목, 가격을 보여주는 카드 UI -struct MenuCardView: View { - let item: MenuItemModel - - var body: some View { - VStack(alignment: .leading, spacing: 2) { - /// 메뉴 이미지 - Image(item.imageName) - .resizable() - .scaledToFill() - .frame(width: 120, height: 120) - .clipShape(RoundedRectangle(cornerRadius: 12)) - Spacer().frame(height:4) - - /// 메뉴 제목 / 가격 - Text(item.title) - .font(.PretendardRegular(size:13)) - .foregroundColor(.black) - - Text("\(item.price)원") - .font(.PretendardSemiBold(size:14)) - .foregroundColor(.black) - } - } -} - -// MARK: - 메뉴 섹션 (가로 스크롤) -// 추천 메뉴 / 베스트 메뉴 등 가로 스크롤 메뉴 목록 구성 -struct MenuHorizontalSectionView: View { - let title: String - let menus: [MenuItemModel] - let router: NavigationRouter - - var body: some View { - VStack(alignment: .leading, spacing: 12) { - - /// 섹션 제목 - Text(title) - .font(.PretendardBold(size:22)) - - /// 부제 텍스트 (추천 / 베스트별 다르게 표시) - if title == "추천 메뉴" { - Text("영화 볼때 뭐먹지 고민될 때 추천메뉴!") - .font(.PretendardRegular(size: 12)) - .foregroundColor(Color(red: 0.47, green: 0.47, blue: 0.47)) - - - - } else if title == "베스트 메뉴" { - Text("영화 볼때 뭐먹지 고민될때 베스트 메뉴!") - .font(.PretendardRegular(size: 12)) - .foregroundColor(Color(red: 0.47, green: 0.47, blue: 0.47)) - - - } - - /// 가로 스크롤 메뉴 목록 - ScrollView(.horizontal, showsIndicators: false) { - HStack(spacing: 16) { - ForEach(menus) { item in - Button { - router.push(.menuDetail) - } label: { - MenuCardView(item: item) - } - } - } - .padding(.leading, 0) - } - } - } -} - - - - - -#Preview("MobileOrder - iPhone 17 Pro") { - NavigationStack { - MobileOrderView() - .environment(NavigationRouter()) // ✅ 프리뷰용 라우터 주입 - } - .previewDevice("iPhone 17 Pro") -} - -#Preview("MobileOrder - iPhone 11") { - NavigationStack { - MobileOrderView() - .environment(NavigationRouter()) // ✅ 프리뷰용 라우터 주입 - } - .previewDevice("iPhone 11") -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/MovieDetailView.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Views/MovieDetailView.swift deleted file mode 100644 index 46ff81f..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/MovieDetailView.swift +++ /dev/null @@ -1,189 +0,0 @@ -import SwiftUI -import Kingfisher - -struct MovieDetailView: View { - let movie: MovieModel - @Environment(\.dismiss) private var dismiss - - @State private var selectedSegment: DetailSegment = .info - @Namespace private var underlineNamespace - - enum DetailSegment: String, CaseIterable { - case info = "상세 정보" - case reviews = "실관람평" - } - - var body: some View { - ScrollView { - VStack(alignment: .leading, spacing: 0) { - - // MARK: - 상단 대형 이미지 (서버에서 받아온 backdrop 용) - KFImage(URL(string: movie.backdrop ?? movie.poster)) - .placeholder { - Rectangle() - .fill(Color.gray.opacity(0.3)) - .frame(height: 250) - } - .resizable() - .scaledToFit() - .frame(maxWidth: .infinity) - - // MARK: - 제목 - VStack(spacing: 4) { - Text(movie.title) - .font(.PretendardBold(size: 24)) - .multilineTextAlignment(.center) - - //영화 제목 - Text(movie.title) - .font(.PretendardMedium(size: 14)) - .foregroundStyle(.gray03) - } - .padding(.top, 10) - .frame(maxWidth: .infinity) - - // MARK: - 영화 상세정보(줄거리 description) - VStack(alignment: .leading, spacing: 10) { - Text(movie.description ?? "") - .font(.PretendardSemiBold(size: 16)) - .foregroundStyle(.gray03) - .lineSpacing(4) - .padding(.horizontal,16) - } - .padding(.top, 20) - - - // MARK: - 세그먼트 선택 (상세 정보 / 실관람평) - segmentSelector - - - // MARK: - 세그먼트 별 내용 - if selectedSegment == .info { - infoSection - } else { - reviewSection - } - - Spacer().frame(height: 60) - } - } - .navigationTitle(movie.title) - .navigationBarTitleDisplayMode(.inline) - .toolbarBackground(.ultraThinMaterial, for: .navigationBar) - .toolbar { - ToolbarItem(placement: .navigationBarLeading) { - Button(action: { dismiss() }) { - Image("goback") - .foregroundStyle(.black) - .padding(.leading, -25) - } - } - } - } -} - - - -// MARK: - 세그먼트 버튼 -private extension MovieDetailView { - - var segmentSelector: some View { - HStack { - ForEach(DetailSegment.allCases, id: \.self) { segment in - Button { - withAnimation(.easeInOut) { - selectedSegment = segment - } - } label: { - VStack { - Text(segment.rawValue) - .font(.PretendardBold(size: 22)) - .foregroundStyle(selectedSegment == segment ? .black : .gray02) - - if selectedSegment == segment { - Rectangle() - .frame(height: 2) - .foregroundColor(.black) - .matchedGeometryEffect(id: "underline", in: underlineNamespace) - } else { - Rectangle() - .frame(height: 2) - .foregroundColor(.clear) - } - } - } - - if segment != DetailSegment.allCases.last { - Spacer() - } - } - } - .padding(.vertical) - .padding(.horizontal, 16) - } -} - - -// MARK: - 상세 정보 섹션 -private extension MovieDetailView { - - var infoSection: some View { - HStack(alignment: .top, spacing: 15) { - - KFImage(URL(string: movie.poster)) - .placeholder { - Rectangle() - .fill(Color.gray.opacity(0.3)) - .frame(width: 120, height: 180) - } - .resizable() - .scaledToFit() - .frame(width: 120) - - VStack(alignment: .leading, spacing: 12) { - Text(movie.rating ?? "관람등급 정보 없음") - .font(.PretendardSemiBold(size: 13)) - - Text(movie.releaseDate ?? "개봉일 정보 없음") - .font(.PretendardSemiBold(size: 13)) - } - .frame(maxWidth: .infinity, alignment: .leading) - } - .padding(.horizontal, 16) - } -} - - -// MARK: - 실관람평 섹션 -private extension MovieDetailView { - - var reviewSection: some View { - VStack { - Spacer() - HStack { - Spacer() - Text("등록된 관람평이 없어요🥲 ") - .font(.PretendardSemiBold(size: 16)) - .foregroundStyle(.gray08) - Spacer() - } - Spacer() - } - .frame(height: 200) - } -} - - -#Preview { - MovieDetailView( - movie: MovieModel( - title: "테스트 영화", - poster: "https://image.tmdb.org/t/p/w342/vSMWJkBTEfa7kFxHizSz4uJNVlf.jpg", - countAudience: "30만", - description: "줄거리 예시입니다.", - releaseDate: "2025.06.25 개봉", - rating: "12세 이상 관람가", backdrop: "https://image.tmdb.org/t/p/w780/abcd1234.jpg" // ← 실제 문자열 - ) - ) -} - diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/MovieSearchView.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Views/MovieSearchView.swift deleted file mode 100644 index 1f7ff33..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/MovieSearchView.swift +++ /dev/null @@ -1,160 +0,0 @@ -// -// MovieSearchView.swift -// MEGABOX -// -// Created by 고석현 on 10/9/25. -// - -// -// MovieSearchView.swift -// MEGABOX -// -// Created by 고석현 on 10/10/25. -// - -import SwiftUI - -// MARK: - 영화 검색 뷰 -// 사용자가 영화명을 입력하면 MovieSearchViewModel을 통해 검색 결과를 표시함 -struct MovieSearchView: View { - - // MARK: - 상태 관리 - @StateObject private var viewModel = MovieSearchViewModel() // 뷰모델 연결 - - var body: some View { - NavigationStack { - VStack(spacing: 12) { - searchBarSection // 상단 검색창 - statusIndicatorSection // 로딩/에러 표시 - - resultListSection // 검색 결과 리스트 - } - .padding(.horizontal, 16) - .navigationTitle("영화 검색") - } - } -} - -// MARK: - 검색창 영역 -private extension MovieSearchView { - var searchBarSection: some View { - HStack(spacing: 10) { - Image(systemName: "magnifyingglass") - .font(.system(size: 18, weight: .semibold)) - .foregroundStyle(.primary) - - // 텍스트 입력창 - TextField("영화명을 입력해주세요", text: $viewModel.query) - .textInputAutocapitalization(.never) - .disableAutocorrection(true) - - Image(systemName: "mic") - .font(.system(size: 18, weight: .semibold)) - .foregroundStyle(.secondary) - } - .padding(.horizontal, 14) - .padding(.vertical, 12) - .clipShape(Capsule()) - .overlay( - Capsule() - .stroke(Color.black.opacity(0.06), lineWidth: 0.5) - ) - } -} - -// MARK: - 로딩/에러 상태 -private extension MovieSearchView { - var statusIndicatorSection: some View { - VStack { - if viewModel.isLoading { - ProgressView("검색 중...") - .padding(.top, 8) - } - - if let error = viewModel.errorMessage { - Text(error) - .font(.subheadline) - .foregroundStyle(.red) - .padding(.top, 4) - } - } - } -} - -// MARK: - 검색 결과 리스트 -private extension MovieSearchView { - var resultListSection: some View { - // 검색어가 없을 땐 빈 뷰, 있으면 결과 표시 - Group { - if viewModel.results.isEmpty && !viewModel.query.isEmpty && !viewModel.isLoading { - Text("검색 결과가 없습니다") - .font(.PretendardSemiBold(size:16)) - .foregroundStyle(.gray04) - .padding(.top, 40) - } else if !viewModel.results.isEmpty { - ScrollView { - LazyVStack(alignment: .leading, spacing: 12) { - ForEach(viewModel.results, id: \.id) { movie in - MovieResultCell(movie: movie) - .onTapGesture { - viewModel.selectedMovie = movie - } - .padding(.horizontal, 4) - } - } - .padding(.top, 8) - } - } else { - EmptyView() - } - } - } -} - -// MARK: - 개별 영화 셀 -private struct MovieResultCell: View { - let movie: MovieModel - - var body: some View { - HStack(spacing: 12) { - Image(movie.poster) - .resizable() - .scaledToFill() - .frame(width: 95, height: 135) - .clipped() - .cornerRadius(8) - - VStack(alignment: .leading, spacing: 8) { - Text(movie.title) - .font(.PretendardBold(size:18)) - .foregroundStyle(.black) - .lineLimit(2) - - if let date = movie.releaseDate { - Text(date) - .font(.PretendardSemiBold(size:14)) - .foregroundStyle(.gray05) - } - - if let rating = movie.rating { - Text(rating) - .font(.PretendardSemiBold(size:14)) - .foregroundStyle(.gray04) - } - - if let audience = movie.countAudience { - Text("관객수 \(audience)") - .font(.PretendardSemiBold(size:14)) - .foregroundStyle(.gray03) - } - } - Spacer() - } - .padding(.vertical, 6) - } -} - -// MARK: - 프리뷰 -#Preview { - MovieSearchView() -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/MovieSheetView.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Views/MovieSheetView.swift deleted file mode 100644 index fd1ed4f..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/MovieSheetView.swift +++ /dev/null @@ -1,152 +0,0 @@ -// -// MovieSheetView.swift -// MEGABOX -// -// Created by 고석현 on 10/9/25. -// - -import SwiftUI - -// MARK: - 영화 전체 목록 시트 -// 이 시트는 "전체 영화" 버튼을 눌렀을 때 표시됨 -// 영화 포스터들을 그리드로 보여주고, 하단의 검색바를 통해 영화 이름을 검색할 수 있음 -// 구조: 상단(타이틀) - 중앙(영화 리스트) - 하단(항상 고정된 검색바) -struct MovieSheetView: View { - // 영화 검색과 관련된 상태 관리를 위해 ViewModel을 StateObject로 선언 - @StateObject var viewModel: MovieSearchViewModel - // 영화 선택 시 부모 뷰로 결과를 전달하는 클로저 - let onSelect: (MovieModel) -> Void - // SwiftUI 환경값: 시트 닫기 위한 dismiss 함수 - @Environment(\.dismiss) var dismiss - - // 그리드 레이아웃(3열) 설정: LazyVGrid에서 사용 - private let columns = [GridItem(.flexible()), GridItem(.flexible()), GridItem(.flexible())] - - var body: some View { - // ZStack을 사용해 검색바를 항상 화면 하단에 고정 - // alignment: .bottom으로 하여 검색바가 시각적으로 항상 맨 아래에 위치 - ZStack(alignment: .bottom) { - // VStack: 상단 타이틀과 포스터 그리드(스크롤 영역) 구성 - VStack(spacing: 0) { - // MARK: - 상단 타이틀 - // 영화 선택을 안내하는 텍스트, 시트의 맨 위에 위치 - headerView - .padding(.top, 20) - .padding(.bottom, 12) - - // MARK: - 영화 포스터 리스트 - // ScrollView로 감싸서 영화 목록만 스크롤 가능 - // LazyVGrid를 사용해 성능 저하 없이 많은 포스터를 표시 - ScrollView { - posterGrid - .padding(.horizontal, 16) - // 검색바 영역만큼 아래에 패딩을 줘서 마지막 아이템이 가려지지 않게 함 - .padding(.bottom, 100) - } - } - - // MARK: - 하단 검색바 - // ZStack의 bottom alignment로 항상 화면 하단에 고정 - // 검색바는 VStack 외부에 위치하여 스크롤에 영향을 받지 않음 - searchBar - .padding(.horizontal, 16) - .padding(.bottom, 20) - .background(Color.white) - // 살짝 그림자 효과로 시각적 분리 - .shadow(color: .gray.opacity(0.1), radius: 3, y: -1) - } - // 키보드가 올라올 때 시트가 자연스럽게 반응하도록 설정 - .ignoresSafeArea(.keyboard) - .background(Color.white) - } -} - -// MARK: - 구성 요소들 -private extension MovieSheetView { - // MARK: 영화 선택 타이틀 - // 시트의 상단 제목 부분 - var headerView: some View { - Text("영화 선택") - .font(.PretendardBold(size: 20)) - .frame(maxWidth: .infinity) - .multilineTextAlignment(.center) - } - - // MARK: 영화 포스터 그리드 - // LazyVGrid를 이용해 효율적으로 포스터 이미지들을 배치 - // 각 영화 포스터는 Button으로 감싸져 있어 선택 가능 - // 영화 하나를 누르면 onSelect를 통해 상위 View로 전달하고 dismiss()로 시트를 닫음 - var posterGrid: some View { - LazyVGrid(columns: columns, spacing: 24) { - ForEach(movieList, id: \.id) { movie in - Button { - // 영화 선택 시 부모뷰로 데이터 전달 - onSelect(movie) - // 너무 빠르게 닫히는 현상을 막기 위해 약간의 지연 추가 - DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) { - dismiss() - } - } label: { - VStack(spacing: 8) { - // 포스터 이미지 - Image(movie.poster) - .resizable() - .scaledToFill() - .frame(width: 95, height: 135) - .clipShape(RoundedRectangle(cornerRadius: 8)) - - // 영화 제목 - Text(movie.title) - .font(.PretendardSemiBold(size: 14)) - .multilineTextAlignment(.center) - .foregroundColor(.black) - } - } - } - } - } - - // MARK: 영화 리스트 필터링 - // 사용자가 검색어를 입력하면 해당 검색어가 포함된 영화만 표시 - // query가 비어 있으면 전체 리스트 반환 - var movieList: [MovieModel] { - let trimmedQuery = viewModel.query.trimmingCharacters(in: .whitespaces) - return trimmedQuery.isEmpty ? viewModel.movies : viewModel.results - } - - // MARK: 하단 검색바 - // 사용자 입력을 viewModel.query와 바인딩 - // Combine을 통해 debounce, removeDuplicates 등으로 성능을 조정 - var searchBar: some View { - HStack(spacing: 12) { - // 검색 아이콘(돋보기) - Image(systemName: "magnifyingglass") - .foregroundColor(.gray) - - // TextField: 실시간으로 viewModel.query에 입력값을 반영 - // Combine 파이프라인에서 검색 로직이 자동으로 실행됨 - TextField("영화명을 입력해주세요", text: $viewModel.query) - .textInputAutocapitalization(.never) - .disableAutocorrection(true) - - // 마이크 버튼(여기선 검색어 초기화 용도) - Button { - // 버튼을 누르면 검색어를 즉시 초기화 - viewModel.query = "" - } label: { - Image(systemName: "mic") - .foregroundColor(.gray.opacity(0.5)) - } - } - // UI 스타일: 부드럽게 둥근 캡슐 형태의 검색창 - .padding(.horizontal, 16) - .padding(.vertical, 12) - .background(Color(white: 0.95)) - .clipShape(RoundedRectangle(cornerRadius: 16)) - } -} - -#Preview { - // 미리보기용: 빈 onSelect 클로저 전달 - MovieSheetView(viewModel: MovieSearchViewModel()) { _ in } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/ReservationView.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Views/ReservationView.swift deleted file mode 100644 index 463876e..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/ReservationView.swift +++ /dev/null @@ -1,716 +0,0 @@ -//// -//// ReservationView.swift -//// MEGABOX -//// -//// Created by 고석현 on 10/10/25. -//// -// -//import SwiftUI -// -//struct ReservationView: View { -// @Environment(NavigationRouter.self) var router -// @EnvironmentObject var viewModel: MovieViewModel -// @State private var isMovieSheetOn = false -// -// var body: some View { -// VStack(spacing: 0) { -// TopBar -// .padding(.horizontal, -16) -// -// // 영화 선택 섹션 (현재 선택된 영화 + 전체 영화 보기 버튼 + 포스터 리스트) -// MovieSelectionSection -// .padding(.top, -40) -// -// // 영화가 선택된 경우에만 극장 버튼이 활성화됨 -// if viewModel.pickedMovie != nil { -// TheaterSelectionSection -// } -// -// // 영화 + 극장 선택 완료 시 날짜 선택 가능 -// if viewModel.isDateActive { -// WeekSelectorView() -// .environmentObject(viewModel) -// } -// -// // 세 가지(영화, 극장, 날짜)가 모두 선택되면 상영 시간 표시 -// if viewModel.canDisplayShowtimes { -// ShowtimeSection -// } -// -// Spacer() -// } -// .padding(.horizontal, 16) -// // 영화 선택 시 나타나는 시트 (영화 전체 리스트) -// .sheet(isPresented: $isMovieSheetOn) { -// MovieSheetView(viewModel: MovieSearchViewModel()) { movie in -// viewModel.pickedMovie = movie -// } -// .presentationDetents([.large]) -// .presentationDragIndicator(.visible) -// } -// } -//} -// -//// MARK: - 상단 바 -//// 상단의 "영화별 예매" 타이틀 영역. 상태바 포함 전체 배경을 보라색으로 채움. -//private extension ReservationView { -// var TopBar: some View { -// HStack { -// Spacer() -// Text("영화별 예매") -// .font(.PretendardBold(size:22)) -// .frame(maxWidth: .infinity) -// .foregroundStyle(.white) -// .padding(.top, 71) -// .padding(.bottom, 10) -// Spacer() -// } -// .background(.purple03) -// .ignoresSafeArea() -// } -//} -// -//// MARK: - 영화 선택 섹션 -//// 상단 포스터 스크롤 + 영화 이름 + 전체영화 버튼 -//// 사용자가 영화를 선택하거나 전체 영화 목록을 볼 수 있도록 하는 UI 영역 -//private extension ReservationView { -// var MovieSelectionSection: some View { -// VStack(spacing: 0) { -// // 상단의 영화 정보 영역 -// HStack(spacing: 0) { -// // 연령제한 박스 -// ZStack { -// RoundedRectangle(cornerRadius: 4) -// .frame(width: 26, height: 24) -// .foregroundStyle(.orange) -// Text("15") -// .font(.PretendardBold(size:18)) -// .foregroundStyle(.white) -// } -// .padding(.trailing, 39) -// -// // 영화 이름 표시 (선택된 영화가 없다면 기본 텍스트) -// Text(viewModel.pickedMovie?.title ?? "영화 이름") -// .font(.PretendardBold(size:18)) -// .foregroundStyle(.black) -// .frame(width: 238) -// Spacer() -// -// // 전체 영화 버튼 (시트로 연결) -// Button(action: { isMovieSheetOn = true }) { -// ZStack { -// RoundedRectangle(cornerRadius: 8) -// .stroke(Color.gray02) -// .frame(width: 69, height: 30) -// .background(.white) -// Text("전체영화") -// .font(.PretendardSemiBold(size:14)) -// .foregroundStyle(.black) -// } -// } -// } -// .padding(.bottom, 20) -// -// // 가로 스크롤 영화 포스터 영역 -// ScrollView(.horizontal, showsIndicators: false) { -// LazyHStack { -// ForEach(viewModel.movies) { movie in -// PosterButton( -// movie: movie, -// isSelected: viewModel.pickedMovie?.id == movie.id, -// onTap: { -// // 같은 영화를 다시 누르면 해제, 아니면 선택 -// if viewModel.pickedMovie?.id == movie.id { -// viewModel.pickedMovie = nil -// viewModel.chosenTheaters.removeAll() -// viewModel.pickedDate = nil -// } else { -// viewModel.pickedMovie = movie -// } -// } -// ) -// } -// } -// .frame(height: 100) -// } -// } -// } -//} -// -//// MARK: - 영화 포스터 버튼 -//// 포스터 하나를 보여주는 버튼 뷰 -//// 이 버튼은 영화 포스터를 눌렀을 때 선택 또는 해제되도록 하는 역할. -//// 선택된 영화는 보라색 테두리가 생김. -//private struct PosterButton: View { -// let movie: MovieModel -// let isSelected: Bool -// let onTap: () -> Void -// -// var body: some View { -// Button(action: onTap) { -// Image(movie.poster) -// .resizable() -// .aspectRatio(contentMode: .fit) -// .frame(width: 62) -// .clipShape(RoundedRectangle(cornerRadius: 10)) -// // 선택된 경우 보라색 테두리 표시 -// .overlay( -// RoundedRectangle(cornerRadius: 10) -// .stroke(isSelected ? Color.purple03 : Color.clear, lineWidth: 2) -// ) -// .padding(.bottom, 8) -// } -// } -//} -// -//// MARK: - 극장 선택 섹션 -//// 영화가 선택되어야 활성화되며, 여러 극장을 동시에 선택 가능 -//// 사용자가 원하는 극장을 선택하거나 해제할 수 있는 영역 -//private extension ReservationView { -// var TheaterSelectionSection: some View { -// HStack(spacing: 8) { -// ForEach(Theater.allCases, id: \.self) { theater in -// let isSelected = viewModel.chosenTheaters.contains(theater) -// Button { -// // 선택된 극장은 다시 누르면 해제, 아니면 추가 -// if isSelected { -// viewModel.chosenTheaters.remove(theater) -// } else { -// viewModel.chosenTheaters.insert(theater) -// } -// } label: { -// Text(theater.rawValue) -// .padding(.horizontal, 14) -// .padding(.vertical, 8) -// .background(isSelected ? Color.purple03 : Color.gray01) -// .foregroundStyle(isSelected ? Color.white : Color.gray05) -// .clipShape(RoundedRectangle(cornerRadius: 15)) -// } -// // 영화가 선택되어야만 버튼이 활성화되고 터치 가능 -// .disabled(!viewModel.isTheaterActive) -// .allowsHitTesting(viewModel.isTheaterActive) -// .opacity(viewModel.isTheaterActive ? 1 : 0.4) -// } -// Spacer() -// } -// } -//} -// -//// MARK: - 상영 시간 섹션 -//// 영화, 극장, 날짜를 모두 선택했을 때만 표시됨 -//// 신촌만 선택한 경우 “상영시간표가 없습니다” 메시지를 표시 -//// 선택된 조건에 맞는 상영 시간표를 보여주는 영역 -//private extension ReservationView { -// var ShowtimeSection: some View { -// VStack(alignment: .leading, spacing: 16) { -// if viewModel.chosenTheaters.count == 1, -// viewModel.chosenTheaters.contains(.shinchon) { -// // 신촌 극장만 선택 시 상영시간표가 없음을 알려줌 -// Text("선택한 극장에 상영시간표가 없습니다") -// .font(.PretendardSemiBold(size:14)) -// .foregroundStyle(.gray05) -// .padding(.vertical, 8) -// } else { -// // 각 극장별 상영 시간 표시 -// ForEach(Array(viewModel.showtimeSchedule.keys.sorted { $0.rawValue < $1.rawValue }), id: \.self) { theater in -// VStack(alignment: .leading, spacing: 8) { -// Text(theater.rawValue) -// .font(.PretendardBold(size:18)) -// .foregroundStyle(.black) -// -// let showtimes = viewModel.showtimeSchedule[theater] ?? [] -// ScrollView(.horizontal, showsIndicators: false) { -// HStack(spacing: 12) { -// ForEach(showtimes) { s in -// // 개별 상영 시간 카드 -// VStack(alignment: .leading, spacing: 4) { -// Text(timeString(s.start)) -// .font(.PretendardBold(size:18)) -// .foregroundStyle(.black) -// Text("~ \(timeString(s.end))") -// .font(.PretendardSemiBold(size:12)) -// .foregroundStyle(.gray05) -// HStack(spacing: 2) { -// Text("\(s.remaining)") -// .font(.PretendardSemiBold(size:12)) -// .foregroundStyle(.purple03) -// Text("/\(s.capacity)") -// .font(.PretendardSemiBold(size:12)) -// .foregroundStyle(.gray03) -// } -// } -// .padding(12) -// .background( -// RoundedRectangle(cornerRadius: 12) -// .stroke(Color.gray02, lineWidth: 1) -// ) -// } -// } -// } -// } -// } -// } -// } -// .padding(.top, 16) -// } -// -// // 시간을 "HH:mm" 형식으로 변환하는 함수 -// // Date 타입을 사람이 읽기 쉬운 시간 문자열로 변환 -// private func timeString(_ d: Date) -> String { -// let f = DateFormatter() -// f.dateFormat = "HH:mm" -// return f.string(from: d) -// } -//} -// -//// MARK: - 날짜 선택 뷰 -//// 오늘 기준 7일간의 날짜를 보여주는 뷰 -//// 가로 스크롤로 이동 가능, 포스터와 여백 정렬을 맞춤 -//// 사용자가 원하는 날짜를 선택할 수 있도록 하는 UI -//private struct WeekSelectorView: View { -// @EnvironmentObject var viewModel: MovieViewModel -// -// var body: some View { -// ScrollView(.horizontal, showsIndicators: false) { -// HStack(spacing: 8) { -// ForEach(viewModel.weekDays, id: \.self) { day in -// // 현재 선택된 날짜와 비교해서 선택 여부 결정 -// let isSelected = viewModel.pickedDate.map { -// Calendar.current.isDate($0, inSameDayAs: day) -// } ?? false -// -// DateButton(date: day, isSelected: isSelected) { -// // 날짜 선택 시 뷰모델에 반영 -// viewModel.pickedDate = day -// } -// // 영화와 극장이 선택되어야 날짜 선택 가능 -// .disabled(!viewModel.isDateActive) -// } -// } -// .padding(.horizontal, 16) // 영화 포스터 뷰와 동일한 여백 -// .padding(.vertical, 8) -// } -// .frame(height: 100) -// } -//} -// -//// MARK: - 날짜 버튼 -//// 각 날짜 하나를 나타내는 뷰 -//// 오늘, 내일, 주말 색상 구분 포함 -//// 날짜 칩을 눌러서 선택할 수 있음 -//private struct DateButton: View { -// let date: Date -// let isSelected: Bool -// let onTap: () -> Void -// -// var body: some View { -// let cal = Calendar.current -// // 날짜 계산 -// // 오늘인지 확인 -// let isToday = cal.isDateInToday(date) -// // 내일인지 확인 -// let isTomorrow = cal.isDateInTomorrow(date) -// // 요일 숫자 (1=일요일, 7=토요일) -// let weekday = cal.component(.weekday, from: date) -// -// // 메인 텍스트(날짜 숫자)와 서브텍스트(요일 or 오늘/내일) -// // 오늘은 월.일 형식, 그 외는 그냥 일(day) 숫자 표시 -// let main = isToday ? monthDayString : dayString -// // 서브텍스트는 오늘, 내일, 혹은 요일 한글 약어 -// let sub = isToday ? "오늘" : (isTomorrow ? "내일" : weekdayKOR) -// -// // 선택 상태 및 요일에 따라 색상 다르게 설정 -// // 선택된 경우 흰색 텍스트 -// // 일요일은 빨간색, 토요일은 청록색, 나머지는 기본 색상 -// let textColor: Color = { -// if isSelected { return .white } -// if weekday == 1 { return .red } // 일요일 빨간색 -// if weekday == 7 { return .tag } // 토요일 청록색 -// return .primary -// }() -// -// // 버튼 자체 -// Button(action: onTap) { -// VStack(spacing: 6) { -// Text(main) -// .font(.PretendardBold(size:22)) -// .foregroundStyle(textColor) -// Text(sub) -// .font(.PretendardSemiBold(size:16)) -// // 선택된 경우 서브텍스트도 흰색에 가깝게, 아니면 회색 -// .foregroundStyle(isSelected ? .white.opacity(0.95) : .gray) -// } -// // 날짜 칩 스타일 -// .frame(width: 50, height: 60) -// .background( -// RoundedRectangle(cornerRadius: 12) -// // 선택된 경우 보라색 배경, 아니면 투명 -// .fill(isSelected ? Color.purple03 : .clear) -// ) -// } -// .buttonStyle(.plain) -// } -// -// // 날짜 숫자 (예: 25) -// private var dayString: String { -// String(Calendar.current.component(.day, from: date)) -// } -// // 월.일 형식 문자열 (예: 6.25) -// private var monthDayString: String { -// let f = DateFormatter() -// f.dateFormat = "M.d" -// return f.string(from: date) -// } -// // 요일 한글 (예: 월, 화, 수) -// private var weekdayKOR: String { -// let f = DateFormatter() -// f.locale = Locale(identifier: "ko_KR") -// f.dateFormat = "E" -// return f.string(from: date) -// } -//} -// -//// MARK: - 프리뷰 -//#Preview { -// ReservationView() -// .environment(NavigationRouter()) -// .environmentObject(MovieViewModel()) -//} - - -import SwiftUI - -// MARK: - New ReservationView (JSON-backed, using ReservationViewModel) -struct ReservationView: View { - @Environment(NavigationRouter.self) var router - @StateObject var viewModel = ReservationViewModel() - @State private var isMovieSheetOn = false - - var body: some View { - VStack(spacing: 0) { - TopBar - .padding(.horizontal, -16) - - // 영화 선택 섹션 (현재 선택된 영화 + 전체 영화 보기 버튼 + 포스터 리스트) - MovieSelectionSection - .padding(.top, -40) - - // 영화가 선택된 경우에만 극장 버튼이 활성화됨 - if viewModel.pickedMovie != nil { - TheaterSelectionSection - } - - // 영화 + 극장 선택 완료 시 날짜 선택 가능 - if viewModel.isDateActive { - ReservationWeekSelectorView() - .environmentObject(viewModel) - } - - // 세 가지(영화, 극장, 날짜)가 모두 선택되면 상영 시간 표시 - if viewModel.canDisplayShowtimes { - ShowtimeSection - } - - Spacer() - } - .padding(.horizontal, 16) - // 영화 선택 시 나타나는 시트 (영화 전체 리스트) - .sheet(isPresented: $isMovieSheetOn) { - MovieSheetView(viewModel: MovieSearchViewModel()) { movie in - viewModel.pickedMovie = movie - // 영화 변경 시 기존 선택 초기화 - viewModel.chosenTheaters.removeAll() - viewModel.pickedDate = nil - } - .presentationDetents([.large]) - .presentationDragIndicator(.visible) - } - } -} - -// MARK: - 상단 바 -private extension ReservationView { - var TopBar: some View { - HStack { - Spacer() - Text("영화별 예매") - .font(.PretendardBold(size:22)) - .frame(maxWidth: .infinity) - .foregroundStyle(.white) - .padding(.top, 71) - .padding(.bottom, 10) - Spacer() - } - .background(.purple03) - .ignoresSafeArea() - } -} - -// MARK: - 영화 선택 섹션 -private extension ReservationView { - var MovieSelectionSection: some View { - VStack(spacing: 0) { - // 상단의 영화 정보 영역 - HStack(spacing: 0) { - // 연령제한 박스 (선택 영화의 관람등급 표시) - ZStack { - RoundedRectangle(cornerRadius: 4) - .frame(width: 26, height: 24) - .foregroundStyle(.orange) - Text((viewModel.pickedMovie?.rating ?? "").isEmpty ? "-" : (viewModel.pickedMovie?.rating ?? "-")) - .font(.PretendardBold(size:14)) - .foregroundStyle(.white) - } - .padding(.trailing, 39) - - // 영화 이름 표시 (선택된 영화가 없다면 기본 텍스트) - Text(viewModel.pickedMovie?.title ?? "영화 선택") - .font(.PretendardBold(size:18)) - .foregroundStyle(.black) - .frame(width: 238, alignment: .leading) - Spacer() - - // 전체 영화 버튼 (시트로 연결) - Button(action: { isMovieSheetOn = true }) { - ZStack { - RoundedRectangle(cornerRadius: 8) - .stroke(Color.gray02) - .frame(width: 69, height: 30) - .background(.white) - Text("전체영화") - .font(.PretendardSemiBold(size:14)) - .foregroundStyle(.black) - } - } - } - .padding(.bottom, 20) - - // 가로 스크롤 영화 포스터 영역 - ScrollView(.horizontal, showsIndicators: false) { - LazyHStack(spacing: 12) { - ForEach(viewModel.movies) { movie in - PosterButton( - movie: movie, - isSelected: viewModel.pickedMovie?.id == movie.id - ) { - // 같은 영화를 다시 누르면 해제, 아니면 선택 - if viewModel.pickedMovie?.id == movie.id { - viewModel.pickedMovie = nil - viewModel.chosenTheaters.removeAll() - viewModel.pickedDate = nil - } else { - viewModel.pickedMovie = movie - viewModel.chosenTheaters.removeAll() - viewModel.pickedDate = nil - } - } - } - } - .frame(height: 100) - } - } - } -} - -// MARK: - 영화 포스터 버튼 (재사용 컴포넌트) -private struct PosterButton: View { - let movie: MovieModel - let isSelected: Bool - let onTap: () -> Void - - var body: some View { - Button(action: onTap) { - Image(movie.poster) - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 62) - .clipShape(RoundedRectangle(cornerRadius: 10)) - .overlay( - RoundedRectangle(cornerRadius: 10) - .stroke(isSelected ? Color.purple03 : Color.clear, lineWidth: 2) - ) - .padding(.bottom, 8) - } - .buttonStyle(.plain) - } -} - -// MARK: - 극장 선택 섹션 -private extension ReservationView { - var TheaterSelectionSection: some View { - HStack(spacing: 8) { - ForEach(Theater.allCases, id: \.self) { theater in - let isSelected = viewModel.chosenTheaters.contains(theater) - Button { - if isSelected { - viewModel.chosenTheaters.remove(theater) - } else { - viewModel.chosenTheaters.insert(theater) - } - } label: { - Text(theater.rawValue) - .padding(.horizontal, 14) - .padding(.vertical, 8) - .background(isSelected ? Color.purple03 : Color.gray01) - .foregroundStyle(isSelected ? .white : .gray05) - .clipShape(RoundedRectangle(cornerRadius: 15)) - } - .disabled(!viewModel.isTheaterActive) - .allowsHitTesting(viewModel.isTheaterActive) - .opacity(viewModel.isTheaterActive ? 1 : 0.4) - } - Spacer() - } - } -} - -// MARK: - 상영 시간 섹션 -private extension ReservationView { - var ShowtimeSection: some View { - VStack(alignment: .leading, spacing: 16) { - if viewModel.chosenTheaters.count == 1, - viewModel.chosenTheaters.contains(.shinchon) { - Text("선택한 극장에 상영시간표가 없습니다") - .font(.PretendardSemiBold(size:14)) - .foregroundStyle(.gray05) - .padding(.vertical, 8) - } else { - ForEach(Array(viewModel.showtimeSchedule.keys.sorted { $0.rawValue < $1.rawValue }), id: \.self) { theater in - VStack(alignment: .leading, spacing: 8) { - Text(theater.rawValue) - .font(.PretendardBold(size:18)) - .foregroundStyle(.black) - - let showtimes = viewModel.showtimeSchedule[theater] ?? [] - ScrollView(.horizontal, showsIndicators: false) { - HStack(spacing: 12) { - ForEach(showtimes) { s in - VStack(alignment: .leading, spacing: 4) { - Text(timeString(s.start)) - .font(.PretendardBold(size:18)) - .foregroundStyle(.black) - Text("~ \(timeString(s.end))") - .font(.PretendardSemiBold(size:12)) - .foregroundStyle(.gray05) - HStack(spacing: 2) { - Text("\(s.remaining)") - .font(.PretendardSemiBold(size:12)) - .foregroundStyle(.purple03) - Text("/\(s.capacity)") - .font(.PretendardSemiBold(size:12)) - .foregroundStyle(.gray03) - } - } - .padding(12) - .background( - RoundedRectangle(cornerRadius: 12) - .stroke(Color.gray02, lineWidth: 1) - ) - } - } - } - } - } - } - } - .padding(.top, 16) - } - - // Date → "HH:mm" - private func timeString(_ d: Date) -> String { - let f = DateFormatter() - f.dateFormat = "HH:mm" - return f.string(from: d) - } -} - -// MARK: - 날짜 선택 (ReservationViewModel 연결 버전) -private struct ReservationWeekSelectorView: View { - @EnvironmentObject var viewModel: ReservationViewModel - - var body: some View { - ScrollView(.horizontal, showsIndicators: false) { - HStack(spacing: 8) { - ForEach(viewModel.weekDays, id: \.self) { day in - let isSelected = viewModel.pickedDate.map { - Calendar.current.isDate($0, inSameDayAs: day) - } ?? false - ReservationDateButton( - date: day, - base: viewModel.weekDays.first ?? day, - isSelected: isSelected - ) { - viewModel.pickedDate = day - } - .disabled(!viewModel.isDateActive) - } - } - .padding(.horizontal, 16) - .padding(.vertical, 8) - } - .frame(height: 100) - } -} - -// MARK: - 날짜 버튼 (기준일 = JSON 시작일) -private struct ReservationDateButton: View { - let date: Date - let base: Date // viewModel.weekDays.first - let isSelected: Bool - let onTap: () -> Void - - var body: some View { - let cal = Calendar.current - let isToday = cal.isDate(date, inSameDayAs: base) - let isTomorrow = cal.isDate(date, inSameDayAs: cal.date(byAdding: .day, value: 1, to: base) ?? base) - let weekday = cal.component(.weekday, from: date) - - let main = isToday ? monthDayString(date) : dayString(date) - let sub = isToday ? "오늘" : (isTomorrow ? "내일" : weekdayKOR(date)) - - let textColor: Color = { - if isSelected { return .white } - if weekday == 1 { return .red } - if weekday == 7 { return .tag } - return .primary - }() - - Button(action: onTap) { - VStack(spacing: 6) { - Text(main) - .font(.PretendardBold(size:22)) - .foregroundStyle(textColor) - Text(sub) - .font(.PretendardSemiBold(size:16)) - .foregroundStyle(isSelected ? .white.opacity(0.95) : .gray) - } - .frame(width: 50, height: 60) - .background( - RoundedRectangle(cornerRadius: 12) - .fill(isSelected ? Color.purple03 : .clear) - ) - } - .buttonStyle(.plain) - } - - private func dayString(_ d: Date) -> String { - String(Calendar.current.component(.day, from: d)) - } - private func monthDayString(_ d: Date) -> String { - let f = DateFormatter() - f.dateFormat = "M.d" - return f.string(from: d) - } - private func weekdayKOR(_ d: Date) -> String { - let f = DateFormatter() - f.locale = Locale(identifier: "ko_KR") - f.dateFormat = "E" - return f.string(from: d) - } -} - -// MARK: - Preview -#Preview { - ReservationView() - .environment(NavigationRouter()) -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/SplashView.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Views/SplashView.swift deleted file mode 100644 index a33d821..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/SplashView.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// SplashView.swift -// MEGABOX -// -// Created by 고석현 on 9/17/25. -// - -import SwiftUI - -struct SplashView: View { - var body: some View { - ZStack { - - Color.white - .ignoresSafeArea() - - - Image("megaboxLogo1") - - .resizable() - .aspectRatio(contentMode: .fill) - .frame(width: 249, height: 84) - .clipped() - } - } -} - -#Preview { - SplashView() -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/TabBarView.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Views/TabBarView.swift deleted file mode 100644 index 31f970b..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/TabBarView.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// TabBarView.swift -// MEGABOX -// -// Created by 고석현 on 10/2/25. -// - -import SwiftUI - -struct TabBarView: View { - @Environment(NavigationRouter.self) var router - @EnvironmentObject var viewModel: MovieViewModel - var body: some View { - ZStack { - TabView { - //홈뷰 - Tab("홈", systemImage: "house.fill") { - HomeView() - } - //예매뷰 - Tab("바로 예매", systemImage: "play.laptopcomputer") { - ReservationView() - } - //모바일 오더 뷰 - Tab("모바일 오더", systemImage: "popcorn") { - MobileOrderView() - - } - //마이페이지 뷰 - Tab("마이페이지", systemImage: "person") { - MemberInfoView() - } - } - .tint(.blue) - - } - - } -} - -#Preview { - TabBarView() - .environment(NavigationRouter()) - .environmentObject(MovieViewModel()) -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/TestView.swift b/gogo/MEGABOX/MEGABOX/MEGABOX/Views/TestView.swift deleted file mode 100644 index 17fe3a7..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOX/Views/TestView.swift +++ /dev/null @@ -1,119 +0,0 @@ -// -// TestView.swift -// MEGABOX -// -// Created by 고석현 on 10/6/25. -// - -import SwiftUI - -// MARK: - Enum 정의 -enum Tabs: Hashable { - case home - case search - case profile - case settings -} - -// MARK: - 메인 View -struct GlassTabTestView: View { - @State private var selectedTab: Tabs = .home - - var body: some View { - ZStack { - // 배경 - LinearGradient(colors: [.black, .gray.opacity(0.6)], startPoint: .top, endPoint: .bottom) - .ignoresSafeArea() - - // 탭 컨텐츠 - TabView(selection: $selectedTab) { - - // 홈 탭 - HomeTestView() - .tag(Tabs.home) - .tabItem { - Label("Home", systemImage: "house.fill") - } - - // 검색 탭 - SearchTestView() - .tag(Tabs.search) - .tabItem { - Label("Search", systemImage: "magnifyingglass") - } - - // 프로필 탭 - ProfileTestView() - .tag(Tabs.profile) - .tabItem { - Label("Profile", systemImage: "person.fill") - } - - // 설정 탭 - SettingsTestView() - .tag(Tabs.settings) - .tabItem { - Label("Settings", systemImage: "gear") - } - } - .tint(.blue) - - // iOS 18 이상: Liquid Glass - - } - } -} - -// MARK: - 각 탭별 테스트 화면 -struct HomeTestView: View { - var body: some View { - VStack { - Image(systemName: "house.fill") - .font(.system(size: 50)) - Text("Home Tab") - .font(.title2) - } - .foregroundColor(.white) - } -} - -struct SearchTestView: View { - var body: some View { - VStack { - Image(systemName: "magnifyingglass") - .font(.system(size: 50)) - Text("Search Tab") - .font(.title2) - } - .foregroundColor(.white) - } -} - -struct ProfileTestView: View { - var body: some View { - VStack { - Image(systemName: "person.fill") - .font(.system(size: 50)) - Text("Profile Tab") - .font(.title2) - } - .foregroundColor(.white) - } -} - -struct SettingsTestView: View { - var body: some View { - VStack { - Image(systemName: "gear") - .font(.system(size: 50)) - Text("Settings Tab") - .font(.title2) - } - .foregroundColor(.white) - } -} - -// MARK: - Preview -#Preview { - GlassTabTestView() -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOXTests/MEGABOXTests.swift b/gogo/MEGABOX/MEGABOX/MEGABOXTests/MEGABOXTests.swift deleted file mode 100644 index 5399193..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOXTests/MEGABOXTests.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// MEGABOXTests.swift -// MEGABOXTests -// -// Created by 고석현 on 9/17/25. -// - -import Testing - -struct MEGABOXTests { - - @Test func example() async throws { - // Write your test here and use APIs like `#expect(...)` to check expected conditions. - } - -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOXUITests/MEGABOXUITests.swift b/gogo/MEGABOX/MEGABOX/MEGABOXUITests/MEGABOXUITests.swift deleted file mode 100644 index 1d4b070..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOXUITests/MEGABOXUITests.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// MEGABOXUITests.swift -// MEGABOXUITests -// -// Created by 고석현 on 9/17/25. -// - -import XCTest - -final class MEGABOXUITests: XCTestCase { - - override func setUpWithError() throws { - // Put setup code here. This method is called before the invocation of each test method in the class. - - // In UI tests it is usually best to stop immediately when a failure occurs. - continueAfterFailure = false - - // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. - } - - override func tearDownWithError() throws { - // Put teardown code here. This method is called after the invocation of each test method in the class. - } - - @MainActor - func testExample() throws { - // UI tests must launch the application that they test. - let app = XCUIApplication() - app.launch() - - // Use XCTAssert and related functions to verify your tests produce the correct results. - } - - @MainActor - func testLaunchPerformance() throws { - // This measures how long it takes to launch your application. - measure(metrics: [XCTApplicationLaunchMetric()]) { - XCUIApplication().launch() - } - } -} diff --git a/gogo/MEGABOX/MEGABOX/MEGABOXUITests/MEGABOXUITestsLaunchTests.swift b/gogo/MEGABOX/MEGABOX/MEGABOXUITests/MEGABOXUITestsLaunchTests.swift deleted file mode 100644 index 2633d77..0000000 --- a/gogo/MEGABOX/MEGABOX/MEGABOXUITests/MEGABOXUITestsLaunchTests.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// MEGABOXUITestsLaunchTests.swift -// MEGABOXUITests -// -// Created by 고석현 on 9/17/25. -// - -import XCTest - -final class MEGABOXUITestsLaunchTests: XCTestCase { - - override class var runsForEachTargetApplicationUIConfiguration: Bool { - true - } - - override func setUpWithError() throws { - continueAfterFailure = false - } - - @MainActor - func testLaunch() throws { - let app = XCUIApplication() - app.launch() - - // Insert steps here to perform after app launch but before taking a screenshot, - // such as logging into a test account or navigating somewhere in the app - - let attachment = XCTAttachment(screenshot: app.screenshot()) - attachment.name = "Launch Screen" - attachment.lifetime = .keepAlways - add(attachment) - } -} diff --git a/gogo/week0/week0_practice.playground/Contents.swift b/gogo/week0/week0_practice.playground/Contents.swift deleted file mode 100644 index 48bd1f1..0000000 --- a/gogo/week0/week0_practice.playground/Contents.swift +++ /dev/null @@ -1,4 +0,0 @@ -import UIKit - -var greeting = "UMC 9기 고석현\n화이팅!" -print(greeting) diff --git a/gogo/week0/week0_practice.playground/contents.xcplayground b/gogo/week0/week0_practice.playground/contents.xcplayground deleted file mode 100644 index 7f43ce8..0000000 --- a/gogo/week0/week0_practice.playground/contents.xcplayground +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/gogo/week0/week0_practice.playground/playground.xcworkspace/contents.xcworkspacedata b/gogo/week0/week0_practice.playground/playground.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index ca3329e..0000000 --- a/gogo/week0/week0_practice.playground/playground.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git "a/gogo/week0/\354\227\260\354\212\265~~.playground/Contents.swift" "b/gogo/week0/\354\227\260\354\212\265~~.playground/Contents.swift" deleted file mode 100644 index 507a27a..0000000 --- "a/gogo/week0/\354\227\260\354\212\265~~.playground/Contents.swift" +++ /dev/null @@ -1,3 +0,0 @@ -import UIKit - -var greeting = "문법 연습 메모" diff --git "a/gogo/week0/\354\227\260\354\212\265~~.playground/contents.xcplayground" "b/gogo/week0/\354\227\260\354\212\265~~.playground/contents.xcplayground" deleted file mode 100644 index 7f43ce8..0000000 --- "a/gogo/week0/\354\227\260\354\212\265~~.playground/contents.xcplayground" +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git "a/gogo/week0/\354\227\260\354\212\265~~.playground/playground.xcworkspace/contents.xcworkspacedata" "b/gogo/week0/\354\227\260\354\212\265~~.playground/playground.xcworkspace/contents.xcworkspacedata" deleted file mode 100644 index ca3329e..0000000 --- "a/gogo/week0/\354\227\260\354\212\265~~.playground/playground.xcworkspace/contents.xcworkspacedata" +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/gogo/week1/week1_grammer.playground/Contents.swift b/gogo/week1/week1_grammer.playground/Contents.swift deleted file mode 100644 index 2e97b07..0000000 --- a/gogo/week1/week1_grammer.playground/Contents.swift +++ /dev/null @@ -1,22 +0,0 @@ -import SwiftUI - -// MARK: - 1번 문항 -let name: String = "UMC" -var age: Int = 10 -var message = "이름: \(name)\n나이: \(age)" -print(message) - -//MARK: -2번 문항 - -let numA: Int = 10 -let numB: Double = 10.2 - -let sum = numA + Int(numB) -print("결과:\(sum)") - -//MARK: -3번 문항 - -let myname: String = "고석현" -let myage: Int = 24 -print("이름:\(myname), 나이:\(myage)") - diff --git a/gogo/week1/week1_grammer.playground/contents.xcplayground b/gogo/week1/week1_grammer.playground/contents.xcplayground deleted file mode 100644 index 7f43ce8..0000000 --- a/gogo/week1/week1_grammer.playground/contents.xcplayground +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/gogo/week1/week1_grammer.playground/playground.xcworkspace/contents.xcworkspacedata b/gogo/week1/week1_grammer.playground/playground.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index ca3329e..0000000 --- a/gogo/week1/week1_grammer.playground/playground.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/gogo/week1/week1_practice/week1-practice-Info.plist b/gogo/week1/week1_practice/week1-practice-Info.plist deleted file mode 100644 index cf8c929..0000000 --- a/gogo/week1/week1_practice/week1-practice-Info.plist +++ /dev/null @@ -1,18 +0,0 @@ - - - - - UIAppFonts - - Pretendard-Black.otf - Pretendard-Bold.otf - Pretendard-ExtraBold.otf - Pretendard-ExtraLight.otf - Pretendard-Light.otf - Pretendard-Medium.otf - Pretendard-Regular.otf - Pretendard-SemiBold.otf - Pretendard-Thin.otf - - - diff --git a/gogo/week1/week1_practice/week1_practice.xcodeproj/project.pbxproj b/gogo/week1/week1_practice/week1_practice.xcodeproj/project.pbxproj deleted file mode 100644 index d341f28..0000000 --- a/gogo/week1/week1_practice/week1_practice.xcodeproj/project.pbxproj +++ /dev/null @@ -1,580 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXContainerItemProxy section */ - D7276A9F2E7A551A00C6DAAF /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D7276A882E7A551700C6DAAF /* Project object */; - proxyType = 1; - remoteGlobalIDString = D7276A8F2E7A551700C6DAAF; - remoteInfo = week1_practice; - }; - D7276AA92E7A551A00C6DAAF /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D7276A882E7A551700C6DAAF /* Project object */; - proxyType = 1; - remoteGlobalIDString = D7276A8F2E7A551700C6DAAF; - remoteInfo = week1_practice; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - D7276A902E7A551700C6DAAF /* week1_practice.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = week1_practice.app; sourceTree = BUILT_PRODUCTS_DIR; }; - D7276A9E2E7A551A00C6DAAF /* week1_practiceTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = week1_practiceTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - D7276AA82E7A551A00C6DAAF /* week1_practiceUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = week1_practiceUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - D7276A922E7A551700C6DAAF /* week1_practice */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = week1_practice; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - D7276A8D2E7A551700C6DAAF /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D7276A9B2E7A551A00C6DAAF /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D7276AA52E7A551A00C6DAAF /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - D7276A872E7A551700C6DAAF = { - isa = PBXGroup; - children = ( - D7276A922E7A551700C6DAAF /* week1_practice */, - D7276A912E7A551700C6DAAF /* Products */, - ); - sourceTree = ""; - }; - D7276A912E7A551700C6DAAF /* Products */ = { - isa = PBXGroup; - children = ( - D7276A902E7A551700C6DAAF /* week1_practice.app */, - D7276A9E2E7A551A00C6DAAF /* week1_practiceTests.xctest */, - D7276AA82E7A551A00C6DAAF /* week1_practiceUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - D7276A8F2E7A551700C6DAAF /* week1_practice */ = { - isa = PBXNativeTarget; - buildConfigurationList = D7276AB22E7A551A00C6DAAF /* Build configuration list for PBXNativeTarget "week1_practice" */; - buildPhases = ( - D7276A8C2E7A551700C6DAAF /* Sources */, - D7276A8D2E7A551700C6DAAF /* Frameworks */, - D7276A8E2E7A551700C6DAAF /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - D7276A922E7A551700C6DAAF /* week1_practice */, - ); - name = week1_practice; - packageProductDependencies = ( - ); - productName = week1_practice; - productReference = D7276A902E7A551700C6DAAF /* week1_practice.app */; - productType = "com.apple.product-type.application"; - }; - D7276A9D2E7A551A00C6DAAF /* week1_practiceTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = D7276AB52E7A551A00C6DAAF /* Build configuration list for PBXNativeTarget "week1_practiceTests" */; - buildPhases = ( - D7276A9A2E7A551A00C6DAAF /* Sources */, - D7276A9B2E7A551A00C6DAAF /* Frameworks */, - D7276A9C2E7A551A00C6DAAF /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - D7276AA02E7A551A00C6DAAF /* PBXTargetDependency */, - ); - name = week1_practiceTests; - packageProductDependencies = ( - ); - productName = week1_practiceTests; - productReference = D7276A9E2E7A551A00C6DAAF /* week1_practiceTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - D7276AA72E7A551A00C6DAAF /* week1_practiceUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = D7276AB82E7A551A00C6DAAF /* Build configuration list for PBXNativeTarget "week1_practiceUITests" */; - buildPhases = ( - D7276AA42E7A551A00C6DAAF /* Sources */, - D7276AA52E7A551A00C6DAAF /* Frameworks */, - D7276AA62E7A551A00C6DAAF /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - D7276AAA2E7A551A00C6DAAF /* PBXTargetDependency */, - ); - name = week1_practiceUITests; - packageProductDependencies = ( - ); - productName = week1_practiceUITests; - productReference = D7276AA82E7A551A00C6DAAF /* week1_practiceUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - D7276A882E7A551700C6DAAF /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1640; - LastUpgradeCheck = 1640; - TargetAttributes = { - D7276A8F2E7A551700C6DAAF = { - CreatedOnToolsVersion = 16.4; - }; - D7276A9D2E7A551A00C6DAAF = { - CreatedOnToolsVersion = 16.4; - TestTargetID = D7276A8F2E7A551700C6DAAF; - }; - D7276AA72E7A551A00C6DAAF = { - CreatedOnToolsVersion = 16.4; - TestTargetID = D7276A8F2E7A551700C6DAAF; - }; - }; - }; - buildConfigurationList = D7276A8B2E7A551700C6DAAF /* Build configuration list for PBXProject "week1_practice" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = D7276A872E7A551700C6DAAF; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - productRefGroup = D7276A912E7A551700C6DAAF /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - D7276A8F2E7A551700C6DAAF /* week1_practice */, - D7276A9D2E7A551A00C6DAAF /* week1_practiceTests */, - D7276AA72E7A551A00C6DAAF /* week1_practiceUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - D7276A8E2E7A551700C6DAAF /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D7276A9C2E7A551A00C6DAAF /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D7276AA62E7A551A00C6DAAF /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - D7276A8C2E7A551700C6DAAF /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D7276A9A2E7A551A00C6DAAF /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D7276AA42E7A551A00C6DAAF /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - D7276AA02E7A551A00C6DAAF /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = D7276A8F2E7A551700C6DAAF /* week1_practice */; - targetProxy = D7276A9F2E7A551A00C6DAAF /* PBXContainerItemProxy */; - }; - D7276AAA2E7A551A00C6DAAF /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = D7276A8F2E7A551700C6DAAF /* week1_practice */; - targetProxy = D7276AA92E7A551A00C6DAAF /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - D7276AB02E7A551A00C6DAAF /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = KX93JF4Y2Z; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - D7276AB12E7A551A00C6DAAF /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = KX93JF4Y2Z; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SWIFT_COMPILATION_MODE = wholemodule; - }; - name = Release; - }; - D7276AB32E7A551A00C6DAAF /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_ENTITLEMENTS = week1_practice/week1_practice.entitlements; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = KX93JF4Y2Z; - ENABLE_HARDENED_RUNTIME = YES; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "week1-practice-Info.plist"; - "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; - "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; - "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; - "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; - "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; - "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; - "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; - "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 15.5; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "Koh.week1-practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - REGISTER_APP_GROUPS = YES; - SDKROOT = auto; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,7"; - XROS_DEPLOYMENT_TARGET = 2.5; - }; - name = Debug; - }; - D7276AB42E7A551A00C6DAAF /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_ENTITLEMENTS = week1_practice/week1_practice.entitlements; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = KX93JF4Y2Z; - ENABLE_HARDENED_RUNTIME = YES; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "week1-practice-Info.plist"; - "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; - "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; - "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; - "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; - "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; - "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; - "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; - "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 15.5; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "Koh.week1-practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - REGISTER_APP_GROUPS = YES; - SDKROOT = auto; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,7"; - XROS_DEPLOYMENT_TARGET = 2.5; - }; - name = Release; - }; - D7276AB62E7A551A00C6DAAF /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = KX93JF4Y2Z; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - MACOSX_DEPLOYMENT_TARGET = 15.5; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "Koh.week1-practiceTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = auto; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,7"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/week1_practice.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/week1_practice"; - XROS_DEPLOYMENT_TARGET = 2.5; - }; - name = Debug; - }; - D7276AB72E7A551A00C6DAAF /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = KX93JF4Y2Z; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - MACOSX_DEPLOYMENT_TARGET = 15.5; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "Koh.week1-practiceTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = auto; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,7"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/week1_practice.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/week1_practice"; - XROS_DEPLOYMENT_TARGET = 2.5; - }; - name = Release; - }; - D7276AB92E7A551A00C6DAAF /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = KX93JF4Y2Z; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - MACOSX_DEPLOYMENT_TARGET = 15.5; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "Koh.week1-practiceUITests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = auto; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,7"; - TEST_TARGET_NAME = week1_practice; - XROS_DEPLOYMENT_TARGET = 2.5; - }; - name = Debug; - }; - D7276ABA2E7A551A00C6DAAF /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = KX93JF4Y2Z; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - MACOSX_DEPLOYMENT_TARGET = 15.5; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "Koh.week1-practiceUITests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = auto; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,7"; - TEST_TARGET_NAME = week1_practice; - XROS_DEPLOYMENT_TARGET = 2.5; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - D7276A8B2E7A551700C6DAAF /* Build configuration list for PBXProject "week1_practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D7276AB02E7A551A00C6DAAF /* Debug */, - D7276AB12E7A551A00C6DAAF /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D7276AB22E7A551A00C6DAAF /* Build configuration list for PBXNativeTarget "week1_practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D7276AB32E7A551A00C6DAAF /* Debug */, - D7276AB42E7A551A00C6DAAF /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D7276AB52E7A551A00C6DAAF /* Build configuration list for PBXNativeTarget "week1_practiceTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D7276AB62E7A551A00C6DAAF /* Debug */, - D7276AB72E7A551A00C6DAAF /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D7276AB82E7A551A00C6DAAF /* Build configuration list for PBXNativeTarget "week1_practiceUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D7276AB92E7A551A00C6DAAF /* Debug */, - D7276ABA2E7A551A00C6DAAF /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = D7276A882E7A551700C6DAAF /* Project object */; -} diff --git a/gogo/week1/week1_practice/week1_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/gogo/week1/week1_practice/week1_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/gogo/week1/week1_practice/week1_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/AccentColor.colorset/Contents.json b/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index ffdfe15..0000000 --- a/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "16x16" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "16x16" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "32x32" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "32x32" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "128x128" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "128x128" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "256x256" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "256x256" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "512x512" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "512x512" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/Contents.json b/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/I.colorset/Contents.json b/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/I.colorset/Contents.json deleted file mode 100644 index 951b907..0000000 --- a/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/I.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFF", - "green" : "0xFF", - "red" : "0xFE" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFF", - "green" : "0xFF", - "red" : "0xFE" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/Image 1.imageset/Contents.json b/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/Image 1.imageset/Contents.json deleted file mode 100644 index a19a549..0000000 --- a/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/Image 1.imageset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/Image.imageset/Contents.json b/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/Image.imageset/Contents.json deleted file mode 100644 index a19a549..0000000 --- a/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/Image.imageset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/background.pdf b/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/background.pdf deleted file mode 100644 index e2c0ebe..0000000 Binary files a/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/background.pdf and /dev/null differ diff --git a/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/backgrounds.imageset/Contents.json b/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/backgrounds.imageset/Contents.json deleted file mode 100644 index a3d984e..0000000 --- a/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/backgrounds.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "backgrounds.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/backgrounds.imageset/backgrounds.pdf b/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/backgrounds.imageset/backgrounds.pdf deleted file mode 100644 index e2c0ebe..0000000 Binary files a/gogo/week1/week1_practice/week1_practice/Resources/Assets.xcassets/backgrounds.imageset/backgrounds.pdf and /dev/null differ diff --git a/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Fonts.swift b/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Fonts.swift deleted file mode 100644 index ec4a203..0000000 --- a/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Fonts.swift +++ /dev/null @@ -1,64 +0,0 @@ -// -// Fonts.swift -// week1_practice -// -// Created by 고석현 on 9/17/25. -// - -import Foundation -import SwiftUI - -extension Font { - enum Pretend { - case extraBold - case bold - case semibold - case medium - case regular - case light - case thin - case black - - - var value: String { - switch self { - case .extraBold: - return "Pretendard-ExtraBold" - case .bold: - return "Pretendard-Bold" - case .semibold: - return "Pretendard-SemiBold" - case .medium: - return "Pretendard-Medium" - case .regular: - return "Pretendard-Regular" - case .light: - return "Pretendard-Light" - case .thin: - return "Pretendard-Thin" - case .black: - return "Pretendard-Black" - } - } - } - - static func pretend(type: Pretend, size: CGFloat) -> Font { - return .custom(type.value, size: size) - } - - static var PretendardBold30: Font { - return .pretend(type: .bold, size: 30) - } - static var PretendardRegualr16: Font { - return .pretend(type: .regular, size: 16) - } - static var PretendardBold24: Font { - return .pretend(type: .bold, size: 24) - } - static var PretendardSemiBold18: Font { - return .pretend(type: .semibold, size: 18) - } - - /* 여기에 더 추가해주세요 */ - -} diff --git a/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Black.otf b/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Black.otf deleted file mode 100644 index a0d849e..0000000 Binary files a/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Black.otf and /dev/null differ diff --git a/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Bold.otf b/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Bold.otf deleted file mode 100644 index 8e5e30a..0000000 Binary files a/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Bold.otf and /dev/null differ diff --git a/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-ExtraBold.otf b/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-ExtraBold.otf deleted file mode 100644 index 388f3ca..0000000 Binary files a/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-ExtraBold.otf and /dev/null differ diff --git a/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-ExtraLight.otf b/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-ExtraLight.otf deleted file mode 100644 index 40c8b69..0000000 Binary files a/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-ExtraLight.otf and /dev/null differ diff --git a/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Light.otf b/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Light.otf deleted file mode 100644 index 228679e..0000000 Binary files a/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Light.otf and /dev/null differ diff --git a/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Medium.otf b/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Medium.otf deleted file mode 100644 index 0575069..0000000 Binary files a/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Medium.otf and /dev/null differ diff --git a/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Regular.otf b/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Regular.otf deleted file mode 100644 index 08bf4cf..0000000 Binary files a/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Regular.otf and /dev/null differ diff --git a/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-SemiBold.otf b/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-SemiBold.otf deleted file mode 100644 index e7e36ab..0000000 Binary files a/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-SemiBold.otf and /dev/null differ diff --git a/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Thin.otf b/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Thin.otf deleted file mode 100644 index 77e792d..0000000 Binary files a/gogo/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Thin.otf and /dev/null differ diff --git a/gogo/week1/week1_practice/week1_practice/TicketView.swift b/gogo/week1/week1_practice/week1_practice/TicketView.swift deleted file mode 100644 index 2a1e347..0000000 --- a/gogo/week1/week1_practice/week1_practice/TicketView.swift +++ /dev/null @@ -1,67 +0,0 @@ -// -// TicketView.swift -// week1_practice -// -// Created by 고석현 on 9/17/25. -// - -import SwiftUI - -struct TicketView: View { - var body: some View { - ZStack { - Image(.backgrounds) - - VStack { - - Spacer().frame(height: 111) - - mainTitleGroup - - Spacer().frame(height: 134) - - mainBottomGroup - } - } - .padding() - } - - /// 상단 Title VStack - private var mainTitleGroup: some View { - VStack { - Group { - Text("마이펫의 이중생활2") - .font(.PretendardBold30) - .shadow(color: .black.opacity(0.25), radius: 2, x: 0, y: 4) - Text("본인 + 동반 1인") - .font(.PretendardRegualr16) - Text("30,100원") - .font(.PretendardBold24) - } - .foregroundStyle(Color.white) - } - .frame(height: 84) - } - - /// 하단 VStack - private var mainBottomGroup: some View { - Button(action: { - print("Hello") - }, label: { - VStack { - Image(systemName: "chevron.up") - .resizable() - .frame(width: 18, height: 12) - .foregroundStyle(Color.white) - Text("예매하기") - .font(.PretendardSemiBold18) - .foregroundStyle(Color.white) - } - .frame(width: 63, height: 40) - }) - } -} - -#Preview { - TicketView() -} diff --git a/gogo/week1/week1_practice/week1_practice/week1_practice.entitlements b/gogo/week1/week1_practice/week1_practice/week1_practice.entitlements deleted file mode 100644 index f2ef3ae..0000000 --- a/gogo/week1/week1_practice/week1_practice/week1_practice.entitlements +++ /dev/null @@ -1,10 +0,0 @@ - - - - - com.apple.security.app-sandbox - - com.apple.security.files.user-selected.read-only - - - diff --git a/gogo/week1/week1_practice/week1_practice/week1_practiceApp.swift b/gogo/week1/week1_practice/week1_practice/week1_practiceApp.swift deleted file mode 100644 index eea30bf..0000000 --- a/gogo/week1/week1_practice/week1_practice/week1_practiceApp.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// week1_practiceApp.swift -// week1_practice -// -// Created by 고석현 on 9/17/25. -// - -import SwiftUI - -@main -struct week1_practiceApp: App { - var body: some Scene { - WindowGroup { - TicketView() - } - } -} diff --git a/gogo/week2/week2_grammer.playground/Contents.swift b/gogo/week2/week2_grammer.playground/Contents.swift deleted file mode 100644 index 0209743..0000000 --- a/gogo/week2/week2_grammer.playground/Contents.swift +++ /dev/null @@ -1,99 +0,0 @@ - -import Foundation - -// 1. 단항 연산자 -var x = 5 -x += 1 -print(x) - -// 2. 이항 연산자 -let a = 10 -let b = 20 -let sum = a + b -print(sum) - -// 3. 삼항 연산자 -let score = 60 -let result = score >= 60 ? "합격" : "불합격" -print(result) - -// 4. 논리 연산자 -let isMember = true -let points = 120 -if isMember && points >= 100 { - print("할인 가능") -} else { - print("할인 불가능") -} - -// 5. 범위 연산자 -let numbers = 1...5 -for number in numbers { - if number == numbers.last { // 마지막 원소 확인 - print(number) - } else { - print("\(number), ", terminator: "") - } -} - - -// 2-1. - -let temperature = 25 - -if temperature >= 30 { - print("덥다") -} else if temperature >= 10 { - print("적당하다") -} else { - print("춥다") -} - - -// 2-2. -let day = 6 - -switch day { -case 1...5: - print("주중") -case 6, 7: - print("주말") -default: - print("x") -} - - -//3-1. -let fruits = ["Apple", "Banana", "Cherry"] - -for fruit in fruits { - print(fruit) -} - -//3-2. -var count = 0 - -while count <= 5 { - print("Count: \(count)") - count += 1 -} - - -//4-1. - -var age: Int? = nil // 옵셔널 정수형 변수 선언 및 nil 할당 - -age = 25 // 값 할당 - -if let safeAge = age { // 안전하게 언래핑 - print("나이는 \(safeAge) 입니다.") -} else { - print("Age 값이 없습니다.") -} - -//4-2. -var score2: Double? = nil // 옵셔널 Double 변수 선언 및 nil 할당 - -score2 = 78.5 // 값 할당 - -print("점수는 \(score2!) 입니다.") // 강제 언래핑 후 출력 diff --git a/gogo/week2/week2_grammer.playground/contents.xcplayground b/gogo/week2/week2_grammer.playground/contents.xcplayground deleted file mode 100644 index 7f43ce8..0000000 --- a/gogo/week2/week2_grammer.playground/contents.xcplayground +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/gogo/week2/week2_grammer.playground/playground.xcworkspace/contents.xcworkspacedata b/gogo/week2/week2_grammer.playground/playground.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index ca3329e..0000000 --- a/gogo/week2/week2_grammer.playground/playground.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/gogo/week2/week2_practice/MovieApp/MovieApp.xcodeproj/project.pbxproj b/gogo/week2/week2_practice/MovieApp/MovieApp.xcodeproj/project.pbxproj deleted file mode 100644 index 1b29115..0000000 --- a/gogo/week2/week2_practice/MovieApp/MovieApp.xcodeproj/project.pbxproj +++ /dev/null @@ -1,329 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXFileReference section */ - 611890E82E7FE13200243C23 /* MovieApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MovieApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 611890EA2E7FE13200243C23 /* MovieApp */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = MovieApp; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 611890E52E7FE13200243C23 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 611890DF2E7FE13200243C23 = { - isa = PBXGroup; - children = ( - 611890EA2E7FE13200243C23 /* MovieApp */, - 611890E92E7FE13200243C23 /* Products */, - ); - sourceTree = ""; - }; - 611890E92E7FE13200243C23 /* Products */ = { - isa = PBXGroup; - children = ( - 611890E82E7FE13200243C23 /* MovieApp.app */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 611890E72E7FE13200243C23 /* MovieApp */ = { - isa = PBXNativeTarget; - buildConfigurationList = 611890F32E7FE13500243C23 /* Build configuration list for PBXNativeTarget "MovieApp" */; - buildPhases = ( - 611890E42E7FE13200243C23 /* Sources */, - 611890E52E7FE13200243C23 /* Frameworks */, - 611890E62E7FE13200243C23 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 611890EA2E7FE13200243C23 /* MovieApp */, - ); - name = MovieApp; - packageProductDependencies = ( - ); - productName = MovieApp; - productReference = 611890E82E7FE13200243C23 /* MovieApp.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 611890E02E7FE13200243C23 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1640; - LastUpgradeCheck = 1640; - TargetAttributes = { - 611890E72E7FE13200243C23 = { - CreatedOnToolsVersion = 16.4; - }; - }; - }; - buildConfigurationList = 611890E32E7FE13200243C23 /* Build configuration list for PBXProject "MovieApp" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 611890DF2E7FE13200243C23; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - productRefGroup = 611890E92E7FE13200243C23 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 611890E72E7FE13200243C23 /* MovieApp */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 611890E62E7FE13200243C23 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 611890E42E7FE13200243C23 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 611890F12E7FE13500243C23 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = XRY42MG75P; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 611890F22E7FE13500243C23 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = XRY42MG75P; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 611890F42E7FE13500243C23 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = XRY42MG75P; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.wizzy.MovieApp; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 611890F52E7FE13500243C23 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = XRY42MG75P; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.wizzy.MovieApp; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 611890E32E7FE13200243C23 /* Build configuration list for PBXProject "MovieApp" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 611890F12E7FE13500243C23 /* Debug */, - 611890F22E7FE13500243C23 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 611890F32E7FE13500243C23 /* Build configuration list for PBXNativeTarget "MovieApp" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 611890F42E7FE13500243C23 /* Debug */, - 611890F52E7FE13500243C23 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 611890E02E7FE13200243C23 /* Project object */; -} diff --git a/gogo/week2/week2_practice/MovieApp/MovieApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/gogo/week2/week2_practice/MovieApp/MovieApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/gogo/week2/week2_practice/MovieApp/MovieApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/AccentColor.colorset/Contents.json b/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/Contents.json b/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/brutalis.imageset/Contents.json b/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/brutalis.imageset/Contents.json deleted file mode 100644 index 4ff6933..0000000 --- a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/brutalis.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=브루탈리스트.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/brutalis.imageset/Property 1=\353\270\214\353\243\250\355\203\210\353\246\254\354\212\244\355\212\270.pdf" "b/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/brutalis.imageset/Property 1=\353\270\214\353\243\250\355\203\210\353\246\254\354\212\244\355\212\270.pdf" deleted file mode 100644 index 0280db4..0000000 Binary files "a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/brutalis.imageset/Property 1=\353\270\214\353\243\250\355\203\210\353\246\254\354\212\244\355\212\270.pdf" and /dev/null differ diff --git a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/conclave.imageset/Contents.json b/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/conclave.imageset/Contents.json deleted file mode 100644 index 0dc7ac7..0000000 --- a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/conclave.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=콘클라베.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/conclave.imageset/Property 1=\354\275\230\355\201\264\353\235\274\353\262\240.pdf" "b/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/conclave.imageset/Property 1=\354\275\230\355\201\264\353\235\274\353\262\240.pdf" deleted file mode 100644 index 1cd285b..0000000 Binary files "a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/conclave.imageset/Property 1=\354\275\230\355\201\264\353\235\274\353\262\240.pdf" and /dev/null differ diff --git a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/mickey.imageset/Contents.json b/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/mickey.imageset/Contents.json deleted file mode 100644 index c84096e..0000000 --- a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/mickey.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=미키.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/mickey.imageset/Property 1=\353\257\270\355\202\244.pdf" "b/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/mickey.imageset/Property 1=\353\257\270\355\202\244.pdf" deleted file mode 100644 index f44d3b0..0000000 Binary files "a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/mickey.imageset/Property 1=\353\257\270\355\202\244.pdf" and /dev/null differ diff --git a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/snowWhite.imageset/Contents.json b/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/snowWhite.imageset/Contents.json deleted file mode 100644 index a4d6c2b..0000000 --- a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/snowWhite.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=백설공주.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/snowWhite.imageset/Property 1=\353\260\261\354\204\244\352\263\265\354\243\274.pdf" "b/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/snowWhite.imageset/Property 1=\353\260\261\354\204\244\352\263\265\354\243\274.pdf" deleted file mode 100644 index 80841d9..0000000 Binary files "a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/snowWhite.imageset/Property 1=\353\260\261\354\204\244\352\263\265\354\243\274.pdf" and /dev/null differ diff --git a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/theFall.imageset/Contents.json b/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/theFall.imageset/Contents.json deleted file mode 100644 index 492242a..0000000 --- a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/theFall.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=더폴.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/theFall.imageset/Property 1=\353\215\224\355\217\264.pdf" "b/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/theFall.imageset/Property 1=\353\215\224\355\217\264.pdf" deleted file mode 100644 index 354ea52..0000000 Binary files "a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/theFall.imageset/Property 1=\353\215\224\355\217\264.pdf" and /dev/null differ diff --git a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/toystory.imageset/Contents.json b/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/toystory.imageset/Contents.json deleted file mode 100644 index 198c7d7..0000000 --- a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/toystory.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=토이스토리.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/toystory.imageset/Property 1=\355\206\240\354\235\264\354\212\244\355\206\240\353\246\254.pdf" "b/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/toystory.imageset/Property 1=\355\206\240\354\235\264\354\212\244\355\206\240\353\246\254.pdf" deleted file mode 100644 index 9999f0c..0000000 Binary files "a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/toystory.imageset/Property 1=\355\206\240\354\235\264\354\212\244\355\206\240\353\246\254.pdf" and /dev/null differ diff --git a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/whiplash.imageset/Contents.json b/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/whiplash.imageset/Contents.json deleted file mode 100644 index be343c5..0000000 --- a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/whiplash.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "image 5.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/whiplash.imageset/image 5.pdf b/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/whiplash.imageset/image 5.pdf deleted file mode 100644 index 59d49da..0000000 Binary files a/gogo/week2/week2_practice/MovieApp/MovieApp/Assets.xcassets/whiplash.imageset/image 5.pdf and /dev/null differ diff --git a/gogo/week2/week2_practice/MovieApp/MovieApp/MovieAppApp.swift b/gogo/week2/week2_practice/MovieApp/MovieApp/MovieAppApp.swift deleted file mode 100644 index 33cf560..0000000 --- a/gogo/week2/week2_practice/MovieApp/MovieApp/MovieAppApp.swift +++ /dev/null @@ -1,13 +0,0 @@ - -// - -import SwiftUI - -@main -struct MovieAppApp: App { - var body: some Scene { - WindowGroup { - MovieView() - } - } -} diff --git a/gogo/week2/week2_practice/MovieApp/MovieApp/MovieCard.swift b/gogo/week2/week2_practice/MovieApp/MovieApp/MovieCard.swift deleted file mode 100644 index 6e97d48..0000000 --- a/gogo/week2/week2_practice/MovieApp/MovieApp/MovieCard.swift +++ /dev/null @@ -1,53 +0,0 @@ - - -import SwiftUI - -struct MovieCard: View { - - let movieInfo: MovieModel - - init(movieInfo: MovieModel) { - self.movieInfo = movieInfo - } - - var body: some View { - VStack(spacing: 5) { - movieInfo.movieImage - - Text(movieInfo.movieName) - .font(.system(size: 20, weight: .bold)) - .foregroundStyle(Color.black) - - HStack { - movieLike - - Spacer() - - Text("예매율 \(String(format: "%.1f", movieInfo.movieReserCount))%") - .font(.system(size: 9, weight: .regular)) - .foregroundStyle(Color.black) - } - } - - /* 상위 뷰의 프레임을 꼭 넣어주세요! 피그마에 보시면 fixed로 고정되어 있는게 보이실겁니다.*/ - /* HStack 내부의 Spacer()로 부모 뷰의 사이즈에 영향을 받게됩니다.*/ - .frame(width: 120, height: 216) - } - - /// 하단 영화 좋아요 - private var movieLike: some View { - HStack(spacing: 6) { - Image(systemName: "heart.fill") - .foregroundStyle(Color.red) - .frame(width: 15, height: 14) - - Text("\(movieInfo.movieLike)") - .font(.system(size: 9, weight: .regular)) - .foregroundStyle(Color.black) - } - } -} - -#Preview { - MovieCard(movieInfo: .init(movieImage: .init(.mickey), movieName: "미키", movieLike: 972, movieReserCount: 30.8)) -} diff --git a/gogo/week2/week2_practice/MovieApp/MovieApp/MovieModel.swift b/gogo/week2/week2_practice/MovieApp/MovieApp/MovieModel.swift deleted file mode 100644 index 275fbcc..0000000 --- a/gogo/week2/week2_practice/MovieApp/MovieApp/MovieModel.swift +++ /dev/null @@ -1,11 +0,0 @@ -w - -import Foundation -import SwiftUI - -struct MovieModel { - let movieImage: Image /* 영화 포스터 이미지 */ - let movieName: String /* 영화 이름 */ - let movieLike: Int /* 영화 좋아요 */ - let movieReserCount: Double /* 영화 예매율 */ -} diff --git a/gogo/week2/week2_practice/MovieApp/MovieApp/MovieView.swift b/gogo/week2/week2_practice/MovieApp/MovieApp/MovieView.swift deleted file mode 100644 index ffba471..0000000 --- a/gogo/week2/week2_practice/MovieApp/MovieApp/MovieView.swift +++ /dev/null @@ -1,99 +0,0 @@ - - -import SwiftUI -import Observation - -struct MovieView: View { - - @AppStorage("movieName") private var movieName: String = "" - private var viewModel: MovieViewModel = .init() - - - var body: some View { - VStack(spacing: 56) { - MovieCard(movieInfo: viewModel.movieModel[viewModel.currentIndex]) - - leftRightChange - - settingMovie - - printAppStorageValue - } - .padding() - } - - /// 왼쪽 오른쪽 change 버튼 - private var leftRightChange: some View { - HStack { - Group { - makeChevron(name: "chevron.left", action: viewModel.previousMovie) - - Spacer() - - Text("영화 바꾸기") - .font(.system(size: 20, weight: .regular)) - - Spacer() - - makeChevron(name: "chevron.right", action: viewModel.nextMovie) - } - .foregroundStyle(Color.black) - } - .frame(width: 256) - .padding(.vertical, 17) /* 이건 뭘 의미하는 걸까요? */ - .padding(.horizontal, 22) /* 이건 뭘 의미하는 걸까요? */ - } - - /// 화살표 재사용하기 위한 하위 뷰 - /// - Parameters: - /// - name: 이미지 이름 설정 - /// - action: 버튼이 가지는 액션 기능 넣기, @escpaing은 추후 문법을 통해 배우게 될 겁니다! - /// - Returns: some View 타입 반환 - private func makeChevron(name: String, action: @escaping () -> Void) -> some View { - Button(action: { - action() - }, label: { - Image(systemName: name) - .resizable() - .frame(width: 17.47, height: 29.73) - }) - } - - /// 대표 영화 설정 - private var settingMovie: some View { - Button(action: { - /* 현재 인덱스틔 영화 이름 AppStorage에 저장 */ - self.movieName = viewModel.movieModel[viewModel.currentIndex].movieName - }, label: { - Text("대표 영화로 설정") - .font(.system(size: 20, weight: .regular)) - .foregroundStyle(Color.black) - .padding(.top, 21) - .padding(.bottom, 20) - .padding(.leading, 53) - .padding(.trailing, 52) - .overlay(content: { - RoundedRectangle(cornerRadius: 20) - .fill(Color.clear) - .stroke(Color.black, style: .init(lineWidth: 1)) - }) - }) - } - - /// 하단 AppStorage에 저장된 영화 확인 텍스트 - private var printAppStorageValue: some View { - VStack(spacing: 17) { - Text("@AppStorage에 저장된 영화") - .font(.system(size: 30, weight: .regular)) - .foregroundStyle(Color.black) - - Text("현재 저장된 영화 : \(movieName)") - .font(.system(size: 20, weight: .regular)) - .foregroundStyle(Color.red) - } - } -} - -#Preview { - MovieView() -} diff --git a/gogo/week2/week2_practice/MovieApp/MovieApp/MovieViewModel.swift b/gogo/week2/week2_practice/MovieApp/MovieApp/MovieViewModel.swift deleted file mode 100644 index a570cef..0000000 --- a/gogo/week2/week2_practice/MovieApp/MovieApp/MovieViewModel.swift +++ /dev/null @@ -1,29 +0,0 @@ - - -import Foundation -import SwiftUI - -@Observable -class MovieViewModel { - let movieModel: [MovieModel] = [ - .init(movieImage: .init(.mickey), movieName: "미키", movieLike: 972, movieReserCount: 30.8), - .init(movieImage: .init(.toystory), movieName: "토이스토리", movieLike: 999, movieReserCount: 99.8), - .init(movieImage: .init(.brutalis), movieName: "브루탈리스트", movieLike: 302, movieReserCount: 24.8), - .init(movieImage: .init(.snowWhite), movieName: "백설공주", movieLike: 302, movieReserCount: 3.8), - .init(movieImage: .init(.whiplash), movieName: "위플래시", movieLike: 604, movieReserCount: 62.2), - .init(movieImage: .init(.conclave), movieName: "콘클라베", movieLike: 392, movieReserCount: 43.9), - .init(movieImage: .init(.theFall), movieName: "더폴", movieLike: 30, movieReserCount: 2.1) - ] - - var currentIndex: Int = 0 - - /// 이전 영화로 돌아가기, 단, 첫 번째 영화일 경우 마지막 영화로 전환 - public func previousMovie() { - currentIndex = (currentIndex - 1 + movieModel.count) % movieModel.count - } - - /// 오른쪽 버튼을 눌렀을 때 다음 영화로 이동하는 함수 - public func nextMovie() { - currentIndex = (currentIndex + 1) % movieModel.count - } -} diff --git a/gogo/week3/week3_grammer.playground/playground.xcworkspace/contents.xcworkspacedata b/gogo/week3/week3_grammer.playground/playground.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index ca3329e..0000000 --- a/gogo/week3/week3_grammer.playground/playground.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/gogo/week3/week3_practice/Practice3.xcodeproj/project.pbxproj b/gogo/week3/week3_practice/Practice3.xcodeproj/project.pbxproj deleted file mode 100644 index 70ec975..0000000 --- a/gogo/week3/week3_practice/Practice3.xcodeproj/project.pbxproj +++ /dev/null @@ -1,327 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXFileReference section */ - 6E4787B92D9BD67E00A411A0 /* Practice3.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Practice3.app; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 6E4787BB2D9BD67E00A411A0 /* Practice3 */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = Practice3; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 6E4787B62D9BD67E00A411A0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 6E4787B02D9BD67E00A411A0 = { - isa = PBXGroup; - children = ( - 6E4787BB2D9BD67E00A411A0 /* Practice3 */, - 6E4787BA2D9BD67E00A411A0 /* Products */, - ); - sourceTree = ""; - }; - 6E4787BA2D9BD67E00A411A0 /* Products */ = { - isa = PBXGroup; - children = ( - 6E4787B92D9BD67E00A411A0 /* Practice3.app */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 6E4787B82D9BD67E00A411A0 /* Practice3 */ = { - isa = PBXNativeTarget; - buildConfigurationList = 6E4787C72D9BD67F00A411A0 /* Build configuration list for PBXNativeTarget "Practice3" */; - buildPhases = ( - 6E4787B52D9BD67E00A411A0 /* Sources */, - 6E4787B62D9BD67E00A411A0 /* Frameworks */, - 6E4787B72D9BD67E00A411A0 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 6E4787BB2D9BD67E00A411A0 /* Practice3 */, - ); - name = Practice3; - packageProductDependencies = ( - ); - productName = Practice3; - productReference = 6E4787B92D9BD67E00A411A0 /* Practice3.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 6E4787B12D9BD67E00A411A0 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1620; - LastUpgradeCheck = 1620; - TargetAttributes = { - 6E4787B82D9BD67E00A411A0 = { - CreatedOnToolsVersion = 16.2; - }; - }; - }; - buildConfigurationList = 6E4787B42D9BD67E00A411A0 /* Build configuration list for PBXProject "Practice3" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 6E4787B02D9BD67E00A411A0; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - productRefGroup = 6E4787BA2D9BD67E00A411A0 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 6E4787B82D9BD67E00A411A0 /* Practice3 */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 6E4787B72D9BD67E00A411A0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 6E4787B52D9BD67E00A411A0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 6E4787C52D9BD67F00A411A0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.2; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 6E4787C62D9BD67F00A411A0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.2; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 6E4787C82D9BD67F00A411A0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"Practice3/Preview Content\""; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.testmap.Practice3; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 6E4787C92D9BD67F00A411A0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"Practice3/Preview Content\""; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.testmap.Practice3; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 6E4787B42D9BD67E00A411A0 /* Build configuration list for PBXProject "Practice3" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 6E4787C52D9BD67F00A411A0 /* Debug */, - 6E4787C62D9BD67F00A411A0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 6E4787C72D9BD67F00A411A0 /* Build configuration list for PBXNativeTarget "Practice3" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 6E4787C82D9BD67F00A411A0 /* Debug */, - 6E4787C92D9BD67F00A411A0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 6E4787B12D9BD67E00A411A0 /* Project object */; -} diff --git a/gogo/week3/week3_practice/Practice3.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/gogo/week3/week3_practice/Practice3.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/gogo/week3/week3_practice/Practice3.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/gogo/week3/week3_practice/Practice3/Assets.xcassets/AccentColor.colorset/Contents.json b/gogo/week3/week3_practice/Practice3/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/gogo/week3/week3_practice/Practice3/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week3/week3_practice/Practice3/Assets.xcassets/AppIcon.appiconset/Contents.json b/gogo/week3/week3_practice/Practice3/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/gogo/week3/week3_practice/Practice3/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week3/week3_practice/Practice3/Assets.xcassets/Contents.json b/gogo/week3/week3_practice/Practice3/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gogo/week3/week3_practice/Practice3/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week3/week3_practice/Practice3/Assets.xcassets/appleLogo.imageset/Contents.json b/gogo/week3/week3_practice/Practice3/Assets.xcassets/appleLogo.imageset/Contents.json deleted file mode 100644 index c6f97a0..0000000 --- a/gogo/week3/week3_practice/Practice3/Assets.xcassets/appleLogo.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Vector.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week3/week3_practice/Practice3/Assets.xcassets/appleLogo.imageset/Vector.pdf b/gogo/week3/week3_practice/Practice3/Assets.xcassets/appleLogo.imageset/Vector.pdf deleted file mode 100644 index 78bb2c1..0000000 Binary files a/gogo/week3/week3_practice/Practice3/Assets.xcassets/appleLogo.imageset/Vector.pdf and /dev/null differ diff --git a/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowBlue.colorset/Contents.json b/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowBlue.colorset/Contents.json deleted file mode 100644 index 9382b89..0000000 --- a/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowBlue.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFF", - "green" : "0x00", - "red" : "0x00" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowGreen.colorset/Contents.json b/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowGreen.colorset/Contents.json deleted file mode 100644 index 47bd126..0000000 --- a/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowGreen.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0x80", - "red" : "0x00" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowIndigo.colorset/Contents.json b/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowIndigo.colorset/Contents.json deleted file mode 100644 index ff49512..0000000 --- a/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowIndigo.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x52", - "green" : "0x00", - "red" : "0x4B" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowOrange.colorset/Contents.json b/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowOrange.colorset/Contents.json deleted file mode 100644 index 7db8b95..0000000 --- a/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowOrange.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0xA5", - "red" : "0xFF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowPurple.colorset/Contents.json b/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowPurple.colorset/Contents.json deleted file mode 100644 index cab4787..0000000 --- a/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowPurple.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEE", - "green" : "0x82", - "red" : "0xEE" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowRed.colorset/Contents.json b/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowRed.colorset/Contents.json deleted file mode 100644 index 9d8c5f8..0000000 --- a/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowRed.colorset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0x00", - "red" : "0xFF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "localizable" : true - } -} diff --git a/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowYeloow.colorset/Contents.json b/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowYeloow.colorset/Contents.json deleted file mode 100644 index 8346367..0000000 --- a/gogo/week3/week3_practice/Practice3/Assets.xcassets/rainbowYeloow.colorset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0xFF", - "red" : "0xFF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "localizable" : true - } -} diff --git a/gogo/week3/week3_practice/Practice3/ColorNaivgationView.swift b/gogo/week3/week3_practice/Practice3/ColorNaivgationView.swift deleted file mode 100644 index 5360e4e..0000000 --- a/gogo/week3/week3_practice/Practice3/ColorNaivgationView.swift +++ /dev/null @@ -1,34 +0,0 @@ -import SwiftUI -import Observation - -struct ColorNavigationView: View { - - @Bindable var viewModel: RainbowViewModel - @Environment(\.dismiss) var dismiss - - var body: some View { - VStack(spacing: 70) { - if let selectedRainbowModel = viewModel.selectedRainbowModel { - Text("현재 선택된 색상 \n\(selectedRainbowModel.returnColorName())") - .font(.title) - .foregroundStyle(Color.black) - - Button(action: { - viewModel.appleLogoColor = selectedRainbowModel.returnColor() - dismiss() - }, label: { - Text("사과 색 바꾸기") - .padding(.vertical, 43) - .padding(.horizontal, 36) - .overlay(content: { - RoundedRectangle(cornerRadius: 30) - .fill(Color.clear) - .stroke(Color.black, style: .init(lineWidth: 1)) - }) - }) - } - } - .navigationTitle("색 네비") - } -} - diff --git a/gogo/week3/week3_practice/Practice3/ContentView.swift b/gogo/week3/week3_practice/Practice3/ContentView.swift deleted file mode 100644 index 7c381d0..0000000 --- a/gogo/week3/week3_practice/Practice3/ContentView.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// ContentView.swift -// Practice3 -// - -// - -import SwiftUI - -struct ContentView: View { - var body: some View { - VStack { - Image(systemName: "globe") - .imageScale(.large) - .foregroundStyle(.tint) - Text("Hello, world!") - } - .padding() - } -} - -#Preview { - ContentView() -} diff --git a/gogo/week3/week3_practice/Practice3/Practice3App.swift b/gogo/week3/week3_practice/Practice3/Practice3App.swift deleted file mode 100644 index 185bc62..0000000 --- a/gogo/week3/week3_practice/Practice3/Practice3App.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// Practice3App.swift -// Practice3 -// - -// - -import SwiftUI - -@main -struct Practice3App: App { - var body: some Scene { - WindowGroup { - ContentView() - } - } -} diff --git a/gogo/week3/week3_practice/Practice3/Preview Content/Preview Assets.xcassets/Contents.json b/gogo/week3/week3_practice/Practice3/Preview Content/Preview Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gogo/week3/week3_practice/Practice3/Preview Content/Preview Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week3/week3_practice/Practice3/RainbowColor.swift b/gogo/week3/week3_practice/Practice3/RainbowColor.swift deleted file mode 100644 index a943d38..0000000 --- a/gogo/week3/week3_practice/Practice3/RainbowColor.swift +++ /dev/null @@ -1,54 +0,0 @@ - -import Foundation -import SwiftUI - -enum RainbowModel: CaseIterable { - case red - case orange - case yellow - case green - case blue - case indigo - case purple - - /// case에 해당하는 색을 반환합니다. - /// - Returns: 지정된 색 반환 - func returnColor() -> Color { - switch self { - case .red: - return Color.rainbowRed - case .orange: - return Color.rainbowOrange - case .yellow: - return Color.rainbowYeloow - case .green: - return Color.rainbowGreen - case .blue: - return Color.rainbowBlue - case .indigo: - return Color.rainbowIndigo - case .purple: - return Color.rainbowPurple - } - } - - func returnColorName() -> String { - switch self { - case .red: - return "빨강" - case .orange: - return "주황" - case .yellow: - return "노랑" - case .green: - return "초록" - case .blue: - return "파랑" - case .indigo: - return "남색" - case .purple: - return "보라" - } - } -} - diff --git a/gogo/week3/week3_practice/Practice3/RainbowView.swift b/gogo/week3/week3_practice/Practice3/RainbowView.swift deleted file mode 100644 index 70d4a7c..0000000 --- a/gogo/week3/week3_practice/Practice3/RainbowView.swift +++ /dev/null @@ -1,81 +0,0 @@ -import SwiftUI - -struct RainbowView: View { - - var viewModel: RainbowViewModel = .init() - @State private var navigationTrue: Bool = false - - var body: some View { - NavigationStack { - VStack { - colorCardGroup - - Spacer() - - bottomSelecteColorGroup - } - .safeAreaPadding(EdgeInsets(top: 47, leading: 15, bottom: 43, trailing: 15)) - .navigationDestination(isPresented: $navigationTrue, destination: { - ColorNavigationView(viewModel: viewModel) - }) - } - } - - /// 무지개 일곱가지 색상 - private var colorCardGroup: some View { - LazyVGrid(columns: Array(repeating: GridItem(.flexible(), spacing: 40), count: 3), spacing: 26, content: { - ForEach(RainbowModel.allCases, id: \.self, content: { rainbow in - makeColorCard(rainbow) - .onTapGesture { - viewModel.selectedRainbowModel = rainbow - self.navigationTrue.toggle() - } - }) - }) - } - - /// 반복 생성을 재사용하기 위한 무지개 색상 카드 뷰 - /// - Parameter model: 무지개 색을 담고 있는 모델 - /// - Returns: 색을 표현하는 카드 뷰 반환 - private func makeColorCard(_ model: RainbowModel) -> some View { - VStack(spacing: 6, content: { - Rectangle() - .fill(model.returnColor()) - - Text(model.returnColorName()) - .foregroundStyle(Color.black) - .font(.title) - }) - .frame(maxWidth: .infinity, minHeight: 110) - } - - /// 하단 사과로고 및 선택된 색상 텍스트 그룹 - private var bottomSelecteColorGroup: some View { - VStack(spacing: 70, content: { - Image(.appleLogo) - .renderingMode(.template) - .fixedSize() - .foregroundStyle(viewModel.appleLogoColor ?? Color.black) - - Text("현재 선택된 색상 : \(selectedColorName())") - .font(.title) - .foregroundStyle(Color.black) - }) - } - - /// 옵셔널에 대해 값 처리를 위한 String 반환 함수 - /// - Returns: 옵셔널 값에 따른 두 가지 중 하나 값 반환 - private func selectedColorName() -> String { - if let name = viewModel.selectedRainbowModel { - return name.returnColorName() - } else { - return "아무것도 없음" - } - } - -} - -#Preview { - RainbowView() -} - diff --git a/gogo/week3/week3_practice/Practice3/RainbowViewModel.swift b/gogo/week3/week3_practice/Practice3/RainbowViewModel.swift deleted file mode 100644 index c10ed30..0000000 --- a/gogo/week3/week3_practice/Practice3/RainbowViewModel.swift +++ /dev/null @@ -1,8 +0,0 @@ -import Foundation -import SwiftUI - -@Observable -class RainbowViewModel { - var selectedRainbowModel: RainbowModel? - var appleLogoColor: Color? -} diff --git a/gogo/week4/week4_grammer.playground/Contents.swift b/gogo/week4/week4_grammer.playground/Contents.swift deleted file mode 100644 index 4862145..0000000 --- a/gogo/week4/week4_grammer.playground/Contents.swift +++ /dev/null @@ -1,159 +0,0 @@ -////import SwiftUI -//// -////// 1. "최종 결제 금액: (최종 결제 금액)원"과 같이 출력되도록 작성해주세요! -////func calculateTotalPrice(Price: Int, tip: Int) -> Int { -//// let sum = Price + tip -//// print("최종 결제 금액: \(sum)원") -//// return sum -////} -//// -//// -////// 2. "덥다", "춥다", "적당하다"와 같이 출력되도록 작성해주세요! -////func checkTemperature(temperature: Int) -> String { -//// if temperature > 30 { -//// print ("덥다") -//// } else if temperature < 10 { -//// print ("춥다") -//// } else { -//// print ("적당하다") // 섭씨 10~30도 -//// } -////} -//// -//// -////// 3. "(여행지)에서의 총 여행 예산은 (총 예산)원입니다."와 같이 출력되도록 작성해주세요! -////func priintTravelBudget(destination: String, spendingNights: Int, dayBudget: Int) -> Int { -//// let sum = spendingNights * dayBudget -//// print("\(destination)에서의 총 여행 예산은 \(sum)원입니다.") -//// return sum -////} -//// -//// -////// 4. "오늘 날짜: 2024-09-19"와 같이 오늘 날짜가 "YYYY-MM-DD" 형식으로 출력되도록 작성해주세요! -//// -//// -////import Foundation -////func getCurrentDate() -> String { -//// let date = Date() -//// let formatter = DateFormatter() -//// formatter.dateFormat = "yyyy-MM-dd" -//// print("오늘 날짜: \(formatter.string(from: date))") -//// return formatter.string(from: date) -////} -//// -////getCurrentDate() -// -////// 1. Int 변수를 파라미터로 받는 addValue 클로저를 선언하고 출력해주세요! 값은 임의로 넣어주세요. -////let addValue = {(numb: Int) in -//// var sum : Int = 0 -//// for x in 1...numb { -//// sum += x -//// -//// } -//// print(sum) -//// return sum -////} -//// -////addValue(10) -//// -////// 2. 1번에서 선언한 addValue 클로저를 $를 이용해 경량화 시킨 코드를 아래 넣어주세요! -//// -////let addValue = { -//// var sum = 0 -//// for x in 1...$0 { -//// sum += x -//// } -//// return sum -////} -// -//class BankAccount { -// -//import SwiftUI -// -//class BankAccount { -// var accountNumber : String -// private(set) var balance : Double -// //init 초기화 메소드로 전달 받는 인자가 꼭 클래스의 프로퍼티(기본 속성 변수)일 필요는 없다. -// -// init(accountNumber : String, initialBalance : Double) { -// self.accountNumber = accountNumber -// if initialBalance >= 0 { -// self.balance = initialBalance //객체의 프로퍼티 변수 balance에 저장하겠다 . -// } -// else {self.balance = 0} -//} -// -// func deposit(amount : Double) { -// self.balance += amount -// print("Deposited \(amount). Current Balance: \(balance)") -// } -// func withdraw(amount : Double) { -// if amount > balance { -// print("Insufficient funds.Current Balance: \(balance)") -// -// } -// else { -// self.balance -= amount -// print("Withdrawn \(amount). Current Balance: \(balance)") -// } -// } -//} -// -//} -// -// -// -//struct Car { -///* 요구사항에 맞춰 구현해주세요! */ -// -////struct는 선언된 프로퍼티 변경 불가. 변경시에는 mutating 키워드 사용. -////아래에서 isRunning이 변경계속 되므로 mutating func 로 선언.!! -// -//import SwiftUI -// -//struct Car { -// var make: String -// var model: String -// var year: Int -// var mileage: Double -// var isRunning: Bool -// -// init(make: String, model: String, year: Int, mileage: Double, isRunning: Bool) { -// self.make = make -// self.model = model -// self.year = year -// self.mileage = mileage -// self.isRunning = isRunning -// } -// -// -// mutating func start() { -// if isRunning { -// print("차 이미 시동 중.") -// } else { -// isRunning = true -// print("차 시동 걸림.") -// } -//} -// -// mutating func stop() { -// if isRunning{ -// isRunning = false -// print("차 시동 꺼짐.") -// } else { -// print("차 이미 꺼짐.") -// } -// -// } -// -// mutating func drive(distance : Double) { -// if !isRunning { -// print("이동 불가능. 차 시동 꺼짐.") -// } else { -// mileage += distance -// print("이동거리 \(distance) km. 현재 mileage: \(mileage) km") -// } -// } -// -//} -// -//} diff --git a/gogo/week4/week4_grammer.playground/contents.xcplayground b/gogo/week4/week4_grammer.playground/contents.xcplayground deleted file mode 100644 index 17a8039..0000000 --- a/gogo/week4/week4_grammer.playground/contents.xcplayground +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/gogo/week4/week4_grammer.playground/playground.xcworkspace/contents.xcworkspacedata b/gogo/week4/week4_grammer.playground/playground.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index ca3329e..0000000 --- a/gogo/week4/week4_grammer.playground/playground.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/gogo/week4/week4_practice/week4_practice.xcodeproj/project.pbxproj b/gogo/week4/week4_practice/week4_practice.xcodeproj/project.pbxproj deleted file mode 100644 index 486705d..0000000 --- a/gogo/week4/week4_practice/week4_practice.xcodeproj/project.pbxproj +++ /dev/null @@ -1,350 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXFileReference section */ - D759823E2E96C96D00CC5D17 /* week4_practice.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = week4_practice.app; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - D75982402E96C96D00CC5D17 /* week4_practice */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = week4_practice; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - D759823B2E96C96D00CC5D17 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - D75982352E96C96C00CC5D17 = { - isa = PBXGroup; - children = ( - D75982402E96C96D00CC5D17 /* week4_practice */, - D759823F2E96C96D00CC5D17 /* Products */, - ); - sourceTree = ""; - }; - D759823F2E96C96D00CC5D17 /* Products */ = { - isa = PBXGroup; - children = ( - D759823E2E96C96D00CC5D17 /* week4_practice.app */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - D759823D2E96C96D00CC5D17 /* week4_practice */ = { - isa = PBXNativeTarget; - buildConfigurationList = D75982492E96C96F00CC5D17 /* Build configuration list for PBXNativeTarget "week4_practice" */; - buildPhases = ( - D759823A2E96C96D00CC5D17 /* Sources */, - D759823B2E96C96D00CC5D17 /* Frameworks */, - D759823C2E96C96D00CC5D17 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - D75982402E96C96D00CC5D17 /* week4_practice */, - ); - name = week4_practice; - packageProductDependencies = ( - ); - productName = week4_practice; - productReference = D759823E2E96C96D00CC5D17 /* week4_practice.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - D75982362E96C96D00CC5D17 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 2600; - LastUpgradeCheck = 2600; - TargetAttributes = { - D759823D2E96C96D00CC5D17 = { - CreatedOnToolsVersion = 26.0.1; - }; - }; - }; - buildConfigurationList = D75982392E96C96D00CC5D17 /* Build configuration list for PBXProject "week4_practice" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = D75982352E96C96C00CC5D17; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - productRefGroup = D759823F2E96C96D00CC5D17 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - D759823D2E96C96D00CC5D17 /* week4_practice */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - D759823C2E96C96D00CC5D17 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - D759823A2E96C96D00CC5D17 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - D75982472E96C96F00CC5D17 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - D75982482E96C96F00CC5D17 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SWIFT_COMPILATION_MODE = wholemodule; - }; - name = Release; - }; - D759824A2E96C96F00CC5D17 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - ENABLE_APP_SANDBOX = YES; - ENABLE_PREVIEWS = YES; - ENABLE_USER_SELECTED_FILES = readonly; - GENERATE_INFOPLIST_FILE = YES; - "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; - "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; - "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; - "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; - "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; - "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; - "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; - "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 26.0; - LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 26.0; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "koh.week4-practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - REGISTER_APP_GROUPS = YES; - SDKROOT = auto; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,7"; - XROS_DEPLOYMENT_TARGET = 26.0; - }; - name = Debug; - }; - D759824B2E96C96F00CC5D17 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - ENABLE_APP_SANDBOX = YES; - ENABLE_PREVIEWS = YES; - ENABLE_USER_SELECTED_FILES = readonly; - GENERATE_INFOPLIST_FILE = YES; - "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; - "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; - "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; - "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; - "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; - "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; - "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; - "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 26.0; - LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 26.0; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "koh.week4-practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - REGISTER_APP_GROUPS = YES; - SDKROOT = auto; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,7"; - XROS_DEPLOYMENT_TARGET = 26.0; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - D75982392E96C96D00CC5D17 /* Build configuration list for PBXProject "week4_practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D75982472E96C96F00CC5D17 /* Debug */, - D75982482E96C96F00CC5D17 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D75982492E96C96F00CC5D17 /* Build configuration list for PBXNativeTarget "week4_practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D759824A2E96C96F00CC5D17 /* Debug */, - D759824B2E96C96F00CC5D17 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = D75982362E96C96D00CC5D17 /* Project object */; -} diff --git a/gogo/week4/week4_practice/week4_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/gogo/week4/week4_practice/week4_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/gogo/week4/week4_practice/week4_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/AccentColor.colorset/Contents.json b/gogo/week4/week4_practice/week4_practice/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/AppIcon.appiconset/Contents.json b/gogo/week4/week4_practice/week4_practice/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index ffdfe15..0000000 --- a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "16x16" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "16x16" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "32x32" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "32x32" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "128x128" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "128x128" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "256x256" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "256x256" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "512x512" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "512x512" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/Contents.json b/gogo/week4/week4_practice/week4_practice/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/brutalis.imageset/Contents.json b/gogo/week4/week4_practice/week4_practice/Assets.xcassets/brutalis.imageset/Contents.json deleted file mode 100644 index 6772917..0000000 --- a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/brutalis.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "image 7.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/brutalis.imageset/image 7.pdf b/gogo/week4/week4_practice/week4_practice/Assets.xcassets/brutalis.imageset/image 7.pdf deleted file mode 100644 index 9a7db6f..0000000 Binary files a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/brutalis.imageset/image 7.pdf and /dev/null differ diff --git a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/conclave.imageset/Contents.json b/gogo/week4/week4_practice/week4_practice/Assets.xcassets/conclave.imageset/Contents.json deleted file mode 100644 index 023ff6b..0000000 --- a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/conclave.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "image 4.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/conclave.imageset/image 4.pdf b/gogo/week4/week4_practice/week4_practice/Assets.xcassets/conclave.imageset/image 4.pdf deleted file mode 100644 index 5bfcb8e..0000000 Binary files a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/conclave.imageset/image 4.pdf and /dev/null differ diff --git a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/mickey.imageset/Contents.json b/gogo/week4/week4_practice/week4_practice/Assets.xcassets/mickey.imageset/Contents.json deleted file mode 100644 index 6a452fc..0000000 --- a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/mickey.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "image 1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/mickey.imageset/image 1.pdf b/gogo/week4/week4_practice/week4_practice/Assets.xcassets/mickey.imageset/image 1.pdf deleted file mode 100644 index e0c3b04..0000000 Binary files a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/mickey.imageset/image 1.pdf and /dev/null differ diff --git a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/snowWhite.imageset/Contents.json b/gogo/week4/week4_practice/week4_practice/Assets.xcassets/snowWhite.imageset/Contents.json deleted file mode 100644 index dc4f61a..0000000 --- a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/snowWhite.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "image 2.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/snowWhite.imageset/image 2.pdf b/gogo/week4/week4_practice/week4_practice/Assets.xcassets/snowWhite.imageset/image 2.pdf deleted file mode 100644 index a5241bf..0000000 Binary files a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/snowWhite.imageset/image 2.pdf and /dev/null differ diff --git a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/theFall.imageset/Contents.json b/gogo/week4/week4_practice/week4_practice/Assets.xcassets/theFall.imageset/Contents.json deleted file mode 100644 index ac2eba5..0000000 --- a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/theFall.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "image 6.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/theFall.imageset/image 6.pdf b/gogo/week4/week4_practice/week4_practice/Assets.xcassets/theFall.imageset/image 6.pdf deleted file mode 100644 index dcc2ac0..0000000 Binary files a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/theFall.imageset/image 6.pdf and /dev/null differ diff --git a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/toystory.imageset/Contents.json b/gogo/week4/week4_practice/week4_practice/Assets.xcassets/toystory.imageset/Contents.json deleted file mode 100644 index 26db57a..0000000 --- a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/toystory.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "image 3.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/toystory.imageset/image 3.pdf b/gogo/week4/week4_practice/week4_practice/Assets.xcassets/toystory.imageset/image 3.pdf deleted file mode 100644 index 69c9f5f..0000000 Binary files a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/toystory.imageset/image 3.pdf and /dev/null differ diff --git a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/whiplash.imageset/Contents.json b/gogo/week4/week4_practice/week4_practice/Assets.xcassets/whiplash.imageset/Contents.json deleted file mode 100644 index 80e9ff4..0000000 --- a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/whiplash.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "위플래시.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/whiplash.imageset/\354\234\204\355\224\214\353\236\230\354\213\234.pdf" "b/gogo/week4/week4_practice/week4_practice/Assets.xcassets/whiplash.imageset/\354\234\204\355\224\214\353\236\230\354\213\234.pdf" deleted file mode 100644 index ea96e01..0000000 Binary files "a/gogo/week4/week4_practice/week4_practice/Assets.xcassets/whiplash.imageset/\354\234\204\355\224\214\353\236\230\354\213\234.pdf" and /dev/null differ diff --git a/gogo/week4/week4_practice/week4_practice/ContentView.swift b/gogo/week4/week4_practice/week4_practice/ContentView.swift deleted file mode 100644 index e55ccb9..0000000 --- a/gogo/week4/week4_practice/week4_practice/ContentView.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// ContentView.swift -// week4_practice -// -// Created by 고석현 on 10/9/25. -// - -import SwiftUI - -struct ContentView: View { - var body: some View { - VStack { - Image(systemName: "globe") - .imageScale(.large) - .foregroundStyle(.tint) - Text("Hello, world!") - } - .padding() - } -} - -#Preview { - ContentView() -} diff --git a/gogo/week4/week4_practice/week4_practice/MovieModel.swift b/gogo/week4/week4_practice/week4_practice/MovieModel.swift deleted file mode 100644 index befb8a5..0000000 --- a/gogo/week4/week4_practice/week4_practice/MovieModel.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// Model.swift -// week4_practice -// -// Created by 고석현 on 10/9/25. -// -import Foundation -import SwiftUI - -struct MovieModel: Identifiable { - let id: UUID = .init() - let movieImage: Image - let title: String - let rate: Double -} diff --git a/gogo/week4/week4_practice/week4_practice/MovieView.swift b/gogo/week4/week4_practice/week4_practice/MovieView.swift deleted file mode 100644 index 28f18bc..0000000 --- a/gogo/week4/week4_practice/week4_practice/MovieView.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// View.swift -// week4_practice -// -// Created by 고석현 on 10/9/25. -// - -import SwiftUI -import Combine - -struct MovieSearchView: View { - @StateObject private var vm = MovieSearchViewModel() - - var body: some View { - NavigationStack { - VStack(spacing: 12) { - TextField("영화명을 입력하세요", text: $vm.query) - .textFieldStyle(RoundedBorderTextFieldStyle()) - .padding(.horizontal) - - if vm.isLoading { - ProgressView("검색중…") - } - - if let error = vm.errorMessage { - Text(error).foregroundStyle(.red) - } - - List(vm.results, id: \.id) { movie in - HStack { - movie.movieImage - .resizable() - .frame(width: 40, height: 56) - - VStack(alignment: .leading) { - Text(movie.title).font(.headline) - - Spacer() - - Text(String(format: "%.1f", movie.rate)) - .font(.subheadline).bold() - } - .padding(.horizontal, 10) - } - } - } - .navigationTitle("영화 검색") - } - } -} diff --git a/gogo/week4/week4_practice/week4_practice/MovieViewModel.swift b/gogo/week4/week4_practice/week4_practice/MovieViewModel.swift deleted file mode 100644 index dc2bd64..0000000 --- a/gogo/week4/week4_practice/week4_practice/MovieViewModel.swift +++ /dev/null @@ -1,78 +0,0 @@ -// -// ViewMOdel.swift -// week4_practice -// -// Created by 고석현 on 10/9/25. -// - -import SwiftUI -import Combine - -final class MovieSearchViewModel: ObservableObject { - private let model: [MovieModel] = [ - .init(movieImage: .init(.mickey), title: "미키", rate: 9.1), - .init(movieImage: .init(.toystory), title: "토이스토리", rate: 8.2), - .init(movieImage: .init(.brutalis), title: "브루탈리스트", rate: 8.2), - .init(movieImage: .init(.snowWhite), title: "백설공주", rate: 8.2), - .init(movieImage: .init(.whiplash), title: "위플래시", rate: 8.2), - .init(movieImage: .init(.conclave), title: "콘클라베", rate: 8.2), - .init(movieImage: .init(.theFall), title: "더폴", rate: 8.2) - ] - @Published var query: String = "" - @Published var results: [MovieModel] = [] - @Published var isLoading = false - @Published var errorMessage: String? - - private var bag = Set() - - init() { - $query - .debounce(for: .milliseconds(350), scheduler: DispatchQueue.main) - .removeDuplicates() - .handleEvents(receiveOutput: { [weak self] _ in - self?.errorMessage = nil - }) - .flatMap { query in - self.search(query: query) - } - .receive(on: DispatchQueue.main) - .sink { [weak self] completion in - if case .failure(let err) = completion { - self?.errorMessage = "검색 실패: \(err.localizedDescription)" - self?.results = [] - } - } receiveValue: { [weak self] items in - self?.results = items - } - .store(in: &bag) - } - - private func search(query: String) -> AnyPublisher<[MovieModel], Error> { - return Future<[MovieModel], Error> { [weak self] promise in - let delay = Double(Int.random(in: 300...700)) / 1000.0 - guard let self else { return } - - DispatchQueue.global().asyncAfter(deadline: .now() + delay) { - let filtered = self.model.filter { $0.title.lowercased().contains(query) } - promise(.success(filtered)) - } - } - .handleEvents( - receiveSubscription: { _ in - DispatchQueue.main.async { - self.isLoading = true - } - }, - receiveCompletion: { _ in - DispatchQueue.main.async { - self.isLoading = false - } - } - ) - .eraseToAnyPublisher() - } - - - -} - diff --git a/gogo/week4/week4_practice/week4_practice/week4_practiceApp.swift b/gogo/week4/week4_practice/week4_practice/week4_practiceApp.swift deleted file mode 100644 index d052650..0000000 --- a/gogo/week4/week4_practice/week4_practice/week4_practiceApp.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// week4_practiceApp.swift -// week4_practice -// -// Created by 고석현 on 10/9/25. -// - -import SwiftUI - -@main -struct week4_practiceApp: App { - var body: some Scene { - WindowGroup { - MovieSearchView() - } - } -} diff --git a/gonny/.gitignore b/gonny/.gitignore deleted file mode 100644 index dfe9b97..0000000 --- a/gonny/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.DS_Store.DS_Store diff --git a/gonny/MegaBox/.gitignore b/gonny/MegaBox/.gitignore deleted file mode 100644 index e43b0f9..0000000 --- a/gonny/MegaBox/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.DS_Store diff --git a/gonny/MegaBox/MegaBox.xcodeproj/project.pbxproj b/gonny/MegaBox/MegaBox.xcodeproj/project.pbxproj deleted file mode 100644 index 8244a28..0000000 --- a/gonny/MegaBox/MegaBox.xcodeproj/project.pbxproj +++ /dev/null @@ -1,780 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXBuildFile section */ - 786E30E82EC5D59F00C2A05B /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = 786E30E72EC5D59F00C2A05B /* Kingfisher */; }; - 787DB3B12EBBCBD000F9A0C2 /* KakaoSDK in Frameworks */ = {isa = PBXBuildFile; productRef = 787DB3B02EBBCBD000F9A0C2 /* KakaoSDK */; }; - 787DB3B32EBBCBD000F9A0C2 /* KakaoSDKAuth in Frameworks */ = {isa = PBXBuildFile; productRef = 787DB3B22EBBCBD000F9A0C2 /* KakaoSDKAuth */; }; - 787DB3B52EBBCBD000F9A0C2 /* KakaoSDKCert in Frameworks */ = {isa = PBXBuildFile; productRef = 787DB3B42EBBCBD000F9A0C2 /* KakaoSDKCert */; }; - 787DB3B72EBBCBD000F9A0C2 /* KakaoSDKCertCore in Frameworks */ = {isa = PBXBuildFile; productRef = 787DB3B62EBBCBD000F9A0C2 /* KakaoSDKCertCore */; }; - 787DB3B92EBBCBD000F9A0C2 /* KakaoSDKCommon in Frameworks */ = {isa = PBXBuildFile; productRef = 787DB3B82EBBCBD000F9A0C2 /* KakaoSDKCommon */; }; - 787DB45B2EBBE1F300F9A0C2 /* Alamofire in Frameworks */ = {isa = PBXBuildFile; productRef = 787DB45A2EBBE1F300F9A0C2 /* Alamofire */; }; - 787DB6B02EC447CA00F9A0C2 /* CombineMoya in Frameworks */ = {isa = PBXBuildFile; productRef = 787DB6AF2EC447CA00F9A0C2 /* CombineMoya */; }; - 787DB6B22EC447CA00F9A0C2 /* Moya in Frameworks */ = {isa = PBXBuildFile; productRef = 787DB6B12EC447CA00F9A0C2 /* Moya */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 786B27262E79816700560305 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 786B270D2E79816500560305 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 786B27142E79816500560305; - remoteInfo = MegaBox; - }; - 786B27302E79816700560305 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 786B270D2E79816500560305 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 786B27142E79816500560305; - remoteInfo = MegaBox; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 786B27152E79816500560305 /* MegaBox.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MegaBox.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 786B27252E79816700560305 /* MegaBoxTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MegaBoxTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 786B272F2E79816700560305 /* MegaBoxUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MegaBoxUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ - 787C881A2E8B907000127E8B /* Exceptions for "MegaBox" folder in "MegaBox" target */ = { - isa = PBXFileSystemSynchronizedBuildFileExceptionSet; - membershipExceptions = ( - Config.swift, - MegaBoxApp.swift, - Models/Domain/CalendarDay.swift, - Models/Domain/DomaianModel.swift, - Models/Domain/LoginModel.swift, - Models/Domain/MenuItemModel.swift, - Models/Domain/MovieModel.swift, - Models/Domain/MoviePoster.swift, - Models/Domain/Profile.swift, - Models/Domain/TokenKeychain.swift, - Models/DTO/AuthDTO.swift, - Models/DTO/MovieDTO.swift, - Models/DTO/ShowtimeDTO.swift, - Module/ViewModels/CalendarViewModel.swift, - Module/ViewModels/HomeViewModel.swift, - Module/ViewModels/LoginViewModel.swift, - Module/ViewModels/MobileOrderViewModel.swift, - Module/ViewModels/MovieSearchViewModel.swift, - Module/ViewModels/MovieViewModel.swift, - Module/ViewModels/ShowtimeViewModel.swift, - Module/Views/BaseTabView.swift, - Module/Views/Components/MenuItemCardView.swift, - Module/Views/Components/OrderMenuItemCardView.swift, - Module/Views/Components/TheaterChangeBarView.swift, - Module/Views/Components/TopTheaterBarView.swift, - Module/Views/Components/ViewModifier.swift, - Module/Views/HomeView.swift, - Module/Views/LoginView.swift, - Module/Views/MemberInfoView.swift, - Module/Views/MobileOrderView.swift, - Module/Views/MovieDetailView.swift, - Module/Views/OrderMenuListView.swift, - Module/Views/ProfileView.swift, - Module/Views/SplashView.swift, - Module/Views/Week4/CalendarView.swift, - Module/Views/Week4/MovieSearchView.swift, - Module/Views/Week4/MovieSheet.swift, - Module/Views/Week4/ReserveView.swift, - Navigation/NavigationRouter.swift, - "Preview Content/Preview Assets.xcassets", - Resource/Assets/Assets.xcassets, - Resource/Assets/ColorExtension.swift, - Resource/Font/Fonts.swift, - "Resource/Font/Pretendard-Bold.otf", - "Resource/Font/Pretendard-ExtraBold.otf", - "Resource/Font/Pretendard-Light.otf", - "Resource/Font/Pretendard-Medium.otf", - "Resource/Font/Pretendard-Regular.otf", - "Resource/Font/Pretendard-SemiBold.otf", - Resource/MovieSchedule.json, - Secret.xcconfig, - Security/KeychainService.swift, - Service/APITargetType.swift, - Service/AuthRouter.swift, - Service/KakaoLoginManager.swift, - Service/MoyaProviderExtension.swift, - Service/MoyaRouter.swift, - Service/MoyaService.swift, - Service/NetworkError.swift, - Token/AcessTokenRefresher.swift, - Token/Secret.swift, - Token/TokenProvider.swift, - ); - target = 786B27142E79816500560305 /* MegaBox */; - }; - 787C89EE2E8C314C00127E8B /* Exceptions for "MegaBox" folder in "MegaBoxUITests" target */ = { - isa = PBXFileSystemSynchronizedBuildFileExceptionSet; - membershipExceptions = ( - Module/Views/Week4/ReserveView.swift, - ); - target = 786B272E2E79816700560305 /* MegaBoxUITests */; - }; -/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 786B27282E79816700560305 /* MegaBoxTests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = MegaBoxTests; - sourceTree = ""; - }; - 786B27322E79816700560305 /* MegaBoxUITests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = MegaBoxUITests; - sourceTree = ""; - }; - 787C88072E8B907000127E8B /* MegaBox */ = { - isa = PBXFileSystemSynchronizedRootGroup; - exceptions = ( - 787C881A2E8B907000127E8B /* Exceptions for "MegaBox" folder in "MegaBox" target */, - 787C89EE2E8C314C00127E8B /* Exceptions for "MegaBox" folder in "MegaBoxUITests" target */, - ); - path = MegaBox; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 786B27122E79816500560305 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 787DB3B92EBBCBD000F9A0C2 /* KakaoSDKCommon in Frameworks */, - 787DB3B72EBBCBD000F9A0C2 /* KakaoSDKCertCore in Frameworks */, - 787DB6B22EC447CA00F9A0C2 /* Moya in Frameworks */, - 786E30E82EC5D59F00C2A05B /* Kingfisher in Frameworks */, - 787DB3B12EBBCBD000F9A0C2 /* KakaoSDK in Frameworks */, - 787DB6B02EC447CA00F9A0C2 /* CombineMoya in Frameworks */, - 787DB45B2EBBE1F300F9A0C2 /* Alamofire in Frameworks */, - 787DB3B32EBBCBD000F9A0C2 /* KakaoSDKAuth in Frameworks */, - 787DB3B52EBBCBD000F9A0C2 /* KakaoSDKCert in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 786B27222E79816700560305 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 786B272C2E79816700560305 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 786B270C2E79816500560305 = { - isa = PBXGroup; - children = ( - 786B27282E79816700560305 /* MegaBoxTests */, - 786B27322E79816700560305 /* MegaBoxUITests */, - 786B27162E79816500560305 /* Products */, - 787C88072E8B907000127E8B /* MegaBox */, - ); - sourceTree = ""; - }; - 786B27162E79816500560305 /* Products */ = { - isa = PBXGroup; - children = ( - 786B27152E79816500560305 /* MegaBox.app */, - 786B27252E79816700560305 /* MegaBoxTests.xctest */, - 786B272F2E79816700560305 /* MegaBoxUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 786B27142E79816500560305 /* MegaBox */ = { - isa = PBXNativeTarget; - buildConfigurationList = 786B27392E79816700560305 /* Build configuration list for PBXNativeTarget "MegaBox" */; - buildPhases = ( - 786B27112E79816500560305 /* Sources */, - 786B27122E79816500560305 /* Frameworks */, - 786B27132E79816500560305 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = MegaBox; - packageProductDependencies = ( - 787DB3B02EBBCBD000F9A0C2 /* KakaoSDK */, - 787DB3B22EBBCBD000F9A0C2 /* KakaoSDKAuth */, - 787DB3B42EBBCBD000F9A0C2 /* KakaoSDKCert */, - 787DB3B62EBBCBD000F9A0C2 /* KakaoSDKCertCore */, - 787DB3B82EBBCBD000F9A0C2 /* KakaoSDKCommon */, - 787DB45A2EBBE1F300F9A0C2 /* Alamofire */, - 787DB6AF2EC447CA00F9A0C2 /* CombineMoya */, - 787DB6B12EC447CA00F9A0C2 /* Moya */, - 786E30E72EC5D59F00C2A05B /* Kingfisher */, - ); - productName = MegaBox; - productReference = 786B27152E79816500560305 /* MegaBox.app */; - productType = "com.apple.product-type.application"; - }; - 786B27242E79816700560305 /* MegaBoxTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 786B273C2E79816700560305 /* Build configuration list for PBXNativeTarget "MegaBoxTests" */; - buildPhases = ( - 786B27212E79816700560305 /* Sources */, - 786B27222E79816700560305 /* Frameworks */, - 786B27232E79816700560305 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 786B27272E79816700560305 /* PBXTargetDependency */, - ); - fileSystemSynchronizedGroups = ( - 786B27282E79816700560305 /* MegaBoxTests */, - 787C88072E8B907000127E8B /* MegaBox */, - ); - name = MegaBoxTests; - packageProductDependencies = ( - ); - productName = MegaBoxTests; - productReference = 786B27252E79816700560305 /* MegaBoxTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 786B272E2E79816700560305 /* MegaBoxUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 786B273F2E79816700560305 /* Build configuration list for PBXNativeTarget "MegaBoxUITests" */; - buildPhases = ( - 786B272B2E79816700560305 /* Sources */, - 786B272C2E79816700560305 /* Frameworks */, - 786B272D2E79816700560305 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 786B27312E79816700560305 /* PBXTargetDependency */, - ); - fileSystemSynchronizedGroups = ( - 786B27322E79816700560305 /* MegaBoxUITests */, - ); - name = MegaBoxUITests; - packageProductDependencies = ( - ); - productName = MegaBoxUITests; - productReference = 786B272F2E79816700560305 /* MegaBoxUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 786B270D2E79816500560305 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1610; - LastUpgradeCheck = 1610; - TargetAttributes = { - 786B27142E79816500560305 = { - CreatedOnToolsVersion = 16.1; - }; - 786B27242E79816700560305 = { - CreatedOnToolsVersion = 16.1; - TestTargetID = 786B27142E79816500560305; - }; - 786B272E2E79816700560305 = { - CreatedOnToolsVersion = 16.1; - TestTargetID = 786B27142E79816500560305; - }; - }; - }; - buildConfigurationList = 786B27102E79816500560305 /* Build configuration list for PBXProject "MegaBox" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 786B270C2E79816500560305; - minimizedProjectReferenceProxies = 1; - packageReferences = ( - 787DB3AF2EBBCBD000F9A0C2 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */, - 787DB4592EBBE1F300F9A0C2 /* XCRemoteSwiftPackageReference "Alamofire" */, - 787DB6AE2EC447CA00F9A0C2 /* XCRemoteSwiftPackageReference "Moya" */, - 786E30E62EC5D59F00C2A05B /* XCRemoteSwiftPackageReference "Kingfisher" */, - ); - preferredProjectObjectVersion = 77; - productRefGroup = 786B27162E79816500560305 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 786B27142E79816500560305 /* MegaBox */, - 786B27242E79816700560305 /* MegaBoxTests */, - 786B272E2E79816700560305 /* MegaBoxUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 786B27132E79816500560305 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 786B27232E79816700560305 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 786B272D2E79816700560305 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 786B27112E79816500560305 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 786B27212E79816700560305 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 786B272B2E79816700560305 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 786B27272E79816700560305 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 786B27142E79816500560305 /* MegaBox */; - targetProxy = 786B27262E79816700560305 /* PBXContainerItemProxy */; - }; - 786B27312E79816700560305 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 786B27142E79816500560305 /* MegaBox */; - targetProxy = 786B27302E79816700560305 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 786B27372E79816700560305 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReferenceAnchor = 787C88072E8B907000127E8B /* MegaBox */; - baseConfigurationReferenceRelativePath = Secret.xcconfig; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = MegaBox/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 18.1; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 786B27382E79816700560305 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReferenceAnchor = 787C88072E8B907000127E8B /* MegaBox */; - baseConfigurationReferenceRelativePath = Secret.xcconfig; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = MegaBox/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 18.1; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 786B273A2E79816700560305 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReferenceAnchor = 787C88072E8B907000127E8B /* MegaBox */; - baseConfigurationReferenceRelativePath = Secret.xcconfig; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = ""; - DEVELOPMENT_TEAM = 6PW49YXW64; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = MegaBox/Info.plist; - INFOPLIST_KEY_LSApplicationCategoryType = ""; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = gonny.MegaBox; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 786B273B2E79816700560305 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReferenceAnchor = 787C88072E8B907000127E8B /* MegaBox */; - baseConfigurationReferenceRelativePath = Secret.xcconfig; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = ""; - DEVELOPMENT_TEAM = 6PW49YXW64; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = MegaBox/Info.plist; - INFOPLIST_KEY_LSApplicationCategoryType = ""; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = gonny.MegaBox; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - 786B273D2E79816700560305 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReferenceAnchor = 787C88072E8B907000127E8B /* MegaBox */; - baseConfigurationReferenceRelativePath = Secret.xcconfig; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 6PW49YXW64; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.1; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = gonny.MegaBoxTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MegaBox.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/MegaBox"; - }; - name = Debug; - }; - 786B273E2E79816700560305 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReferenceAnchor = 787C88072E8B907000127E8B /* MegaBox */; - baseConfigurationReferenceRelativePath = Secret.xcconfig; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 6PW49YXW64; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.1; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = gonny.MegaBoxTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MegaBox.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/MegaBox"; - }; - name = Release; - }; - 786B27402E79816700560305 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 6PW49YXW64; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = gonny.MegaBoxUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = MegaBox; - }; - name = Debug; - }; - 786B27412E79816700560305 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 6PW49YXW64; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = gonny.MegaBoxUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = MegaBox; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 786B27102E79816500560305 /* Build configuration list for PBXProject "MegaBox" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 786B27372E79816700560305 /* Debug */, - 786B27382E79816700560305 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 786B27392E79816700560305 /* Build configuration list for PBXNativeTarget "MegaBox" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 786B273A2E79816700560305 /* Debug */, - 786B273B2E79816700560305 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 786B273C2E79816700560305 /* Build configuration list for PBXNativeTarget "MegaBoxTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 786B273D2E79816700560305 /* Debug */, - 786B273E2E79816700560305 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 786B273F2E79816700560305 /* Build configuration list for PBXNativeTarget "MegaBoxUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 786B27402E79816700560305 /* Debug */, - 786B27412E79816700560305 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCRemoteSwiftPackageReference section */ - 786E30E62EC5D59F00C2A05B /* XCRemoteSwiftPackageReference "Kingfisher" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/onevcat/Kingfisher.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 8.6.1; - }; - }; - 787DB3AF2EBBCBD000F9A0C2 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/kakao/kakao-ios-sdk"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 2.25.0; - }; - }; - 787DB4592EBBE1F300F9A0C2 /* XCRemoteSwiftPackageReference "Alamofire" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/Alamofire/Alamofire"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 5.10.2; - }; - }; - 787DB6AE2EC447CA00F9A0C2 /* XCRemoteSwiftPackageReference "Moya" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/Moya/Moya"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 15.0.3; - }; - }; -/* End XCRemoteSwiftPackageReference section */ - -/* Begin XCSwiftPackageProductDependency section */ - 786E30E72EC5D59F00C2A05B /* Kingfisher */ = { - isa = XCSwiftPackageProductDependency; - package = 786E30E62EC5D59F00C2A05B /* XCRemoteSwiftPackageReference "Kingfisher" */; - productName = Kingfisher; - }; - 787DB3B02EBBCBD000F9A0C2 /* KakaoSDK */ = { - isa = XCSwiftPackageProductDependency; - package = 787DB3AF2EBBCBD000F9A0C2 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; - productName = KakaoSDK; - }; - 787DB3B22EBBCBD000F9A0C2 /* KakaoSDKAuth */ = { - isa = XCSwiftPackageProductDependency; - package = 787DB3AF2EBBCBD000F9A0C2 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; - productName = KakaoSDKAuth; - }; - 787DB3B42EBBCBD000F9A0C2 /* KakaoSDKCert */ = { - isa = XCSwiftPackageProductDependency; - package = 787DB3AF2EBBCBD000F9A0C2 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; - productName = KakaoSDKCert; - }; - 787DB3B62EBBCBD000F9A0C2 /* KakaoSDKCertCore */ = { - isa = XCSwiftPackageProductDependency; - package = 787DB3AF2EBBCBD000F9A0C2 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; - productName = KakaoSDKCertCore; - }; - 787DB3B82EBBCBD000F9A0C2 /* KakaoSDKCommon */ = { - isa = XCSwiftPackageProductDependency; - package = 787DB3AF2EBBCBD000F9A0C2 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; - productName = KakaoSDKCommon; - }; - 787DB45A2EBBE1F300F9A0C2 /* Alamofire */ = { - isa = XCSwiftPackageProductDependency; - package = 787DB4592EBBE1F300F9A0C2 /* XCRemoteSwiftPackageReference "Alamofire" */; - productName = Alamofire; - }; - 787DB6AF2EC447CA00F9A0C2 /* CombineMoya */ = { - isa = XCSwiftPackageProductDependency; - package = 787DB6AE2EC447CA00F9A0C2 /* XCRemoteSwiftPackageReference "Moya" */; - productName = CombineMoya; - }; - 787DB6B12EC447CA00F9A0C2 /* Moya */ = { - isa = XCSwiftPackageProductDependency; - package = 787DB6AE2EC447CA00F9A0C2 /* XCRemoteSwiftPackageReference "Moya" */; - productName = Moya; - }; -/* End XCSwiftPackageProductDependency section */ - }; - rootObject = 786B270D2E79816500560305 /* Project object */; -} diff --git a/gonny/MegaBox/MegaBox.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/gonny/MegaBox/MegaBox.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/gonny/MegaBox/MegaBox.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/gonny/MegaBox/MegaBox.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/gonny/MegaBox/MegaBox.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved deleted file mode 100644 index ca227fc..0000000 --- a/gonny/MegaBox/MegaBox.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ /dev/null @@ -1,60 +0,0 @@ -{ - "originHash" : "dd3d87fc97ba7b4f90ced4cf2faba69bf1bb0fbeb3cb8a3209ad4b1d490fd97f", - "pins" : [ - { - "identity" : "alamofire", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Alamofire/Alamofire", - "state" : { - "revision" : "513364f870f6bfc468f9d2ff0a95caccc10044c5", - "version" : "5.10.2" - } - }, - { - "identity" : "kakao-ios-sdk", - "kind" : "remoteSourceControl", - "location" : "https://github.com/kakao/kakao-ios-sdk", - "state" : { - "revision" : "e14a8d1fad75645fd5677a295a8b1956ebd14d3d", - "version" : "2.25.0" - } - }, - { - "identity" : "kingfisher", - "kind" : "remoteSourceControl", - "location" : "https://github.com/onevcat/Kingfisher.git", - "state" : { - "revision" : "4d75de347da985a70c63af4d799ed482021f6733", - "version" : "8.6.1" - } - }, - { - "identity" : "moya", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Moya/Moya", - "state" : { - "revision" : "c263811c1f3dbf002be9bd83107f7cdc38992b26", - "version" : "15.0.3" - } - }, - { - "identity" : "reactiveswift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/ReactiveCocoa/ReactiveSwift.git", - "state" : { - "revision" : "c43bae3dac73fdd3cb906bd5a1914686ca71ed3c", - "version" : "6.7.0" - } - }, - { - "identity" : "rxswift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/ReactiveX/RxSwift.git", - "state" : { - "revision" : "5004a18539bd68905c5939aa893075f578f4f03d", - "version" : "6.9.1" - } - } - ], - "version" : 3 -} diff --git a/gonny/MegaBox/MegaBox.xcodeproj/xcuserdata/bagbyeongseon.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/gonny/MegaBox/MegaBox.xcodeproj/xcuserdata/bagbyeongseon.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist deleted file mode 100644 index 3181ee6..0000000 --- a/gonny/MegaBox/MegaBox.xcodeproj/xcuserdata/bagbyeongseon.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/gonny/MegaBox/MegaBox/Config.swift b/gonny/MegaBox/MegaBox/Config.swift deleted file mode 100644 index 033f420..0000000 --- a/gonny/MegaBox/MegaBox/Config.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// Config.swift -// MegaBox -// -// Created by 박병선 on 11/13/25. -// -// 앱의 설정값(Config값)을 안전하게 불러오는 유틸리티 -import Foundation - -enum Config { - private static let infoDictionary: [String: Any] = { - guard let dict = Bundle.main.infoDictionary else { - fatalError("Plist 없음") - } - return dict - }() - - static let baseUrl: String = { - guard let baseUrl = Config.infoDictionary["BASE_URL"] as? String else { - fatalError() - } - return baseUrl - }() - - static let kakaoKey: String = { - guard let kakaoKey = Config.infoDictionary["KAKAO_KEY"] as? String else { - fatalError() - } - return kakaoKey - }() -} diff --git a/gonny/MegaBox/MegaBox/Info.plist b/gonny/MegaBox/MegaBox/Info.plist deleted file mode 100644 index 70a2eb2..0000000 --- a/gonny/MegaBox/MegaBox/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - LSApplicationQueriesSchemes - - kakaokompassauth - kakaolink - kakaoplus - kakaotalk - - UIAppFonts - - Pretendard-Bold.otf - Pretendard-ExtraBold.otf - Pretendard-Light.otf - Pretendard-Medium.otf - Pretendard-Regular.otf - Pretendard-SemiBold.otf - - - diff --git a/gonny/MegaBox/MegaBox/MegaBoxApp.swift b/gonny/MegaBox/MegaBox/MegaBoxApp.swift deleted file mode 100644 index ca62566..0000000 --- a/gonny/MegaBox/MegaBox/MegaBoxApp.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// MegaBoxApp.swift -// MegaBox -// -// Created by 박병선 on 9/16/25. -// - -import SwiftUI - -@main -struct MegaBoxApp: App { - @State private var router = NavigationRouter() - - @StateObject private var movieVM = MovieViewModel() - @StateObject var auth = LoginViewModel() - @AppStorage("isLoggedIn") var isLoggedIn: Bool = false - - var body: some Scene { - WindowGroup { - - - LoginView() - .environmentObject(auth) - .environmentObject(router) - .environmentObject(movieVM) - /* - if auth.isLoggedIn { - BaseTabView() - .environmentObject(auth) - .environmentObject(router) - .environmentObject(movieVM) - } else { - LoginView() - .environmentObject(auth) - .environmentObject(router) - .environmentObject(movieVM) - - } - - SplashView() - .environmentObject(auth) - .environmentObject(router) - .environmentObject(movieVM) - */ - - - } - } -} diff --git a/gonny/MegaBox/MegaBox/Models/DTO/AuthDTO.swift b/gonny/MegaBox/MegaBox/Models/DTO/AuthDTO.swift deleted file mode 100644 index a271b4b..0000000 --- a/gonny/MegaBox/MegaBox/Models/DTO/AuthDTO.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// AuthDTO.swift -// MegaBox -// -// Created by 박병선 on 11/6/25. -// -import Foundation - -struct KakaoUser: Decodable { - let id: Int - let kakao_account: KakaoAccount? -} - -struct KakaoAccount: Decodable { - let profile: KakaoProfile? - let email: String? -} - -struct KakaoProfile: Decodable { - let nickname: String? - let profile_image_url: String? -} - -struct KakaoTokenResponse: Decodable { - let access_token: String - let token_type: String - let refresh_token: String? - let expires_in: Int? - let scope: String? -} - diff --git a/gonny/MegaBox/MegaBox/Models/DTO/MovieDTO.swift b/gonny/MegaBox/MegaBox/Models/DTO/MovieDTO.swift deleted file mode 100644 index 0e07340..0000000 --- a/gonny/MegaBox/MegaBox/Models/DTO/MovieDTO.swift +++ /dev/null @@ -1,122 +0,0 @@ -// -// PlayingDTO.swift -// MegaBox -// -// Created by 박병선 on 11/13/25. -// 7주차 -import Foundation - -struct NowPlayingRequestDTO : Encodable { - let apikey: String - let language: String? - let page: Int? - let region: String? -} - -extension NowPlayingRequestDTO { - func toDictionary() -> [String: Any] { - var dict: [String: Any] = [ - "api_key": apikey - ] - - if let language = language { - dict["language"] = language - } - - if let page = page { - dict["page"] = page - } - - if let region = region { - dict["region"] = region - } - - return dict - } -} - -// 전체 응답을 처리 -struct MovieResponseDTO: Codable { - let dates: DatesDTO? - let page: Int - let results: [PlayingMovieDTO] - let totalPages: Int? - let totalResults: Int? - - // TMDB는 snake_case가 많아서 convertFromSnakeCase로 처리하면 깔끔함 -} - -struct DatesDTO: Codable { - let maximum: String? - let minimum: String? -} - -struct PlayingMovieDTO: Codable { - let adult: Bool - let backdropPath: String? - let genreIds: [Int]? - let id: Int - let originalLanguage: String? - let originalTitle: String? - let overview: String? - let popularity: Double? - let posterPath: String? - let releaseDate: String? - let title: String? - let video: Bool? - let voteAverage: Double? - let voteCount: Int? -} -extension PlayingMovieDTO { - /// TMDB DTO -> 홈 화면에서 쓰는 Movie 도메인 모델로 변환 - func toMovie() -> Movie { - let baseImageURL = "https://image.tmdb.org/t/p/w500" - - let posterURLString: String - if let path = posterPath { - posterURLString = baseImageURL + path - } else { - posterURLString = "" // or "placeholder" 같은 이미지 이름 - } - - return Movie( - title: title ?? "제목 없음", - poster: posterURLString, - // TMDB에 없는 값이라 과제 요구대로 하드코딩 - audience: "1,234,567명" - ) - } - - func toMovieDetail() -> MovieDetail { - let baseImageURL = "https://image.tmdb.org/t/p/w500" //TMDB에서 제공하는 공식 이미지의 BaseURL - - // 1) 먼저 Movie(기본 도메인) 하나 만들어주고 - let movie = Movie( - title: title ?? "제목 없음", - poster: { - if let path = posterPath { - return baseImageURL + path - } else { - return "" - } - }(), - audience: "1,234,567명" // 마찬가지로 하드코딩 - ) - - // 2) 나머지는 DTO 값 + 하드코딩으로 채워서 MovieDetail 생성 - let titleEN = originalTitle ?? (title ?? "제목 없음") - let description = overview ?? "줄거리 정보가 없습니다." - let rating = "12세 이상 관람가" // 하드코딩 - let release = releaseDate ?? "개봉일 정보 없음" - let posterDetail = movie.poster // 지금은 같은 포스터 사용 - - return MovieDetail( - from: movie, - titleEN: titleEN, - posterDetail: posterDetail, - description: description, - rating: rating, - releaseDate: release - ) - } -} diff --git a/gonny/MegaBox/MegaBox/Models/DTO/ShowtimeDTO.swift b/gonny/MegaBox/MegaBox/Models/DTO/ShowtimeDTO.swift deleted file mode 100644 index b705beb..0000000 --- a/gonny/MegaBox/MegaBox/Models/DTO/ShowtimeDTO.swift +++ /dev/null @@ -1,106 +0,0 @@ -// -// ShowtimesResponse.swift -// MegaBox -// -// Created by 박병선 on 10/30/25. -// -import Foundation - -// MARK: - 최상위 응답 DTO -struct ShowtimesResponse: Codable { - let status: String - let message: String - let data: ShowtimesPayload -} - -// MARK: - data 객체 -struct ShowtimesPayload: Codable { - let movies: [MovieDTO] -} - -// MARK: - 영화 정보 -struct MovieDTO: Codable, Identifiable, Hashable { - let id: String - let title: String - let ageRating: String - let schedules: [ScheduleDTO] - - enum CodingKeys: String, CodingKey { - case id, title, schedules - case ageRating = "age_rating" - } -} - -extension MovieDTO { - //DTO를 도메인모델로 변환 - func toDomain() -> ShowtimeMovie { - ShowtimeMovie( - id: id, - title: title, - ageRating: ageRating, - schedules: schedules.map { $0.toDomain() } - ) - } -} - -// MARK: - 상영 일정 -struct ScheduleDTO: Codable, Hashable { - let date: String - let areas: [AreaScheduleDTO] -} - -extension ScheduleDTO { - func toDomain() -> ShowtimeSchedule { - ShowtimeSchedule( - date: date, - areas: areas.map { $0.toDomain() } - ) - } -} - -// MARK: - 지역별 상영관 -struct AreaScheduleDTO: Codable, Hashable { - let area: String - let items: [AuditoriumDTO] -} - -extension AreaScheduleDTO { - func toDomain() -> ShowtimeArea { - ShowtimeArea( - area: area, - items: items.map { $0.toDomain() } - ) - } -} - -// MARK: - 상영관 및 포맷 -struct AuditoriumDTO: Codable, Hashable { - let auditorium: String - let format: String - let showtimes: [ShowtimeDTO] -} - -extension AuditoriumDTO { - func toDomain() -> ShowtimeAuditorium { - ShowtimeAuditorium( - auditorium: auditorium, - format: format, - showtimes: showtimes.map { $0.toDomain() } - ) - } -} - -// MARK: - 시간표 세부 -struct ShowtimeDTO: Codable, Hashable { - let start: String - let end: String - let available: Int - let total: Int -} - -extension ShowtimeDTO { - func toDomain() -> ShowtimeSlot { - ShowtimeSlot(start: start, end: end, available: available, total: total) - } -} - diff --git a/gonny/MegaBox/MegaBox/Models/Domain/CalendarDay.swift b/gonny/MegaBox/MegaBox/Models/Domain/CalendarDay.swift deleted file mode 100644 index 5ec2015..0000000 --- a/gonny/MegaBox/MegaBox/Models/Domain/CalendarDay.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// Calander.swift -// MegaBox -// -// Created by 박병선 on 10/9/25. -// -import Foundation - -struct CalendarDay: Identifiable { - var id: UUID = .init() - let day: Int - let date: Date - let isCurrentMonth: Bool -} diff --git a/gonny/MegaBox/MegaBox/Models/Domain/DomaianModel.swift b/gonny/MegaBox/MegaBox/Models/Domain/DomaianModel.swift deleted file mode 100644 index eaa57ad..0000000 --- a/gonny/MegaBox/MegaBox/Models/Domain/DomaianModel.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// ShowtimeModel.swift -// MegaBox -// -// Created by 박병선 on 10/30/25. -// -import Foundation - -struct ShowtimeMovie: Identifiable, Hashable { - let id: String - let title: String - let ageRating: String - let schedules: [ShowtimeSchedule] -} - -struct ShowtimeSchedule: Hashable { - let date: String // "yyyy-MM-dd" 그대로 둠(뷰모델에서 필요 시 Date 변환) - let areas: [ShowtimeArea] -} - -struct ShowtimeArea: Hashable { - let area: String // "강남", "홍대" - let items: [ShowtimeAuditorium] -} - -struct ShowtimeAuditorium: Hashable { - let auditorium: String // "IMAX 1관" 등 - let format: String // "2D", "IMAX"... - let showtimes: [ShowtimeSlot] -} - -struct ShowtimeSlot: Hashable { - let start: String // "11:30" - let end: String // "13:58" - let available: Int - let total: Int - var reserved: Int { max(total - available, 0) } - var soldOut: Bool { available == 0 } - var rate: Double { total == 0 ? 0 : Double(reserved) / Double(total) } -} diff --git a/gonny/MegaBox/MegaBox/Models/Domain/LoginModel.swift b/gonny/MegaBox/MegaBox/Models/Domain/LoginModel.swift deleted file mode 100644 index aef557c..0000000 --- a/gonny/MegaBox/MegaBox/Models/Domain/LoginModel.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// LoginModel.swift -// MegaBox -// -// Created by 박병선 on 9/23/25. -// -import Foundation - -@Observable -class LoginModel { - var id: String = "" - var pwd: String = "" - var profile: Profile = Profile() //얘도 추가하긴 했는데 -} - diff --git a/gonny/MegaBox/MegaBox/Models/Domain/MenuItemModel.swift b/gonny/MegaBox/MegaBox/Models/Domain/MenuItemModel.swift deleted file mode 100644 index 583e32f..0000000 --- a/gonny/MegaBox/MegaBox/Models/Domain/MenuItemModel.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// MenuItemModel.swift -// MegaBox -// -// Created by 박병선 on 11/20/25. -// -import Foundation - -struct MenuItemModel: Identifiable, Hashable { - let id: UUID = UUID() - - let name: String // "러브 콤보" - let price: Int // 10900 - let imageName: String // "menu_popcorn_love_combo" - - // 섹션(추천/베스트/기타 등 구분용) - let category: MenuCategory -} - -enum MenuCategory: String { - case recommended = "추천 메뉴" - case best = "베스트 메뉴" -} - - -struct OrderMenuItemModel: Identifiable { - let id: UUID = UUID() - let name: String - let price: Int - let originalPrice: Int? - let imageName: String - let badgeType: MenuBadgeType? - let isSoldOut: Bool - let discountRate: Int? -} - -enum MenuBadgeType { - case best - case recommended -} diff --git a/gonny/MegaBox/MegaBox/Models/Domain/MovieModel.swift b/gonny/MegaBox/MegaBox/Models/Domain/MovieModel.swift deleted file mode 100644 index f5c542b..0000000 --- a/gonny/MegaBox/MegaBox/Models/Domain/MovieModel.swift +++ /dev/null @@ -1,71 +0,0 @@ -// -// HomeModel.swift -// MegaBox -// -// Created by 박병선 on 10/2/25. -// -import Foundation - -//영화정보를 담고 있습니다. -struct Movie : Identifiable, Hashable { - let id = UUID() - let title: String - let poster: String // 이미지 이름 or URL - let audience: String? -} - -//영화 상세정보를 담고 있습니다. -struct MovieDetail: Identifiable, Hashable { - let id = UUID() - let titleKR: String - let titleEN: String - let posterDetail: String - let description: String - let rating: String - let releaseDate: String - - init(from movie: Movie, titleEN: String, posterDetail: String, description: String, rating: String, releaseDate: String) { - self.titleKR = movie.title - self.titleEN = titleEN - self.posterDetail = posterDetail - self.description = description - self.rating = rating - self.releaseDate = releaseDate - } -} - -//HomeView 하단 광고를 개별(영화별)로 만들기 위한 모델입니다. -struct Feed: Identifiable { - let id = UUID() - let title: String - let image: String -} - - -//영화홍보 데이터입니다. -struct AdItem: Identifiable, Hashable { - let id = UUID() - let imageName: String - let title: String - let subtitle: String? -} - -//영화관 지점별 장소 데이터를 감고 있습니다. -enum Theater: String, CaseIterable, Hashable, Identifiable { - case gangnam = "강남" - case hongdae = "홍대" - case shinchon = "신촌" - var id: String { rawValue } -} - -//상영관 정보를 담고 있습니다 -struct Showtime: Identifiable, Hashable { - let id = UUID() - let theater: Theater // 영화관 정보 - let screenName: String // 상영관이름 - let format: String //2D,3D,4D - let start: Date - let end: Date - let remaining: Int - let capacity: Int -} diff --git a/gonny/MegaBox/MegaBox/Models/Domain/MoviePoster.swift b/gonny/MegaBox/MegaBox/Models/Domain/MoviePoster.swift deleted file mode 100644 index c711f6e..0000000 --- a/gonny/MegaBox/MegaBox/Models/Domain/MoviePoster.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// MoviePoster.swift -// MegaBox -// -// Created by 박병선 on 10/9/25. -// -import Foundation - -//영화 포스터 정보를 담고 있습니다. -struct MoviePoster: Identifiable { - let id: Int - let title: String - let poster: String -} diff --git a/gonny/MegaBox/MegaBox/Models/Domain/Profile.swift b/gonny/MegaBox/MegaBox/Models/Domain/Profile.swift deleted file mode 100644 index 52ee56e..0000000 --- a/gonny/MegaBox/MegaBox/Models/Domain/Profile.swift +++ /dev/null @@ -1,12 +0,0 @@ -// -// Profile 2.swift -// MegaBox -// -// Created by 박병선 on 9/23/25. -// 일단 추가하긴 했는데...필요할까 -import Foundation - -struct Profile { - var name: String = "" - var point: Int = 0 -} diff --git a/gonny/MegaBox/MegaBox/Models/Domain/TokenKeychain.swift b/gonny/MegaBox/MegaBox/Models/Domain/TokenKeychain.swift deleted file mode 100644 index 55ff301..0000000 --- a/gonny/MegaBox/MegaBox/Models/Domain/TokenKeychain.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// TokenKeychain.swift -// MegaBox -// -// Created by 박병선 on 11/13/25. -// -import Foundation - -// 비동기 환경에서 토큰을 안전하게 관리하고 갱신하기 위한 목적으로 작성 -protocol TokenProviding { - var accessToken: String? { get set } - func refreshToken(completion: @escaping (String?, Error?) -> Void) -} - -struct TokenInfo: Codable { - var accessToken: String - var refreshToken: String -} diff --git a/gonny/MegaBox/MegaBox/Module/ViewModels/CalendarViewModel.swift b/gonny/MegaBox/MegaBox/Module/ViewModels/CalendarViewModel.swift deleted file mode 100644 index 966872f..0000000 --- a/gonny/MegaBox/MegaBox/Module/ViewModels/CalendarViewModel.swift +++ /dev/null @@ -1,139 +0,0 @@ -// -// CalendarViewModel.swift -// MegaBox -// -// Created by 박병선 on 10/9/25. -// -import SwiftUI -import Foundation - -@Observable -class CalendarViewModel { - var currentMonth: Date // 현재 보고 있는 달의 기준 날짜 - var selectedDate: Date // 사용자가 현재 선택한 날짜 - var calendar: Calendar // 날짜 계싼을 위한 Calendar 객체 - - var currentMonthYear: Int { // 현재 보고 있는 연도를 계산해서 연도로 반환 - Calendar.current.component(.year, from: currentMonth) - } - - init(currentMonth: Date = Date(), selectedDate: Date = Date(), calendar: Calendar = Calendar.current) { - self.currentMonth = currentMonth - self.selectedDate = selectedDate - self.calendar = calendar - } - - - /// 현재 보고 있는 월을 앞/뒤로 이동합니다 - /// - Parameter value: 양수면 다음 달, 음수면 이전 달로 이동해요!, currentMonth를 새로 계산된 월로 갱신합니다. - func changeMonth(by value: Int) { - let calendar = Calendar.current - if let newMonth = calendar.date(byAdding: .month, value: value, to: currentMonth) { - currentMonth = newMonth - } - } - - /// 달력 그리드를 구성하는 CalendarDay 배열을 생성합니다. - /// - Returns: 달력에 표시할 날짜들을 CalendarDay 배열로 생성합니다. 뷰에서 LazyVGrid를 통해 달력 UI를 구성할거에요! - func daysForCurrentGrid() -> [CalendarDay] { - let calendar = Calendar.current - /* - 현재 월의 정보를 계산합니다. - 이 달의 첫 날짜를 기준으로 시작 요일, 일 수 계산을 합니다. - */ - let firstDay = firstDayOfMonth() - let firstWeekDay = calendar.component(.weekday, from: firstDay) - let daysInMonth = numberOfDays(in: currentMonth) - - var days: [CalendarDay] = [] - - /* - 이번 달이 무슨 요일에 시작하는지에 따라, 앞에 몇 개의 셀을 이전 달의 날짜로 채울지 계산합니다. - */ - let leadingDays = (firstWeekDay - calendar.firstWeekday + 7) % 7 - - /* - 달력은 보통 7일 단위 그리드로 구성됩니다. - 어떤 달이 수요일에 시작한다면 앞의 일/월/화는 빈공간이 아닌 이전 달의 날짜로 미리보기로 보이도록 할 수 있죠! - 그래서 이 코드는 그 앞 부분 회색을 생성하는 부분입니다. - */ - if leadingDays > 0, let previousMonth = calendar.date(byAdding: .month, value: -1, to: currentMonth) { - let daysInPreviousMonth = numberOfDays(in: previousMonth) - for i in 0.. 0, - let nextMonth = calendar.date(byAdding: .month, value: 1, to: currentMonth) { - - let daysInNextMonth = numberOfDays(in: nextMonth) - - for day in 1...remaining { - let validDay = min(day, daysInNextMonth) - if let date = calendar.date(bySetting: .day, value: validDay, of: nextMonth) { - days.append(CalendarDay(day: validDay, date: date, isCurrentMonth: false)) - } - } - } - - return days - - } - - /// 입력된 date가 속한 해당 달의 총 일 수를 반환합니다. - /// - Parameter date: date 입력 - /// - Returns: 총 일 수 반환 - func numberOfDays(in date: Date) -> Int { - Calendar.current.range(of: .day, in: .month, for: date)?.count ?? 0 - } - - /// 입력된 date가 속한 달의 첫 번째 날짜가 무슨 요일에 시작하는지 구합니다. - /// - Parameter date: date 입력 - /// - Returns: 요일 값을 반환합니다. 일요일 = 1, 월요일 = 2 .... - private func firstWeekdayOfMonth(in date: Date) -> Int { - let components = Calendar.current.dateComponents([.year, .month], from: date) - let firstDay = Calendar.current.date(from: components)! - return Calendar.current.component(.weekday, from: firstDay) - } - - /// 주어진 date가 속한 일주일 범위의 Date 배열을 반환합니다. weekDay를 기준으로 그 주의 일요일부터 토요일까지 계산합니다. - /// - Returns: 현재 보고 있는 달의 1일 날짜 반환합니다. - func firstDayOfMonth() -> Date { - let compoents = Calendar.current.dateComponents([.year, .month], from: currentMonth) - return Calendar.current.date(from: compoents) ?? Date() - } - - /// 사용자가 날짜를 선택했을 때, 기존 선택된 날짜와 비교하여 필요할 경우에만 선택 날짜를 갱신할 수 있도록 합니다. 달력 앱에서 불필요한 상태 업데이트를 방지하고, 성능을 높이기 위해 자주 사용하는 방식이에요! - /// - Parameter date: 선택한 날짜 업데이트 - public func changeSelectedDate(_ date: Date) { - if calendar.isDate(selectedDate, inSameDayAs: date) { - return - } else { - selectedDate = date - } - } -} diff --git a/gonny/MegaBox/MegaBox/Module/ViewModels/HomeViewModel.swift b/gonny/MegaBox/MegaBox/Module/ViewModels/HomeViewModel.swift deleted file mode 100644 index 316eff4..0000000 --- a/gonny/MegaBox/MegaBox/Module/ViewModels/HomeViewModel.swift +++ /dev/null @@ -1,142 +0,0 @@ -// -// HomeViewModel.swift -// MegaBox -// -// Created by 박병선 on 10/2/25. -// -import SwiftUI - -final class HomeViewModel: ObservableObject { - // 현재 선택된 카테고리 - @Published var selectedCategory: String = "무비차트" - - // 영화 더미 데이터 (실제로는 API fetch 가능) - @Published var movies: [Movie] = [ - Movie(title: "어쩔수가 없다", poster: "noOtherChoice_poster", audience: "누적관객수 20만"), - Movie(title: "극장판 귀멸의 칼날", poster: "demonSlayer_poster", audience: "누적관객수 7만"), - Movie(title: "F1 더 무비", poster: "f1_poster", audience: "누적관객수 4만"), - Movie(title: "얼굴", poster: "face_poster", audience: "누적 관객수 10만") - ] - - //카테고리 선택 - func selectCategory(_ category: String) { - selectedCategory = category - } - - // 상세정보 or 관람평 - @Published var selectedTab: Tab = .info - - // 현재 선택된 영화의 상세정보 - @Published var movieDetail: MovieDetail //initializer 필요함 - - - // 전체 더미 목록 (필요시 유지) - @Published var movieDetails: [MovieDetail] = [ - MovieDetail( - from: Movie(title: "F1 더 무비", poster: "f1_poster", audience: "12세 이상 관람가"), - titleEN: "F1 : The Movie", - posterDetail: "f1_promotion", - description: """ - 최고가 되지 못한 전설 VS 최고가 되고 싶은 루키 - - 한때 주목받는 유망주였지만 끔찍한 사고로 F1에서 우승하지 못하고 - 한순간에 추락한 드라이버 ‘슌 헤이스’(브래드 피트). - 그의 오랜 동료인 ‘루벤 세레브네스’(하비에르 바르뎀)에게 - 레이싱 복귀를 제안받으며 최하위 팀인 APGX에 합류한다. - """, - rating: "12세 이상 관람가", - releaseDate: "2025.06.25" - ), - MovieDetail( - from: Movie(title: "어쩔수가 없다",poster: "noOtherChoice", audience: "누적관객수 20만"), - titleEN: "No Other Choice", - posterDetail: "noOtherChoice", - description: """ - ‘다 이루었다’는 생각이 들 만큼 삶에 만족하던 25년 경력의 제지 전문가 ‘만수’(이병헌). 아내 ‘미리’(손예진), 두 아이, 반려견들과 함께 행복한 일상을 보내던 만수는 회사로부터 돌연 해고 - 통보를 받는다. “미안합니다. 어쩔 수가 없습니다.” 목이 잘려 나가는 듯한 충격에 괴로워하던 만수는, 가족을 위해 석 달 안에 반드시 재취업하겠다고 다짐한다. 그 다짐이 무색하게도, 그는 1년 넘게 - 마트에서 일하며 면접장을 전전하고, 급기야 어렵게 장만한 집마저 빼앗길 위기에 처한다. - """, - rating: "15세 관람가", - releaseDate: "2024.09.24" - ), - MovieDetail( - from: Movie(title: "극장판 귀멸의 칼날", poster: "demonSlayer_poster", audience: "누적관객수 7만"), - titleEN: "Demon Slayer", - posterDetail: "deadpool_promotion", - description: """ - 역대급 콤비가 돌아왔다! 세상에서 제일 유쾌한 히어로 듀오의 폭주 액션! - """, - rating: "청소년 관람불가", - releaseDate: "2024.07.24" - ), - MovieDetail( - from: Movie(title: "얼굴", poster: "face_poster", audience: "누적 관객수 10만"), - titleEN: "Face", - posterDetail: "face_poster", - description: """ - 최고가 되지 못한 전설 VS 최고가 되고 싶은 루키 - - 한때 주목받는 유망주였지만 끔찍한 사고로 F1에서 우승하지 못하고 - 한순간에 추락한 드라이버 ‘슌 헤이스’(브래드 피트). - 그의 오랜 동료인 ‘루벤 세레브네스’(하비에르 바르뎀)에게 - 레이싱 복귀를 제안받으며 최하위 팀인 APGX에 합류한다. - """, - rating: "12세 이상 관람가", - releaseDate: "2025.06.25" - ) - - ] - - init() { - // 더미 데이터 중 첫 번째를 기본으로 설정 - self.movieDetail = MovieDetail( - from: Movie(title: "F1 더 무비", poster: "f1_poster", audience: "12세 이상 관람가"), - titleEN: "F1 : The Movie", - posterDetail: "f1_promotion", - description: """ - 최고가 되지 못한 전설 VS 최고가 되고 싶은 루키 - - 한때 주목받는 유망주였지만 끔찍한 사고로 F1에서 우승하지 못하고 - 한순간에 추락한 드라이버 ‘슌 헤이스’(브래드 피트). - 그의 오랜 동료인 ‘루벤 세레브네스’(하비에르 바르뎀)에게 - 레이싱 복귀를 제안받으며 최하위 팀인 APGX에 합류한다. - """, - rating: "12세 이상 관람가", - releaseDate: "2025.06.25" - ) - } - - - - enum Tab: String, CaseIterable, Identifiable { - case info = "상세 정보" - case reviews = "실관람평" - var id: String { rawValue } - } - - //포스터 클릭 시 MovieDetailView로 넘어가게 하는 함수 - func detail(for movie: Movie) -> MovieDetail? { - // 1. movies 배열에서 같은 Movie를 찾아서 index 구함 - if let index = movies.firstIndex(of: movie), - movieDetails.indices.contains(index) { - return movieDetails[index] - } - // 2. 혹시 몰라서 title 기준으로 한 번 더 탐색 (보너스) - return movieDetails.first { $0.titleKR == movie.title } - } - -} - - - -//하단의 adVM -final class AdViewModel: ObservableObject { - @Published var items: [AdItem] = [ - AdItem(imageName: "mono_san", - title: "9월, 메가박스의 영화들(1) - 명작들의 재개봉", - subtitle: "<모노노케 히메>, <퍼펙트 블루>"), - AdItem(imageName: "face_promotion", - title: "메가박스 오리지널 티켓 Re.37 <얼굴>", - subtitle: "영화 속 양극적인 감정의 대비") - ] -} diff --git a/gonny/MegaBox/MegaBox/Module/ViewModels/LoginViewModel.swift b/gonny/MegaBox/MegaBox/Module/ViewModels/LoginViewModel.swift deleted file mode 100644 index bf27cb2..0000000 --- a/gonny/MegaBox/MegaBox/Module/ViewModels/LoginViewModel.swift +++ /dev/null @@ -1,96 +0,0 @@ -// -// LoginViewModel.swift -// MegaBox -// -// Created by 박병선 on 9/23/25. -// -import Foundation -import Security -import Observation -import SwiftUI - - -class LoginViewModel: ObservableObject { - var loginModel: LoginModel = LoginModel() - - private let keychain = KeychainService.shared - private let service = "com.umc.MegaBox" - - - //로그인상태 Appstorage에 저장 - @AppStorage("isLoggedIn") var isLoggedIn: Bool = false - @Published var userId: String = "" - @Published var password: String = "" - @Published var userName: String = "" // 마이페이지 표시용 - /* - /// 로그인 성공 시 호출 - func saveToKeychain() { - // 아이디 저장 (이건 account로 쓰고) - // 비밀번호는 "아이디"를 account로 해서 저장 - keychain.savePasswordToKeychain( - account: loginModel.id, - service: service, - password: loginModel.pwd - ) - - // 마이페이지에서 이름처럼 쓰고 싶으면 이런 식으로 따로 하나 저장해도 돼 - keychain.savePasswordToKeychain( - account: "user_name", - service: service, - password: loginModel.id - ) - } - - /// 앱 켤 때 자동로그인 시도할 때 호출 - func loadFromKeychainIfExists() -> Bool { - // 이름(또는 아이디)부터 가져와보고 - if let savedId = keychain.load(account: "user_name", service: service), - let savedPw = keychain.load(account: savedId, service: service) { - - // 뷰에서 보여줄 수 있게 세팅 - self.loginModel.id = savedId - self.loginModel.pwd = savedPw - return true - } - return false - } - - // 로그인 버튼 클릭 시 실행 - func login() { - /// 실제 서버 인증 대신 단순 검증 예시 - guard !userId.isEmpty, !password.isEmpty else { return } - - ///Keychain에 등록 - keychain.savePasswordToKeychain(account: userId, service: service, password: password) - keychain.savePasswordToKeychain(account: "user_name", service: service, password: userId) // 이름도 저장 - - /// 로그인 상태 true - isLoggedIn = true - } - - // 앱 실행 시 자동 로그인 시도 - func autoLogin() { - - guard isLoggedIn == false else { return } - - if let savedId = keychain.load(account: "user_name", service: service), - let _ = keychain.load(account: savedId, service: service) { - self.userId = savedId - self.userName = savedId - self.isLoggedIn = true - } - } - - - func logout() { - keychain.delete(account: userId, service: service) - keychain.delete(account: "user_name", service: service) - isLoggedIn = false - } - - - -} - */ - -} diff --git a/gonny/MegaBox/MegaBox/Module/ViewModels/MobileOrderViewModel.swift b/gonny/MegaBox/MegaBox/Module/ViewModels/MobileOrderViewModel.swift deleted file mode 100644 index cbb732c..0000000 --- a/gonny/MegaBox/MegaBox/Module/ViewModels/MobileOrderViewModel.swift +++ /dev/null @@ -1,114 +0,0 @@ -// -// MobileOrderViewModel.swift -// MegaBox -// -// Created by 박병선 on 11/20/25. -// -import Foundation - -struct MenuItemSampleData { - static let recommended: [MenuItemModel] = [ - .init(name: "러브 콤보", - price: 10900, - imageName: "menu_popcorn_love_combo", - category: .recommended), - .init(name: "더블 콤보", - price: 24900, - imageName: "menu_popcorn_double_combo", - category: .recommended), - .init(name: "디즈니 픽사 포토 세트", - price: 15900, - imageName: "menu_disney_photo_set", - category: .recommended) - ] - - static let best: [MenuItemModel] = [ - .init(name: "싱글 패키지", - price: 12900, - imageName: "menu_single_package", - category: .best), - .init(name: "러브 콤보", - price: 10900, - imageName: "menu_popcorn_love_combo", - category: .best), - .init(name: "러브 콤보 패키지", - price: 18900, - imageName: "menu_popcorn_love_combo_package", - category: .best) - ] - - static let all: [OrderMenuItemModel] = [ - .init( - name: "싱글 콤보", - price: 10_900, - originalPrice: nil, - imageName: "menu_single_package", - badgeType: .best, - isSoldOut: false, - discountRate: nil - ), - .init( - name: "러브 콤보", - price: 10_900, - originalPrice: nil, - imageName: "menu_love_combo", - badgeType: .best, - isSoldOut: false, - discountRate: nil - ), - .init( - name: "더블 콤보", - price: 24_900, - originalPrice: nil, - imageName: "menu_double_combo", - badgeType: .best, - isSoldOut: false, - discountRate: nil - ), - .init( - name: "러브 콤보 패키지", - price: 32_000, - originalPrice: nil, - imageName: "menu_love_combo_package", - badgeType: nil, - isSoldOut: false, - discountRate: nil - ), - .init( - name: "패밀리 콤보 패키지", - price: 47_000, - originalPrice: nil, - imageName: "menu_family_combo_package", - badgeType: nil, - isSoldOut: false, - discountRate: nil - ), - .init( - name: "메가박스 오리지널 티켓북 시즌4 톨비...", - price: 10_900, - originalPrice: nil, - imageName: "menu_ticketbook", - badgeType: .recommended, - isSoldOut: false, - discountRate: nil - ), - .init( - name: "디즈니 픽사 포스터", - price: 15_900, - originalPrice: nil, - imageName: "menu_disney_poster", - badgeType: nil, - isSoldOut: true, - discountRate: nil - ), - .init( - name: "인사이드아웃2 감정", - price: 29_900, - originalPrice: 35_900, - imageName: "menu_insideout2", - badgeType: nil, - isSoldOut: false, - discountRate: 20 - ) - ] -} diff --git a/gonny/MegaBox/MegaBox/Module/ViewModels/MovieSearchViewModel.swift b/gonny/MegaBox/MegaBox/Module/ViewModels/MovieSearchViewModel.swift deleted file mode 100644 index 8f5ea09..0000000 --- a/gonny/MegaBox/MegaBox/Module/ViewModels/MovieSearchViewModel.swift +++ /dev/null @@ -1,86 +0,0 @@ -// -// MovieSearchViewModel.swift -// MegaBox -// -// Created by 박병선 on 10/9/25. -// -import SwiftUI -import Combine - - -final class MovieSearchViewModel: ObservableObject { - - //영화 목록 더미 데이터 - @Published var movies: [Movie] = [ - .init(title: "F1 더 무비", poster: "f1_poster", audience: "30만"), - .init(title: "귀멸의 칼날", poster: "demonSlayer_poster", audience: "1"), - .init(title: "어쩔 수가 없다", poster: "noOtherChoice_poster", audience: "20만"), - .init(title: "얼굴", poster: "face_poster", audience: nil), - .init(title: "모노노케 히메", poster: "mono_poster", audience: nil), - .init(title: "보스", poster: "boss_poster", audience: nil), - .init(title: "야당", poster: "yadang_poster", audience: nil), - .init(title: "THE ROSES", poster: "theRoses_poster", audience: nil) - ] - - //검색창에서 입력되는 텍스트 - @Published var query: String = "" // 검색 위한 쿼리 - @Published var results: [Movie] = [] // 검색 결과 목록 - @Published var isLoading = false //검색 중이리 때 로딩 상태 - @Published var errorMessage: String? //검색 실패 시 에러 메세지 - - @Published var selectedMovie: Movie? = nil // 사용자가 클릭한 영화저장 - - private var bag = Set() //Combine 구독 저장소(메모리 해제 방지) - - //initializer - 검색 흐름 파이프라인 - init() { - $query //시작 Publisher - .debounce(for: .milliseconds(400), scheduler: DispatchQueue.main) - .removeDuplicates()//같은 값으로 검색하는 것을 방지 - .handleEvents(receiveOutput: { [weak self] _ in //검색 직전 에러메세지 초기화 - self?.errorMessage = nil - }) - .flatMap { query in //query 값을 받아서 search() 함수를 실행하고 그 결과를 downstream으로 보냄 - self.search(query: query) - } - .receive(on: DispatchQueue.main) //UI업데이트는 메인 스레드에서 이뤄져야 하므로 메인큐로 전환 - .sink { [weak self] completion in //Publisher의 최종 구독 단계 - if case .failure(let err) = completion { //에러처리(검색 실패) - self?.errorMessage = "검색 실패: \(err.localizedDescription)" - self?.results = [] - } - } receiveValue: { [weak self] items in//성공 시 results에 결과 저장 - self?.results = items - } - .store(in: &bag) - } - - //검색 함수 - private func search(query: String) -> AnyPublisher<[Movie], Error> { - //Future는 한 번만 결과를 내는 비동기 Publisher - return Future<[Movie], Error> { [weak self] promise in - let delay = Double(Int.random(in: 300...700)) / 1000.0 - guard let self else { return } - - DispatchQueue.global().asyncAfter(deadline: .now() + delay) { - let filtered = self.movies.filter { $0.title.lowercased().contains(query) } - promise(.success(filtered)) - } - } - .handleEvents( - receiveSubscription: { _ in //검색 실패 - DispatchQueue.main.async { - self.isLoading = true - } - }, - receiveCompletion: { _ in //검색 성공 - DispatchQueue.main.async { - self.isLoading = false - } - } - ) - .eraseToAnyPublisher() - } - -} - diff --git a/gonny/MegaBox/MegaBox/Module/ViewModels/MovieViewModel.swift b/gonny/MegaBox/MegaBox/Module/ViewModels/MovieViewModel.swift deleted file mode 100644 index fb8cf27..0000000 --- a/gonny/MegaBox/MegaBox/Module/ViewModels/MovieViewModel.swift +++ /dev/null @@ -1,244 +0,0 @@ -// -// MovieViewModel.swift -// MegaBox -// -// Created by 박병선 on 10/9/25. -// -import Foundation -import Combine - - -@MainActor -final class MovieViewModel: ObservableObject { - - // 포스터 가로 스크롤용(초기 더미 — JSON 로딩 후 덮어씌워짐) - @Published var movies: [Movie] = [ - .init(title: "F1 더 무비", poster: "f1_poster", audience: "30만"), - .init(title: "귀멸의 칼날", poster: "demonSlayer_poster", audience: "1"), - .init(title: "어쩔수가없다", poster: "noOtherChoice_poster", audience: "20만"), - .init(title: "얼굴", poster: "face_poster", audience: nil), - .init(title: "모노노케 히메", poster: "mono_poster", audience: nil), - .init(title: "보스", poster: "boss_poster", audience: nil), - .init(title: "야당", poster: "yadang_poster", audience: nil), - .init(title: "THE ROSES", poster: "theRoses_poster", audience: nil) - ] - - /// 홈 리스트에 보여줄 영화들 - @Published var nowPlayingMovies: [Movie] = [] - - /// 선택된 영화의 상세 정보 - @Published var selectedMovieDetail: MovieDetail? - - /// 로딩 상태 - @Published var isLoading: Bool = false - - /// 에러 메시지 (필요 시 Alert 등에 사용) - @Published var errorMessage: String? - - // MARK: - Dependencies - - private let tmdbService: TMDBServicing - - /// 상세를 만들 때 원본 DTO가 필요하므로 캐싱해 둠 - private var nowPlayingDTOs: [PlayingMovieDTO] = [] - - // MARK: - Init - - init(tmdbService: TMDBServicing = TMDBService.shared) { - self.tmdbService = tmdbService - self.movieSelect() - } - - // 선택 상태 - @Published var selectedMovie: Movie? = nil - @Published var selectedTheaters: Set = [] - @Published var selectedDate: Date? = nil - - // UI 제어/데이터 - @Published private(set) var week: [Date] = [] - @Published private(set) var showTheater = false - @Published private(set) var showDate = false - @Published private(set) var showtimes: [Theater: [Showtime]] = [:] // Showtime으로 통일 - @Published private(set) var isShowtimeVisible = false - - private var bag = Set() - - - private func movieSelect() { - // 극장 버튼 활성화: 영화 선택 여부 - $selectedMovie - .map { $0 != nil } - .assign(to: &$showTheater) - - // 날짜 선택 활성화: 영화 + 극장 1개 이상 - Publishers.CombineLatest( - $selectedMovie.map { $0 != nil }, - $selectedTheaters.map { !$0.isEmpty } - ) - .map { $0 && $1 } - .assign(to: &$showDate) - - // 하단 상영정보 표시 조건: 영화 + 극장 + 날짜 - Publishers.CombineLatest3($selectedMovie, $selectedTheaters, $selectedDate) - .map { movie, theaters, date in - movie != nil && !theaters.isEmpty && date != nil - } - .assign(to: &$isShowtimeVisible) - } - - - // MARK: - JSON 원본(ShowtimeViewModel의 결과) 보관/사용 - private var rawShowtimeMovies: [ShowtimeMovie] = [] - - func ingest(showtimes: [ShowtimeMovie]) { - self.rawShowtimeMovies = showtimes - } - - // MovieViewModel 안 - private func rawForSelectedMovie() -> ShowtimeMovie? { - guard let sel = selectedMovie else { return nil } - func norm(_ s: String) -> String { s.replacingOccurrences(of: " ", with: "").lowercased() } - return rawShowtimeMovies.first { norm($0.title) == norm(sel.title) } - } - - func ensureDefaultDateIfNeeded() { - guard selectedDate == nil else { return } - guard let raw = rawForSelectedMovie(), - let firstYMD = raw.schedules.first?.date, - let firstDate = ymdToDate(firstYMD) else { return } - selectedDate = firstDate - } - - - func refreshShowtime() { - guard let selectedMovie else { - self.showtimes = [:] - return - } - - // 선택된 영화(제목 기준) 찾기 - guard let raw = rawShowtimeMovies.first(where: { $0.title == selectedMovie.title }) else { - self.showtimes = [:] - return - } - - var bucket: [Theater: [Showtime]] = [:] - - // 문자열 비교 대신 "같은 날인지" 비교하도록 수정 - for schedule in raw.schedules { - if let selectedDate, - let scheduleDate = ymdToDate(schedule.date), - !Calendar.current.isDate(scheduleDate, inSameDayAs: selectedDate) { - continue - } - - for area in schedule.areas { - guard let theater = Theater(rawValue: area.area) else { continue } - if !selectedTheaters.isEmpty && !selectedTheaters.contains(theater) { continue } - - for auditorium in area.items { // ShowtimeAuditorium - for slot in auditorium.showtimes { // ShowtimeSlot - if let start = combine(date: schedule.date, time: slot.start), - let end = combine(date: schedule.date, time: slot.end) { - - let showtime = Showtime( - theater: theater, - screenName: auditorium.auditorium, - format: auditorium.format, - start: start, - end: end, - remaining: slot.available, - capacity: slot.total - ) - bucket[theater, default: []].append(showtime) - } - } - } - } - } - - // 시간순 정렬 - for key in bucket.keys { - bucket[key]?.sort { $0.start < $1.start } - } - - self.showtimes = bucket - - // 디버깅용 - print("DBG selectedDate:", selectedDate as Any) - print("DBG showtimes:", showtimes.mapValues { $0.count }) - } - - // MARK: - 날짜 + 시간 문자열을 Date로 변환 - private func combine(date ymd: String, time hm: String) -> Date? { - let f = DateFormatter() - f.locale = Locale(identifier: "ko_KR") - f.timeZone = .current - f.dateFormat = "yyyy-MM-dd HH:mm" - return f.date(from: "\(ymd) \(hm)") - } - - private func ymdToDate(_ ymd: String) -> Date? { - let f = DateFormatter() - f.locale = .init(identifier: "ko_KR") - f.timeZone = .current - f.dateFormat = "yyyy-MM-dd" - return f.date(from: ymd) - } - - //MARK: -TMDB API처리 함수들 - /// 뷰에서 호출할 진입 함수 - /// 예: .task { await viewModel.loadNowPlaying() } - func loadNowPlaying( - page: Int = 1, - language: String = "ko-KR", - region: String? = "KR" - ) async { - isLoading = true - errorMessage = nil - - do { - // TMDBService의 async/await 함수 호출 - let response = try await tmdbService.fetchNowPlayingAsync( - page: page, - language: language, - region: region - ) - - // 원본 DTO 저장 (상세 변환 등에 사용) - nowPlayingDTOs = response.results - - // DTO -> 도메인(Movie)로 매핑 - nowPlayingMovies = response.results.map { $0.toMovie() } - - } catch { - print("[MovieViewModel] Now Playing 요청 실패: \(error)") - errorMessage = "영화 목록을 불러오지 못했습니다." - } - - isLoading = false - } - - /// 리스트에서 특정 영화를 선택했을 때 상세 정보 생성 - /// - Parameter index: nowPlayingMovies의 인덱스 - func selectMovie(at index: Int) { - guard nowPlayingDTOs.indices.contains(index) else { - print("[MovieViewModel] 잘못된 인덱스 접근: \(index)") - return - } - - let dto = nowPlayingDTOs[index] - selectedMovieDetail = dto.toMovieDetail() - } - - /// Movie 자체를 받아서 상세 생성하고 싶을 때 (선택사항) - func selectMovie(_ movie: Movie) { - // title 기준으로 DTO 매칭 (간단 구현) - guard let dto = nowPlayingDTOs.first(where: { $0.title == movie.title }) else { - print("[MovieViewModel] 해당 Movie에 대응하는 DTO를 찾을 수 없음") - return - } - selectedMovieDetail = dto.toMovieDetail() - } - } - diff --git a/gonny/MegaBox/MegaBox/Module/ViewModels/ShowtimeViewModel.swift b/gonny/MegaBox/MegaBox/Module/ViewModels/ShowtimeViewModel.swift deleted file mode 100644 index bb70e5f..0000000 --- a/gonny/MegaBox/MegaBox/Module/ViewModels/ShowtimeViewModel.swift +++ /dev/null @@ -1,59 +0,0 @@ -// -// ShowtimeViewModel.swift -// MegaBox -// -// Created by 박병선 on 10/30/25. -// -import Foundation - -@MainActor -// 상영관별 상영시간 정보를 담은 JSON을 Encoing하는 기능을 담음 -final class ShowtimeViewModel: ObservableObject { - @Published var movies: [ShowtimeMovie] = [] - @Published var isLoading: Bool = false - @Published var errorMessage: String? - - func fetchShowtimes() async { - print(" fetchShowtimes() CALLED") //디버깅용 - isLoading = true - errorMessage = nil - - // 1) 파일 찾기 - guard let url = Bundle.main.url(forResource: "MovieSchedule", withExtension: "json") else { - let msg = " MovieShedule.json을 번들에서 찾을 수 없음 " - print(msg) //디버깅용 - self.errorMessage = msg - self.isLoading = false - return - } - print("JSON URL:", url.lastPathComponent) - - do { - let data = try Data(contentsOf: url) - - - let response = try JSONDecoder().decode(ShowtimesResponse.self, from: data) - print("decode OK. movies:", response.data.movies.count) - - let converted = response.data.movies.map { $0.toDomain() } - self.movies = converted - self.isLoading = false - - // 샘플 출력 (첫 영화/첫 날짜/첫 지역) - if let m = converted.first { - print(" sample title:", m.title) - if let s = m.schedules.first { - print("sample date:", s.date) - if let a = s.areas.first { - print("sample area:", a.area, "items:", a.items.count) - } - } - } - } catch { - let msg = " JSON 디코딩 실패: \(error)" - print(msg) - self.errorMessage = msg - self.isLoading = false - } - } -} diff --git a/gonny/MegaBox/MegaBox/Module/Views/BaseTabView.swift b/gonny/MegaBox/MegaBox/Module/Views/BaseTabView.swift deleted file mode 100644 index 3d67c84..0000000 --- a/gonny/MegaBox/MegaBox/Module/Views/BaseTabView.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// BaseTabView.swift -// MegaBox -// -// Created by 박병선 on 9/30/25. -// -import SwiftUI - -struct BaseTabView: View { - @Environment(NavigationRouter.self) var router - - var body: some View { - TabView { - HomeView(viewModel: HomeViewModel(), vm: MovieViewModel()).tabItem { - Image(systemName: "house.fill" ) - Text("홈") - } - - ReserveView().tabItem { - Image(systemName: "ticket.fill" ) - Text("바로 예매") - } - - MobileOrderView().tabItem { - Image(systemName: "popcorn.fill" ) - Text("모바일 오더") - } - - ProfileView().tabItem { - Image(systemName: "person.fill" ) - Text("마이 페이지") - } - } - } -} diff --git a/gonny/MegaBox/MegaBox/Module/Views/Components/MenuItemCardView.swift b/gonny/MegaBox/MegaBox/Module/Views/Components/MenuItemCardView.swift deleted file mode 100644 index 7b2ac0a..0000000 --- a/gonny/MegaBox/MegaBox/Module/Views/Components/MenuItemCardView.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// MenuItemCardView.swift -// MegaBox -// -// Created by 박병선 on 11/20/25. -// -import SwiftUI - -struct MenuItemCardView: View { - let item: MenuItemModel - - var body: some View { - VStack(alignment: .leading, spacing: 8) { - // 이미지 - Image(item.imageName) - .resizable() - .scaledToFit() - .frame(width: 160, height: 160) - .clipped() - - // 이름 - Text(item.name) - .font(.system(size: 14, weight: .medium)) - .foregroundStyle(.black00) - .lineLimit(2) - - // 가격 - Text("\(item.price.formatted())원") - .font(.system(size: 13, weight: .semibold)) - .foregroundStyle(.black00) - } - .padding(10) - .frame(width: 140, alignment: .leading) - .background(Color.white) - .cornerRadius(9) - .shadow(color: Color.black.opacity(0.08), radius: 4, x: 0, y: 2) - } -} - -#Preview { - ScrollView(.horizontal, showsIndicators: false) { - HStack(spacing: 12) { - ForEach(MenuItemSampleData.recommended) { item in - MenuItemCardView(item: item) - } - } - .padding() - .background(Color(.systemGray6)) - } -} diff --git a/gonny/MegaBox/MegaBox/Module/Views/Components/OrderMenuItemCardView.swift b/gonny/MegaBox/MegaBox/Module/Views/Components/OrderMenuItemCardView.swift deleted file mode 100644 index 446b3c3..0000000 --- a/gonny/MegaBox/MegaBox/Module/Views/Components/OrderMenuItemCardView.swift +++ /dev/null @@ -1,43 +0,0 @@ -// -// OrderMenuItem.swift -// MegaBox -// -// Created by 박병선 on 11/20/25. -// -import SwiftUI - -struct OrderMenuItemCardView: View { - let item: OrderMenuItemModel - - var body: some View { - VStack(alignment: .leading, spacing: 8) { - Image(item.imageName) - .resizable() - .scaledToFit() - .frame(height: 130) - - Text(item.name) - .font(.system(size: 14)) - .foregroundColor(.black) - - HStack(spacing: 4) { - if let original = item.originalPrice { - Text("\(original.formatted())원") - .foregroundColor(.gray) - .strikethrough() - } - - Text("\(item.price.formatted())원") - .fontWeight(.semibold) - } - } - .padding(12) - .background(Color.white) - .cornerRadius(16) - .shadow(color: .black.opacity(0.05), radius: 4) - .bestBadge(item.badgeType == .best) - .recommendedBadge(item.badgeType == .recommended) - .discount(item.discountRate) - .soldOut(item.isSoldOut) - } -} diff --git a/gonny/MegaBox/MegaBox/Module/Views/Components/TheaterChangeBarView.swift b/gonny/MegaBox/MegaBox/Module/Views/Components/TheaterChangeBarView.swift deleted file mode 100644 index 225603c..0000000 --- a/gonny/MegaBox/MegaBox/Module/Views/Components/TheaterChangeBarView.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// TheaterChangeBarView.swift -// MegaBox -// -// Created by 박병선 on 11/20/25. -// -import SwiftUI - -struct TheaterChangeBarView: View { - let theaterName: String - let onChangeTheater: () -> Void - - var body: some View { - HStack(spacing: 8) { - Image(systemName: "mappin.and.ellipse") - .foregroundColor(.black) - - Text(theaterName) - .font(.pretendardRegular(14)) - .foregroundStyle(.black00) - - Spacer() - - Button(action: onChangeTheater) { - Text("극장 변경") - .font(.pretendardSemiBold(13)) - .padding(.horizontal, 16) - .padding(.vertical, 6) - .foregroundStyle(Color(hex: "660ED8")) - .overlay( - RoundedRectangle(cornerRadius: 16) - .stroke(Color(hex: "660ED8"), lineWidth: 1) - ) - } - } - .padding(.horizontal, 16) - .padding(.vertical, 10) - .background(Color.white) - } -} diff --git a/gonny/MegaBox/MegaBox/Module/Views/Components/TopTheaterBarView.swift b/gonny/MegaBox/MegaBox/Module/Views/Components/TopTheaterBarView.swift deleted file mode 100644 index df99368..0000000 --- a/gonny/MegaBox/MegaBox/Module/Views/Components/TopTheaterBarView.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// TopTheaterBarView.swift -// MegaBox -// -// Created by 박병선 on 11/20/25. -// -import SwiftUI - -struct TopTheaterBarView: View { - let theaterName: String - let onChangeTheater: () -> Void - - var body: some View { - VStack(spacing: 0) { - HStack { - Image(systemName: "location.circle.fill") - .resizable() - .frame(width: 16, height:16) - .foregroundStyle(.white00) - // 지점명 - Text(theaterName) - .font(.system(size: 14, weight: .medium)) - .foregroundColor(.white) - - Spacer() - - Button(action: { - onChangeTheater() - }) { - Text("극장 변경") - .font(.pretendardSemiBold(13)) - .padding(.horizontal, 16) - .padding(.vertical, 8) - .foregroundStyle(.white00) - .overlay( - RoundedRectangle(cornerRadius: 20) - .stroke(Color.white, lineWidth: 1) - ) - } - } - .padding(.horizontal, 16) - .padding(.vertical, 10) - } - .background(Color(hex: "660ED8")) - } -} - -#Preview { - TopTheaterBarView(theaterName: "강남", onChangeTheater: {})//프리뷰에서는 실제 클로저를 넘겨줘야됨 -} diff --git a/gonny/MegaBox/MegaBox/Module/Views/Components/ViewModifier.swift b/gonny/MegaBox/MegaBox/Module/Views/Components/ViewModifier.swift deleted file mode 100644 index 8edccaa..0000000 --- a/gonny/MegaBox/MegaBox/Module/Views/Components/ViewModifier.swift +++ /dev/null @@ -1,97 +0,0 @@ -// -// ViewModifier.swift -// MegaBox -// -// Created by 박병선 on 11/20/25. -// -import SwiftUI - - - -// MARK: - BEST / 추천 뱃지 - -struct BadgeModifier: ViewModifier { - let type: MenuBadgeType? - - func body(content: Content) -> some View { - ZStack(alignment: .topLeading) { - content - - if let type { - let text = (type == .best) ? "BEST" : "추천" - let color = (type == .best) - ? Color(red: 1.0, green: 0.38, blue: 0.38) - : Color(red: 0.27, green: 0.51, blue: 0.96) - - Text(text) - .font(.system(size: 11, weight: .bold)) - .padding(.horizontal, 8) - .padding(.vertical, 4) - .background(color) - .foregroundColor(.white) - .cornerRadius(4) - .padding(8) - } - } - } -} - - -struct SoldOutModifier: ViewModifier { - let isSoldOut: Bool - - func body(content: Content) -> some View { - ZStack { - content - - if isSoldOut { - Color.black.opacity(0.45) - .cornerRadius(16) - - Text("품절") - .font(.system(size: 16, weight: .bold)) - .foregroundColor(.white) - } - } - } -} - -struct DiscountModifier: ViewModifier { - let discountRate: Int? - - func body(content: Content) -> some View { - ZStack(alignment: .bottomTrailing) { - content - - if let rate = discountRate { - Text("\(rate)%") - .font(.system(size: 11, weight: .bold)) - .padding(.horizontal, 6) - .padding(.vertical, 3) - .background(Color.red) - .foregroundColor(.white) - .cornerRadius(4) - .padding(8) - } - } - } -} - -// MARK: - View 확장 -extension View { - func bestBadge(_ isBest: Bool) -> some View { - self.modifier(BadgeModifier(type: isBest ? .best : nil)) - } - - func recommendedBadge(_ isRecommended: Bool) -> some View { - self.modifier(BadgeModifier(type: isRecommended ? .recommended : nil)) - } - - func soldOut(_ isSoldOut: Bool) -> some View { - self.modifier(SoldOutModifier(isSoldOut: isSoldOut)) - } - - func discount(_ rate: Int?) -> some View { - self.modifier(DiscountModifier(discountRate: rate)) - } -} diff --git a/gonny/MegaBox/MegaBox/Module/Views/HomeView.swift b/gonny/MegaBox/MegaBox/Module/Views/HomeView.swift deleted file mode 100644 index 9228997..0000000 --- a/gonny/MegaBox/MegaBox/Module/Views/HomeView.swift +++ /dev/null @@ -1,294 +0,0 @@ -// -// HomeView.swift -// MegaBox -// -// Created by 박병선 on 9/30/25. -// -import SwiftUI -import Kingfisher - -struct HomeView: View { - @Environment(NavigationRouter.self) var router - @StateObject var viewModel: HomeViewModel - @StateObject var vm: MovieViewModel - - var body: some View { - @Bindable var router = router - - NavigationStack(path: $router.path) { - VStack(spacing: 10) { - // 상단 탭바 - TopTabBar() - - ScrollView(.vertical, showsIndicators: false) { - VStack(alignment: .leading, spacing: 24) { - - // 카테고리 버튼(무비차트/상영예정) - CategorySelector() - .padding(.horizontal, 16) - - // 영화 포스터 가로 스크롤 - PosterScrollSection(viewModel: viewModel) - - // 무비피드 - MovieFeedSection() - - PromotionSection() - } - .padding(.vertical, 12) - } - .background(Color.white) - } - - if vm.isLoading { - Color.black.opacity(0.2) - .ignoresSafeArea() - ProgressView("영화 불러오는 중...") - .padding() - .background(.ultraThinMaterial) - .cornerRadius(12) - } - } - // navigationDestination을 MovieDetail 타입으로 연결 - .navigationDestination(for: MovieDetail.self) { detail in - MovieDetailView(movieDetail: detail) - } - // 화면이 나타날 때 TMDB API 한 번 호출 - .task { - await vm.loadNowPlaying() - } - } - - } - -// MARK: - 상단 탭바 -struct TopTabBar: View { - let tabs = ["홈", "이벤트", "스토어", "선호극장"] - @State private var selected = "홈" - - var body: some View { - VStack(alignment: .leading, spacing: 10) { - Image("megabox_logo") - .resizable() - .frame(width: 149, height: 30) - .padding(.leading) - .padding(.top) - - HStack(spacing: 24) { - ForEach(tabs, id: \.self) { tab in - Text(tab) - .font(.pretendardSemiBold(24)) - .foregroundStyle(selected == tab ? .black00 : .gray06) - .onTapGesture { selected = tab } - } - Spacer() - } - .padding(.horizontal, 16) - .padding(.top, 8) - } - } -} - -// MARK: - 카테고리 선택 -struct CategorySelector: View { - @State private var selected = "무비차트" - let categories = ["무비차트", "상영예정"] - - var body: some View { - HStack(spacing: 12) { - ForEach(categories, id: \.self) { category in - Text(category) - .font(.pretendardMedium(14)) - .foregroundStyle( - selected == category ? Color("white00") : Color("gray04") - ) - .padding(.horizontal, 16) - .padding(.vertical, 8) - .background { - if selected == category { - Capsule().fill(Color("gray08")) - } else { - Capsule().fill(Color("gray02")) - } - } - .onTapGesture { selected = category } - } - } - } -} - -// MARK: - 포스터 스크롤 섹션 -struct PosterScrollSection: View { - @Environment(NavigationRouter.self) var router - @ObservedObject var viewModel: HomeViewModel - - var body: some View { - VStack(alignment: .leading, spacing: 20) { - ScrollView(.horizontal, showsIndicators: false) { - HStack(spacing: 16) { - ForEach(viewModel.movies) { movie in - PosterCard(movie: movie, viewModel: viewModel) - } - } - .padding(.horizontal, 16) - } - } - } -} - -// MARK: - 포스터 카드 -private struct PosterCard: View { - @Environment(NavigationRouter.self) var router - let movie: Movie - let viewModel: HomeViewModel - - var body: some View { - VStack { - // 포스터 클릭 → TMDB에서 매핑된 MovieDetailView로 이동 - Button { - /* API 연결 전 코드 */ - /* - if let detail = viewModel.movieDetails.first(where: { $0.titleKR == movie.title }) { - router.push(detail) // 단순히 detail을 path에 추가 - } - */ - if let detail = viewModel.detail(for: movie) { - router.push(detail) - } - } - /* - API 연결 전 - label: { - Image(movie.poster) - .resizable() - .scaledToFill() - .frame(width: 140, height: 200) - .cornerRadius(8) - .padding(.bottom, 5) - } -*/ - label: { - KFImage(URL(string: movie.poster)) - .placeholder { // 이이미지 로딩 중 - ZStack { - Rectangle() - .fill(Color("gray02")) - .frame(width: 140, height: 200) - .cornerRadius(8) - ProgressView() - } - } - .retry(maxCount: 2, interval: .seconds(1)) - .cancelOnDisappear(true) - .resizable() - .scaledToFill() - .frame(width: 140, height: 200) - .cornerRadius(8) - .clipped() - .padding(.bottom, 5) - } - // 바로 예매 버튼 - Button(action: {}) { - Text("바로 예매") - .font(.pretendardMedium(16)) - .foregroundStyle(.purple03) - .padding(.horizontal, 12) - .padding(.vertical, 4) - .background( - RoundedRectangle(cornerRadius: 10) - .stroke(Color.purple03, lineWidth: 1) - .frame(width: 140, height: 36) - ) - } - - VStack(alignment: .leading, spacing: 5) { - Text(movie.title) - .font(.pretendardBold(22)) - .foregroundStyle(.black00) - - Text(movie.audience ?? "정보 없음") - .font(.pretendardMedium(18)) - .foregroundStyle(.black00) - } - } - } -} - -// MARK: - 피드 섹션 -struct MovieFeedSection: View { - var body: some View { - VStack(alignment: .leading, spacing: 15) { - HStack { - Text("알고보면 더 재밌는 무비피드") - .font(.pretendardBold(24)) - .foregroundStyle(.black00) - - Spacer() - Button(action: {}) { - Image(systemName: "arrow.right") - .resizable() - .frame(width: 20, height: 20) - .foregroundStyle(.black00) - } - } - .padding(.horizontal) - - Image("mono_asitaka") - .resizable() - .frame(width: 380, height: 220) - .frame(maxWidth: .infinity, alignment: .center) - } - } -} - -// MARK: - 광고 프로모션 섹션 -struct FeedRow: View { - let item: AdItem - - var body: some View { - HStack(alignment: .top, spacing: 16) { - Image(item.imageName) - .resizable() - .aspectRatio(1, contentMode: .fill) - .frame(width: 92, height: 92) - .clipShape(RoundedRectangle(cornerRadius: 20)) - - VStack(alignment: .leading, spacing: 8) { - Text(item.title) - .font(.pretendardSemiBold(18)) - .foregroundStyle(.black00) - .lineLimit(2) - if let sub = item.subtitle, !sub.isEmpty { - Text(sub) - .font(.pretendardMedium(13)) - .foregroundStyle(.gray03) - } - } - Spacer(minLength: 0) - } - .padding(.horizontal, 18) - .padding(.vertical, 12) - } -} - -struct PromotionSection: View { - @StateObject private var vm = AdViewModel() - - var body: some View { - VStack(spacing: 0) { - ForEach(vm.items) { item in - FeedRow(item: item) - Divider() - .padding(.leading, 18 + 92 + 16) - } - } - .background(Color(.systemBackground)) - } -} - -/* -#Preview { - HomeView(viewModel: HomeViewModel(), vm: MovieViewModel()) - .environment(NavigationRouter()) // 최신 방식 프리뷰 주입 -} -*/ diff --git a/gonny/MegaBox/MegaBox/Module/Views/LoginView.swift b/gonny/MegaBox/MegaBox/Module/Views/LoginView.swift deleted file mode 100644 index 8a372c8..0000000 --- a/gonny/MegaBox/MegaBox/Module/Views/LoginView.swift +++ /dev/null @@ -1,148 +0,0 @@ -// -// LoginView.swift -// MegaBox -// -// Created by 박병선 on 9/16/25. -// -import SwiftUI - -struct LoginView: View { - // MARK: - 상태 관리 - @StateObject private var viewModel = LoginViewModel() - private let kakaoLoginManager = KakaoLoginManager() - // @State private var id: String = "" - // @State private var pw: String = "" - /// 로그인 상태 - @AppStorage("isLoggedIn") private var isLoggedIn: Bool = false - - /// 저장된 계정 정보 - @AppStorage("userId") private var savedId: String = "" - @AppStorage("userPwd") private var savedPwd: String = "" - - //MARK: - 바디 - var body: some View { - VStack(spacing: 24) { - - Text("로그인") - .font(.pretendardSemiBold(24)) - .padding(.top, 10) - .foregroundStyle(.black00) - - Spacer() //공간 분리 - - ///입력 필드 - VStack(spacing: 20) { - TextField("아이디", text: $viewModel.loginModel.id) - .font(.pretendardMedium(16)) - .foregroundStyle(.gray03) - - - Divider() - - - SecureField("비밀번호", text: $viewModel.loginModel.pwd) - .font(.pretendardMedium(16)) - .foregroundStyle(Color("gray03")) - - Divider() - } - .padding(.horizontal, 24) - /* - /// 로그인 버튼 - Button{ - loginAction() - }label: { - Image("login") - .resizable() - .frame(width: 380, height: 54) - - } - .padding(.horizontal, 24) - */ - /// 회원가입 버튼 - Button(action: { - print("회원가입 화면으로 이동") - }) { - Text("회원가입") - .foregroundStyle(Color("gray04")) - .font(.pretendardMedium(13)) - - } - - /// 소셜 로그인 버튼들 - HStack(spacing: 73) { - ///네이버 로그인 - Button(action: { - print("네이버 로그인") - }){ - Image("naverLogin") - .resizable() - .frame(width: 40, height: 40) - } - ///카카오 로그인 - Button(action: { - kakaoLoginManager.loginWithKakao() - print("카카오 로그인") - }) { - Image("kakaoLogin") - .resizable() - .frame(width: 40, height: 40) - } - ///애플 로그인 - Button(action: { - print("애플 로그인") - }){ - Image("appleLogin") - .resizable() - .frame(width: 40, height: 40) - .foregroundStyle(.black) - } - } - .padding(.top, 8) - - // 하단 배너 이미지 - Image("umc") - .resizable() - .scaledToFit() - .padding(.horizontal, 16) - - Spacer() - } - .background(Color.white.ignoresSafeArea()) - .fullScreenCover(isPresented: $isLoggedIn) { - BaseTabView() // 로그인 성공 시 전환 - } - /* - .onAppear { - // 앱 켰을 때 키체인에 있으면 자동 로그인 - if viewModel.loadFromKeychainIfExists() { - isLoggedIn = true - } - } - } - - // MARK: - 로그인 동작 - private func loginAction() { - // 입력 체크 - guard !viewModel.loginModel.id.isEmpty, - !viewModel.loginModel.pwd.isEmpty else { - print("아이디 또는 비밀번호가 비어있습니다.") - return - } - - // 여기서 실제 서버 검증을 했다 치고 성공이라고 가정 - // Keychain에 저장 - viewModel.saveToKeychain() - - // 화면 전환 - isLoggedIn = true - } - */ - } -} - -/* -#Preview { //프리뷰 - LoginView() -} -*/ diff --git a/gonny/MegaBox/MegaBox/Module/Views/MemberInfoView.swift b/gonny/MegaBox/MegaBox/Module/Views/MemberInfoView.swift deleted file mode 100644 index d732f6a..0000000 --- a/gonny/MegaBox/MegaBox/Module/Views/MemberInfoView.swift +++ /dev/null @@ -1,101 +0,0 @@ -// -// UserInfoView.swift -// MegaBox -// -// Created by 박병선 on 9/23/25. -// -import SwiftUI - -struct MemberInfoView: View, Hashable { - - //Hashable 사용할 수 있도록 해주는 함수 - static func == (lhs: MemberInfoView, rhs: MemberInfoView) -> Bool { true } - func hash(into hasher: inout Hasher) {} - - //MARK: -사용할 변수들 - // 로그인 시 저장된 아이디 - @AppStorage("userId") private var savedId: String = "" - - // 이름 저장 - @AppStorage("userName") private var savedName: String = "" - - // TextField 입력값 (수정용) - @State private var tempName: String = "" - - @Environment(\.dismiss) private var dismiss - - //MARK: -body - - var body: some View { - @Environment(NavigationRouter.self) var router - VStack(alignment: .leading, spacing: 16) { - // 네비게이션 헤더 - HStack { - Button(action: { - // 뒤로가기 동작 - router.pop() - }) { - Image("left_bar") - .resizable() - .frame(width: 26, height: 24) - } - Spacer() - - Text("회원정보 관리") - .font(.pretendardMedium(16)) - Spacer() - Spacer().frame(width: 24) // 오른쪽 여백 맞추기 - } - .padding(.vertical, 8) - - // 기본정보 타이틀 - Text("기본정보") - .font(.pretendardBold(18)) - .padding(.top, 20) - - // 아이디 (수정 불가) - HStack { - Text(savedId) - .foregroundStyle(.black00) - Spacer() - } - .padding(.vertical, 12) - .overlay(Rectangle().frame(height: 1).foregroundStyle(.gray02), alignment: .bottom) - - // 이름 (수정 가능) - HStack { - TextField("이름", text: $tempName) - .textFieldStyle(PlainTextFieldStyle()) - .foregroundStyle(.black00) - - Spacer() - - Button("변경") { - savedName = tempName // 이름 저장 - } - .font(.pretendardMedium(10)) - .foregroundStyle(.gray03) - .padding(.horizontal, 8) - .padding(.vertical, 4) - .overlay( - RoundedRectangle(cornerRadius: 12) - .stroke(Color.gray.opacity(0.6), lineWidth: 1) - ) - } - .padding(.vertical, 12) - .overlay(Rectangle().frame(height: 1).foregroundStyle(.gray02), alignment: .bottom) - - Spacer() - } - .padding(.horizontal, 16) - .onAppear { - // 저장된 이름 불러오기 - tempName = savedName - } - } -} - -//MARK: -프리뷰 -#Preview { - MemberInfoView() -} diff --git a/gonny/MegaBox/MegaBox/Module/Views/MobileOrderView.swift b/gonny/MegaBox/MegaBox/Module/Views/MobileOrderView.swift deleted file mode 100644 index 1293cf5..0000000 --- a/gonny/MegaBox/MegaBox/Module/Views/MobileOrderView.swift +++ /dev/null @@ -1,237 +0,0 @@ -// -// MobileOrderView.swift -// MegaBox -// -// Created by 박병선 on 9/30/25. - -import SwiftUI - -struct MobileOrderView: View { - - // 샘플 데이터 - private let recommendedMenus = MenuItemSampleData.recommended - private let bestMenus = MenuItemSampleData.best - - @State private var theaterName: String = "강남" - - var body: some View { - NavigationStack { - ScrollView { - VStack(spacing: 24) { - - // MARK: - 상단 극장 선택 바 - TopTheaterBarView( - theaterName: theaterName, - onChangeTheater: - { - // TODO: 극장 변경 화면 네비게이션 - } - ) - - // MARK: - 바로 주문 / 스토어 교환권 / 선물하기 / 어디서든 팝콘 - quickActionGrid - - // MARK: - 추천 메뉴 섹션 - menuSection( - title: "추천 메뉴", - subtitle: "영화 볼 때 뭐 먹지 고민되면 추천 메뉴!", - items: recommendedMenus - ) - - // MARK: - 베스트 메뉴 섹션 - menuSection( - title: "베스트 메뉴", - subtitle: "영화 볼 때 뭐 먹지 고민되면 베스트 메뉴!", - items: bestMenus - ) - } - .padding(.vertical, 16) - } - .background(Color.white00) - .navigationTitle("") - .navigationBarTitleDisplayMode(.inline) - .toolbar { - ToolbarItem(placement: .principal) { - HStack{ - Image("megabox_logo") - .resizable() - .scaledToFit() - .frame(height: 30) - Spacer() - } - - } - } - } - } -} - -// MARK: - Subviews -private extension MobileOrderView { - - var quickActionGrid: some View { - VStack(spacing: 30) { - - // 2열 그리드 - LazyVGrid(columns: [ - GridItem(.flexible(), spacing: 12), - GridItem(.flexible(), spacing: 12) - ], spacing: 12) { - - // 1) 큰 바로 주문 카드 (세로 2칸 차지) - quickActionCard( - title: "바로 주문", - subtitle: "이제 줄서지 말고\n모바일로 주문하고 픽업", - systemImage: "popcorn" - ) - .frame(height: 180) // -> 2칸 - - VStack(spacing: 12) { - // 2) 스토어 교환권 - quickActionCard( - title: "스토어 교환권", - subtitle: "", - systemImage: "ticket" - ) - .frame(height: 84) // -> 1칸 - - // 3) 선물하기 - quickActionCard( - title: "선물하기", - subtitle: "", - systemImage: "gift" - ) - .frame(height: 84) - } - } - - // 4) 맨 아래 전폭 카드 - quickActionCard( - title: "어디서든 팝콘 만나기", - subtitle: "팝콘 콜라 스낵 모든 메뉴 배달 가능!", - systemImage: "scooter" - ) - .frame(height: 84) - } - .padding(.horizontal, 16) - } - - - func quickActionCard( - title: String, - subtitle: String, - systemImage: String, - isPrimary: Bool = false - ) -> some View { - /* - if title == "바로 주문" { - OrderMenuListView() - } else { - Text("\(title) 상세 페이지") - } - } label: { - quickActionCardBody - } - */ - NavigationLink { - if title == "바로 주문" { - OrderMenuListView() - } else { - Text("\(title) 상세 페이지") - } - } label: { - VStack(alignment: .leading, spacing: 8) { - Text(title) - .font(.pretendardBold(24)) - .foregroundStyle(.black00) - - Text(subtitle) - .font(.pretendardRegular(14)) - .foregroundStyle(Color(hex: "797979")) - .lineLimit(3) - .fixedSize(horizontal: false, vertical: true) - - Spacer() - - HStack{ - Spacer() - Image(systemName: systemImage) - .font(.system(size: 24)) - .foregroundStyle(.black00) - - } - } - .padding(14) - .frame(maxWidth: .infinity, minHeight: 120, alignment: .topLeading) - .background(Color.white) - .overlay( - RoundedRectangle(cornerRadius: 16) - .stroke(Color(.systemGray4), lineWidth: 1) - ) - } - } - - func menuSection( - title: String, - subtitle: String, - items: [MenuItemModel] - ) -> some View { - VStack(alignment: .leading, spacing: 12) { - // 섹션 헤더 - VStack(alignment: .leading, spacing: 4) { - Text(title) - .font(.pretendardBold(22)) - .foregroundStyle(.black00) - - Text(subtitle) - .font(.system(size: 12)) - .foregroundStyle(Color(hex: "797979")) - } - .padding(.horizontal, 16) - - // 가로 스크롤 카드 리스트 - ScrollView(.horizontal, showsIndicators: false) { - HStack(spacing: 12) { - ForEach(items) { item in - NavigationLink { - MenuDetailView(item: item) - } label: { - MenuItemCardView(item: item) - } - .buttonStyle(.plain) - } - } - .padding(.horizontal, 16) - } - } - } -} - -// MARK: - 메뉴 상세 페이지 (임시) -struct MenuDetailView: View { - let item: MenuItemModel - - var body: some View { - VStack(spacing: 16) { - Image(item.imageName) - .resizable() - .scaledToFit() - .frame(height: 200) - - Text(item.name) - .font(.title2.bold()) - - Text("\(item.price.formatted())원") - .font(.title3.weight(.semibold)) - - Spacer() - } - .padding() - .navigationTitle("") - .navigationBarTitleDisplayMode(.inline) - } -} - -#Preview { - MobileOrderView() -} diff --git a/gonny/MegaBox/MegaBox/Module/Views/MovieDetailView.swift b/gonny/MegaBox/MegaBox/Module/Views/MovieDetailView.swift deleted file mode 100644 index 46f745a..0000000 --- a/gonny/MegaBox/MegaBox/Module/Views/MovieDetailView.swift +++ /dev/null @@ -1,166 +0,0 @@ -// -// MovieDetailView.swift -// MegaBox -// -// Created by 박병선 on 10/2/25. -// -import SwiftUI - -struct MovieDetailView: View { - @Environment(NavigationRouter.self) var router - let movieDetail: MovieDetail - //let movie: Movie - @StateObject private var viewModel = HomeViewModel() - - var body: some View { - @Bindable var router = router - - VStack(spacing: 0) { - // 상단 네비게이션바 - HStack { - Button { - router.pop() - } label: { - Image(systemName: "arrow.left") - .font(.system(size: 18, weight: .bold)) - .foregroundStyle(.black00) - } - Spacer() - - Text(movieDetail.titleKR) - .font(.pretendardSemiBold(18)) - Spacer() - Spacer().frame(width: 18) // 오른쪽 버튼 없으니 균형용 - } - .padding(.horizontal, 16) - .padding(.vertical, 8) - - ScrollView { - VStack(alignment: .leading, spacing: 16) { - // 포스터 배너 - Image(movieDetail.posterDetail) - .resizable() - .scaledToFill() - .frame(maxWidth: .infinity, minHeight: 200, maxHeight: 240) - .clipped() - - // 제목 - VStack(spacing: 4) { - Text(movieDetail.titleKR) - .font(.pretendardBold(24)) - .foregroundStyle(.black00) - - Text(movieDetail.titleEN) - .font(.pretendardMedium(14)) - .foregroundStyle(.gray) - } - .frame(maxWidth: .infinity, alignment: .center) - - //.padding(.horizontal, 16) - - // 설명 - Text(movieDetail.description) - .font(.pretendardSemiBold(15)) - .foregroundStyle(.gray03) - .padding(.horizontal, 16) - .padding(.bottom) - - // 선택된 탭 내려주기 - CustomTabBar(selectedTab: $viewModel.selectedTab) - - // 탭별 컨텐츠 - Group { - switch viewModel.selectedTab { - case .info: - infoSection - case .reviews: - reviewSection - } - } - .padding(.horizontal, 16) - - } - .padding(.bottom, 24) - } - } - .navigationBarHidden(true) - } - - // MARK: - Custom TabBar - struct CustomTabBar: View { - @Namespace private var animation - @Binding var selectedTab: HomeViewModel.Tab - - var body: some View { - HStack { - ForEach(HomeViewModel.Tab.allCases, id: \.self) { tab in - Button { - withAnimation(.spring()) { - selectedTab = tab - } - } label: { - VStack { - Text(tab.rawValue) - .font(.system(size: 18, weight: .bold)) - .foregroundStyle(selectedTab == tab ? .black : .gray.opacity(0.5)) - - if selectedTab == tab { - Capsule() - .fill(Color.purple03) - .frame(height: 3) - .matchedGeometryEffect(id: "underline", in: animation) - } else { - Capsule() - .fill(Color.clear) - .frame(height: 3) - } - } - } - } - } - .padding(.horizontal, 30) - } - } - - // MARK: - 상세 정보 - private var infoSection: some View { - HStack { - Image(movieDetail.posterDetail) - .resizable() - .scaledToFill() - .frame(width: 80, height: 100) - .padding(.top) - .padding(.leading) - - VStack(alignment: .leading, spacing: 6) { - Text(movieDetail.rating) - .font(.pretendardSemiBold(13)) - .foregroundStyle(.black00) - - - Text("\(movieDetail.releaseDate) 개봉") - .font(.pretendardSemiBold(13)) - .foregroundStyle(.black00) - } - .frame(maxHeight: .infinity, alignment: .top) - .padding() - - } - } - - // MARK: - 실관람평 - private var reviewSection: some View { - VStack(spacing: 12) { - Text("등록된 관람평이 없어요 😢") - .font(.pretendardSemiBold(18)) - .foregroundStyle(.gray08) - .frame(maxWidth: .infinity) - .padding(.vertical, 40) - .background( - RoundedRectangle(cornerRadius: 12) - .stroke(Color.purple02, lineWidth: 1) - ) - } - } -} -// MARK: - Preview diff --git a/gonny/MegaBox/MegaBox/Module/Views/OrderMenuListView.swift b/gonny/MegaBox/MegaBox/Module/Views/OrderMenuListView.swift deleted file mode 100644 index 90004f5..0000000 --- a/gonny/MegaBox/MegaBox/Module/Views/OrderMenuListView.swift +++ /dev/null @@ -1,79 +0,0 @@ -// -// Untitled.swift -// MegaBox -// -// Created by 박병선 on 11/20/25. -// -import SwiftUI - -struct OrderMenuListView: View { - - @Environment(\.dismiss) private var dismiss - @State private var theaterName: String = "강남" - - private let items = MenuItemSampleData.all - - private let columns = [ - GridItem(.flexible(), spacing: 12), - GridItem(.flexible(), spacing: 12) - ] - - var body: some View { - VStack(spacing: 0) { - // 상단 네비 - topNavigationBar - - // 극장 변경 바 - TheaterChangeBarView(theaterName: theaterName) { - // TODO: 극장 변경 화면 이동 - } - - // 메뉴 리스트 - ScrollView { - LazyVGrid(columns: columns, spacing: 16) { - ForEach(items) { item in - OrderMenuItemCardView(item: item) - } - } - .padding(.horizontal, 16) - .padding(.top, 16) - .padding(.bottom, 24) - } - .background(Color(hex: "F3F3F5")) - } - .background(Color(hex: "F3F3F5")) - .ignoresSafeArea(edges: .bottom) - } - - private var topNavigationBar: some View { - HStack { - Button { - dismiss() - } label: { - Image(systemName: "chevron.left") - .font(.system(size: 18, weight: .semibold)) - .foregroundStyle(.black00) - } - - Spacer() - - Text("바로주문") - .font(.pretendardSemiBold(17)) - .foregroundStyle(.black00) - - Spacer() - - Button { - // TODO: 장바구니 이동 - } label: { - Image(systemName: "cart") - .font(.system(size: 18)) - .foregroundStyle(.black00) - } - } - .padding(.horizontal, 16) - .padding(.vertical, 10) - .background(Color.white) - } -} - diff --git a/gonny/MegaBox/MegaBox/Module/Views/ProfileView.swift b/gonny/MegaBox/MegaBox/Module/Views/ProfileView.swift deleted file mode 100644 index 8e2ebfd..0000000 --- a/gonny/MegaBox/MegaBox/Module/Views/ProfileView.swift +++ /dev/null @@ -1,265 +0,0 @@ -// -// ProfileView.swift -// MegaBox -// -// Created by 박병선 on 10/1/25. -// -import SwiftUI - -struct ProfileView: View{ - - @Environment(NavigationRouter.self) private var router - - - var body: some View{ - //@Bindable var router = router - - VStack(alignment: .leading, spacing: 15){ - profileHeaderView() - clubMembershipView() - couponInfoView() - reservationView() - } - } -} - -//MARK: -하위뷰 -///헤더뷰 -struct profileHeaderView: View { - @Environment(NavigationRouter.self) private var router - @EnvironmentObject var auth: LoginViewModel // loginVM의 데이터를 받아온 auth라는 변수 - /* - @StateObject var auth: LoginViewModel - @AppStorage("userName") private var savedName: String = "이*원" - */ - @AppStorage("userPoint") private var savedPoint: Int = 500 - - var body: some View { - - HStack { - // 왼쪽: 프로필 정보 - VStack(alignment: .leading, spacing: 4) { - - // 이름 + 배지 - HStack { - Text("\(auth.userName)님") // 6주차에 고친부분 - .font(.pretendardBold(24)) - .padding(.leading) - - - Text("WELCOME") - .font(.pretendardMedium(14)) - .padding(.horizontal, 8) - .padding(.vertical, 2) - .background(Color("tag")) - .foregroundStyle(Color.white00) - .cornerRadius(6) - } - - HStack{ - // 포인트 - Text("멤버십 포인트") - .font(.pretendardSemiBold(14)) - .foregroundStyle(Color.gray04) - .padding(.leading) - - Text("\(savedPoint)P") - .font(.pretendardMedium(14)) - .foregroundStyle(Color.black00) - } - - - } - - Spacer() - - // 오른쪽: 회원정보 버튼 - Button(action: { - router.push(MemberInfoView()) - }) { - Text("회원정보") - .font(.pretendardSemiBold(14)) - .foregroundStyle(Color.white00) - .padding(.horizontal, 12) - .padding(.vertical, 6) - .background(Color.gray07) - .cornerRadius(16) - } - .padding(.trailing) - .padding(.top, -20) - } - .padding(.top,10) - } -} - -struct clubMembershipView: View{ - var body: some View{ - Button(action: { - print("클럽 멤버십 버튼 클릭") - }) { - HStack { - Text("클럽 멤버십") - .font(.pretendardSemiBold(16)) - .foregroundStyle(.white00) - - Image(systemName: "chevron.right") - .foregroundStyle(.white00) - .font(.pretendardSemiBold(16)) - - Spacer() - } - .padding() //텍스트 위아래 공간확보 - } - .background( - LinearGradient( - colors: [Color(hex: "AB8BFF"), Color(hex: "8EAEF3"), Color(hex: "5DCCEC")], - startPoint: .leading, - endPoint: .trailing - ) - ) - .cornerRadius(8) // 둥근 모서리 - .padding(.horizontal) - } -} - -struct couponInfoView: View { - var body: some View { - - HStack(spacing: 10) { - // 쿠폰 - VStack(spacing: 8) { - Text("쿠폰") - .font(.pretendardSemiBold(16)) - .foregroundStyle(.gray02) - Text("2") - .font(.pretendardSemiBold(18)) - .foregroundStyle(.black00) - - } - .frame(maxWidth: .infinity) - .padding(.top, 5) - - - Rectangle() - .fill(Color.gray.opacity(0.3)) - .frame(width: 1, height: 40) - - // 스토어 교환권 - VStack(spacing: 8) { - Text("스토어 교환권") - .font(.pretendardSemiBold(16)) - .foregroundStyle(.gray02) - Text("0") - .font(.pretendardSemiBold(18)) - .foregroundStyle(.black00) - } - .frame(maxWidth: .infinity) - .padding(.top, 5) - - - Rectangle() - .fill(Color.gray.opacity(0.3)) - .frame(width: 1, height: 40) - - - // 모바일 티켓 - VStack(spacing: 8) { - Text("모바일 티켓") - .font(.pretendardSemiBold(16)) - .foregroundStyle(.gray02) - Text("0") - .font(.pretendardSemiBold(18)) - .foregroundStyle(.black00) - } - .frame(maxWidth: .infinity) - .padding(.top, 5) - } - .padding() - .background( - RoundedRectangle(cornerRadius: 12) - .stroke(Color.gray.opacity(0.3), lineWidth: 1) - ) - .padding(.horizontal) - } -} - - struct reservationView: View{ - var body: some View{ - HStack{ - Button(action: { - - }) { - VStack(spacing:10) { - Image("movie_reservation") - .resizable() - .frame(width: 36, height: 36) - - Text("영화별예매") - .font(.pretendardMedium(16)) - .foregroundStyle(.black00) - } - } - - Spacer() - - Button(action: { - - }) { - VStack(spacing:10) { - Image("theater_reservation") - .resizable() - .frame(width: 36, height: 36) - - Text("극장별예매") - .font(.pretendardMedium(16)) - .foregroundStyle(.black00) - } - } - - Spacer() - - Button(action: { - - }) { - VStack(spacing:10) { - Image("special_theater") - .resizable() - .frame(width: 36, height: 36) - - Text("특별과예매") - .font(.pretendardMedium(16)) - .foregroundStyle(.black00) - } - } - - Spacer() - - Button(action: { - - }) { - VStack(spacing:10) { - Image("mobile_order") - .resizable() - .frame(width: 36, height: 36) - - Text("영화별예매") - .font(.pretendardMedium(16)) - .foregroundStyle(.black00) - } - } - } - .padding(.leading) - .padding(.trailing) - .padding(.top) - - } -} - -/* - -#Preview{ - ProfileView() - .environment(NavigationRouter()) // 인스턴스 직접 주입 - } -*/ - diff --git a/gonny/MegaBox/MegaBox/Module/Views/SplashView.swift b/gonny/MegaBox/MegaBox/Module/Views/SplashView.swift deleted file mode 100644 index d6b60a4..0000000 --- a/gonny/MegaBox/MegaBox/Module/Views/SplashView.swift +++ /dev/null @@ -1,63 +0,0 @@ -// -// SplashView.swift -// MegaBox -// -// Created by 박병선 on 9/16/25. -// -// 1주차-스플래시뷰, 로그인뷰 -import SwiftUI - -struct SplashView: View { - @AppStorage("isLoggedIn") private var isLoggedIn: Bool = false - @State private var isActive = false - - - @StateObject private var loginVM = LoginViewModel() - - var body: some View { - Group { - if isActive { - if isLoggedIn { - // 로그인 돼 있으면 메인으로 - BaseTabView() - .environmentObject(loginVM) - } else { - // 안 돼 있으면 로그인 화면 - LoginView() - .environmentObject(loginVM) - } - } else { - // 스플래시 화면 - ZStack { - Color.white.ignoresSafeArea() - Image("logo") - .resizable() - .scaledToFit() - .frame(width: 249, height: 84) - } - } - } - .onAppear { - /* - // 1) 앱 켜졌을 때 키체인에서 자동 로그인 시도 - if loginVM.loadFromKeychainIfExists() { - // ViewModel이 키체인에서 찾았으면 로그인 상태 true로 - isLoggedIn = true - } - */ - - - // 2) 스플래시 잠깐 보여주고 메인으로 넘기기 - DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { - withAnimation { - isActive = true - } - } - } - } -} -/* -#Preview { - SplashView() -} -*/ diff --git a/gonny/MegaBox/MegaBox/Module/Views/Week4/CalendarView.swift b/gonny/MegaBox/MegaBox/Module/Views/Week4/CalendarView.swift deleted file mode 100644 index c3fe410..0000000 --- a/gonny/MegaBox/MegaBox/Module/Views/Week4/CalendarView.swift +++ /dev/null @@ -1,122 +0,0 @@ -// -// CalendarView.swift -// MegaBox -// -// Created by 박병선 on 10/9/25. -// -import SwiftUI - -struct Cell: View { - - var calendarDay: CalendarDay - var isSelected: Bool - @Bindable var viewModel: CalendarViewModel - - var body: some View { - ZStack { - if isSelected { - Circle() - .fill(Color.yellow.opacity(0.6)) - .frame(width: 26, height: 27) - .transition(.scale.combined(with: .opacity)) - } - - Text("\(calendarDay.day)") - .font(.caption) - .foregroundStyle(textColor) - .animation(.easeInOut(duration: 0.2), value: viewModel.selectedDate) - } - .frame(height: 30) - .onTapGesture { - withAnimation(.spring(response: 0.4, dampingFraction: 0.5, blendDuration: 0)) { - viewModel.changeSelectedDate(calendarDay.date) - } - } - } - - private var textColor: Color { - if calendarDay.isCurrentMonth { - return Color.black - } else { - return Color.gray.opacity(0.7) - } - } -} - -struct CalendarView: View { - - @Bindable var viewModel: CalendarViewModel = .init() - - var body: some View { - VStack(spacing: 24, content: { - hedarController // 상단 월 변경 컨트롤러 - - calendarView // 달력 본체 - }) - .padding(.vertical, 30) - .padding(.horizontal, 16) - .background(Color.white) - } - - - /// 상단 월 변경 컨틀롤러 뷰 - private var hedarController: some View { - HStack(spacing: 47, content: { - Button(action: { - viewModel.changeMonth(by: -1) - }, label: { - Image(systemName: "chevron.left") - }) - - Text(viewModel.currentMonth, formatter: calendarHeaderDateFormatter) - .font(.title3) - .foregroundStyle(Color.black) - - - Button(action: { - viewModel.changeMonth(by: 1) - }, label: { - Image(systemName: "chevron.right") - }) - }) - } - - /// 달력 본체 뷰 - private var calendarView: some View { - LazyVGrid(columns: Array(repeating: GridItem(.flexible(), spacing: 0), count: 7), spacing: 5, content: { - /// 요일 헤더 (일 ~ 토) - ForEach(localizedWeekdaySymbols.indices, id: \.self) { index in - Text(localizedWeekdaySymbols[index]) - .foregroundStyle(index == 0 ? Color.red : index == 6 ? Color.blue : Color.gray) // 일요일, 토요일, 평일 색 따로 두기 - .frame(maxWidth: .infinity) - .font(.caption) - } - .padding(.bottom, 30) // 요일 아래 여백 - - ForEach(viewModel.daysForCurrentGrid(), id: \.id) { calendarDay in - let isSelectedDate = viewModel.calendar.isDate(calendarDay.date, inSameDayAs: viewModel.selectedDate) - Cell(calendarDay: calendarDay, isSelected: isSelectedDate, viewModel: viewModel) - - } - }) - .frame(height: 250, alignment: .top) - } - - /// 요일 이름 한글로 가져오기 - let localizedWeekdaySymbols: [String] = { - let formatter = DateFormatter() - formatter.locale = Locale(identifier: "ko_KR") - return formatter.shortWeekdaySymbols ?? [] - }() - - /// 헤더 날짜 표시 포맷터 - let calendarHeaderDateFormatter: DateFormatter = { - let formatter = DateFormatter() - formatter.dateFormat = "yyyy.MM" - return formatter - }() -} - -#Preview { - CalendarView() -} diff --git a/gonny/MegaBox/MegaBox/Module/Views/Week4/MovieSearchView.swift b/gonny/MegaBox/MegaBox/Module/Views/Week4/MovieSearchView.swift deleted file mode 100644 index 5e515dc..0000000 --- a/gonny/MegaBox/MegaBox/Module/Views/Week4/MovieSearchView.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// MovieSearchView.swift -// MegaBox -// -// Created by 박병선 on 10/9/25. -// -import SwiftUI - -struct MovieSearchView: View { - @StateObject private var vm = MovieSearchViewModel() - - var body: some View { - NavigationStack { - VStack(spacing: 12) { - HStack(spacing: 10) { - Image(systemName: "magnifyingglass") - .font(.system(size: 18, weight: .semibold)) - .foregroundStyle(.primary) - - TextField("영화명을 입력해주세요", text: $vm.query) - .textInputAutocapitalization(.never) - .disableAutocorrection(true) - - Image(systemName: "mic") - .font(.system(size: 18, weight: .semibold)) - .foregroundStyle(.secondary) - } - .padding(.horizontal, 14) - .padding(.vertical, 12) - .clipShape(Capsule()) - .overlay( - Capsule() - .stroke(Color.black.opacity(0.06), lineWidth: 0.5) - ) - - if vm.isLoading { - ProgressView("검색 중...") - } - - if let error = vm.errorMessage { - Text(error).foregroundStyle(.red) - } - - } - .navigationTitle("영화 검색") - } - } -} - -#Preview { - MovieSearchView() -} diff --git a/gonny/MegaBox/MegaBox/Module/Views/Week4/MovieSheet.swift b/gonny/MegaBox/MegaBox/Module/Views/Week4/MovieSheet.swift deleted file mode 100644 index e70b3bf..0000000 --- a/gonny/MegaBox/MegaBox/Module/Views/Week4/MovieSheet.swift +++ /dev/null @@ -1,104 +0,0 @@ -// -// MovieSheet.swift -// MegaBox -// -// Created by 박병선 on 10/9/25. -// -import SwiftUI - -struct MovieSheet: View { - @StateObject var searchVM: MovieSearchViewModel - let onSelect: (Movie) -> Void - - @Environment(\.dismiss) var dismiss - - private let columns: [GridItem] = Array(repeating: GridItem(.flexible(), spacing: 24), count: 3) - - var body: some View { - - ZStack(alignment: .bottom) { - ScrollView { - VStack(spacing: 20) { - Text("영화 선택") - .font(.title3.bold()) - .padding(.top, 16) - - if searchVM.isLoading { - ProgressView().padding(.top, 8) - } - if let error = searchVM.errorMessage { Text(error).foregroundStyle(.red) } - - // 포스터 그리드 - LazyVGrid(columns: columns, spacing: 36) { - ForEach(movieLineup, id: \.id) { movie in - Button { - onSelect(movie) - - DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { - dismiss() - } - } label: { - VStack(spacing: 8) { - Image(movie.poster) - .resizable() - .scaledToFill() - .frame(width: 95, height: 135) - - Text(movie.title) - .font(.pretendardSemiBold(14)) - .multilineTextAlignment(.center) - .frame(maxWidth: .infinity) - .foregroundStyle(.black) - } - } - } - } - .padding(.horizontal, 24) - - } - } - - MovieSearchBar - .padding(.horizontal, 16) - .padding(.bottom, 16) - } - .ignoresSafeArea(.keyboard) - } - - /// 검색어가 있으면 결과, 없으면 전체 - private var movieLineup: [Movie] { - if searchVM.query.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { - return searchVM.movies - } else { - return searchVM.results - } - } - - /// 하단 검색바 - private var MovieSearchBar: some View { - Group { - HStack(spacing: 10) { - Image(systemName: "magnifyingglass") - .frame(width: 26, height: 20) - TextField("영화명을 입력해주세요", text: $searchVM.query) - .textInputAutocapitalization(.never) - .disableAutocorrection(true) - Button { searchVM.query = "" } label: { - Image(systemName: "mic") - .frame(width: 18, height: 20) - .foregroundStyle(.gray05) - } - } - .padding(.horizontal, 14) - .padding(.vertical, 12) - .background(.ultraThinMaterial) - .clipShape(Capsule()) - } - } -} - - - -#Preview { - MovieSheet(searchVM: MovieSearchViewModel()) { _ in } -} diff --git a/gonny/MegaBox/MegaBox/Module/Views/Week4/ReserveView.swift b/gonny/MegaBox/MegaBox/Module/Views/Week4/ReserveView.swift deleted file mode 100644 index c762f9a..0000000 --- a/gonny/MegaBox/MegaBox/Module/Views/Week4/ReserveView.swift +++ /dev/null @@ -1,420 +0,0 @@ -// -// ReserveView.swift -// MegaBox -// -// Created by 박병선 on 9/30/25. -// -import SwiftUI - - -// 파일 상단(ReserveView 밖) 어딘가에 한 번만 선언 -private struct AudKey: Hashable { - let screen: String // 상영관 이름 - let format: String // 포맷 (2D/IMAX/4DX...) -} - -struct ReserveView: View { - @Environment(NavigationRouter.self) var router - @EnvironmentObject var viewModel: MovieViewModel - @StateObject private var vm = ShowtimeViewModel() - - @State private var isMovieSheetOn = false - - var body: some View { - VStack(spacing: 0) { - TopBarView - .padding(.horizontal, -16) - MovieSelectView - .padding(.top, -40) - - //영화관 선택 - if viewModel.selectedMovie != nil { - TheaterSelectView - } - - //날짜 선택 - if viewModel.showDate { - WeekStripView() //EnvironmentObject를 사용하므로 파라미터 불필요 - } - - // 하단 상영 정보 섹션 (세 가지 모두 선택되면 노출) - if viewModel.isShowtimeVisible { - ShowtimeListSection - } - - Spacer() - } - .padding(.horizontal, 16) - // 여기에 추가 - // 그대로 유지: JSON 로딩 - .task { - await vm.fetchShowtimes() - } - - // 변경: 포스터 목록을 절대 덮어쓰지 말고, - // JSON은 "원본 주입 + 필요 시 재계산"만 수행 - .onReceive(vm.$movies) { newValue in - guard !newValue.isEmpty else { return } - - // 원본 주입 - self.viewModel.ingest(showtimes: newValue) - - // 이미 영화/극장/날짜가 선택돼 있으면 즉시 재계산 - if self.viewModel.selectedMovie != nil { - self.viewModel.refreshShowtime() - } - } - - .sheet(isPresented: $isMovieSheetOn) { - MovieSheet(searchVM: MovieSearchViewModel()) { movie in - // 시트에서 선택한 영화를 BookingView의 상태에 반영 - viewModel.selectedMovie = movie - viewModel.refreshShowtime() - } - .presentationDetents([.large]) - .presentationDragIndicator(.visible) - } - } - - //MARK: - 영화 이름 - 전체 영화 바 - private var TopBarView: some View { - HStack{ - Spacer() - Text("영화별 예매") - .font(.pretendardBold(22)) - .frame(maxWidth: .infinity) - .foregroundStyle(.white) - .padding(.top, 71) - .padding(.bottom, 10) - Spacer() - } - .background(.purple03) - .ignoresSafeArea() - } - - private var MovieSelectView: some View { - VStack(spacing: 0) { - HStack(spacing: 0) { - ZStack { - RoundedRectangle(cornerRadius: 4) - .frame(width: 26, height: 24) - .foregroundStyle(.orange) - Text("15") - .font(.pretendardBold(18)) - .foregroundStyle(.white) - } - .padding(.trailing, 39) - - Text(viewModel.selectedMovie?.title ?? "영화 이름") - .font(.pretendardBold(18)) - .foregroundStyle(.black) - .frame(width: 238) - Spacer() - Button(action: {isMovieSheetOn = true }) { - ZStack { - RoundedRectangle(cornerRadius: 8) - .stroke(Color.gray02) - .frame(width: 69, height: 30) - .background(.white) - Text("전체영화") - .font(.pretendardSemiBold(14)) - .foregroundStyle(.black) - } - } - } - .padding(.bottom, 20) - - //MARK: - 영화 스크롤 뷰 - ScrollView(.horizontal, showsIndicators: false) { - LazyHStack { - ForEach(viewModel.movies) { movie in - MoviePosterButton( - movie: movie, - isSelected: (viewModel.selectedMovie?.id == movie.id) || (viewModel.selectedMovie?.title == movie.title), - onTap: { - if viewModel.selectedMovie?.id == movie.id { - // 선택 해제 - viewModel.selectedMovie = nil - viewModel.selectedTheaters.removeAll() - viewModel.selectedDate = nil - } else { - // 영화 선택 - viewModel.selectedMovie = movie - } - - }) - } - } - .frame(height: 100) - } - - } - } -} - - -//MARK: - 영화 포스터 뷰 -struct MoviePosterButton: View { - let movie: Movie - let isSelected: Bool - let onTap: () -> Void - var body: some View { - Button(action: onTap) { - Image(movie.poster) - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 62) - .clipShape(RoundedRectangle(cornerRadius: 10)) - .overlay( - RoundedRectangle(cornerRadius: 10) - .stroke(isSelected ? Color.purple03 : Color.clear, lineWidth: 2) - ) - .padding(.bottom, 8) - } - } -} - - -//MARK: - 강남 홍대 신촌 버튼 -private extension ReserveView { - var TheaterSelectView : some View { - HStack(spacing: 8) { - ForEach(Theater.allCases, id: \.self) { t in - let isOn = viewModel.selectedTheaters.contains(t) - - Button { ///토글 - if isOn { viewModel.selectedTheaters.remove(t) } - else { viewModel.selectedTheaters.insert(t) } - viewModel.refreshShowtime() // 극장 토글 후 갱신 - } label: { - Text(t.rawValue) - .padding(.horizontal, 14).padding(.vertical, 8) - .background(isOn ? Color.purple03 : Color.gray01) - .foregroundStyle(isOn ? Color.white : Color.gray05) - .clipShape(RoundedRectangle(cornerRadius: 15)) - } - .disabled(!viewModel.showTheater) - .allowsHitTesting(viewModel.showTheater) - .opacity(viewModel.showTheater ? 1 : 0.4) - } - Spacer() - } - .padding(.top, 20) - } - - // MARK: - 극장별 상영표 섹션 (수정 완료 버전) - var ShowtimeListSection: some View { - VStack(alignment: .leading, spacing: 16) { - - // 신촌만 선택 시 안내 - if viewModel.selectedTheaters.count == 1, - viewModel.selectedTheaters.contains(.shinchon) { - Text("선택한 극장에 상영시간표가 없습니다") - .font(.pretendardSemiBold(14)) - .foregroundStyle(.gray05) - .padding(.vertical, 8) - } else { - // 극장 정렬 - ForEach(Array(viewModel.showtimes.keys).sorted(by: { $0.rawValue < $1.rawValue }), id: \.self) { theater in - VStack(alignment: .leading, spacing: 12) { - - // 극장명 - Text(theater.rawValue) - .font(.pretendardBold(18)) - .foregroundStyle(.black) - - // 이 극장의 모든 회차 - let sessions = viewModel.showtimes[theater] ?? [] - - // 상영관+포맷으로 그룹핑 - let grouped: [AudKey: [Showtime]] = Dictionary( - grouping: sessions, - by: { AudKey(screen: $0.screenName, format: $0.format) } - ) - // 상영관 → 포맷 순 정렬 - let keys = grouped.keys.sorted { - if $0.screen == $1.screen { return $0.format < $1.format } - return $0.screen < $1.screen - } - - ForEach(keys, id: \.self) { key in - let items = (grouped[key] ?? []).sorted { $0.start < $1.start } - - // 상영관 헤더 - HStack(spacing: 6) { - Text(key.screen) // e.g., "IMAX 1관", "크리클라이너 1관" - .font(.pretendardSemiBold(15)) - .foregroundStyle(.black00) - - Spacer() - - Text(key.format) // e.g., "IMAX", "2D", "4DX" - .font(.pretendardSemiBold(12)) - .padding(.horizontal, 6).padding(.vertical, 3) - .background(RoundedRectangle(cornerRadius: 6).fill(Color.gray01)) - .foregroundStyle(.gray05) - } - .padding(.leading, 2) - - // 회차 가로 스크롤 - ScrollView(.horizontal, showsIndicators: false) { - HStack(spacing: 12) { - ForEach(items) { s in - VStack(alignment: .leading, spacing: 4) { - Text(timeString(s.start)) // 시작 HH:mm - .font(.pretendardBold(18)) - .foregroundStyle(.black) - Text("~ \(timeString(s.end))") // 종료 HH:mm - .font(.pretendardSemiBold(12)) - .foregroundStyle(.gray05) - HStack(spacing: 2) { - Text("\(s.remaining)") - .font(.pretendardSemiBold(12)) - .foregroundStyle(.purple03) - Text("/\(s.capacity)") - .font(.pretendardSemiBold(12)) - .foregroundStyle(.gray03) - } - } - .padding(12) - .background( - RoundedRectangle(cornerRadius: 12) - .stroke(Color.gray02, lineWidth: 1) - ) - } - } - } - } - } - } - } - } - .padding(.top, 16) - } - - // 그대로 사용 - private func timeString(_ d: Date) -> String { - let f = DateFormatter() - f.dateFormat = "HH:mm" - return f.string(from: d) - } - - - //MARK: - 날짜 - - private struct WeekStripView: View { - @EnvironmentObject var viewModel: MovieViewModel - - var body: some View { - // 주간 날짜 칩 - HStack(spacing: 8) { - ForEach(weekDays, id: \.self) { d in - let isSelected = viewModel.selectedDate.map { Calendar.current.isDate($0, inSameDayAs: d) } ?? false - DateChip(date: d, isSelected: isSelected) { - viewModel.selectedDate = d - viewModel.refreshShowtime() // 날짜 탭 후 갱신 - } - .disabled(!viewModel.showDate) - - } - } - .frame(height: 92) - .padding(.vertical, 8) - .padding(.leading, 40) - } - - // 오늘 기준 7일 - private var weekDays: [Date] { - let base = viewModel.selectedDate ?? Date() - return makeWeek(from: base) - } - - /// 기준 날짜가 속한 주의 7일 - private func makeWeek(from base: Date) -> [Date] { - let cal = Calendar.current - // 주 시작일 구하기 (사용자 지역의 firstWeekday 반영) - let start: Date - if let interval = cal.dateInterval(of: .weekOfYear, for: base) { - start = interval.start - } else { - let weekday = cal.component(.weekday, from: base) - let diff = (weekday - cal.firstWeekday + 7) % 7 - start = cal.date(byAdding: .day, value: -diff, to: base) ?? base - } - let startOfDay = cal.startOfDay(for: start) - // 7일 생성 - return (0..<7).compactMap { cal.date(byAdding: .day, value: $0, to: startOfDay) } - } - } - - - private struct DateChip: View { - let date: Date - let isSelected: Bool - let onTap: () -> Void - - var body: some View { - let cal = Calendar.current - let isToday = cal.isDateInToday(date) - let isTomorrow = cal.isDateInTomorrow(date) - let weekday = cal.component(.weekday, from: date) - - let mainText = isToday ? monthDayString : dayNumberString - let subText = isToday ? "오늘" : (isTomorrow ? "내일" : weekdayShortKOR) - - let numberColor: Color = { - if isSelected { return .white } - if weekday == 1 { return .red } // 일요일 - if weekday == 7 { return .tag } // 청록색 - return .primary - }() - - return Button(action: onTap) { - - VStack(spacing: 6) { - Text(mainText) - .font(.pretendardBold(22)) - .foregroundStyle(numberColor) - - if isToday { - Text("오늘") - .font(.pretendardSemiBold(16)) - } else { - Text(subText) - .font(.pretendardSemiBold(16)) - .foregroundStyle(isSelected ? .white.opacity(0.95) : .gray) - } - } - .foregroundStyle(numberColor) - .frame(width: 55, height: 60) - .background( - RoundedRectangle(cornerRadius: 12) - .fill(isSelected ? Color.purple03 : .clear) - - ) - } - .buttonStyle(.plain) - } - - private var dayNumberString: String { - String(Calendar.current.component(.day, from: date)) - } - private var monthDayString: String { - let f = DateFormatter() - f.dateFormat = "M.d" - return f.string(from: date) - } - private var weekdayShortKOR: String { - let f = DateFormatter() - f.locale = Locale(identifier: "ko_KR") - f.dateFormat = "E" - return f.string(from: date) - } - } -} - -#Preview { - ReserveView() - .environment(NavigationRouter()) - .environmentObject(MovieViewModel()) -} diff --git a/gonny/MegaBox/MegaBox/Navigation/NavigationRouter.swift b/gonny/MegaBox/MegaBox/Navigation/NavigationRouter.swift deleted file mode 100644 index e7321be..0000000 --- a/gonny/MegaBox/MegaBox/Navigation/NavigationRouter.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// NavigationRouter.swift -// MegaBox -// -// Created by 박병선 on 10/1/25. -// -import SwiftUI -import Observation - -@Observable -class NavigationRouter: ObservableObject { - /// NavigationStack의 경로 - var path = NavigationPath() - - /// 특정 화면으로 이동 (화면 타입을 직접 append) - func push(_ destination: T) { - path.append(destination) - } - - /// 마지막 화면 제거 (Pop) - func pop() { - if !path.isEmpty { - path.removeLast() - } - } - - /// 루트로 돌아가기 (Reset) - func reset() { - path = NavigationPath() - } -} - diff --git a/gonny/MegaBox/MegaBox/Preview Content/Preview Assets.xcassets/Contents.json b/gonny/MegaBox/MegaBox/Preview Content/Preview Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gonny/MegaBox/MegaBox/Preview Content/Preview Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/AccentColor.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/black00.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/black00.colorset/Contents.json deleted file mode 100644 index be9d677..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/black00.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0x00", - "red" : "0x00" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0x00", - "red" : "0x00" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue00.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue00.colorset/Contents.json deleted file mode 100644 index e0075b9..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue00.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFA", - "green" : "0xF7", - "red" : "0xF3" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFA", - "green" : "0xF7", - "red" : "0xF3" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue01.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue01.colorset/Contents.json deleted file mode 100644 index 83e57dc..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue01.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF7", - "green" : "0xF2", - "red" : "0xED" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF7", - "green" : "0xF2", - "red" : "0xED" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue02.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue02.colorset/Contents.json deleted file mode 100644 index c1c58df..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue02.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEF", - "green" : "0xE5", - "red" : "0xDA" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEF", - "green" : "0xE5", - "red" : "0xDA" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue03.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue03.colorset/Contents.json deleted file mode 100644 index a586a7e..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue03.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xCC", - "green" : "0xAA", - "red" : "0x88" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xCC", - "green" : "0xAA", - "red" : "0x88" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue04.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue04.colorset/Contents.json deleted file mode 100644 index 497d343..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue04.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xB8", - "green" : "0x99", - "red" : "0x7A" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xB8", - "green" : "0x99", - "red" : "0x7A" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue05.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue05.colorset/Contents.json deleted file mode 100644 index 8772f8e..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue05.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA3", - "green" : "0x88", - "red" : "0x6D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA3", - "green" : "0x88", - "red" : "0x6D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue06.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue06.colorset/Contents.json deleted file mode 100644 index f2bb34c..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue06.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x99", - "green" : "0x80", - "red" : "0x66" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x99", - "green" : "0x80", - "red" : "0x66" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue07.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue07.colorset/Contents.json deleted file mode 100644 index e2d0333..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue07.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x7A", - "green" : "0x66", - "red" : "0x52" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x7A", - "green" : "0x66", - "red" : "0x52" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue08.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue08.colorset/Contents.json deleted file mode 100644 index a8fe629..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue08.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5C", - "green" : "0x4C", - "red" : "0x3D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5C", - "green" : "0x4C", - "red" : "0x3D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue09.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue09.colorset/Contents.json deleted file mode 100644 index be7f767..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/blue09.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x47", - "green" : "0x3B", - "red" : "0x30" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x47", - "green" : "0x3B", - "red" : "0x30" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray00.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray00.colorset/Contents.json deleted file mode 100644 index d2e4805..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray00.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF2", - "green" : "0xF2", - "red" : "0xF2" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF2", - "green" : "0xF2", - "red" : "0xF2" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray01.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray01.colorset/Contents.json deleted file mode 100644 index 771d19d..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray01.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEB", - "green" : "0xEB", - "red" : "0xEB" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEB", - "green" : "0xEB", - "red" : "0xEB" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray02.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray02.colorset/Contents.json deleted file mode 100644 index 68cea4f..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray02.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD5", - "green" : "0xD5", - "red" : "0xD5" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD5", - "green" : "0xD5", - "red" : "0xD5" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray03.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray03.colorset/Contents.json deleted file mode 100644 index 6676967..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray03.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x78", - "green" : "0x78", - "red" : "0x78" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x78", - "green" : "0x78", - "red" : "0x78" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray04.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray04.colorset/Contents.json deleted file mode 100644 index 5a493e5..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray04.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x6C", - "green" : "0x6C", - "red" : "0x6C" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x6C", - "green" : "0x6C", - "red" : "0x6C" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray05.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray05.colorset/Contents.json deleted file mode 100644 index 7e45b56..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray05.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x60", - "green" : "0x60", - "red" : "0x60" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x60", - "green" : "0x60", - "red" : "0x60" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray06.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray06.colorset/Contents.json deleted file mode 100644 index 3db5e58..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray06.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5A", - "green" : "0x5A", - "red" : "0x5A" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5A", - "green" : "0x5A", - "red" : "0x5A" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray07.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray07.colorset/Contents.json deleted file mode 100644 index 3f9d5b5..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray07.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x48", - "green" : "0x48", - "red" : "0x48" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x48", - "green" : "0x48", - "red" : "0x48" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray08.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray08.colorset/Contents.json deleted file mode 100644 index 85ca7a9..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray08.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x36", - "green" : "0x36", - "red" : "0x36" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x36", - "green" : "0x36", - "red" : "0x36" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray09.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray09.colorset/Contents.json deleted file mode 100644 index 85730c1..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/gray09.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x2A", - "green" : "0x2A", - "red" : "0x2A" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x2A", - "green" : "0x2A", - "red" : "0x2A" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple00.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple00.colorset/Contents.json deleted file mode 100644 index a56e9a7..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple00.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFB", - "green" : "0xE7", - "red" : "0xF0" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFB", - "green" : "0xE7", - "red" : "0xF0" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple01.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple01.colorset/Contents.json deleted file mode 100644 index 054d393..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple01.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF9", - "green" : "0xDB", - "red" : "0xE8" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF9", - "green" : "0xDB", - "red" : "0xE8" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple02.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple02.colorset/Contents.json deleted file mode 100644 index 1e7b4e7..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple02.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF3", - "green" : "0xB4", - "red" : "0xCF" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF3", - "green" : "0xB4", - "red" : "0xCF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple03.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple03.colorset/Contents.json deleted file mode 100644 index 4029bef..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple03.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD8", - "green" : "0x0E", - "red" : "0x65" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD8", - "green" : "0x0E", - "red" : "0x65" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple04.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple04.colorset/Contents.json deleted file mode 100644 index 45b8d3c..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple04.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xC2", - "green" : "0x0D", - "red" : "0x5B" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xC2", - "green" : "0x0D", - "red" : "0x5B" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple05.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple05.colorset/Contents.json deleted file mode 100644 index 2f6c7ed..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple05.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xAD", - "green" : "0x0B", - "red" : "0x51" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xAD", - "green" : "0x0B", - "red" : "0x51" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple06.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple06.colorset/Contents.json deleted file mode 100644 index ed745b4..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple06.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA2", - "green" : "0x0B", - "red" : "0x4C" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA2", - "green" : "0x0B", - "red" : "0x4C" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple07.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple07.colorset/Contents.json deleted file mode 100644 index f753c3d..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple07.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x82", - "green" : "0x08", - "red" : "0x3D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x82", - "green" : "0x08", - "red" : "0x3D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple08.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple08.colorset/Contents.json deleted file mode 100644 index 9490850..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple08.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x61", - "green" : "0x06", - "red" : "0x2D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x61", - "green" : "0x06", - "red" : "0x2D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple09.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple09.colorset/Contents.json deleted file mode 100644 index 333e234..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/purple09.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x4C", - "green" : "0x05", - "red" : "0x23" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x4C", - "green" : "0x05", - "red" : "0x23" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/tag.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/tag.colorset/Contents.json deleted file mode 100644 index f2ebe2b..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/tag.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD2", - "green" : "0xCD", - "red" : "0x47" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD2", - "green" : "0xCD", - "red" : "0x47" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/white00.colorset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/white00.colorset/Contents.json deleted file mode 100644 index 2536dc2..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Color/white00.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFF", - "green" : "0xFF", - "red" : "0xFF" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFF", - "green" : "0xFF", - "red" : "0xFF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/AppIcon.appiconset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/appleLogin.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/appleLogin.imageset/Contents.json deleted file mode 100644 index b99a104..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/appleLogin.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "appleLogin.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/appleLogin.imageset/appleLogin.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/appleLogin.imageset/appleLogin.pdf deleted file mode 100644 index 2748d78..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/appleLogin.imageset/appleLogin.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/kakaoLogin.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/kakaoLogin.imageset/Contents.json deleted file mode 100644 index 7d620a4..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/kakaoLogin.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "kakaoLogin.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/kakaoLogin.imageset/kakaoLogin.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/kakaoLogin.imageset/kakaoLogin.pdf deleted file mode 100644 index 03665c9..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/kakaoLogin.imageset/kakaoLogin.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/login.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/login.imageset/Contents.json deleted file mode 100644 index be97af8..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/login.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "loginButton.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/login.imageset/loginButton.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/login.imageset/loginButton.pdf deleted file mode 100644 index 7d147cb..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/login.imageset/loginButton.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/logo.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/logo.imageset/Contents.json deleted file mode 100644 index 8bf4985..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/logo.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "meboxLogo.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/logo.imageset/meboxLogo.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/logo.imageset/meboxLogo.pdf deleted file mode 100644 index 5b3463d..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/logo.imageset/meboxLogo.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/naverLogin.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/naverLogin.imageset/Contents.json deleted file mode 100644 index e901e50..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/naverLogin.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "naverLogin.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/naverLogin.imageset/naverLogin.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/naverLogin.imageset/naverLogin.pdf deleted file mode 100644 index 447e035..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/naverLogin.imageset/naverLogin.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/umc.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/umc.imageset/Contents.json deleted file mode 100644 index f24d427..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/umc.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "umc 1.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/umc.imageset/umc 1.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/umc.imageset/umc 1.pdf deleted file mode 100644 index 419c9df..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week1/umc.imageset/umc 1.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/left_bar.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/left_bar.imageset/Contents.json deleted file mode 100644 index 911263a..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/left_bar.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "left_bar.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/left_bar.imageset/left_bar.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/left_bar.imageset/left_bar.pdf deleted file mode 100644 index b80813c..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/left_bar.imageset/left_bar.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/mobile_order.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/mobile_order.imageset/Contents.json deleted file mode 100644 index f3076ff..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/mobile_order.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "popcorn.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/mobile_order.imageset/popcorn.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/mobile_order.imageset/popcorn.pdf deleted file mode 100644 index 9f28262..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/mobile_order.imageset/popcorn.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/movie_reservation.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/movie_reservation.imageset/Contents.json deleted file mode 100644 index 11f710f..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/movie_reservation.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "movie_reservation.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/movie_reservation.imageset/movie_reservation.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/movie_reservation.imageset/movie_reservation.pdf deleted file mode 100644 index c7a2006..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/movie_reservation.imageset/movie_reservation.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/special_theater.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/special_theater.imageset/Contents.json deleted file mode 100644 index 4840058..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/special_theater.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "special_theater.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/special_theater.imageset/special_theater.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/special_theater.imageset/special_theater.pdf deleted file mode 100644 index 03ffa90..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/special_theater.imageset/special_theater.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/theater_reservation.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/theater_reservation.imageset/Contents.json deleted file mode 100644 index 0cb4d21..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/theater_reservation.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "theater_location.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/theater_reservation.imageset/theater_location.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/theater_reservation.imageset/theater_location.pdf deleted file mode 100644 index cf6dd8b..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week2/theater_reservation.imageset/theater_location.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/Home/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/Home/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/Home/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/Home/megabox_logo.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/Home/megabox_logo.imageset/Contents.json deleted file mode 100644 index 48d77b8..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/Home/megabox_logo.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "meboxLogo 1.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/Home/megabox_logo.imageset/meboxLogo 1.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/Home/megabox_logo.imageset/meboxLogo 1.pdf deleted file mode 100644 index 54753b9..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/Home/megabox_logo.imageset/meboxLogo 1.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/boss_poster.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/boss_poster.imageset/Contents.json deleted file mode 100644 index 691c45c..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/boss_poster.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "boss.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/boss_poster.imageset/boss.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/boss_poster.imageset/boss.pdf deleted file mode 100644 index f3d24c8..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/boss_poster.imageset/boss.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/demonSlayer_poster.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/demonSlayer_poster.imageset/Contents.json deleted file mode 100644 index c925711..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/demonSlayer_poster.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "demonSlayer.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/demonSlayer_poster.imageset/demonSlayer.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/demonSlayer_poster.imageset/demonSlayer.pdf deleted file mode 100644 index 0019857..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/demonSlayer_poster.imageset/demonSlayer.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/f1_poster.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/f1_poster.imageset/Contents.json deleted file mode 100644 index 8b881e9..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/f1_poster.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "f1.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/f1_poster.imageset/f1.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/f1_poster.imageset/f1.pdf deleted file mode 100644 index 47b5674..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/f1_poster.imageset/f1.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/face_poster.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/face_poster.imageset/Contents.json deleted file mode 100644 index 5384752..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/face_poster.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "face.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/face_poster.imageset/face.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/face_poster.imageset/face.pdf deleted file mode 100644 index e11db58..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/face_poster.imageset/face.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/mono_poster.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/mono_poster.imageset/Contents.json deleted file mode 100644 index 1450709..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/mono_poster.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "princeOfForest.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/mono_poster.imageset/princeOfForest.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/mono_poster.imageset/princeOfForest.pdf deleted file mode 100644 index cb85b4d..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/mono_poster.imageset/princeOfForest.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/noOtherChoice_poster.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/noOtherChoice_poster.imageset/Contents.json deleted file mode 100644 index 704f5af..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/noOtherChoice_poster.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "noOtherChoice.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/noOtherChoice_poster.imageset/noOtherChoice.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/noOtherChoice_poster.imageset/noOtherChoice.pdf deleted file mode 100644 index d408cef..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/noOtherChoice_poster.imageset/noOtherChoice.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/theRoses_poster.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/theRoses_poster.imageset/Contents.json deleted file mode 100644 index cc8c775..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/theRoses_poster.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "theRoses.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/theRoses_poster.imageset/theRoses.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/theRoses_poster.imageset/theRoses.pdf deleted file mode 100644 index 74fe036..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/theRoses_poster.imageset/theRoses.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/yadang_poster.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/yadang_poster.imageset/Contents.json deleted file mode 100644 index 455f5c6..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/yadang_poster.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "yadang.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/yadang_poster.imageset/yadang.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/yadang_poster.imageset/yadang.pdf deleted file mode 100644 index e4e6fe6..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_poster/yadang_poster.imageset/yadang.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/f1_promotion.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/f1_promotion.imageset/Contents.json deleted file mode 100644 index 4ff8172..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/f1_promotion.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "f1_headerPoster.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/f1_promotion.imageset/f1_headerPoster.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/f1_promotion.imageset/f1_headerPoster.pdf deleted file mode 100644 index e494aab..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/f1_promotion.imageset/f1_headerPoster.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/face_promotion.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/face_promotion.imageset/Contents.json deleted file mode 100644 index 74281d8..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/face_promotion.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "face_ad.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/face_promotion.imageset/face_ad.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/face_promotion.imageset/face_ad.pdf deleted file mode 100644 index c43f4ef..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/face_promotion.imageset/face_ad.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/mono_asitaka.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/mono_asitaka.imageset/Contents.json deleted file mode 100644 index 48b6332..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/mono_asitaka.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "asitaka.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/mono_asitaka.imageset/asitaka.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/mono_asitaka.imageset/asitaka.pdf deleted file mode 100644 index 042d628..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/mono_asitaka.imageset/asitaka.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/mono_san.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/mono_san.imageset/Contents.json deleted file mode 100644 index 2f3c6ab..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/mono_san.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "san.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/mono_san.imageset/san.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/mono_san.imageset/san.pdf deleted file mode 100644 index 09238bf..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week3/movie_promotion/mono_san.imageset/san.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/location_vector.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/location_vector.imageset/Contents.json deleted file mode 100644 index 08fe288..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/location_vector.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "Vector.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/location_vector.imageset/Vector.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/location_vector.imageset/Vector.pdf deleted file mode 100644 index 17df478..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/location_vector.imageset/Vector.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_disney_photo_set.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_disney_photo_set.imageset/Contents.json deleted file mode 100644 index 9ce7f75..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_disney_photo_set.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "disney.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_disney_photo_set.imageset/disney.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_disney_photo_set.imageset/disney.pdf deleted file mode 100644 index 490517f..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_disney_photo_set.imageset/disney.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_insideout2.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_insideout2.imageset/Contents.json deleted file mode 100644 index 0bb1545..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_insideout2.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "menu_insideout2.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_insideout2.imageset/menu_insideout2.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_insideout2.imageset/menu_insideout2.pdf deleted file mode 100644 index e5fd537..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_insideout2.imageset/menu_insideout2.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_popcorn_double_combo.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_popcorn_double_combo.imageset/Contents.json deleted file mode 100644 index d07c739..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_popcorn_double_combo.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "double.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_popcorn_double_combo.imageset/double.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_popcorn_double_combo.imageset/double.pdf deleted file mode 100644 index 23af031..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_popcorn_double_combo.imageset/double.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_popcorn_love_combo.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_popcorn_love_combo.imageset/Contents.json deleted file mode 100644 index 65f2791..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_popcorn_love_combo.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "image 2.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_popcorn_love_combo.imageset/image 2.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_popcorn_love_combo.imageset/image 2.pdf deleted file mode 100644 index ec64602..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_popcorn_love_combo.imageset/image 2.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_popcorn_love_combo_package.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_popcorn_love_combo_package.imageset/Contents.json deleted file mode 100644 index 8dabdfb..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_popcorn_love_combo_package.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "love_combo.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_popcorn_love_combo_package.imageset/love_combo.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_popcorn_love_combo_package.imageset/love_combo.pdf deleted file mode 100644 index 96907f8..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_popcorn_love_combo_package.imageset/love_combo.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_single_package.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_single_package.imageset/Contents.json deleted file mode 100644 index 38041bd..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_single_package.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "single.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_single_package.imageset/single.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_single_package.imageset/single.pdf deleted file mode 100644 index 9a332e2..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_single_package.imageset/single.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_ticketbook.imageset/Contents.json b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_ticketbook.imageset/Contents.json deleted file mode 100644 index 165e52b..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_ticketbook.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "menu_ticketbook.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_ticketbook.imageset/menu_ticketbook.pdf b/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_ticketbook.imageset/menu_ticketbook.pdf deleted file mode 100644 index e1e2299..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Assets/Assets.xcassets/Image/Week8/menu_ticketbook.imageset/menu_ticketbook.pdf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Assets/ColorExtension.swift b/gonny/MegaBox/MegaBox/Resource/Assets/ColorExtension.swift deleted file mode 100644 index 09da0fd..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Assets/ColorExtension.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// ColorExtension.swift -// MegaBox -// -// Created by 박병선 on 9/23/25. -// - -import SwiftUI - -public extension Color { - /// HEX 문자열로 Color 생성 (예: "#FF5733" or "FF5733") - init(hex: String) { - var hexSanitized = hex.trimmingCharacters(in: .whitespacesAndNewlines) - hexSanitized = hexSanitized.replacingOccurrences(of: "#", with: "") - - var rgb: UInt64 = 0 - Scanner(string: hexSanitized).scanHexInt64(&rgb) - - let r, g, b, a: Double - switch hexSanitized.count { - case 6: // RGB (예: FF5733) - r = Double((rgb & 0xFF0000) >> 16) / 255.0 - g = Double((rgb & 0x00FF00) >> 8) / 255.0 - b = Double(rgb & 0x0000FF) / 255.0 - a = 1.0 - case 8: // RGBA (예: FF5733FF) - r = Double((rgb & 0xFF000000) >> 24) / 255.0 - g = Double((rgb & 0x00FF0000) >> 16) / 255.0 - b = Double((rgb & 0x0000FF00) >> 8) / 255.0 - a = Double(rgb & 0x000000FF) / 255.0 - default: - r = 1; g = 1; b = 1; a = 1 // 잘못된 hex 값일 경우 흰색 반환 - } - - self.init(.sRGB, red: r, green: g, blue: b, opacity: a) - } -} - diff --git a/gonny/MegaBox/MegaBox/Resource/Font/Fonts.swift b/gonny/MegaBox/MegaBox/Resource/Font/Fonts.swift deleted file mode 100644 index 9b8b1e2..0000000 --- a/gonny/MegaBox/MegaBox/Resource/Font/Fonts.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// Fonts.swift -// MegaBox -// -// Created by 박병선 on 9/16/25. -// - -import Foundation -import SwiftUI - -public extension Font { - enum Pretend { - case extraBold - case bold - case semibold - case medium - case regular - case light - - var value: String { - switch self { - case .extraBold: - return "Pretendard-ExtraBold" - case .bold: - return "Pretendard-Bold" - case .semibold: - return "Pretendard-SemiBold" - case .medium: - return "Pretendard-Medium" - case .regular: - return "Pretendard-Regular" - case .light: - return "Pretendard-Light" - } - } - } - - static func pretend(type: Pretend, size: CGFloat) -> Font { - return .custom(type.value, size: size) - } - - static func pretendardLight(_ size: CGFloat) -> Font { - return .pretend(type: .light, size: size) - } - - static func pretendardRegular(_ size: CGFloat) -> Font { - return .pretend(type: .regular, size: size) - } - - static func pretendardMedium(_ size: CGFloat) -> Font { - return .pretend(type: .medium, size: size) - } - - static func pretendardBold(_ size: CGFloat) -> Font { - return .pretend(type: .bold, size: size) - } - - static func pretendardSemiBold(_ size: CGFloat) -> Font { - return .pretend(type: .semibold, size: size) - } - - static func PretendardExtraBold(_ size: CGFloat) -> Font { - return .pretend(type: .extraBold, size: size) - } -} - diff --git a/gonny/MegaBox/MegaBox/Resource/Font/Pretendard-Bold.otf b/gonny/MegaBox/MegaBox/Resource/Font/Pretendard-Bold.otf deleted file mode 100644 index 8e5e30a..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Font/Pretendard-Bold.otf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Font/Pretendard-ExtraBold.otf b/gonny/MegaBox/MegaBox/Resource/Font/Pretendard-ExtraBold.otf deleted file mode 100644 index 388f3ca..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Font/Pretendard-ExtraBold.otf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Font/Pretendard-Light.otf b/gonny/MegaBox/MegaBox/Resource/Font/Pretendard-Light.otf deleted file mode 100644 index 228679e..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Font/Pretendard-Light.otf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Font/Pretendard-Medium.otf b/gonny/MegaBox/MegaBox/Resource/Font/Pretendard-Medium.otf deleted file mode 100644 index 0575069..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Font/Pretendard-Medium.otf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Font/Pretendard-Regular.otf b/gonny/MegaBox/MegaBox/Resource/Font/Pretendard-Regular.otf deleted file mode 100644 index 08bf4cf..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Font/Pretendard-Regular.otf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/Font/Pretendard-SemiBold.otf b/gonny/MegaBox/MegaBox/Resource/Font/Pretendard-SemiBold.otf deleted file mode 100644 index e7e36ab..0000000 Binary files a/gonny/MegaBox/MegaBox/Resource/Font/Pretendard-SemiBold.otf and /dev/null differ diff --git a/gonny/MegaBox/MegaBox/Resource/MovieSchedule.json b/gonny/MegaBox/MegaBox/Resource/MovieSchedule.json deleted file mode 100644 index 122bad4..0000000 --- a/gonny/MegaBox/MegaBox/Resource/MovieSchedule.json +++ /dev/null @@ -1,385 +0,0 @@ -{ - "status": "success", - "message": "Showtimes fetched successfully", - "data": { - "movies": [ - { - "id": "m-001", - "title": "어쩔수가없다", - "age_rating": "15", - "schedules": [ - { - "date": "2025-10-30", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "크리클라이너 1관", - "format": "2D", - "showtimes": [ - { "start": "11:30", "end": "13:58", "available": 109, "total": 116 }, - { "start": "14:20", "end": "16:48", "available": 19, "total": 116 }, - { "start": "17:05", "end": "19:28", "available": 1, "total": 116 }, - { "start": "19:45", "end": "22:02", "available": 100, "total": 116 }, - { "start": "22:20", "end": "00:04", "available": 116, "total": 116 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "BTS관 (7층 1관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "09:30", "end": "11:50", "available": 75, "total": 116 }, - { "start": "12:00", "end": "14:26", "available": 102, "total": 116 }, - { "start": "14:45", "end": "17:04", "available": 88, "total": 116 } - ] - }, - { - "auditorium": "BTS관 (9층 2관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "11:30", "end": "13:58", "available": 34, "total": 116 }, - { "start": "14:10", "end": "16:32", "available": 100, "total": 116 }, - { "start": "16:50", "end": "19:00", "available": 13, "total": 116 }, - { "start": "19:20", "end": "21:40", "available": 92, "total": 116 } - ] - } - ] - } - ] - }, - { - "date": "2025-10-31", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "크리클라이너 1관", - "format": "2D", - "showtimes": [ - { "start": "10:30", "end": "12:58", "available": 112, "total": 116 }, - { "start": "13:40", "end": "16:08", "available": 54, "total": 116 }, - { "start": "16:20", "end": "18:48", "available": 22, "total": 116 }, - { "start": "19:30", "end": "21:58", "available": 97, "total": 116 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "BTS관 (7층 1관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "09:50", "end": "12:10", "available": 81, "total": 116 }, - { "start": "12:30", "end": "14:56", "available": 99, "total": 116 }, - { "start": "15:20", "end": "17:39", "available": 61, "total": 116 } - ] - }, - { - "auditorium": "BTS관 (9층 2관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "11:10", "end": "13:38", "available": 45, "total": 116 }, - { "start": "14:00", "end": "16:22", "available": 88, "total": 116 }, - { "start": "16:40", "end": "18:58", "available": 24, "total": 116 }, - { "start": "19:10", "end": "21:30", "available": 90, "total": 116 } - ] - } - ] - } - ] - }, - { - "date": "2025-10-29", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "크리클라이너 1관", - "format": "2D", - "showtimes": [ - { "start": "11:00", "end": "13:28", "available": 106, "total": 116 }, - { "start": "13:50", "end": "16:18", "available": 33, "total": 116 }, - { "start": "16:40", "end": "19:08", "available": 5, "total": 116 }, - { "start": "19:20", "end": "21:48", "available": 84, "total": 116 }, - { "start": "22:10", "end": "00:34", "available": 116, "total": 116 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "BTS관 (7층 1관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "10:10", "end": "12:30", "available": 72, "total": 116 }, - { "start": "12:50", "end": "15:16", "available": 104, "total": 116 }, - { "start": "15:40", "end": "18:00", "available": 76, "total": 116 } - ] - }, - { - "auditorium": "BTS관 (9층 2관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "11:40", "end": "14:08", "available": 29, "total": 116 }, - { "start": "14:20", "end": "16:42", "available": 93, "total": 116 }, - { "start": "17:10", "end": "19:30", "available": 18, "total": 116 }, - { "start": "19:40", "end": "22:00", "available": 87, "total": 116 } - ] - } - ] - } - ] - } - ] - }, - { - "id": "m-002", - "title": "F1 더 무비", - "age_rating": "12", - "schedules": [ - { - "date": "2025-09-22", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "IMAX 1관", - "format": "IMAX", - "showtimes": [ - { "start": "10:00", "end": "12:15", "available": 45, "total": 50 }, - { "start": "13:30", "end": "15:45", "available": 12, "total": 50 }, - { "start": "17:00", "end": "19:15", "available": 8, "total": 50 }, - { "start": "20:30", "end": "22:45", "available": 35, "total": 50 } - ] - }, - { - "auditorium": "4DX 2관", - "format": "4DX", - "showtimes": [ - { "start": "11:15", "end": "13:30", "available": 28, "total": 40 }, - { "start": "15:45", "end": "18:00", "available": 5, "total": 40 }, - { "start": "19:15", "end": "21:30", "available": 22, "total": 40 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "IMAX 3관", - "format": "IMAX", - "showtimes": [ - { "start": "09:45", "end": "12:00", "available": 38, "total": 50 }, - { "start": "13:15", "end": "15:30", "available": 15, "total": 50 }, - { "start": "16:45", "end": "19:00", "available": 3, "total": 50 }, - { "start": "20:15", "end": "22:30", "available": 42, "total": 50 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-23", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "IMAX 1관", - "format": "IMAX", - "showtimes": [ - { "start": "10:30", "end": "12:45", "available": 48, "total": 50 }, - { "start": "14:00", "end": "16:15", "available": 25, "total": 50 }, - { "start": "17:30", "end": "19:45", "available": 18, "total": 50 }, - { "start": "21:00", "end": "23:15", "available": 41, "total": 50 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "IMAX 3관", - "format": "IMAX", - "showtimes": [ - { "start": "10:00", "end": "12:15", "available": 33, "total": 50 }, - { "start": "13:30", "end": "15:45", "available": 7, "total": 50 }, - { "start": "17:00", "end": "19:15", "available": 12, "total": 50 }, - { "start": "20:30", "end": "22:45", "available": 39, "total": 50 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-24", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "IMAX 1관", - "format": "IMAX", - "showtimes": [ - { "start": "09:30", "end": "11:45", "available": 42, "total": 50 }, - { "start": "12:45", "end": "15:00", "available": 18, "total": 50 }, - { "start": "15:30", "end": "17:45", "available": 6, "total": 50 }, - { "start": "18:15", "end": "20:30", "available": 29, "total": 50 }, - { "start": "21:00", "end": "23:15", "available": 44, "total": 50 } - ] - }, - { - "auditorium": "4DX 2관", - "format": "4DX", - "showtimes": [ - { "start": "10:30", "end": "12:45", "available": 15, "total": 40 }, - { "start": "14:00", "end": "16:15", "available": 3, "total": 40 }, - { "start": "17:30", "end": "19:45", "available": 1, "total": 40 }, - { "start": "20:00", "end": "22:15", "available": 25, "total": 40 } - ] - } - ] - } - ] - } - ] - }, - { - "id": "m-003", - "title": "귀멸의 칼날: 무한성", - "age_rating": "15", - "schedules": [ - { - "date": "2025-09-22", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:30", "end": "12:20", "available": 85, "total": 120 }, - { "start": "13:00", "end": "15:50", "available": 23, "total": 120 }, - { "start": "16:30", "end": "19:20", "available": 2, "total": 120 }, - { "start": "20:00", "end": "22:50", "available": 78, "total": 120 }, - { "start": "23:30", "end": "02:20", "available": 95, "total": 120 } - ] - }, - { - "auditorium": "4DX 3관", - "format": "4DX", - "showtimes": [ - { "start": "10:45", "end": "13:35", "available": 15, "total": 40 }, - { "start": "14:15", "end": "17:05", "available": 4, "total": 40 }, - { "start": "17:45", "end": "20:35", "available": 1, "total": 40 }, - { "start": "21:15", "end": "00:05", "available": 28, "total": 40 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:00", "end": "11:50", "available": 67, "total": 120 }, - { "start": "12:30", "end": "15:20", "available": 19, "total": 120 }, - { "start": "16:00", "end": "18:50", "available": 5, "total": 120 }, - { "start": "19:30", "end": "22:20", "available": 89, "total": 120 } - ] - }, - { - "auditorium": "Dolby Cinema 4관", - "format": "Dolby", - "showtimes": [ - { "start": "11:00", "end": "13:50", "available": 22, "total": 60 }, - { "start": "14:30", "end": "17:20", "available": 8, "total": 60 }, - { "start": "18:00", "end": "20:50", "available": 3, "total": 60 }, - { "start": "21:30", "end": "00:20", "available": 45, "total": 60 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-23", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:45", "end": "12:35", "available": 92, "total": 120 }, - { "start": "13:15", "end": "16:05", "available": 31, "total": 120 }, - { "start": "16:45", "end": "19:35", "available": 7, "total": 120 }, - { "start": "20:15", "end": "23:05", "available": 84, "total": 120 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:30", "end": "12:20", "available": 74, "total": 120 }, - { "start": "13:00", "end": "15:50", "available": 26, "total": 120 }, - { "start": "16:30", "end": "19:20", "available": 11, "total": 120 }, - { "start": "20:00", "end": "22:50", "available": 96, "total": 120 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-24", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "돌비시네마", - "format": "2D", - "showtimes": [ - { "start": "09:15", "end": "12:05", "available": 88, "total": 120 }, - { "start": "12:45", "end": "15:35", "available": 25, "total": 120 }, - { "start": "16:15", "end": "19:05", "available": 4, "total": 120 }, - { "start": "19:45", "end": "22:35", "available": 81, "total": 120 }, - { "start": "23:15", "end": "02:05", "available": 98, "total": 120 } - ] - } - ] - } - ] - } - ] - } - ] - } -} diff --git a/gonny/MegaBox/MegaBox/Secret.xcconfig b/gonny/MegaBox/MegaBox/Secret.xcconfig deleted file mode 100644 index 83d40b2..0000000 --- a/gonny/MegaBox/MegaBox/Secret.xcconfig +++ /dev/null @@ -1,8 +0,0 @@ -// -// Secret.xcconfig -// MegaBox -// -// Created by 박병선 on 11/13/25. -// -TMBD_API_KEY = 4755f1a7c6489bf893303213ad2c9690 -TMDB_READ_TOKEN = eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiI0NzU1ZjFhN2M2NDg5YmY4OTMzMDMyMTNhZDJjOTY5MCIsIm5iZiI6MTc2Mjk2ODIxMy4zOTM5OTk4LCJzdWIiOiI2OTE0YzI5NWFiY2IyNzllMzAzYWFhMTMiLCJzY29wZXMiOlsiYXBpX3JlYWQiXSwidmVyc2lvbiI6MX0.kHaxeSwbZ1jzxIwo-KuoCXt9x4clYEe_8SPpUobyvFQ diff --git a/gonny/MegaBox/MegaBox/Security/KeychainService.swift b/gonny/MegaBox/MegaBox/Security/KeychainService.swift deleted file mode 100644 index bc5b2cb..0000000 --- a/gonny/MegaBox/MegaBox/Security/KeychainService.swift +++ /dev/null @@ -1,91 +0,0 @@ -// -// KeychainService.swift -// MegaBox -// -// Created by 박병선 on 11/13/25. -// -import Foundation -import Security - -final class KeychainService: @unchecked Sendable { - static let shared = KeychainService() - - private init() {} - - // MARK: - Internal Session API - - /// 세션에 저장된 정보를 저장합니다. - public func saveSession(_ session: TokenInfo, for key: String) -> Bool { - guard let data = try? JSONEncoder().encode(session) else { return false } - return save(data, for: key) - } - - /// 세션에 저장된 정보를 불러옵니다. - public func loadSession(for key: String) ->TokenInfo? { - guard let data = load(key: key), - let session = try? JSONDecoder().decode(TokenInfo.self, from: data) else { return nil } - return session - } - - /// 세션 정보를 삭제합니다. - public func deleteSession(for key: String) { - _ = delete(key: key) - } - - // MARK: - Private Raw Keychain Operations - - @discardableResult - private func save(_ data: Data, for key: String) -> Bool { - // 기존 값 존재 시 삭제 - if load(key: key) != nil { - _ = delete(key: key) - } - - let query: [CFString: Any] = [ - kSecClass: kSecClassGenericPassword, - kSecAttrAccount: key, - kSecValueData: data, - kSecAttrAccessible: kSecAttrAccessibleWhenUnlocked - ] - - let status = SecItemAdd(query as CFDictionary, nil) - if status != errSecSuccess { - print("Keychain Save Failed: \(status) - \(SecCopyErrorMessageString(status, nil) ?? "Unknown error" as CFString)") - } - - return status == errSecSuccess - } - - private func load(key: String) -> Data? { - let query: [CFString: Any] = [ - kSecClass: kSecClassGenericPassword, - kSecAttrAccount: key, - kSecReturnData: kCFBooleanTrue!, - kSecMatchLimit: kSecMatchLimitOne - ] - - var item: AnyObject? - let status = SecItemCopyMatching(query as CFDictionary, &item) - - if status != errSecSuccess { - print("Keychain Load Failed: \(status) - \(SecCopyErrorMessageString(status, nil) ?? "Unknown error" as CFString)") - } - - return item as? Data - } - - @discardableResult - private func delete(key: String) -> Bool { - let query: [CFString: Any] = [ - kSecClass: kSecClassGenericPassword, - kSecAttrAccount: key - ] - - let status = SecItemDelete(query as CFDictionary) - if status != errSecSuccess && status != errSecItemNotFound { - print("Keychain Delete Failed: \(status) - \(SecCopyErrorMessageString(status, nil) ?? "Unknown error" as CFString)") - } - - return status == errSecSuccess - } -} diff --git a/gonny/MegaBox/MegaBox/Service/APITargetType.swift b/gonny/MegaBox/MegaBox/Service/APITargetType.swift deleted file mode 100644 index 4c4f800..0000000 --- a/gonny/MegaBox/MegaBox/Service/APITargetType.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// APITargetType.swift -// MegaBox -// -// Created by 박병선 on 11/13/25. -// -import Foundation -import Moya - -protocol APITargetType: TargetType {} - -extension APITargetType { - - var baseURL: URL { - return URL(string: "https://api.themoviedb.org/3")! - } - - var headers: [String: String]? { - switch task { - case .requestJSONEncodable, .requestParameters: - return ["Content-Type": "application/json"] - case .uploadMultipart: - return ["Content-Type": "multipart/form-data"] - default: - return nil - } - } - - var validationType: ValidationType { .successCodes } -} - diff --git a/gonny/MegaBox/MegaBox/Service/AuthRouter.swift b/gonny/MegaBox/MegaBox/Service/AuthRouter.swift deleted file mode 100644 index f030186..0000000 --- a/gonny/MegaBox/MegaBox/Service/AuthRouter.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// AuthRouter.swift -// MegaBox -// -// Created by 박병선 on 11/13/25. -// -// 인증(Auth) 관련 API endpoint들을 한곳에 모아둔 enum -import Foundation -import Moya -import Alamofire - -enum AuthRouter : APITargetType { - case sendRefreshToken(refreshToken: String) // 리프레시 토큰 갱신 -} - -extension AuthRouter { - var path: String { - switch self { - case .sendRefreshToken: - return "/member/reissue" - } - } - - var method: Moya.Method { - switch self { - case .sendRefreshToken: - return .get - } - } - - var task: Task { - switch self { - case .sendRefreshToken: - return .requestPlain - } - } - - var headers: [String : String]? { - switch self { - case .sendRefreshToken(let refresh): - var headers = ["Content-Type": "application/json"] - headers["Refresh-Token"] = "\(refresh)" - - return headers - } - } -} diff --git a/gonny/MegaBox/MegaBox/Service/KakaoLoginManager.swift b/gonny/MegaBox/MegaBox/Service/KakaoLoginManager.swift deleted file mode 100644 index 4d500ed..0000000 --- a/gonny/MegaBox/MegaBox/Service/KakaoLoginManager.swift +++ /dev/null @@ -1,95 +0,0 @@ -// -// KakaoLoginManager.swift -// MegaBox -// -// Created by 박병선 on 11/6/25. -// -import KakaoSDKAuth -import KakaoSDKUser -import Alamofire - -class KakaoLoginManager { - let keychain = KeychainService.shared - - //MARK: -SDK로 인가 코드 받기 - func loginWithKakao() { - // 카카오톡 설치 여부에 따라 분기 - if UserApi.isKakaoTalkLoginAvailable() { - UserApi.shared.loginWithKakaoTalk { token, error in - if let error = error { - print("카카오톡 로그인 실패: \(error)") - } else { - print("카카오톡 로그인 성공", token ?? "") - } - } - } else { - UserApi.shared.loginWithKakaoAccount { token, error in - if let error = error { - print("카카오계정 로그인 실패: \(error)") - return - } - print("카카오계정 로그인 성공", token ?? "") - } - } - } - - - //MARK: -인가코드로 토큰 요청 - func requestKakaoToken(code: String) { - let url = "https://kauth.kakao.com/oauth/token" - - - let restAPIKey = "185bc5801674da01a379cab3417016e2" - - let redirectURI = "https://example.com/oauth" - - let parameters: [String: String] = [ - "grant_type": "authorization_code", - "client_id": restAPIKey, - "redirect_uri": redirectURI, - "code": code - ] - - AF.request(url, - method: .post, - parameters: parameters) - .responseDecodable(of: KakaoTokenResponse.self) { response in - switch response.result { - case .success(let token): - print(" access token: \(token.access_token)") - // 토큰 받았으니 이제 사용자 정보 요청으로 이동 - self.fetchKakaoUserInfo(accessToken: token.access_token) - case .failure(let error): - print(" 토큰 요청 실패: \(error)") - if let data = response.data, - let body = String(data: data, encoding: .utf8) { - print("서버 응답: \(body)") - } - } - } - } - - func fetchKakaoUserInfo(accessToken: String) { - let url = "https://kapi.kakao.com/v2/user/me" - let headers: HTTPHeaders = [ - "Authorization": "Bearer \(accessToken)" - ] - - AF.request(url, - method: .get, - headers: headers) - .responseDecodable(of: KakaoUser.self) { response in - switch response.result { - case .success(let user): - print(" 사용자 정보: \(user)") - print("닉네임: \(user.kakao_account?.profile?.nickname ?? "없음")") - case .failure(let error): - print(" 사용자 정보 요청 실패: \(error)") - if let data = response.data, - let body = String(data: data, encoding: .utf8) { - print("서버 응답: \(body)") - } - } - } - } -} diff --git a/gonny/MegaBox/MegaBox/Service/MoyaProviderExtension.swift b/gonny/MegaBox/MegaBox/Service/MoyaProviderExtension.swift deleted file mode 100644 index 4e2ea91..0000000 --- a/gonny/MegaBox/MegaBox/Service/MoyaProviderExtension.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// Untitled.swift -// MegaBox -// -// Created by 박병선 on 11/13/25. -// -import Moya - -// Moya의 request(...) 콜백 기반 API를 Swift async/await 형태로 래핑하는 확장 -extension MoyaProvider { - func asyncRequest(_ target: Target) async throws -> Response { - try await withCheckedThrowingContinuation { continuation in - self.request(target) { result in - switch result { - case .success(let response): - continuation.resume(returning: response) - case .failure(let error): - continuation.resume(throwing: error) - } - } - } - } -} diff --git a/gonny/MegaBox/MegaBox/Service/MoyaRouter.swift b/gonny/MegaBox/MegaBox/Service/MoyaRouter.swift deleted file mode 100644 index 9747cd9..0000000 --- a/gonny/MegaBox/MegaBox/Service/MoyaRouter.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// MoyaService.swift -// MegaBox -// -// Created by 박병선 on 11/13/25. -// -import Foundation -import Moya - -// MARK: - 영화 관련 API 엔드포인트 정의 -enum TMDBRouter { - case nowPlaying(NowPlayingRequestDTO) -} - -// MARK: - TargetType 채택 -extension TMDBRouter: TargetType { - - // 기본 URL - var baseURL: URL { - return URL(string: "https://api.themoviedb.org/3")! - } - - - var path: String { - switch self { - case .nowPlaying: - return "/movie/now_playing" - } - } - - - var method: Moya.Method { - return .get - } - - var task: Task { - switch self { - case .nowPlaying(let dto): - return .requestParameters(parameters: dto.toDictionary(), encoding: URLEncoding.queryString) - } - } - - var headers: [String: String]? { - return [ - "Authorization": "Bearer \(Secret.tmdbReadAccessToken)", - "Accept": "application/json" - - ] - } -} diff --git a/gonny/MegaBox/MegaBox/Service/MoyaService.swift b/gonny/MegaBox/MegaBox/Service/MoyaService.swift deleted file mode 100644 index 0b58048..0000000 --- a/gonny/MegaBox/MegaBox/Service/MoyaService.swift +++ /dev/null @@ -1,128 +0,0 @@ -// -// MoyaService.swift -// MegaBox -// -// Created by 박병선 on 11/13/25. -// -import Foundation -import Moya - -// MARK: - TMDB Service Protocol - -protocol TMDBServicing { - /// Now Playing 영화 목록 (completion-handler) - func fetchNowPlaying( - page: Int, - language: String, - region: String?, - completion: @escaping (Result) -> Void - ) - - /// Now Playing 영화 목록 (async/await) - func fetchNowPlayingAsync( - page: Int, - language: String, - region: String? - ) async throws -> MovieResponseDTO -} - -// MARK: - TMDBService 구현체 - -final class TMDBService: TMDBServicing { - - static let shared = TMDBService() - private let provider: MoyaProvider //Moya네트워크 요청 객체 - private let apiKey: String //TMDB API Key - - // 기본 생성자 - init( - apiKey: String = TMDBService.defaultApiKey, - provider: MoyaProvider = MoyaProvider() - ) { - self.apiKey = apiKey - self.provider = provider - } - - // Info.plist → TMDB_API_KEY 읽기 - private static let defaultApiKey: String = { - let value = Bundle.main.object(forInfoDictionaryKey: "TMDB_API_KEY") as? String - guard let key = value, key.isEmpty == false else { - assertionFailure("TMDB_API_KEY not found in Info.plist") - return "" - } - return key - }() - - // MARK: - completion-handler 버전 - /* 동작 흐름 - 1. NowPlayingRequestDTO 생성 - 2. TMDBRouter.nowPlaying(requestDTO)로 라우터 세팅 - 3. provider.request(target) 호출 - 4. 성공 → JSONDecoder 로 DTO 디코딩 - 5. 실패 → NetworkError 반환 - */ - func fetchNowPlaying( - page: Int = 1, - language: String = "ko-KR", - region: String? = nil, - completion: @escaping (Result) -> Void - ) { - let requestDTO = NowPlayingRequestDTO( - apikey: apiKey, - language: language, - page: page, - region: region - ) - - let target = TMDBRouter.nowPlaying(requestDTO) - - provider.request(target) { result in - switch result { - case .success(let response): - do { - let decoder = JSONDecoder() - decoder.keyDecodingStrategy = .convertFromSnakeCase - let dto = try decoder.decode(MovieResponseDTO.self, from: response.data) - completion(.success(dto)) - } catch { - print("[TMDBService] Decoding error: \(error)") - completion(.failure(.decodingError)) - } - - case .failure(let error): - print("[TMDBService] Network failure: \(error)") - completion(.failure(.networkFailure)) - } - } - } - - // MARK: - async/await 버전 - /* - 동작흐름 - 1. DTO 생성 (apiKey, language, page 등 포함) - 2. Router로 target 설정 - 3. provider.asyncRequest(target) 실행 → async/await 기반 요청 - 4. 응답 데이터를 MovieResponseDTO 로 디코딩 후 반환 - */ - func fetchNowPlayingAsync( - page: Int = 1, - language: String = "ko-KR", - region: String? = nil - ) async throws -> MovieResponseDTO { - let requestDTO = NowPlayingRequestDTO( - apikey: apiKey, - language: language, - page: page, - region: region - ) - - let target = TMDBRouter.nowPlaying(requestDTO) - - let response = try await provider.asyncRequest(target) - - let decoder = JSONDecoder() - decoder.keyDecodingStrategy = .convertFromSnakeCase - return try decoder.decode(MovieResponseDTO.self, from: response.data) - } -} - diff --git a/gonny/MegaBox/MegaBox/Service/NetworkError.swift b/gonny/MegaBox/MegaBox/Service/NetworkError.swift deleted file mode 100644 index edb515c..0000000 --- a/gonny/MegaBox/MegaBox/Service/NetworkError.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// NetworkError.swift -// MegaBox -// -// Created by 박병선 on 11/13/25. -// -import Foundation - - -enum NetworkError: Error { - case decodingError - case networkFailure - case unknown -} - - diff --git a/gonny/MegaBox/MegaBox/Token/AcessTokenRefresher.swift b/gonny/MegaBox/MegaBox/Token/AcessTokenRefresher.swift deleted file mode 100644 index d7c1010..0000000 --- a/gonny/MegaBox/MegaBox/Token/AcessTokenRefresher.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// AcessTokenRefresher.swift -// MegaBox -// -// Created by 박병선 on 11/13/25. -// -import Foundation -import Alamofire - -class AccessTokenRefresher: @unchecked Sendable, RequestInterceptor { - private var tokenProviding: TokenProviding - private var isRefreshing: Bool = false - private var requestToRetry: [(RetryResult) -> Void] = [] - - init(tokenProviding: TokenProviding) { - self.tokenProviding = tokenProviding - } - - func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { - var urlRequest = urlRequest - if let accessToken = tokenProviding.accessToken { - urlRequest.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization") - } - completion(.success(urlRequest)) - } - - func retry(_ request: Request, for session: Session, dueTo error: any Error, completion: @escaping (RetryResult) -> Void) { - guard request.retryCount < 1, - let response = request.task?.response as? HTTPURLResponse, - [401, 404].contains(response.statusCode) else { - return completion(.doNotRetry) - } - - requestToRetry.append(completion) - if !isRefreshing { - isRefreshing = true - tokenProviding.refreshToken { [weak self] newToken, error in - guard let self = self else { return } - self.isRefreshing = false - let result = error == nil ? RetryResult.retry : RetryResult.doNotRetryWithError(error!) - self.requestToRetry.forEach { $0(result) } - self.requestToRetry.removeAll() - } - } - } -} - diff --git a/gonny/MegaBox/MegaBox/Token/Secret.swift b/gonny/MegaBox/MegaBox/Token/Secret.swift deleted file mode 100644 index e5f2595..0000000 --- a/gonny/MegaBox/MegaBox/Token/Secret.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// Secret.swift -// MegaBox -// -// Created by 박병선 on 11/13/25. -// -import Foundation - -enum Secret { - static let tmdbApiKey: String = { - Bundle.main.infoDictionary?["TMDB_API_KEY"] as? String ?? "" - }() - - static let tmdbReadAccessToken: String = { - Bundle.main.infoDictionary?["TMDB_READ_TOKEN"] as? String ?? "" - }() -} diff --git a/gonny/MegaBox/MegaBox/Token/TokenProvider.swift b/gonny/MegaBox/MegaBox/Token/TokenProvider.swift deleted file mode 100644 index d0c5aa6..0000000 --- a/gonny/MegaBox/MegaBox/Token/TokenProvider.swift +++ /dev/null @@ -1,81 +0,0 @@ -// -// TokenProvider.swift -// MegaBox -// -// Created by 박병선 on 11/13/25. -// -import Foundation -import Moya - -class TokenProvider: TokenProviding { - private let userSession = "appNameUser" - private let keyChain = KeychainService.shared - private let provider = MoyaProvider() - - var accessToken: String? { - get { - guard let userInfo = keyChain.loadSession(for: userSession) else { return nil } - return userInfo.accessToken - } - set { - guard var userInfo = keyChain.loadSession(for: userSession) else { return } - userInfo.accessToken = newValue ?? "토큰 정보 없음" - keyChain.saveSession(userInfo, for: userSession) - } - } - - var refreshToken: String? { - get { - guard let userInfo = keyChain.loadSession(for: userSession) - else { return nil } - return userInfo.refreshToken - } - - set { - guard var userInfo = keyChain.loadSession(for: userSession) - else { return } - userInfo.refreshToken = newValue ?? "토큰 정보 없음" - keyChain.saveSession(userInfo, for: userSession) - } - } - - func refreshToken(completion: @escaping (String?, (any Error)?) -> Void) { - guard let userInfo = keyChain.loadSession(for: userSession) - else { - let error = NSError(domain: "example.com", code: -2, userInfo: [NSLocalizedDescriptionKey: "UserSession or refreshToken not found"]) - completion(nil, error) - return - } - let refreshToken = userInfo.refreshToken - - provider.request(.sendRefreshToken(refreshToken: refreshToken)) { result in - switch result { - case .success(let response): - if let jsonString = String(data: response.data, encoding: .utf8) { - print("응답 JSON: \(jsonString)") - } else { - print("JSON 데이터를 문자열로 변환할 수 없습니다.") - } - - do { - - let tokenData = try JSONDecoder().decode(TokenInfo.self, from: response.data) - - - self.accessToken = tokenData.accessToken - self.refreshToken = tokenData.refreshToken - - completion(self.accessToken, nil) - } catch { - print("디코딩 에러: \(error)") - completion(nil, error) - } - - case .failure(let error): - print("네트워크 에러 : \(error)") - completion(nil, error) - } - } - } - -} diff --git a/gonny/MegaBox/MegaBoxTests/MegaBoxTests.swift b/gonny/MegaBox/MegaBoxTests/MegaBoxTests.swift deleted file mode 100644 index 9b33bbc..0000000 --- a/gonny/MegaBox/MegaBoxTests/MegaBoxTests.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// MegaBoxTests.swift -// MegaBoxTests -// -// Created by 박병선 on 9/16/25. -// - -import Testing -@testable import MegaBox - -struct MegaBoxTests { - - @Test func example() async throws { - // Write your test here and use APIs like `#expect(...)` to check expected conditions. - } - -} diff --git a/gonny/MegaBox/MegaBoxUITests/MegaBoxUITests.swift b/gonny/MegaBox/MegaBoxUITests/MegaBoxUITests.swift deleted file mode 100644 index 520d941..0000000 --- a/gonny/MegaBox/MegaBoxUITests/MegaBoxUITests.swift +++ /dev/null @@ -1,43 +0,0 @@ -// -// MegaBoxUITests.swift -// MegaBoxUITests -// -// Created by 박병선 on 9/16/25. -// - -import XCTest - -final class MegaBoxUITests: XCTestCase { - - override func setUpWithError() throws { - // Put setup code here. This method is called before the invocation of each test method in the class. - - // In UI tests it is usually best to stop immediately when a failure occurs. - continueAfterFailure = false - - // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. - } - - override func tearDownWithError() throws { - // Put teardown code here. This method is called after the invocation of each test method in the class. - } - - @MainActor - func testExample() throws { - // UI tests must launch the application that they test. - let app = XCUIApplication() - app.launch() - - // Use XCTAssert and related functions to verify your tests produce the correct results. - } - - @MainActor - func testLaunchPerformance() throws { - if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) { - // This measures how long it takes to launch your application. - measure(metrics: [XCTApplicationLaunchMetric()]) { - XCUIApplication().launch() - } - } - } -} diff --git a/gonny/MegaBox/MegaBoxUITests/MegaBoxUITestsLaunchTests.swift b/gonny/MegaBox/MegaBoxUITests/MegaBoxUITestsLaunchTests.swift deleted file mode 100644 index 05564ae..0000000 --- a/gonny/MegaBox/MegaBoxUITests/MegaBoxUITestsLaunchTests.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// MegaBoxUITestsLaunchTests.swift -// MegaBoxUITests -// -// Created by 박병선 on 9/16/25. -// - -import XCTest - -final class MegaBoxUITestsLaunchTests: XCTestCase { - - override class var runsForEachTargetApplicationUIConfiguration: Bool { - true - } - - override func setUpWithError() throws { - continueAfterFailure = false - } - - @MainActor - func testLaunch() throws { - let app = XCUIApplication() - app.launch() - - // Insert steps here to perform after app launch but before taking a screenshot, - // such as logging into a test account or navigating somewhere in the app - - let attachment = XCTAttachment(screenshot: app.screenshot()) - attachment.name = "Launch Screen" - attachment.lifetime = .keepAlways - add(attachment) - } -} diff --git a/gonny/README.md b/gonny/README.md deleted file mode 100644 index f66173c..0000000 --- a/gonny/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# UMC-9th-iOS-Study -UMC 9기 iOS 스터디 - -## 📂 폴더 구조 - -``` -본인 닉네임 - ┣ week0 - ┃ ┣ week0_practice - ┃ - ┣ week1 - ┃ ┗ week1_grammar - ┣ MEGABOX - ┃ ┗ week1_homework - ┗ ... -`` - - -`## 📌 PR 규칙 -- **형식**: `[닉네임/이름] n주차 과제 제출` -- 예시: `[카이/김지우] 1주차 과제 제출` - -## 📑 커밋 컨벤션 -### 🏷️ 커밋 태그 가이드 - - | 태그 | 설명 | -|-------------|--------------------------------------------------------| -| feat: | 새로운 기능 추가 | -| fix: | 버그 수정 | -| refactor: | 코드 리팩토링 (기능 변경 없이 구조 개선) | -| style: | 코드 포맷팅, 세미콜론 누락, 들여쓰기 수정 등 | -| docs: | README, 문서 수정 | -| test: | 테스트 코드 추가 및 수정 | -| chore: | 패키지 매니저 설정, 빌드 설정 등 기타 작업 | -| design: | UI, CSS, 레이아웃 등 디자인 관련 수정 | -| hotfix: | 운영 중 긴급 수정이 필요한 버그 대응 | -| CI/CD: | 배포 관련 설정, 워크플로우 구성 등 | - -### ✅ 커밋 예시 모음 -> feat: 화면 Navigation 연결 -> refactor: HomeView 구조 수정 diff --git a/gonny/Week1_Practice/Resource/Assets.xcassets/AccentColor.colorset/Contents.json b/gonny/Week1_Practice/Resource/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/gonny/Week1_Practice/Resource/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/Week1_Practice/Resource/Assets.xcassets/AppIcon.appiconset/Contents.json b/gonny/Week1_Practice/Resource/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/gonny/Week1_Practice/Resource/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/Week1_Practice/Resource/Assets.xcassets/Contents.json b/gonny/Week1_Practice/Resource/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gonny/Week1_Practice/Resource/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/Week1_Practice/Resource/Assets.xcassets/ticket_backgroud.imageset/Contents.json b/gonny/Week1_Practice/Resource/Assets.xcassets/ticket_backgroud.imageset/Contents.json deleted file mode 100644 index 86750ee..0000000 --- a/gonny/Week1_Practice/Resource/Assets.xcassets/ticket_backgroud.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "ticket_background.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/Week1_Practice/Resource/Assets.xcassets/ticket_backgroud.imageset/ticket_background.pdf b/gonny/Week1_Practice/Resource/Assets.xcassets/ticket_backgroud.imageset/ticket_background.pdf deleted file mode 100644 index 45be9eb..0000000 Binary files a/gonny/Week1_Practice/Resource/Assets.xcassets/ticket_backgroud.imageset/ticket_background.pdf and /dev/null differ diff --git a/gonny/Week1_Practice/Resource/Fonts.swift b/gonny/Week1_Practice/Resource/Fonts.swift deleted file mode 100644 index 0c65392..0000000 --- a/gonny/Week1_Practice/Resource/Fonts.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// Fonts.swift -// Week1_Practice -// -// Created by 박병선 on 9/18/25. -// -import Foundation -import SwiftUI - -extension Font { - enum Pretend { - case extraBold - case bold - case semibold - case medium - case regular - case light - - var value: String { - switch self { - case .extraBold: - return "Pretendard-ExtraBold" - case .bold: - return "Pretendard-Bold" - case .semibold: - return "Pretendard-SemiBold" - case .medium: - return "Pretendard-Medium" - case .regular: - return "Pretendard-Regular" - case .light: - return "Pretendard-Light" - } - } - } - - static func pretend(type: Pretend, size: CGFloat) -> Font { - return .custom(type.value, size: size) - } - - static func pretendardLight(_ size: CGFloat) -> Font { - return .pretend(type: .light, size: size) - } - - static func pretendardRegular(_ size: CGFloat) -> Font { - return .pretend(type: .regular, size: size) - } - - static func pretendardMedium(_ size: CGFloat) -> Font { - return .pretend(type: .medium, size: size) - } - - static func pretendardBold(_ size: CGFloat) -> Font { - return .pretend(type: .bold, size: size) - } - - static func pretendardSemiBold(_ size: CGFloat) -> Font { - return .pretend(type: .semibold, size: size) - } - - static func PretendardExtraBold(_ size: CGFloat) -> Font { - return .pretend(type: .extraBold, size: size) - } - -} - diff --git a/gonny/Week1_Practice/Resource/Pretendard-Black.otf b/gonny/Week1_Practice/Resource/Pretendard-Black.otf deleted file mode 100644 index a0d849e..0000000 Binary files a/gonny/Week1_Practice/Resource/Pretendard-Black.otf and /dev/null differ diff --git a/gonny/Week1_Practice/Resource/Pretendard-Bold.otf b/gonny/Week1_Practice/Resource/Pretendard-Bold.otf deleted file mode 100644 index 8e5e30a..0000000 Binary files a/gonny/Week1_Practice/Resource/Pretendard-Bold.otf and /dev/null differ diff --git a/gonny/Week1_Practice/Resource/Pretendard-ExtraBold.otf b/gonny/Week1_Practice/Resource/Pretendard-ExtraBold.otf deleted file mode 100644 index 388f3ca..0000000 Binary files a/gonny/Week1_Practice/Resource/Pretendard-ExtraBold.otf and /dev/null differ diff --git a/gonny/Week1_Practice/Resource/Pretendard-ExtraLight.otf b/gonny/Week1_Practice/Resource/Pretendard-ExtraLight.otf deleted file mode 100644 index 40c8b69..0000000 Binary files a/gonny/Week1_Practice/Resource/Pretendard-ExtraLight.otf and /dev/null differ diff --git a/gonny/Week1_Practice/Resource/Pretendard-Light.otf b/gonny/Week1_Practice/Resource/Pretendard-Light.otf deleted file mode 100644 index 228679e..0000000 Binary files a/gonny/Week1_Practice/Resource/Pretendard-Light.otf and /dev/null differ diff --git a/gonny/Week1_Practice/Resource/Pretendard-Medium.otf b/gonny/Week1_Practice/Resource/Pretendard-Medium.otf deleted file mode 100644 index 0575069..0000000 Binary files a/gonny/Week1_Practice/Resource/Pretendard-Medium.otf and /dev/null differ diff --git a/gonny/Week1_Practice/Resource/Pretendard-Regular.otf b/gonny/Week1_Practice/Resource/Pretendard-Regular.otf deleted file mode 100644 index 08bf4cf..0000000 Binary files a/gonny/Week1_Practice/Resource/Pretendard-Regular.otf and /dev/null differ diff --git a/gonny/Week1_Practice/Resource/Pretendard-SemiBold.otf b/gonny/Week1_Practice/Resource/Pretendard-SemiBold.otf deleted file mode 100644 index e7e36ab..0000000 Binary files a/gonny/Week1_Practice/Resource/Pretendard-SemiBold.otf and /dev/null differ diff --git a/gonny/Week1_Practice/Resource/Pretendard-Thin.otf b/gonny/Week1_Practice/Resource/Pretendard-Thin.otf deleted file mode 100644 index 77e792d..0000000 Binary files a/gonny/Week1_Practice/Resource/Pretendard-Thin.otf and /dev/null differ diff --git a/gonny/Week1_Practice/Week1-Practice-Info.plist b/gonny/Week1_Practice/Week1-Practice-Info.plist deleted file mode 100644 index 22940ec..0000000 --- a/gonny/Week1_Practice/Week1-Practice-Info.plist +++ /dev/null @@ -1,18 +0,0 @@ - - - - - UIAppFonts - - Pretendard-Black.otf - Pretendard-Bold.otf - Pretendard-ExtraBold.otf - Pretendard-ExtraLight.otf - Pretendard-Light.otf - Pretendard-Medium.otf - Pretendard-Regular.otf - Pretendard-Semibold.otf - Pretendard-Thin.otf - - - diff --git a/gonny/Week1_Practice/Week1_Practice.xcodeproj/project.pbxproj b/gonny/Week1_Practice/Week1_Practice.xcodeproj/project.pbxproj deleted file mode 100644 index 1e92d2e..0000000 --- a/gonny/Week1_Practice/Week1_Practice.xcodeproj/project.pbxproj +++ /dev/null @@ -1,572 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXContainerItemProxy section */ - 785320AC2E7BEE6500FAB323 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 785320932E7BEE6400FAB323 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7853209A2E7BEE6400FAB323; - remoteInfo = Week1_Practice; - }; - 785320B62E7BEE6500FAB323 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 785320932E7BEE6400FAB323 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7853209A2E7BEE6400FAB323; - remoteInfo = Week1_Practice; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 7853209B2E7BEE6400FAB323 /* Week1_Practice.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Week1_Practice.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 785320AB2E7BEE6500FAB323 /* Week1_PracticeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Week1_PracticeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 785320B52E7BEE6500FAB323 /* Week1_PracticeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Week1_PracticeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 7853209D2E7BEE6400FAB323 /* Week1_Practice */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = Week1_Practice; - sourceTree = ""; - }; - 785320AE2E7BEE6500FAB323 /* Week1_PracticeTests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = Week1_PracticeTests; - sourceTree = ""; - }; - 785320B82E7BEE6500FAB323 /* Week1_PracticeUITests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = Week1_PracticeUITests; - sourceTree = ""; - }; - 785320CD2E7BF07900FAB323 /* Resource */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = Resource; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 785320982E7BEE6400FAB323 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 785320A82E7BEE6500FAB323 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 785320B22E7BEE6500FAB323 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 785320922E7BEE6400FAB323 = { - isa = PBXGroup; - children = ( - 785320CD2E7BF07900FAB323 /* Resource */, - 7853209D2E7BEE6400FAB323 /* Week1_Practice */, - 785320AE2E7BEE6500FAB323 /* Week1_PracticeTests */, - 785320B82E7BEE6500FAB323 /* Week1_PracticeUITests */, - 7853209C2E7BEE6400FAB323 /* Products */, - ); - sourceTree = ""; - }; - 7853209C2E7BEE6400FAB323 /* Products */ = { - isa = PBXGroup; - children = ( - 7853209B2E7BEE6400FAB323 /* Week1_Practice.app */, - 785320AB2E7BEE6500FAB323 /* Week1_PracticeTests.xctest */, - 785320B52E7BEE6500FAB323 /* Week1_PracticeUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 7853209A2E7BEE6400FAB323 /* Week1_Practice */ = { - isa = PBXNativeTarget; - buildConfigurationList = 785320BF2E7BEE6500FAB323 /* Build configuration list for PBXNativeTarget "Week1_Practice" */; - buildPhases = ( - 785320972E7BEE6400FAB323 /* Sources */, - 785320982E7BEE6400FAB323 /* Frameworks */, - 785320992E7BEE6400FAB323 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 7853209D2E7BEE6400FAB323 /* Week1_Practice */, - 785320CD2E7BF07900FAB323 /* Resource */, - ); - name = Week1_Practice; - packageProductDependencies = ( - ); - productName = Week1_Practice; - productReference = 7853209B2E7BEE6400FAB323 /* Week1_Practice.app */; - productType = "com.apple.product-type.application"; - }; - 785320AA2E7BEE6500FAB323 /* Week1_PracticeTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 785320C22E7BEE6500FAB323 /* Build configuration list for PBXNativeTarget "Week1_PracticeTests" */; - buildPhases = ( - 785320A72E7BEE6500FAB323 /* Sources */, - 785320A82E7BEE6500FAB323 /* Frameworks */, - 785320A92E7BEE6500FAB323 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 785320AD2E7BEE6500FAB323 /* PBXTargetDependency */, - ); - fileSystemSynchronizedGroups = ( - 785320AE2E7BEE6500FAB323 /* Week1_PracticeTests */, - ); - name = Week1_PracticeTests; - packageProductDependencies = ( - ); - productName = Week1_PracticeTests; - productReference = 785320AB2E7BEE6500FAB323 /* Week1_PracticeTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 785320B42E7BEE6500FAB323 /* Week1_PracticeUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 785320C52E7BEE6500FAB323 /* Build configuration list for PBXNativeTarget "Week1_PracticeUITests" */; - buildPhases = ( - 785320B12E7BEE6500FAB323 /* Sources */, - 785320B22E7BEE6500FAB323 /* Frameworks */, - 785320B32E7BEE6500FAB323 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 785320B72E7BEE6500FAB323 /* PBXTargetDependency */, - ); - fileSystemSynchronizedGroups = ( - 785320B82E7BEE6500FAB323 /* Week1_PracticeUITests */, - ); - name = Week1_PracticeUITests; - packageProductDependencies = ( - ); - productName = Week1_PracticeUITests; - productReference = 785320B52E7BEE6500FAB323 /* Week1_PracticeUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 785320932E7BEE6400FAB323 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1610; - LastUpgradeCheck = 1610; - TargetAttributes = { - 7853209A2E7BEE6400FAB323 = { - CreatedOnToolsVersion = 16.1; - }; - 785320AA2E7BEE6500FAB323 = { - CreatedOnToolsVersion = 16.1; - TestTargetID = 7853209A2E7BEE6400FAB323; - }; - 785320B42E7BEE6500FAB323 = { - CreatedOnToolsVersion = 16.1; - TestTargetID = 7853209A2E7BEE6400FAB323; - }; - }; - }; - buildConfigurationList = 785320962E7BEE6400FAB323 /* Build configuration list for PBXProject "Week1_Practice" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 785320922E7BEE6400FAB323; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - productRefGroup = 7853209C2E7BEE6400FAB323 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 7853209A2E7BEE6400FAB323 /* Week1_Practice */, - 785320AA2E7BEE6500FAB323 /* Week1_PracticeTests */, - 785320B42E7BEE6500FAB323 /* Week1_PracticeUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 785320992E7BEE6400FAB323 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 785320A92E7BEE6500FAB323 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 785320B32E7BEE6500FAB323 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 785320972E7BEE6400FAB323 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 785320A72E7BEE6500FAB323 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 785320B12E7BEE6500FAB323 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 785320AD2E7BEE6500FAB323 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 7853209A2E7BEE6400FAB323 /* Week1_Practice */; - targetProxy = 785320AC2E7BEE6500FAB323 /* PBXContainerItemProxy */; - }; - 785320B72E7BEE6500FAB323 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 7853209A2E7BEE6400FAB323 /* Week1_Practice */; - targetProxy = 785320B62E7BEE6500FAB323 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 785320BD2E7BEE6500FAB323 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.1; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 785320BE2E7BEE6500FAB323 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.1; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 785320C02E7BEE6500FAB323 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"Week1_Practice/Preview Content\""; - DEVELOPMENT_TEAM = 6PW49YXW64; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "Week1-Practice-Info.plist"; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "gonny.Week1-Practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 785320C12E7BEE6500FAB323 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"Week1_Practice/Preview Content\""; - DEVELOPMENT_TEAM = 6PW49YXW64; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "Week1-Practice-Info.plist"; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "gonny.Week1-Practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - 785320C32E7BEE6500FAB323 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 6PW49YXW64; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.1; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "gonny.Week1-PracticeTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Week1_Practice.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Week1_Practice"; - }; - name = Debug; - }; - 785320C42E7BEE6500FAB323 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 6PW49YXW64; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.1; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "gonny.Week1-PracticeTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Week1_Practice.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Week1_Practice"; - }; - name = Release; - }; - 785320C62E7BEE6500FAB323 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 6PW49YXW64; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "gonny.Week1-PracticeUITests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = Week1_Practice; - }; - name = Debug; - }; - 785320C72E7BEE6500FAB323 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 6PW49YXW64; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "gonny.Week1-PracticeUITests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = Week1_Practice; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 785320962E7BEE6400FAB323 /* Build configuration list for PBXProject "Week1_Practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 785320BD2E7BEE6500FAB323 /* Debug */, - 785320BE2E7BEE6500FAB323 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 785320BF2E7BEE6500FAB323 /* Build configuration list for PBXNativeTarget "Week1_Practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 785320C02E7BEE6500FAB323 /* Debug */, - 785320C12E7BEE6500FAB323 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 785320C22E7BEE6500FAB323 /* Build configuration list for PBXNativeTarget "Week1_PracticeTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 785320C32E7BEE6500FAB323 /* Debug */, - 785320C42E7BEE6500FAB323 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 785320C52E7BEE6500FAB323 /* Build configuration list for PBXNativeTarget "Week1_PracticeUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 785320C62E7BEE6500FAB323 /* Debug */, - 785320C72E7BEE6500FAB323 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 785320932E7BEE6400FAB323 /* Project object */; -} diff --git a/gonny/Week1_Practice/Week1_Practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/gonny/Week1_Practice/Week1_Practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/gonny/Week1_Practice/Week1_Practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/gonny/Week1_Practice/Week1_Practice.xcodeproj/project.xcworkspace/xcuserdata/bagbyeongseon.xcuserdatad/UserInterfaceState.xcuserstate b/gonny/Week1_Practice/Week1_Practice.xcodeproj/project.xcworkspace/xcuserdata/bagbyeongseon.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index c93f663..0000000 Binary files a/gonny/Week1_Practice/Week1_Practice.xcodeproj/project.xcworkspace/xcuserdata/bagbyeongseon.xcuserdatad/UserInterfaceState.xcuserstate and /dev/null differ diff --git a/gonny/Week1_Practice/Week1_Practice.xcodeproj/xcuserdata/bagbyeongseon.xcuserdatad/xcschemes/xcschememanagement.plist b/gonny/Week1_Practice/Week1_Practice.xcodeproj/xcuserdata/bagbyeongseon.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 6051dce..0000000 --- a/gonny/Week1_Practice/Week1_Practice.xcodeproj/xcuserdata/bagbyeongseon.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,14 +0,0 @@ - - - - - SchemeUserState - - Week1_Practice.xcscheme_^#shared#^_ - - orderHint - 0 - - - - diff --git a/gonny/Week1_Practice/Week1_Practice/Preview Content/Preview Assets.xcassets/Contents.json b/gonny/Week1_Practice/Week1_Practice/Preview Content/Preview Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gonny/Week1_Practice/Week1_Practice/Preview Content/Preview Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/Week1_Practice/Week1_Practice/Views/TicketView.swift b/gonny/Week1_Practice/Week1_Practice/Views/TicketView.swift deleted file mode 100644 index 727cd61..0000000 --- a/gonny/Week1_Practice/Week1_Practice/Views/TicketView.swift +++ /dev/null @@ -1,68 +0,0 @@ -// -// TicketView.swift -// Week1_Practice -// -// Created by 박병선 on 9/18/25. -// -import SwiftUI - -struct TicketView: View { - var body: some View { - ZStack { - Image("ticket_backgroud") - .resizable() - .frame(width: 385, height: 385) - - VStack { - - Spacer().frame(height: 111) - - mainTitleGroup - - Spacer().frame(height: 134) - - mainBottomGroup - } - } - .padding() - } - - /// 상단 Title VStack - private var mainTitleGroup: some View { - VStack { - Group { - Text("마이펫의 이중생활2") - .font(.pretendardBold(30)) - .shadow(color: .black.opacity(0.25), radius: 2, x: 0, y: 4) - Text("본인 + 동반 1인") - .font(.pretendardLight(16)) - Text("30,100원") - .font(.pretendardBold(24)) - } - .foregroundStyle(Color.white) - } - .frame(height: 84) - } - - /// 하단 VStack - private var mainBottomGroup: some View { - Button(action: { - print("Hello") - }, label: { - VStack { - Image(systemName: "chevron.up") - .resizable() - .frame(width: 18, height: 12) - .foregroundStyle(Color.white) - Text("예매하기") - .font(.pretendardSemiBold(18)) - .foregroundStyle(Color.white) - } - .frame(width: 63, height: 40) - }) - } -} - -#Preview { - TicketView() -} diff --git a/gonny/Week1_Practice/Week1_Practice/Week1_PracticeApp.swift b/gonny/Week1_Practice/Week1_Practice/Week1_PracticeApp.swift deleted file mode 100644 index 8ec307a..0000000 --- a/gonny/Week1_Practice/Week1_Practice/Week1_PracticeApp.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// Week1_PracticeApp.swift -// Week1_Practice -// -// Created by 박병선 on 9/18/25. -// - -import SwiftUI - -@main -struct Week1_PracticeApp: App { - var body: some Scene { - WindowGroup { - TicketView() - } - } -} diff --git a/gonny/Week1_Practice/Week1_PracticeTests/Week1_PracticeTests.swift b/gonny/Week1_Practice/Week1_PracticeTests/Week1_PracticeTests.swift deleted file mode 100644 index 0ebbdfc..0000000 --- a/gonny/Week1_Practice/Week1_PracticeTests/Week1_PracticeTests.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// Week1_PracticeTests.swift -// Week1_PracticeTests -// -// Created by 박병선 on 9/18/25. -// - -import Testing -@testable import Week1_Practice - -struct Week1_PracticeTests { - - @Test func example() async throws { - // Write your test here and use APIs like `#expect(...)` to check expected conditions. - } - -} diff --git a/gonny/Week1_Practice/Week1_PracticeUITests/Week1_PracticeUITests.swift b/gonny/Week1_Practice/Week1_PracticeUITests/Week1_PracticeUITests.swift deleted file mode 100644 index 7fc5414..0000000 --- a/gonny/Week1_Practice/Week1_PracticeUITests/Week1_PracticeUITests.swift +++ /dev/null @@ -1,43 +0,0 @@ -// -// Week1_PracticeUITests.swift -// Week1_PracticeUITests -// -// Created by 박병선 on 9/18/25. -// - -import XCTest - -final class Week1_PracticeUITests: XCTestCase { - - override func setUpWithError() throws { - // Put setup code here. This method is called before the invocation of each test method in the class. - - // In UI tests it is usually best to stop immediately when a failure occurs. - continueAfterFailure = false - - // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. - } - - override func tearDownWithError() throws { - // Put teardown code here. This method is called after the invocation of each test method in the class. - } - - @MainActor - func testExample() throws { - // UI tests must launch the application that they test. - let app = XCUIApplication() - app.launch() - - // Use XCTAssert and related functions to verify your tests produce the correct results. - } - - @MainActor - func testLaunchPerformance() throws { - if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) { - // This measures how long it takes to launch your application. - measure(metrics: [XCTApplicationLaunchMetric()]) { - XCUIApplication().launch() - } - } - } -} diff --git a/gonny/Week1_Practice/Week1_PracticeUITests/Week1_PracticeUITestsLaunchTests.swift b/gonny/Week1_Practice/Week1_PracticeUITests/Week1_PracticeUITestsLaunchTests.swift deleted file mode 100644 index 3cc47fa..0000000 --- a/gonny/Week1_Practice/Week1_PracticeUITests/Week1_PracticeUITestsLaunchTests.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// Week1_PracticeUITestsLaunchTests.swift -// Week1_PracticeUITests -// -// Created by 박병선 on 9/18/25. -// - -import XCTest - -final class Week1_PracticeUITestsLaunchTests: XCTestCase { - - override class var runsForEachTargetApplicationUIConfiguration: Bool { - true - } - - override func setUpWithError() throws { - continueAfterFailure = false - } - - @MainActor - func testLaunch() throws { - let app = XCUIApplication() - app.launch() - - // Insert steps here to perform after app launch but before taking a screenshot, - // such as logging into a test account or navigating somewhere in the app - - let attachment = XCTAttachment(screenshot: app.screenshot()) - attachment.name = "Launch Screen" - attachment.lifetime = .keepAlways - add(attachment) - } -} diff --git a/gonny/Week2_Practice/Week2_Practice.xcodeproj/project.pbxproj b/gonny/Week2_Practice/Week2_Practice.xcodeproj/project.pbxproj deleted file mode 100644 index 4312f7f..0000000 --- a/gonny/Week2_Practice/Week2_Practice.xcodeproj/project.pbxproj +++ /dev/null @@ -1,563 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXContainerItemProxy section */ - 78B486602E813D0000A89A13 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 78B486472E813CFF00A89A13 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 78B4864E2E813CFF00A89A13; - remoteInfo = Week2_Practice; - }; - 78B4866A2E813D0000A89A13 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 78B486472E813CFF00A89A13 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 78B4864E2E813CFF00A89A13; - remoteInfo = Week2_Practice; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 78B4864F2E813CFF00A89A13 /* Week2_Practice.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Week2_Practice.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 78B4865F2E813D0000A89A13 /* Week2_PracticeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Week2_PracticeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 78B486692E813D0000A89A13 /* Week2_PracticeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Week2_PracticeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 78B486512E813CFF00A89A13 /* Week2_Practice */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = Week2_Practice; - sourceTree = ""; - }; - 78B486622E813D0000A89A13 /* Week2_PracticeTests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = Week2_PracticeTests; - sourceTree = ""; - }; - 78B4866C2E813D0000A89A13 /* Week2_PracticeUITests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = Week2_PracticeUITests; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 78B4864C2E813CFF00A89A13 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 78B4865C2E813D0000A89A13 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 78B486662E813D0000A89A13 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 78B486462E813CFF00A89A13 = { - isa = PBXGroup; - children = ( - 78B486512E813CFF00A89A13 /* Week2_Practice */, - 78B486622E813D0000A89A13 /* Week2_PracticeTests */, - 78B4866C2E813D0000A89A13 /* Week2_PracticeUITests */, - 78B486502E813CFF00A89A13 /* Products */, - ); - sourceTree = ""; - }; - 78B486502E813CFF00A89A13 /* Products */ = { - isa = PBXGroup; - children = ( - 78B4864F2E813CFF00A89A13 /* Week2_Practice.app */, - 78B4865F2E813D0000A89A13 /* Week2_PracticeTests.xctest */, - 78B486692E813D0000A89A13 /* Week2_PracticeUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 78B4864E2E813CFF00A89A13 /* Week2_Practice */ = { - isa = PBXNativeTarget; - buildConfigurationList = 78B486732E813D0000A89A13 /* Build configuration list for PBXNativeTarget "Week2_Practice" */; - buildPhases = ( - 78B4864B2E813CFF00A89A13 /* Sources */, - 78B4864C2E813CFF00A89A13 /* Frameworks */, - 78B4864D2E813CFF00A89A13 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 78B486512E813CFF00A89A13 /* Week2_Practice */, - ); - name = Week2_Practice; - packageProductDependencies = ( - ); - productName = Week2_Practice; - productReference = 78B4864F2E813CFF00A89A13 /* Week2_Practice.app */; - productType = "com.apple.product-type.application"; - }; - 78B4865E2E813D0000A89A13 /* Week2_PracticeTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 78B486762E813D0000A89A13 /* Build configuration list for PBXNativeTarget "Week2_PracticeTests" */; - buildPhases = ( - 78B4865B2E813D0000A89A13 /* Sources */, - 78B4865C2E813D0000A89A13 /* Frameworks */, - 78B4865D2E813D0000A89A13 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 78B486612E813D0000A89A13 /* PBXTargetDependency */, - ); - fileSystemSynchronizedGroups = ( - 78B486622E813D0000A89A13 /* Week2_PracticeTests */, - ); - name = Week2_PracticeTests; - packageProductDependencies = ( - ); - productName = Week2_PracticeTests; - productReference = 78B4865F2E813D0000A89A13 /* Week2_PracticeTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 78B486682E813D0000A89A13 /* Week2_PracticeUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 78B486792E813D0000A89A13 /* Build configuration list for PBXNativeTarget "Week2_PracticeUITests" */; - buildPhases = ( - 78B486652E813D0000A89A13 /* Sources */, - 78B486662E813D0000A89A13 /* Frameworks */, - 78B486672E813D0000A89A13 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 78B4866B2E813D0000A89A13 /* PBXTargetDependency */, - ); - fileSystemSynchronizedGroups = ( - 78B4866C2E813D0000A89A13 /* Week2_PracticeUITests */, - ); - name = Week2_PracticeUITests; - packageProductDependencies = ( - ); - productName = Week2_PracticeUITests; - productReference = 78B486692E813D0000A89A13 /* Week2_PracticeUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 78B486472E813CFF00A89A13 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1610; - LastUpgradeCheck = 1610; - TargetAttributes = { - 78B4864E2E813CFF00A89A13 = { - CreatedOnToolsVersion = 16.1; - }; - 78B4865E2E813D0000A89A13 = { - CreatedOnToolsVersion = 16.1; - TestTargetID = 78B4864E2E813CFF00A89A13; - }; - 78B486682E813D0000A89A13 = { - CreatedOnToolsVersion = 16.1; - TestTargetID = 78B4864E2E813CFF00A89A13; - }; - }; - }; - buildConfigurationList = 78B4864A2E813CFF00A89A13 /* Build configuration list for PBXProject "Week2_Practice" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 78B486462E813CFF00A89A13; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - productRefGroup = 78B486502E813CFF00A89A13 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 78B4864E2E813CFF00A89A13 /* Week2_Practice */, - 78B4865E2E813D0000A89A13 /* Week2_PracticeTests */, - 78B486682E813D0000A89A13 /* Week2_PracticeUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 78B4864D2E813CFF00A89A13 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 78B4865D2E813D0000A89A13 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 78B486672E813D0000A89A13 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 78B4864B2E813CFF00A89A13 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 78B4865B2E813D0000A89A13 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 78B486652E813D0000A89A13 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 78B486612E813D0000A89A13 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 78B4864E2E813CFF00A89A13 /* Week2_Practice */; - targetProxy = 78B486602E813D0000A89A13 /* PBXContainerItemProxy */; - }; - 78B4866B2E813D0000A89A13 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 78B4864E2E813CFF00A89A13 /* Week2_Practice */; - targetProxy = 78B4866A2E813D0000A89A13 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 78B486712E813D0000A89A13 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.1; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 78B486722E813D0000A89A13 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.1; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 78B486742E813D0000A89A13 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"Week2_Practice/Preview Content\""; - DEVELOPMENT_TEAM = 6PW49YXW64; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "gonny.Week2-Practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 78B486752E813D0000A89A13 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"Week2_Practice/Preview Content\""; - DEVELOPMENT_TEAM = 6PW49YXW64; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "gonny.Week2-Practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - 78B486772E813D0000A89A13 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 6PW49YXW64; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.1; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "gonny.Week2-PracticeTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Week2_Practice.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Week2_Practice"; - }; - name = Debug; - }; - 78B486782E813D0000A89A13 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 6PW49YXW64; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.1; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "gonny.Week2-PracticeTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Week2_Practice.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Week2_Practice"; - }; - name = Release; - }; - 78B4867A2E813D0000A89A13 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 6PW49YXW64; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "gonny.Week2-PracticeUITests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = Week2_Practice; - }; - name = Debug; - }; - 78B4867B2E813D0000A89A13 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 6PW49YXW64; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "gonny.Week2-PracticeUITests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = Week2_Practice; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 78B4864A2E813CFF00A89A13 /* Build configuration list for PBXProject "Week2_Practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 78B486712E813D0000A89A13 /* Debug */, - 78B486722E813D0000A89A13 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 78B486732E813D0000A89A13 /* Build configuration list for PBXNativeTarget "Week2_Practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 78B486742E813D0000A89A13 /* Debug */, - 78B486752E813D0000A89A13 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 78B486762E813D0000A89A13 /* Build configuration list for PBXNativeTarget "Week2_PracticeTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 78B486772E813D0000A89A13 /* Debug */, - 78B486782E813D0000A89A13 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 78B486792E813D0000A89A13 /* Build configuration list for PBXNativeTarget "Week2_PracticeUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 78B4867A2E813D0000A89A13 /* Debug */, - 78B4867B2E813D0000A89A13 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 78B486472E813CFF00A89A13 /* Project object */; -} diff --git a/gonny/Week2_Practice/Week2_Practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/gonny/Week2_Practice/Week2_Practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/gonny/Week2_Practice/Week2_Practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/gonny/Week2_Practice/Week2_Practice.xcodeproj/project.xcworkspace/xcuserdata/bagbyeongseon.xcuserdatad/UserInterfaceState.xcuserstate b/gonny/Week2_Practice/Week2_Practice.xcodeproj/project.xcworkspace/xcuserdata/bagbyeongseon.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 24a1a77..0000000 Binary files a/gonny/Week2_Practice/Week2_Practice.xcodeproj/project.xcworkspace/xcuserdata/bagbyeongseon.xcuserdatad/UserInterfaceState.xcuserstate and /dev/null differ diff --git a/gonny/Week2_Practice/Week2_Practice.xcodeproj/xcuserdata/bagbyeongseon.xcuserdatad/xcschemes/xcschememanagement.plist b/gonny/Week2_Practice/Week2_Practice.xcodeproj/xcuserdata/bagbyeongseon.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 6db626e..0000000 --- a/gonny/Week2_Practice/Week2_Practice.xcodeproj/xcuserdata/bagbyeongseon.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,14 +0,0 @@ - - - - - SchemeUserState - - Week2_Practice.xcscheme_^#shared#^_ - - orderHint - 0 - - - - diff --git a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/AccentColor.colorset/Contents.json b/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/AppIcon.appiconset/Contents.json b/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/Contents.json b/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/brutalis.imageset/Contents.json b/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/brutalis.imageset/Contents.json deleted file mode 100644 index 4d7ab56..0000000 --- a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/brutalis.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "brutalis.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/brutalis.imageset/brutalis.pdf b/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/brutalis.imageset/brutalis.pdf deleted file mode 100644 index 5af31da..0000000 Binary files a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/brutalis.imageset/brutalis.pdf and /dev/null differ diff --git a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/conclave.imageset/Contents.json b/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/conclave.imageset/Contents.json deleted file mode 100644 index 4bd3a3b..0000000 --- a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/conclave.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "conclave.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/conclave.imageset/conclave.pdf b/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/conclave.imageset/conclave.pdf deleted file mode 100644 index 2f25efe..0000000 Binary files a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/conclave.imageset/conclave.pdf and /dev/null differ diff --git a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/mickey.imageset/Contents.json b/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/mickey.imageset/Contents.json deleted file mode 100644 index 4c83e37..0000000 --- a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/mickey.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "mickey.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/mickey.imageset/mickey.pdf b/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/mickey.imageset/mickey.pdf deleted file mode 100644 index e41a832..0000000 Binary files a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/mickey.imageset/mickey.pdf and /dev/null differ diff --git a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/snowWhite.imageset/Contents.json b/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/snowWhite.imageset/Contents.json deleted file mode 100644 index d9f7461..0000000 --- a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/snowWhite.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "snowWhite.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/snowWhite.imageset/snowWhite.pdf b/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/snowWhite.imageset/snowWhite.pdf deleted file mode 100644 index 973b150..0000000 Binary files a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/snowWhite.imageset/snowWhite.pdf and /dev/null differ diff --git a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/theFall.imageset/Contents.json b/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/theFall.imageset/Contents.json deleted file mode 100644 index 158265d..0000000 --- a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/theFall.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "theFall.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/theFall.imageset/theFall.pdf b/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/theFall.imageset/theFall.pdf deleted file mode 100644 index d215c99..0000000 Binary files a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/theFall.imageset/theFall.pdf and /dev/null differ diff --git a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/toyStory.imageset/Contents.json b/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/toyStory.imageset/Contents.json deleted file mode 100644 index 472f021..0000000 --- a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/toyStory.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "toystory.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/toyStory.imageset/toystory.pdf b/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/toyStory.imageset/toystory.pdf deleted file mode 100644 index 893f4d0..0000000 Binary files a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/toyStory.imageset/toystory.pdf and /dev/null differ diff --git a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/whiplash.imageset/Contents.json b/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/whiplash.imageset/Contents.json deleted file mode 100644 index d8f42c8..0000000 --- a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/whiplash.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "image 5.pdf", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/whiplash.imageset/image 5.pdf b/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/whiplash.imageset/image 5.pdf deleted file mode 100644 index 262526f..0000000 Binary files a/gonny/Week2_Practice/Week2_Practice/Assets.xcassets/whiplash.imageset/image 5.pdf and /dev/null differ diff --git a/gonny/Week2_Practice/Week2_Practice/MovieCard.swift b/gonny/Week2_Practice/Week2_Practice/MovieCard.swift deleted file mode 100644 index e6119c9..0000000 --- a/gonny/Week2_Practice/Week2_Practice/MovieCard.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// ContentView.swift -// Week2_Practice -// -// Created by 박병선 on 9/22/25. -// -import SwiftUI - -struct MovieCard: View { - - let movieInfo: MovieModel - - init(movieInfo: MovieModel) { - self.movieInfo = movieInfo - } - - var body: some View { - VStack(spacing: 5) { - movieInfo.movieImage - - Text(movieInfo.movieName) - .font(.system(size: 20, weight: .bold)) - .foregroundStyle(Color.black) - - HStack { - movieLike - - Spacer() - - Text("예매율 \(String(format: "%.1f", movieInfo.movieReserCount))%") - .font(.system(size: 9, weight: .regular)) - .foregroundStyle(Color.black) - } - } - - /* 상위 뷰의 프레임을 꼭 넣어주세요! 피그마에 보시면 fixed로 고정되어 있는게 보이실겁니다.*/ - /* HStack 내부의 Spacer()로 부모 뷰의 사이즈에 영향을 받게됩니다.*/ - .frame(width: 120, height: 216) - } - - /// 하단 영화 좋아요 - private var movieLike: some View { - HStack(spacing: 6) { - Image(systemName: "heart.fill") - .foregroundStyle(Color.red) - .frame(width: 15, height: 14) - - Text("\(movieInfo.movieLike)") - .font(.system(size: 9, weight: .regular)) - .foregroundStyle(Color.black) - } - } -} - -#Preview { - MovieCard(movieInfo: .init(movieImage: .init(.mickey), movieName: "미키", movieLike: 972, movieReserCount: 30.8)) -} diff --git a/gonny/Week2_Practice/Week2_Practice/MovieModel.swift b/gonny/Week2_Practice/Week2_Practice/MovieModel.swift deleted file mode 100644 index 34cac64..0000000 --- a/gonny/Week2_Practice/Week2_Practice/MovieModel.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// MovieModel.swift -// Week2_Practice -// -// Created by 박병선 on 9/23/25. -// -import Foundation -import SwiftUI - -struct MovieModel { - let movieImage: Image /* 영화 포스터 이미지 */ - let movieName: String /* 영화 이름 */ - let movieLike: Int /* 영화 좋아요 */ - let movieReserCount: Double /* 영화 예매율 */ -} diff --git a/gonny/Week2_Practice/Week2_Practice/MovieView.swift b/gonny/Week2_Practice/Week2_Practice/MovieView.swift deleted file mode 100644 index 74468a1..0000000 --- a/gonny/Week2_Practice/Week2_Practice/MovieView.swift +++ /dev/null @@ -1,104 +0,0 @@ -// -// MovieView.swift -// Week2_Practice -// -// Created by 박병선 on 9/23/25. -// -import SwiftUI -import Observation - -struct MovieView: View { - - @AppStorage("movieName") private var movieName: String = "" - private var viewModel: MovieViewModel = .init() - - - var body: some View { - VStack(spacing: 56) { - MovieCard(movieInfo: viewModel.movieModel[viewModel.currentIndex]) - - leftRightChange - - settingMovie - - printAppStorageValue - } - .padding() - } - - /// 왼쪽 오른쪽 change 버튼 - private var leftRightChange: some View { - HStack { - Group { - makeChevron(name: "chevron.left", action: viewModel.previousMovie) - - Spacer() - - Text("영화 바꾸기") - .font(.system(size: 20, weight: .regular)) - - Spacer() - - makeChevron(name: "chevron.right", action: viewModel.nextMovie) - } - .foregroundStyle(Color.black) - } - .frame(width: 256) - .padding(.vertical, 17) /* 이건 뭘 의미하는 걸까요? */ - .padding(.horizontal, 22) /* 이건 뭘 의미하는 걸까요? */ - } - - /// 화살표 재사용하기 위한 하위 뷰 - /// - Parameters: - /// - name: 이미지 이름 설정 - /// - action: 버튼이 가지는 액션 기능 넣기, @escpaing은 추후 문법을 통해 배우게 될 겁니다! - /// - Returns: some View 타입 반환 - private func makeChevron(name: String, action: @escaping () -> Void) -> some View { - Button(action: { - action() - }, label: { - Image(systemName: name) - .resizable() - .frame(width: 17.47, height: 29.73) - }) - } - - /// 대표 영화 설정 - private var settingMovie: some View { - Button(action: { - /* 현재 인덱스틔 영화 이름 AppStorage에 저장 */ - self.movieName = viewModel.movieModel[viewModel.currentIndex].movieName - }, label: { - Text("대표 영화로 설정") - .font(.system(size: 20, weight: .regular)) - .foregroundStyle(Color.black) - .padding(.top, 21) - .padding(.bottom, 20) - .padding(.leading, 53) - .padding(.trailing, 52) - .overlay(content: { - RoundedRectangle(cornerRadius: 20) - .fill(Color.clear) - .stroke(Color.black, style: .init(lineWidth: 1)) - }) - }) - } - - /// 하단 AppStorage에 저장된 영화 확인 텍스트 - private var printAppStorageValue: some View { - VStack(spacing: 17) { - Text("@AppStorage에 저장된 영화") - .font(.system(size: 30, weight: .regular)) - .foregroundStyle(Color.black) - - Text("현재 저장된 영화 : \(movieName)") - .font(.system(size: 20, weight: .regular)) - .foregroundStyle(Color.red) - } - } -} - -#Preview { - MovieView() -} - diff --git a/gonny/Week2_Practice/Week2_Practice/MovieViewModel.swift b/gonny/Week2_Practice/Week2_Practice/MovieViewModel.swift deleted file mode 100644 index dfdea73..0000000 --- a/gonny/Week2_Practice/Week2_Practice/MovieViewModel.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// MovieViewModel.swift -// Week2_Practice -// -// Created by 박병선 on 9/23/25. -// -import Foundation -import SwiftUI - -@Observable -class MovieViewModel { - var currentIndex: Int = 0 - - let movieModel: [MovieModel] = [ - .init(movieImage: .init(.mickey), movieName: "미키", movieLike: 972, movieReserCount: 30.8), - .init(movieImage: .init(.toystory), movieName: "토이스토리", movieLike: 999, movieReserCount: 99.8), - .init(movieImage: .init(.brutalis), movieName: "브루탈리스트", movieLike: 302, movieReserCount: 24.8), - .init(movieImage: .init(.snowWhite), movieName: "백설공주", movieLike: 302, movieReserCount: 3.8), - .init(movieImage: .init(.whiplash), movieName: "위플래시", movieLike: 604, movieReserCount: 62.2), - .init(movieImage: .init(.conclave), movieName: "콘클라베", movieLike: 392, movieReserCount: 43.9), - .init(movieImage: .init(.theFall), movieName: "더폴", movieLike: 30, movieReserCount: 2.1) - ] - - - /// 이전 영화로 돌아가기, 단, 첫 번째 영화일 경우 마지막 영화로 전환 - public func previousMovie() { - currentIndex = (currentIndex - 1 + movieModel.count) % movieModel.count - } - - /// 오른쪽 버튼을 눌렀을 때 다음 영화로 이동하는 함수 - public func nextMovie() { - currentIndex = (currentIndex + 1) % movieModel.count - } -} diff --git a/gonny/Week2_Practice/Week2_Practice/Preview Content/Preview Assets.xcassets/Contents.json b/gonny/Week2_Practice/Week2_Practice/Preview Content/Preview Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/gonny/Week2_Practice/Week2_Practice/Preview Content/Preview Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/gonny/Week2_Practice/Week2_Practice/Week2_PracticeApp.swift b/gonny/Week2_Practice/Week2_Practice/Week2_PracticeApp.swift deleted file mode 100644 index fdea9bf..0000000 --- a/gonny/Week2_Practice/Week2_Practice/Week2_PracticeApp.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// Week2_PracticeApp.swift -// Week2_Practice -// -// Created by 박병선 on 9/22/25. -// - -import SwiftUI - -@main -struct Week2_PracticeApp: App { - var body: some Scene { - WindowGroup { - MovieView() - } - } -} diff --git a/gonny/Week2_Practice/Week2_PracticeTests/Week2_PracticeTests.swift b/gonny/Week2_Practice/Week2_PracticeTests/Week2_PracticeTests.swift deleted file mode 100644 index aa26ff1..0000000 --- a/gonny/Week2_Practice/Week2_PracticeTests/Week2_PracticeTests.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// Week2_PracticeTests.swift -// Week2_PracticeTests -// -// Created by 박병선 on 9/22/25. -// - -import Testing -@testable import Week2_Practice - -struct Week2_PracticeTests { - - @Test func example() async throws { - // Write your test here and use APIs like `#expect(...)` to check expected conditions. - } - -} diff --git a/gonny/Week2_Practice/Week2_PracticeUITests/Week2_PracticeUITests.swift b/gonny/Week2_Practice/Week2_PracticeUITests/Week2_PracticeUITests.swift deleted file mode 100644 index 72b7ee7..0000000 --- a/gonny/Week2_Practice/Week2_PracticeUITests/Week2_PracticeUITests.swift +++ /dev/null @@ -1,43 +0,0 @@ -// -// Week2_PracticeUITests.swift -// Week2_PracticeUITests -// -// Created by 박병선 on 9/22/25. -// - -import XCTest - -final class Week2_PracticeUITests: XCTestCase { - - override func setUpWithError() throws { - // Put setup code here. This method is called before the invocation of each test method in the class. - - // In UI tests it is usually best to stop immediately when a failure occurs. - continueAfterFailure = false - - // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. - } - - override func tearDownWithError() throws { - // Put teardown code here. This method is called after the invocation of each test method in the class. - } - - @MainActor - func testExample() throws { - // UI tests must launch the application that they test. - let app = XCUIApplication() - app.launch() - - // Use XCTAssert and related functions to verify your tests produce the correct results. - } - - @MainActor - func testLaunchPerformance() throws { - if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) { - // This measures how long it takes to launch your application. - measure(metrics: [XCTApplicationLaunchMetric()]) { - XCUIApplication().launch() - } - } - } -} diff --git a/gonny/Week2_Practice/Week2_PracticeUITests/Week2_PracticeUITestsLaunchTests.swift b/gonny/Week2_Practice/Week2_PracticeUITests/Week2_PracticeUITestsLaunchTests.swift deleted file mode 100644 index 1805220..0000000 --- a/gonny/Week2_Practice/Week2_PracticeUITests/Week2_PracticeUITestsLaunchTests.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// Week2_PracticeUITestsLaunchTests.swift -// Week2_PracticeUITests -// -// Created by 박병선 on 9/22/25. -// - -import XCTest - -final class Week2_PracticeUITestsLaunchTests: XCTestCase { - - override class var runsForEachTargetApplicationUIConfiguration: Bool { - true - } - - override func setUpWithError() throws { - continueAfterFailure = false - } - - @MainActor - func testLaunch() throws { - let app = XCUIApplication() - app.launch() - - // Insert steps here to perform after app launch but before taking a screenshot, - // such as logging into a test account or navigating somewhere in the app - - let attachment = XCTAttachment(screenshot: app.screenshot()) - attachment.name = "Launch Screen" - attachment.lifetime = .keepAlways - add(attachment) - } -} diff --git a/kai/Megabox/Megabox/Megabox.xcodeproj/project.pbxproj b/kai/Megabox/Megabox/Megabox.xcodeproj/project.pbxproj deleted file mode 100644 index 170268c..0000000 --- a/kai/Megabox/Megabox/Megabox.xcodeproj/project.pbxproj +++ /dev/null @@ -1,325 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXFileReference section */ - 68BAF60B2E7A81BA0091BC0F /* Megabox.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Megabox.app; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 68BAF60D2E7A81BA0091BC0F /* Megabox */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = Megabox; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 68BAF6082E7A81BA0091BC0F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 68BAF6022E7A81BA0091BC0F = { - isa = PBXGroup; - children = ( - 68BAF60D2E7A81BA0091BC0F /* Megabox */, - 68BAF60C2E7A81BA0091BC0F /* Products */, - ); - sourceTree = ""; - }; - 68BAF60C2E7A81BA0091BC0F /* Products */ = { - isa = PBXGroup; - children = ( - 68BAF60B2E7A81BA0091BC0F /* Megabox.app */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 68BAF60A2E7A81BA0091BC0F /* Megabox */ = { - isa = PBXNativeTarget; - buildConfigurationList = 68BAF6162E7A81BB0091BC0F /* Build configuration list for PBXNativeTarget "Megabox" */; - buildPhases = ( - 68BAF6072E7A81BA0091BC0F /* Sources */, - 68BAF6082E7A81BA0091BC0F /* Frameworks */, - 68BAF6092E7A81BA0091BC0F /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 68BAF60D2E7A81BA0091BC0F /* Megabox */, - ); - name = Megabox; - packageProductDependencies = ( - ); - productName = Megabox; - productReference = 68BAF60B2E7A81BA0091BC0F /* Megabox.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 68BAF6032E7A81BA0091BC0F /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1640; - LastUpgradeCheck = 1640; - TargetAttributes = { - 68BAF60A2E7A81BA0091BC0F = { - CreatedOnToolsVersion = 16.4; - }; - }; - }; - buildConfigurationList = 68BAF6062E7A81BA0091BC0F /* Build configuration list for PBXProject "Megabox" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 68BAF6022E7A81BA0091BC0F; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - productRefGroup = 68BAF60C2E7A81BA0091BC0F /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 68BAF60A2E7A81BA0091BC0F /* Megabox */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 68BAF6092E7A81BA0091BC0F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 68BAF6072E7A81BA0091BC0F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 68BAF6142E7A81BB0091BC0F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 68BAF6152E7A81BB0091BC0F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 68BAF6172E7A81BB0091BC0F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = umc9th.Megabox; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 68BAF6182E7A81BB0091BC0F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = umc9th.Megabox; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 68BAF6062E7A81BA0091BC0F /* Build configuration list for PBXProject "Megabox" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 68BAF6142E7A81BB0091BC0F /* Debug */, - 68BAF6152E7A81BB0091BC0F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 68BAF6162E7A81BB0091BC0F /* Build configuration list for PBXNativeTarget "Megabox" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 68BAF6172E7A81BB0091BC0F /* Debug */, - 68BAF6182E7A81BB0091BC0F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 68BAF6032E7A81BA0091BC0F /* Project object */; -} diff --git a/kai/Megabox/Megabox/Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/kai/Megabox/Megabox/Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/kai/Megabox/Megabox/Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/kai/Megabox/Megabox/Megabox/Assets.xcassets/AccentColor.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/kai/Megabox/Megabox/Megabox/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Assets.xcassets/AppIcon.appiconset/Contents.json b/kai/Megabox/Megabox/Megabox/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/kai/Megabox/Megabox/Megabox/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Assets.xcassets/Contents.json b/kai/Megabox/Megabox/Megabox/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/kai/Megabox/Megabox/Megabox/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Assets.xcassets/appleLogin.imageset/Contents.json b/kai/Megabox/Megabox/Megabox/Assets.xcassets/appleLogin.imageset/Contents.json deleted file mode 100644 index 798c333..0000000 --- a/kai/Megabox/Megabox/Megabox/Assets.xcassets/appleLogin.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=Apple.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Assets.xcassets/appleLogin.imageset/Property 1=Apple.pdf b/kai/Megabox/Megabox/Megabox/Assets.xcassets/appleLogin.imageset/Property 1=Apple.pdf deleted file mode 100644 index 5e3f20f..0000000 Binary files a/kai/Megabox/Megabox/Megabox/Assets.xcassets/appleLogin.imageset/Property 1=Apple.pdf and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/Assets.xcassets/changeButton.imageset/Contents.json b/kai/Megabox/Megabox/Megabox/Assets.xcassets/changeButton.imageset/Contents.json deleted file mode 100644 index 1737b1c..0000000 --- a/kai/Megabox/Megabox/Megabox/Assets.xcassets/changeButton.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "변경 버튼.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/kai/Megabox/Megabox/Megabox/Assets.xcassets/changeButton.imageset/\353\263\200\352\262\275 \353\262\204\355\212\274.pdf" "b/kai/Megabox/Megabox/Megabox/Assets.xcassets/changeButton.imageset/\353\263\200\352\262\275 \353\262\204\355\212\274.pdf" deleted file mode 100644 index 4e1c93d..0000000 Binary files "a/kai/Megabox/Megabox/Megabox/Assets.xcassets/changeButton.imageset/\353\263\200\352\262\275 \353\262\204\355\212\274.pdf" and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/Assets.xcassets/kakaoLogin.imageset/Contents.json b/kai/Megabox/Megabox/Megabox/Assets.xcassets/kakaoLogin.imageset/Contents.json deleted file mode 100644 index 7c5a77c..0000000 --- a/kai/Megabox/Megabox/Megabox/Assets.xcassets/kakaoLogin.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=Kakao.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Assets.xcassets/kakaoLogin.imageset/Property 1=Kakao.pdf b/kai/Megabox/Megabox/Megabox/Assets.xcassets/kakaoLogin.imageset/Property 1=Kakao.pdf deleted file mode 100644 index 5bd3db4..0000000 Binary files a/kai/Megabox/Megabox/Megabox/Assets.xcassets/kakaoLogin.imageset/Property 1=Kakao.pdf and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/Assets.xcassets/loginbutton.imageset/Contents.json b/kai/Megabox/Megabox/Megabox/Assets.xcassets/loginbutton.imageset/Contents.json deleted file mode 100644 index dd63f90..0000000 --- a/kai/Megabox/Megabox/Megabox/Assets.xcassets/loginbutton.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=로그인.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/kai/Megabox/Megabox/Megabox/Assets.xcassets/loginbutton.imageset/Property 1=\353\241\234\352\267\270\354\235\270.pdf" "b/kai/Megabox/Megabox/Megabox/Assets.xcassets/loginbutton.imageset/Property 1=\353\241\234\352\267\270\354\235\270.pdf" deleted file mode 100644 index 315cad4..0000000 Binary files "a/kai/Megabox/Megabox/Megabox/Assets.xcassets/loginbutton.imageset/Property 1=\353\241\234\352\267\270\354\235\270.pdf" and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/Assets.xcassets/megaboxLogo.imageset/Contents.json b/kai/Megabox/Megabox/Megabox/Assets.xcassets/megaboxLogo.imageset/Contents.json deleted file mode 100644 index 0de0d63..0000000 --- a/kai/Megabox/Megabox/Megabox/Assets.xcassets/megaboxLogo.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "meboxLogo 1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Assets.xcassets/megaboxLogo.imageset/meboxLogo 1.pdf b/kai/Megabox/Megabox/Megabox/Assets.xcassets/megaboxLogo.imageset/meboxLogo 1.pdf deleted file mode 100644 index fd80868..0000000 Binary files a/kai/Megabox/Megabox/Megabox/Assets.xcassets/megaboxLogo.imageset/meboxLogo 1.pdf and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/Assets.xcassets/mobileOrder.imageset/Contents.json b/kai/Megabox/Megabox/Megabox/Assets.xcassets/mobileOrder.imageset/Contents.json deleted file mode 100644 index ac96c1f..0000000 --- a/kai/Megabox/Megabox/Megabox/Assets.xcassets/mobileOrder.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=모바일 오더.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/kai/Megabox/Megabox/Megabox/Assets.xcassets/mobileOrder.imageset/Property 1=\353\252\250\353\260\224\354\235\274 \354\230\244\353\215\224.pdf" "b/kai/Megabox/Megabox/Megabox/Assets.xcassets/mobileOrder.imageset/Property 1=\353\252\250\353\260\224\354\235\274 \354\230\244\353\215\224.pdf" deleted file mode 100644 index 4850baa..0000000 Binary files "a/kai/Megabox/Megabox/Megabox/Assets.xcassets/mobileOrder.imageset/Property 1=\353\252\250\353\260\224\354\235\274 \354\230\244\353\215\224.pdf" and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/Assets.xcassets/naverLogin.imageset/Contents.json b/kai/Megabox/Megabox/Megabox/Assets.xcassets/naverLogin.imageset/Contents.json deleted file mode 100644 index e853d06..0000000 --- a/kai/Megabox/Megabox/Megabox/Assets.xcassets/naverLogin.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=Naver.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Assets.xcassets/naverLogin.imageset/Property 1=Naver.pdf b/kai/Megabox/Megabox/Megabox/Assets.xcassets/naverLogin.imageset/Property 1=Naver.pdf deleted file mode 100644 index f49a8fc..0000000 Binary files a/kai/Megabox/Megabox/Megabox/Assets.xcassets/naverLogin.imageset/Property 1=Naver.pdf and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/Assets.xcassets/permovie.imageset/Contents.json b/kai/Megabox/Megabox/Megabox/Assets.xcassets/permovie.imageset/Contents.json deleted file mode 100644 index 687aee5..0000000 --- a/kai/Megabox/Megabox/Megabox/Assets.xcassets/permovie.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=영화별 예매.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/kai/Megabox/Megabox/Megabox/Assets.xcassets/permovie.imageset/Property 1=\354\230\201\355\231\224\353\263\204 \354\230\210\353\247\244.pdf" "b/kai/Megabox/Megabox/Megabox/Assets.xcassets/permovie.imageset/Property 1=\354\230\201\355\231\224\353\263\204 \354\230\210\353\247\244.pdf" deleted file mode 100644 index 9bb4054..0000000 Binary files "a/kai/Megabox/Megabox/Megabox/Assets.xcassets/permovie.imageset/Property 1=\354\230\201\355\231\224\353\263\204 \354\230\210\353\247\244.pdf" and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/Assets.xcassets/pertheater.imageset/Contents.json b/kai/Megabox/Megabox/Megabox/Assets.xcassets/pertheater.imageset/Contents.json deleted file mode 100644 index 8665937..0000000 --- a/kai/Megabox/Megabox/Megabox/Assets.xcassets/pertheater.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=극장별 예매.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/kai/Megabox/Megabox/Megabox/Assets.xcassets/pertheater.imageset/Property 1=\352\267\271\354\236\245\353\263\204 \354\230\210\353\247\244.pdf" "b/kai/Megabox/Megabox/Megabox/Assets.xcassets/pertheater.imageset/Property 1=\352\267\271\354\236\245\353\263\204 \354\230\210\353\247\244.pdf" deleted file mode 100644 index 9df8261..0000000 Binary files "a/kai/Megabox/Megabox/Megabox/Assets.xcassets/pertheater.imageset/Property 1=\352\267\271\354\236\245\353\263\204 \354\230\210\353\247\244.pdf" and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/Assets.xcassets/specialTheater.imageset/Contents.json b/kai/Megabox/Megabox/Megabox/Assets.xcassets/specialTheater.imageset/Contents.json deleted file mode 100644 index 90f70ba..0000000 --- a/kai/Megabox/Megabox/Megabox/Assets.xcassets/specialTheater.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=특별관 예매.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/kai/Megabox/Megabox/Megabox/Assets.xcassets/specialTheater.imageset/Property 1=\355\212\271\353\263\204\352\264\200 \354\230\210\353\247\244.pdf" "b/kai/Megabox/Megabox/Megabox/Assets.xcassets/specialTheater.imageset/Property 1=\355\212\271\353\263\204\352\264\200 \354\230\210\353\247\244.pdf" deleted file mode 100644 index 5a1f7b1..0000000 Binary files "a/kai/Megabox/Megabox/Megabox/Assets.xcassets/specialTheater.imageset/Property 1=\355\212\271\353\263\204\352\264\200 \354\230\210\353\247\244.pdf" and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/Assets.xcassets/umc.imageset/Contents.json b/kai/Megabox/Megabox/Megabox/Assets.xcassets/umc.imageset/Contents.json deleted file mode 100644 index 6457313..0000000 --- a/kai/Megabox/Megabox/Megabox/Assets.xcassets/umc.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "umc 1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Assets.xcassets/umc.imageset/umc 1.pdf b/kai/Megabox/Megabox/Megabox/Assets.xcassets/umc.imageset/umc 1.pdf deleted file mode 100644 index 9aea617..0000000 Binary files a/kai/Megabox/Megabox/Megabox/Assets.xcassets/umc.imageset/umc 1.pdf and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/Assets.xcassets/welcome.imageset/Contents.json b/kai/Megabox/Megabox/Megabox/Assets.xcassets/welcome.imageset/Contents.json deleted file mode 100644 index d10db3a..0000000 --- a/kai/Megabox/Megabox/Megabox/Assets.xcassets/welcome.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=멤버쉽 태그.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/kai/Megabox/Megabox/Megabox/Assets.xcassets/welcome.imageset/Property 1=\353\251\244\353\262\204\354\211\275 \355\203\234\352\267\270.pdf" "b/kai/Megabox/Megabox/Megabox/Assets.xcassets/welcome.imageset/Property 1=\353\251\244\353\262\204\354\211\275 \355\203\234\352\267\270.pdf" deleted file mode 100644 index 8dbadbb..0000000 Binary files "a/kai/Megabox/Megabox/Megabox/Assets.xcassets/welcome.imageset/Property 1=\353\251\244\353\262\204\354\211\275 \355\203\234\352\267\270.pdf" and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/black01.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/black01.colorset/Contents.json deleted file mode 100644 index be9d677..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/black01.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0x00", - "red" : "0x00" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0x00", - "red" : "0x00" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue00.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue00.colorset/Contents.json deleted file mode 100644 index e0075b9..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue00.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFA", - "green" : "0xF7", - "red" : "0xF3" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFA", - "green" : "0xF7", - "red" : "0xF3" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue01.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue01.colorset/Contents.json deleted file mode 100644 index 83e57dc..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue01.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF7", - "green" : "0xF2", - "red" : "0xED" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF7", - "green" : "0xF2", - "red" : "0xED" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue02.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue02.colorset/Contents.json deleted file mode 100644 index c1c58df..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue02.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEF", - "green" : "0xE5", - "red" : "0xDA" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEF", - "green" : "0xE5", - "red" : "0xDA" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue03.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue03.colorset/Contents.json deleted file mode 100644 index a586a7e..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue03.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xCC", - "green" : "0xAA", - "red" : "0x88" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xCC", - "green" : "0xAA", - "red" : "0x88" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue04.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue04.colorset/Contents.json deleted file mode 100644 index 497d343..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue04.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xB8", - "green" : "0x99", - "red" : "0x7A" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xB8", - "green" : "0x99", - "red" : "0x7A" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue05.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue05.colorset/Contents.json deleted file mode 100644 index 8772f8e..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue05.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA3", - "green" : "0x88", - "red" : "0x6D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA3", - "green" : "0x88", - "red" : "0x6D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue06.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue06.colorset/Contents.json deleted file mode 100644 index f2bb34c..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue06.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x99", - "green" : "0x80", - "red" : "0x66" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x99", - "green" : "0x80", - "red" : "0x66" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue07.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue07.colorset/Contents.json deleted file mode 100644 index e2d0333..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue07.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x7A", - "green" : "0x66", - "red" : "0x52" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x7A", - "green" : "0x66", - "red" : "0x52" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue08.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue08.colorset/Contents.json deleted file mode 100644 index a8fe629..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue08.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5C", - "green" : "0x4C", - "red" : "0x3D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5C", - "green" : "0x4C", - "red" : "0x3D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue09.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue09.colorset/Contents.json deleted file mode 100644 index be7f767..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/blue09.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x47", - "green" : "0x3B", - "red" : "0x30" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x47", - "green" : "0x3B", - "red" : "0x30" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gradient1.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/gradient1.colorset/Contents.json deleted file mode 100644 index fa14e75..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gradient1.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFF", - "green" : "0x8B", - "red" : "0xAB" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFF", - "green" : "0x8B", - "red" : "0xAB" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gradient2.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/gradient2.colorset/Contents.json deleted file mode 100644 index fb00121..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gradient2.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF3", - "green" : "0xAE", - "red" : "0x8E" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF3", - "green" : "0xAE", - "red" : "0x8E" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gradient3.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/gradient3.colorset/Contents.json deleted file mode 100644 index ff53e74..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gradient3.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEC", - "green" : "0xCC", - "red" : "0x5D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEC", - "green" : "0xCC", - "red" : "0x5D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray00.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray00.colorset/Contents.json deleted file mode 100644 index d2e4805..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray00.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF2", - "green" : "0xF2", - "red" : "0xF2" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF2", - "green" : "0xF2", - "red" : "0xF2" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray01.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray01.colorset/Contents.json deleted file mode 100644 index 771d19d..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray01.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEB", - "green" : "0xEB", - "red" : "0xEB" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEB", - "green" : "0xEB", - "red" : "0xEB" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray02.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray02.colorset/Contents.json deleted file mode 100644 index 68cea4f..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray02.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD5", - "green" : "0xD5", - "red" : "0xD5" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD5", - "green" : "0xD5", - "red" : "0xD5" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray03.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray03.colorset/Contents.json deleted file mode 100644 index 6676967..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray03.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x78", - "green" : "0x78", - "red" : "0x78" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x78", - "green" : "0x78", - "red" : "0x78" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray04.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray04.colorset/Contents.json deleted file mode 100644 index 5a493e5..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray04.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x6C", - "green" : "0x6C", - "red" : "0x6C" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x6C", - "green" : "0x6C", - "red" : "0x6C" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray05.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray05.colorset/Contents.json deleted file mode 100644 index 7e45b56..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray05.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x60", - "green" : "0x60", - "red" : "0x60" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x60", - "green" : "0x60", - "red" : "0x60" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray06.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray06.colorset/Contents.json deleted file mode 100644 index 3db5e58..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray06.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5A", - "green" : "0x5A", - "red" : "0x5A" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5A", - "green" : "0x5A", - "red" : "0x5A" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray07.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray07.colorset/Contents.json deleted file mode 100644 index 3f9d5b5..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray07.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x48", - "green" : "0x48", - "red" : "0x48" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x48", - "green" : "0x48", - "red" : "0x48" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray08.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray08.colorset/Contents.json deleted file mode 100644 index 85ca7a9..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray08.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x36", - "green" : "0x36", - "red" : "0x36" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x36", - "green" : "0x36", - "red" : "0x36" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray09.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray09.colorset/Contents.json deleted file mode 100644 index 85730c1..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/gray09.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x2A", - "green" : "0x2A", - "red" : "0x2A" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x2A", - "green" : "0x2A", - "red" : "0x2A" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple00.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple00.colorset/Contents.json deleted file mode 100644 index a56e9a7..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple00.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFB", - "green" : "0xE7", - "red" : "0xF0" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFB", - "green" : "0xE7", - "red" : "0xF0" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple01.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple01.colorset/Contents.json deleted file mode 100644 index 054d393..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple01.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF9", - "green" : "0xDB", - "red" : "0xE8" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF9", - "green" : "0xDB", - "red" : "0xE8" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple02.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple02.colorset/Contents.json deleted file mode 100644 index 1e7b4e7..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple02.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF3", - "green" : "0xB4", - "red" : "0xCF" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF3", - "green" : "0xB4", - "red" : "0xCF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple03.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple03.colorset/Contents.json deleted file mode 100644 index 4029bef..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple03.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD8", - "green" : "0x0E", - "red" : "0x65" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD8", - "green" : "0x0E", - "red" : "0x65" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple04.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple04.colorset/Contents.json deleted file mode 100644 index 45b8d3c..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple04.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xC2", - "green" : "0x0D", - "red" : "0x5B" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xC2", - "green" : "0x0D", - "red" : "0x5B" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple05.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple05.colorset/Contents.json deleted file mode 100644 index 2f6c7ed..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple05.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xAD", - "green" : "0x0B", - "red" : "0x51" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xAD", - "green" : "0x0B", - "red" : "0x51" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple06.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple06.colorset/Contents.json deleted file mode 100644 index ed745b4..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple06.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA2", - "green" : "0x0B", - "red" : "0x4C" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA2", - "green" : "0x0B", - "red" : "0x4C" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple07.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple07.colorset/Contents.json deleted file mode 100644 index f753c3d..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple07.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x82", - "green" : "0x08", - "red" : "0x3D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x82", - "green" : "0x08", - "red" : "0x3D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple08.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple08.colorset/Contents.json deleted file mode 100644 index 9490850..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple08.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x61", - "green" : "0x06", - "red" : "0x2D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x61", - "green" : "0x06", - "red" : "0x2D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple09.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple09.colorset/Contents.json deleted file mode 100644 index 333e234..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/purple09.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x4C", - "green" : "0x05", - "red" : "0x23" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x4C", - "green" : "0x05", - "red" : "0x23" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/tag.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/tag.colorset/Contents.json deleted file mode 100644 index f2ebe2b..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/tag.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD2", - "green" : "0xCD", - "red" : "0x47" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD2", - "green" : "0xCD", - "red" : "0x47" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/Colors.xcassets/white01.colorset/Contents.json b/kai/Megabox/Megabox/Megabox/Colors.xcassets/white01.colorset/Contents.json deleted file mode 100644 index 951b907..0000000 --- a/kai/Megabox/Megabox/Megabox/Colors.xcassets/white01.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFF", - "green" : "0xFF", - "red" : "0xFE" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFF", - "green" : "0xFF", - "red" : "0xFE" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/Megabox/Megabox/Megabox/MegaboxApp.swift b/kai/Megabox/Megabox/Megabox/MegaboxApp.swift deleted file mode 100644 index abdb6ae..0000000 --- a/kai/Megabox/Megabox/Megabox/MegaboxApp.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// MegaboxApp.swift -// Megabox -// -// Created by 김지우 on 9/17/25. -// - -import SwiftUI - -@main -struct MegaboxApp: App { - var body: some Scene { - WindowGroup { - //LoginView(loginviewModel: LoginViewModel()) - UserInfoView() - //MemberInfoManageView() - - } - } -} diff --git a/kai/Megabox/Megabox/Megabox/Models/InfoModel.swift b/kai/Megabox/Megabox/Megabox/Models/InfoModel.swift deleted file mode 100644 index 0177d1c..0000000 --- a/kai/Megabox/Megabox/Megabox/Models/InfoModel.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// InfoModel.swift -// Megabox -// -// Created by 김지우 on 9/24/25. -// - -// InfoModel.swift -import Foundation - -struct InfoModel: Identifiable, Hashable { - let id = UUID() - let icon: String // 에셋 이름 (permovie, pertheater, ...) - let label: String // 표시 텍스트 -} diff --git a/kai/Megabox/Megabox/Megabox/Models/LoginModel.swift b/kai/Megabox/Megabox/Megabox/Models/LoginModel.swift deleted file mode 100644 index 5e4dcc2..0000000 --- a/kai/Megabox/Megabox/Megabox/Models/LoginModel.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// LoginModel.swift -// Megabox -// -// Created by 김지우 on 9/24/25. -// - -import Foundation - -struct LoginModel{ - var id: String - var pwd: String - var name: String -} diff --git a/kai/Megabox/Megabox/Megabox/Resources/Fonts.swift b/kai/Megabox/Megabox/Megabox/Resources/Fonts.swift deleted file mode 100644 index 14bac15..0000000 --- a/kai/Megabox/Megabox/Megabox/Resources/Fonts.swift +++ /dev/null @@ -1,88 +0,0 @@ -// -// Fonts.swift -// Megabox -// -// Created by 김지우 on 9/18/25. -// - -import Foundation -import SwiftUI - -extension Font { - enum Pretend { - case extraBold - case bold - case semibold - case medium - case regular - case light - case extraLight - case thin - - var value: String { - switch self { - case .extraBold: - return "Pretendard-ExtraBold" - case .bold: - return "Pretendard-Bold" - case .semibold: - return "Pretendard-SemiBold" - case .medium: - return "Pretendard-Medium" - case .regular: - return "Pretendard-Regular" - case .light: - return "Pretendard-Light" - case .extraLight: - return "Pretendard-ExtraLight" - case .thin: - return "Pretendard-Thin" - } - } - } - - static func pretend(type: Pretend, size: CGFloat) -> Font { - return .custom(type.value, size: size) - } - - static func PretendardBold(size: CGFloat) -> Font { - return .pretend(type: .bold, size: size) - } - - static func PretendardMedium(size: CGFloat) -> Font { - return .pretend(type: .medium, size: size) - } - - static func PretendardExtraBold(size: CGFloat) -> Font { - return .pretend(type: .extraBold, size: size) - } - - static func PretendardRegular(size: CGFloat) -> Font { - return .pretend(type: .regular, size: size) - } - - static func PretendardSemiBold(size: CGFloat) -> Font { - return .pretend(type: .semibold, size: size) - } - - static func PretendardLight(size: CGFloat) -> Font { - return .pretend(type: .medium, size: size) - } - - static func PretendardExtraLight(size: CGFloat) -> Font { - return .pretend(type: .extraLight, size: size) - } - - static func PretendardThin(size: CGFloat) -> Font { - return .pretend(type: .thin, size: size) - } - - - /* - 나중에 사용할 때에는 이렇게 씀 - - Text("Hello, SwiftUI!") - .font(.PretendardMedium(size: 16)) - - */ -} diff --git a/kai/Megabox/Megabox/Megabox/Resources/Pretendard-Black.otf b/kai/Megabox/Megabox/Megabox/Resources/Pretendard-Black.otf deleted file mode 100644 index a0d849e..0000000 Binary files a/kai/Megabox/Megabox/Megabox/Resources/Pretendard-Black.otf and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/Resources/Pretendard-Bold.otf b/kai/Megabox/Megabox/Megabox/Resources/Pretendard-Bold.otf deleted file mode 100644 index 8e5e30a..0000000 Binary files a/kai/Megabox/Megabox/Megabox/Resources/Pretendard-Bold.otf and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/Resources/Pretendard-ExtraBold.otf b/kai/Megabox/Megabox/Megabox/Resources/Pretendard-ExtraBold.otf deleted file mode 100644 index 388f3ca..0000000 Binary files a/kai/Megabox/Megabox/Megabox/Resources/Pretendard-ExtraBold.otf and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/Resources/Pretendard-ExtraLight.otf b/kai/Megabox/Megabox/Megabox/Resources/Pretendard-ExtraLight.otf deleted file mode 100644 index 40c8b69..0000000 Binary files a/kai/Megabox/Megabox/Megabox/Resources/Pretendard-ExtraLight.otf and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/Resources/Pretendard-Light.otf b/kai/Megabox/Megabox/Megabox/Resources/Pretendard-Light.otf deleted file mode 100644 index 228679e..0000000 Binary files a/kai/Megabox/Megabox/Megabox/Resources/Pretendard-Light.otf and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/Resources/Pretendard-Medium.otf b/kai/Megabox/Megabox/Megabox/Resources/Pretendard-Medium.otf deleted file mode 100644 index 0575069..0000000 Binary files a/kai/Megabox/Megabox/Megabox/Resources/Pretendard-Medium.otf and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/Resources/Pretendard-Regular.otf b/kai/Megabox/Megabox/Megabox/Resources/Pretendard-Regular.otf deleted file mode 100644 index 08bf4cf..0000000 Binary files a/kai/Megabox/Megabox/Megabox/Resources/Pretendard-Regular.otf and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/Resources/Pretendard-SemiBold.otf b/kai/Megabox/Megabox/Megabox/Resources/Pretendard-SemiBold.otf deleted file mode 100644 index e7e36ab..0000000 Binary files a/kai/Megabox/Megabox/Megabox/Resources/Pretendard-SemiBold.otf and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/Resources/Pretendard-Thin.otf b/kai/Megabox/Megabox/Megabox/Resources/Pretendard-Thin.otf deleted file mode 100644 index 77e792d..0000000 Binary files a/kai/Megabox/Megabox/Megabox/Resources/Pretendard-Thin.otf and /dev/null differ diff --git a/kai/Megabox/Megabox/Megabox/ViewModels/InfoViewModel.swift b/kai/Megabox/Megabox/Megabox/ViewModels/InfoViewModel.swift deleted file mode 100644 index 293279e..0000000 --- a/kai/Megabox/Megabox/Megabox/ViewModels/InfoViewModel.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// InfoViewModel.swift -// Megabox -// -// Created by 김지우 on 9/24/25. -// - -import Foundation -@Observable -class InfoViewModel { - let infoModel : [InfoModel] = [ - .init(icon: "permovie", label: "영화별예매"), - .init(icon: "pertheater", label: "극장별예매"), - .init(icon: "specialTheater", label: "특별관예매"), - .init(icon: "mobileOrder", label: "모바일오더") - ] - -} diff --git a/kai/Megabox/Megabox/Megabox/ViewModels/LoginViewModel.swift b/kai/Megabox/Megabox/Megabox/ViewModels/LoginViewModel.swift deleted file mode 100644 index 3086df6..0000000 --- a/kai/Megabox/Megabox/Megabox/ViewModels/LoginViewModel.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// LoginViewModel.swift -// Megabox -// -// Created by 김지우 on 9/24/25. -// - -import Foundation -import SwiftUI - -@Observable -class LoginViewModel { - var loginModel = LoginModel(id: "", pwd: "", name: "") -} diff --git a/kai/Megabox/Megabox/Megabox/Views/LoginView.swift b/kai/Megabox/Megabox/Megabox/Views/LoginView.swift deleted file mode 100644 index 2e6aea8..0000000 --- a/kai/Megabox/Megabox/Megabox/Views/LoginView.swift +++ /dev/null @@ -1,138 +0,0 @@ -// -// LoginView.swift -// Megabox -// -// Created by 김지우 on 9/18/25. -// - -import SwiftUI - -struct LoginView: View { - @Bindable var loginviewModel : LoginViewModel - - @AppStorage("id") private var userID : String = "" - @AppStorage("pwd") private var userPwd : String = "" - - init(loginviewModel: LoginViewModel) { - self.loginviewModel = loginviewModel - } - - var body: some View { - VStack{ - Spacer().frame(height:44) - navigationBarTitle - Spacer().frame(height:125) - idPasswordView - Spacer().frame(height:35) - loginButton - Spacer().frame(height:17) - signUpText - Spacer().frame(height:35) - socialLogin - Spacer().frame(height:39) - umcPoster - Spacer() - } - .padding() - } - - //상단 네비게이션 - private var navigationBarTitle: some View { - HStack(alignment: .center){ - Text("로그인") - .font(.PretendardSemiBold(size: 24)) - }//HStack_end - } - - //아이디 비밀번호 입력칸 - private var idPasswordView: some View { - VStack(alignment: .leading){ - TextField("아이디", text: $loginviewModel.loginModel.id) - .font(.PretendardRegular(size: 16)) - .foregroundColor(.gray03) - - - Divider() - .offset(y:-3) - - Spacer().frame(height:40) - - SecureField("비밀번호", text: $loginviewModel.loginModel.pwd) - .font(.PretendardRegular(size: 16)) - .foregroundColor(.gray03) - Divider() - .offset(y:-3) - }//VStack_end - - } - - //로그인버튼 - private var loginButton: some View{ - VStack{ - Button(action: { - userID = loginviewModel.loginModel.id - userPwd = loginviewModel.loginModel.pwd - - }) { - Text("로그인") - .font(.PretendardBold(size: 18)) - .foregroundStyle(.white) - .frame(maxWidth: .infinity, minHeight: 54) - .background(RoundedRectangle(cornerRadius: 10).fill(.purple03)) - } - .buttonStyle(.plain) - //로그인 버튼 ZStack으로 구현 해도 됨 -> 이렇게 하면 center 정렬 더 정확하게 맞추어짐 - - - }//VStack_end - } - - //회원가입 - private var signUpText : some View{ - Text("회원가입") - .foregroundStyle(.gray04) - .font(.PretendardRegular(size: 13)) - } - - //소셜로그인 - private var socialLogin: some View{ - HStack{ - - Spacer().frame(width:71) - Button(action: { - /*소셜로그인*/ - }) { - Image(.naverLogin) - } - Spacer() - Spacer().frame(width:71) - Button(action: { - /*소셜로그인*/ - }) { - Image(.kakaoLogin) - } - Spacer() - Spacer().frame(width:71) - Button(action: { - /*소셜로그인*/ - }) { - Image(.appleLogin) - } - Spacer().frame(width:71) - } - } - - //umc 포스터 - private var umcPoster: some View{ - Image(.umc) - .resizable() - .scaledToFit() - .frame(height:266) - } - - -} - -#Preview { - LoginView(loginviewModel: LoginViewModel()) -} diff --git a/kai/Megabox/Megabox/Megabox/Views/MemberInfoManageView.swift b/kai/Megabox/Megabox/Megabox/Views/MemberInfoManageView.swift deleted file mode 100644 index d97d4a4..0000000 --- a/kai/Megabox/Megabox/Megabox/Views/MemberInfoManageView.swift +++ /dev/null @@ -1,138 +0,0 @@ -// -// UserProfileView.swift -// Megabox -// -// Created by 김지우 on 9/24/25. -// - -import SwiftUI - -struct MemberInfoManageView: View { - @Environment(\.dismiss) private var dismiss - - // AppStorage - @AppStorage("id") private var userId: String = "" // 로그인 시 저장된 아이디 - @AppStorage("name") private var userName: String = "" - - // 편집 상태 - @State private var isEditingName: Bool = false - @State private var tempName: String = "" - - - var body: some View { - VStack(alignment: .leading, spacing: 24) { - - // MARK: - 네비게이션 바 (HStack) - HStack { - Button { - dismiss() - } label: { - Image(systemName: "chevron.left") - .resizable() - .scaledToFit() - .frame(width: 26, height: 22) - .foregroundStyle(.black) - } - - Spacer() - - Text("회원정보 관리") - .font(.PretendardSemiBold(size: 16)) - .foregroundStyle(.black01) - - Spacer() - - // 가운데 정렬을 위한 더미 - Color.clear - .frame(width: 20, height: 44) - } - .frame(height: 44) - .padding(.top, 4) - - // MARK: - 섹션 제목 - Text("기본정보") - .font(.PretendardRegular(size: 18)) - .foregroundStyle(.black) - - // MARK: - 아이디 (고정 텍스트) - VStack(alignment: .leading, spacing: 8) { - Text(userId) - .font(.PretendardRegular(size: 16)) - .foregroundStyle(.black) - - Divider() - .foregroundStyle(.gray.opacity(0.4)) - } - - // MARK: - 이름 (텍스트/입력 + 변경/저장 버튼) - VStack(alignment: .leading, spacing: 8) { - HStack { - if isEditingName { - TextField("이름을 입력하세요", text: $tempName) - .textInputAutocapitalization(.words) - .autocorrectionDisabled() - .font(.PretendardRegular(size: 16)) - .foregroundStyle(.black01) - } else { - Text(userName) - .font(.PretendardRegular(size: 16)) - .foregroundStyle(.black) - } - - Spacer(minLength: 16) - - if isEditingName { - Button { - let newName = tempName.trimmingCharacters(in: .whitespacesAndNewlines) - userName = newName - isEditingName = false - } label: { - Text("저장") - .font(.system(size: 13, weight: .semibold)) - .padding(.horizontal, 14) - .padding(.vertical, 6) - .background( - RoundedRectangle(cornerRadius: 12) - .fill(.black) - ) - .foregroundStyle(.white) - } - .buttonStyle(.plain) - } else { - Button { - tempName = userName - isEditingName = true - } label: { - Text("변경") - .font(.system(size: 13, weight: .regular)) - .foregroundStyle(.gray03) - .padding(.horizontal, 12) - .padding(.vertical, 5) - .overlay( - RoundedRectangle(cornerRadius: 12) - .stroke(.gray03 - .opacity(0.6), lineWidth: 1) - ) - .foregroundStyle(.black) - } - .buttonStyle(.plain) - } - } - - Divider() - .foregroundStyle(.gray.opacity(0.4)) - } - - Spacer() - } - .padding(.horizontal, 16) - .onAppear { - // 진입 시 편집 버퍼 초기화 - tempName = userName - } - } -} - -#Preview { - MemberInfoManageView() -} diff --git a/kai/Megabox/Megabox/Megabox/Views/SplashView.swift b/kai/Megabox/Megabox/Megabox/Views/SplashView.swift deleted file mode 100644 index 93e00cc..0000000 --- a/kai/Megabox/Megabox/Megabox/Views/SplashView.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// SplashView.swift -// Megabox -// -// Created by 김지우 on 9/18/25. -// - -import SwiftUI - -struct SplashView: View { - var body: some View { - ZStack(alignment: .center){ - //배경색 - Color(.white01) - - VStack{ - //로고 - Image(.megaboxLogo) - //사진 속성에 추가해야 하는 확장자 - .resizable() - .scaledToFit() - .frame(width: 249, height: 84) - }//VStack - }//ZStack_end - .ignoresSafeArea()//전체 화면에 흰색 배경 - - } -} - -#Preview { - SplashView() -} diff --git a/kai/Megabox/Megabox/Megabox/Views/UserInfoView.swift b/kai/Megabox/Megabox/Megabox/Views/UserInfoView.swift deleted file mode 100644 index 784b57d..0000000 --- a/kai/Megabox/Megabox/Megabox/Views/UserInfoView.swift +++ /dev/null @@ -1,195 +0,0 @@ -// -// UserInfoView.swift -// Megabox -// -// Created by 김지우 on 9/24/25. -// - -import SwiftUI - -struct UserInfoView: View { - @AppStorage("id") var userID: String = "" - @AppStorage("pwd") var userPwd: String = "" - @AppStorage("name") var userName: String = "" - - - var body: some View { - VStack{ - Spacer().frame(height:70) - userInfo - Spacer().frame(height:15) - clubMembership - Spacer().frame(height:33) - CouponState - Spacer().frame(height:33) - InfoIcons() - Spacer() - - } - .padding(.horizontal,14) - } - - - //회원정보 헤더 - private var userInfo: some View{ - VStack(alignment: .leading){ - //이름,welcome,회원정보 - HStack{ - Text("\(userName)님") - .font(.PretendardBold(size: 24)) - .padding(.trailing, 3) - - RoundedRectangle(cornerRadius:6) - .frame(width:81,height:25) - .foregroundStyle(.tag) - .overlay( - Text("WELCOME") - .font(.PretendardRegular(size: 14)) - .foregroundStyle(.white01)) - - Spacer() - - - Button(action: { /* 회원정보 액션 */ }) { - RoundedRectangle(cornerRadius: 16) - .frame(width:72,height:28) - .foregroundStyle(.gray07) - .overlay( - Text("회원정보") - .font(.PretendardRegular(size: 14)) - .foregroundStyle(.white01)) - } - - }//HStack_end - - //멤버십 포인트 - HStack{ - Text("멤버십 포인트") - .font(.PretendardRegular(size: 14)) - .foregroundStyle(.gray04) - - Text("500P") - .font(.PretendardRegular(size: 14)) - .foregroundStyle(.black01) - }//HStack_end - - }//VStack_end - } - - private var clubMembership: some View{ - Button(action:{/* 회원정보 액션 */}){ - RoundedRectangle(cornerRadius: 8) - .fill( - LinearGradient(colors: [.gradient1, .gradient2,.gradient3], - startPoint: .topLeading, endPoint: .bottomTrailing) - ) - .frame(height:46) - .overlay( - HStack { - Spacer() - .frame(width:8) - Text("클럽 멤버십") - .font(.PretendardRegular(size: 14)) - .foregroundColor(.white) - Image(systemName: "chevron.right") - .foregroundColor(.white) - Spacer() - }) - - } - } - - private var CouponState: some View{ - HStack(spacing: 0) { - VStack(spacing: 9) { - Text("쿠폰") - .font(.PretendardSemiBold(size: 16)) - .foregroundColor(.gray02) - Text("2") - .font(.PretendardSemiBold(size: 18)) - .foregroundColor(.black) - } - .frame(maxWidth: .infinity) - - Divider() - .frame(height: 31) - - VStack(spacing: 9) { - Text("스토어 교환권") - .font(.PretendardSemiBold(size: 16)) - .foregroundColor(.gray02) - Text("0") - .font(.PretendardSemiBold(size: 18)) - .foregroundColor(.black) - } - .frame(maxWidth: .infinity) - - Divider() - .frame(height: 31) - - - VStack(spacing: 9) { - Text("모바일 티켓") - .font(.PretendardSemiBold(size: 16)) - .foregroundColor(.gray02) - Text("0") - .font(.PretendardSemiBold(size: 18)) - .foregroundColor(.black) - } - .frame(maxWidth: .infinity) - .frame(height: 76) - } - .overlay( - RoundedRectangle(cornerRadius: 8) - .stroke(Color.gray02) - ) - } -} - -struct InfoMenuCard: View { - let icon: String - let label: String - var action: () -> Void = {} - - private let iconSize: CGFloat = 36 // 🔧 Figma 아이콘 크기에 맞춰 조절 - - var body: some View { - Button(action: action) { - VStack(spacing: 8) { - Image(icon) // 에셋 이미지 사용 - .resizable() - .scaledToFit() - .frame(width: iconSize, height: iconSize) - - Text(label) - .font(.PretendardSemiBold(size: 13)) // 선언형 폰트 - .foregroundStyle(Color.black) // 선언형 색상 - .lineLimit(1) - .minimumScaleFactor(0.8) - } - .frame(maxWidth: .infinity) // 그리드 칼럼 꽉 채우기 - .padding(.vertical, 6) - .contentShape(Rectangle()) - } - .buttonStyle(.plain) - } -} - -struct InfoIcons : View{ - @State private var infoviewModel = InfoViewModel() - - private let columns = Array(repeating: GridItem(.flexible(), spacing: 0), count: 4) - - var body: some View { - LazyVGrid(columns: columns, alignment: .center, spacing: 0) { - ForEach(infoviewModel.infoModel) { item in - InfoMenuCard(icon: item.icon, label: item.label) { - // TODO: 탭 액션 (네비게이션/시트 등) - } - } - } - } -} -#Preview { - UserInfoView() -} diff --git a/kai/week1/week1_practice/week1-practice-Info.plist b/kai/week1/week1_practice/week1-practice-Info.plist deleted file mode 100644 index cf8c929..0000000 --- a/kai/week1/week1_practice/week1-practice-Info.plist +++ /dev/null @@ -1,18 +0,0 @@ - - - - - UIAppFonts - - Pretendard-Black.otf - Pretendard-Bold.otf - Pretendard-ExtraBold.otf - Pretendard-ExtraLight.otf - Pretendard-Light.otf - Pretendard-Medium.otf - Pretendard-Regular.otf - Pretendard-SemiBold.otf - Pretendard-Thin.otf - - - diff --git a/kai/week1/week1_practice/week1_practice.xcodeproj/project.pbxproj b/kai/week1/week1_practice/week1_practice.xcodeproj/project.pbxproj deleted file mode 100644 index 1968216..0000000 --- a/kai/week1/week1_practice/week1_practice.xcodeproj/project.pbxproj +++ /dev/null @@ -1,327 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXFileReference section */ - 68BAF6222E7A90EF0091BC0F /* week1_practice.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = week1_practice.app; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 68BAF6242E7A90EF0091BC0F /* week1_practice */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = week1_practice; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 68BAF61F2E7A90EF0091BC0F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 68BAF6192E7A90EF0091BC0F = { - isa = PBXGroup; - children = ( - 68BAF6242E7A90EF0091BC0F /* week1_practice */, - 68BAF6232E7A90EF0091BC0F /* Products */, - ); - sourceTree = ""; - }; - 68BAF6232E7A90EF0091BC0F /* Products */ = { - isa = PBXGroup; - children = ( - 68BAF6222E7A90EF0091BC0F /* week1_practice.app */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 68BAF6212E7A90EF0091BC0F /* week1_practice */ = { - isa = PBXNativeTarget; - buildConfigurationList = 68BAF62D2E7A90F00091BC0F /* Build configuration list for PBXNativeTarget "week1_practice" */; - buildPhases = ( - 68BAF61E2E7A90EF0091BC0F /* Sources */, - 68BAF61F2E7A90EF0091BC0F /* Frameworks */, - 68BAF6202E7A90EF0091BC0F /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 68BAF6242E7A90EF0091BC0F /* week1_practice */, - ); - name = week1_practice; - packageProductDependencies = ( - ); - productName = week1_practice; - productReference = 68BAF6222E7A90EF0091BC0F /* week1_practice.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 68BAF61A2E7A90EF0091BC0F /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1640; - LastUpgradeCheck = 1640; - TargetAttributes = { - 68BAF6212E7A90EF0091BC0F = { - CreatedOnToolsVersion = 16.4; - }; - }; - }; - buildConfigurationList = 68BAF61D2E7A90EF0091BC0F /* Build configuration list for PBXProject "week1_practice" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 68BAF6192E7A90EF0091BC0F; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - productRefGroup = 68BAF6232E7A90EF0091BC0F /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 68BAF6212E7A90EF0091BC0F /* week1_practice */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 68BAF6202E7A90EF0091BC0F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 68BAF61E2E7A90EF0091BC0F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 68BAF62B2E7A90F00091BC0F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 68BAF62C2E7A90F00091BC0F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 68BAF62E2E7A90F00091BC0F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "week1-practice-Info.plist"; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "umc9th.week1-practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 68BAF62F2E7A90F00091BC0F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "week1-practice-Info.plist"; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "umc9th.week1-practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 68BAF61D2E7A90EF0091BC0F /* Build configuration list for PBXProject "week1_practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 68BAF62B2E7A90F00091BC0F /* Debug */, - 68BAF62C2E7A90F00091BC0F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 68BAF62D2E7A90F00091BC0F /* Build configuration list for PBXNativeTarget "week1_practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 68BAF62E2E7A90F00091BC0F /* Debug */, - 68BAF62F2E7A90F00091BC0F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 68BAF61A2E7A90EF0091BC0F /* Project object */; -} diff --git a/kai/week1/week1_practice/week1_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/kai/week1/week1_practice/week1_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/kai/week1/week1_practice/week1_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/kai/week1/week1_practice/week1_practice/Assets.xcassets/AccentColor.colorset/Contents.json b/kai/week1/week1_practice/week1_practice/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/kai/week1/week1_practice/week1_practice/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/week1/week1_practice/week1_practice/Assets.xcassets/AppIcon.appiconset/Contents.json b/kai/week1/week1_practice/week1_practice/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/kai/week1/week1_practice/week1_practice/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/week1/week1_practice/week1_practice/Assets.xcassets/Contents.json b/kai/week1/week1_practice/week1_practice/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/kai/week1/week1_practice/week1_practice/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/week1/week1_practice/week1_practice/Assets.xcassets/background.imageset/Contents.json b/kai/week1/week1_practice/week1_practice/Assets.xcassets/background.imageset/Contents.json deleted file mode 100644 index 4ae332c..0000000 --- a/kai/week1/week1_practice/week1_practice/Assets.xcassets/background.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "티켓 배경.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/kai/week1/week1_practice/week1_practice/Assets.xcassets/background.imageset/\355\213\260\354\274\223 \353\260\260\352\262\275.pdf" "b/kai/week1/week1_practice/week1_practice/Assets.xcassets/background.imageset/\355\213\260\354\274\223 \353\260\260\352\262\275.pdf" deleted file mode 100644 index 45be9eb..0000000 Binary files "a/kai/week1/week1_practice/week1_practice/Assets.xcassets/background.imageset/\355\213\260\354\274\223 \353\260\260\352\262\275.pdf" and /dev/null differ diff --git a/kai/week1/week1_practice/week1_practice/Resources/Fonts/FontExtension.swift b/kai/week1/week1_practice/week1_practice/Resources/Fonts/FontExtension.swift deleted file mode 100644 index f67f990..0000000 --- a/kai/week1/week1_practice/week1_practice/Resources/Fonts/FontExtension.swift +++ /dev/null @@ -1,88 +0,0 @@ -// -// FontExtension.swift -// week1_practice -// -// Created by 김지우 on 9/18/25. -// - -import Foundation -import SwiftUI - -extension Font { - enum Pretend { - case extraBold - case bold - case semibold - case medium - case regular - case light - case extraLight - case thin - - var value: String { - switch self { - case .extraBold: - return "Pretendard-ExtraBold" - case .bold: - return "Pretendard-Bold" - case .semibold: - return "Pretendard-SemiBold" - case .medium: - return "Pretendard-Medium" - case .regular: - return "Pretendard-Regular" - case .light: - return "Pretendard-Light" - case .extraLight: - return "Pretendard-ExtraLight" - case .thin: - return "Pretendard-Thin" - } - } - } - - static func pretend(type: Pretend, size: CGFloat) -> Font { - return .custom(type.value, size: size) - } - - static func PretendardBold(size: CGFloat) -> Font { - return .pretend(type: .bold, size: size) - } - - static func PretendardMedium(size: CGFloat) -> Font { - return .pretend(type: .medium, size: size) - } - - static func PretendardExtraBold(size: CGFloat) -> Font { - return .pretend(type: .extraBold, size: size) - } - - static func PretendardRegular(size: CGFloat) -> Font { - return .pretend(type: .regular, size: size) - } - - static func PretendardSemiBold(size: CGFloat) -> Font { - return .pretend(type: .semibold, size: size) - } - - static func PretendardLight(size: CGFloat) -> Font { - return .pretend(type: .medium, size: size) - } - - static func PretendardExtraLight(size: CGFloat) -> Font { - return .pretend(type: .extraLight, size: size) - } - - static func PretendardThin(size: CGFloat) -> Font { - return .pretend(type: .thin, size: size) - } - - - /* - 나중에 사용할 때에는 이렇게 씀 - - Text("Hello, SwiftUI!") - .font(.PretendardMedium(size: 16)) - - */ -} diff --git a/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Black.otf b/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Black.otf deleted file mode 100644 index a0d849e..0000000 Binary files a/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Black.otf and /dev/null differ diff --git a/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Bold.otf b/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Bold.otf deleted file mode 100644 index 8e5e30a..0000000 Binary files a/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Bold.otf and /dev/null differ diff --git a/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-ExtraBold.otf b/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-ExtraBold.otf deleted file mode 100644 index 388f3ca..0000000 Binary files a/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-ExtraBold.otf and /dev/null differ diff --git a/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-ExtraLight.otf b/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-ExtraLight.otf deleted file mode 100644 index 40c8b69..0000000 Binary files a/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-ExtraLight.otf and /dev/null differ diff --git a/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Light.otf b/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Light.otf deleted file mode 100644 index 228679e..0000000 Binary files a/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Light.otf and /dev/null differ diff --git a/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Medium.otf b/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Medium.otf deleted file mode 100644 index 0575069..0000000 Binary files a/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Medium.otf and /dev/null differ diff --git a/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Regular.otf b/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Regular.otf deleted file mode 100644 index 08bf4cf..0000000 Binary files a/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Regular.otf and /dev/null differ diff --git a/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-SemiBold.otf b/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-SemiBold.otf deleted file mode 100644 index e7e36ab..0000000 Binary files a/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-SemiBold.otf and /dev/null differ diff --git a/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Thin.otf b/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Thin.otf deleted file mode 100644 index 77e792d..0000000 Binary files a/kai/week1/week1_practice/week1_practice/Resources/Fonts/Pretendard-Thin.otf and /dev/null differ diff --git a/kai/week1/week1_practice/week1_practice/Views/TicketView.swift b/kai/week1/week1_practice/week1_practice/Views/TicketView.swift deleted file mode 100644 index 71323d1..0000000 --- a/kai/week1/week1_practice/week1_practice/Views/TicketView.swift +++ /dev/null @@ -1,68 +0,0 @@ -// -// ContentView.swift -// week1_practice -// -// Created by 김지우 on 9/17/25. -// - -import SwiftUI - -struct TicketView: View { - var body: some View { - ZStack { - Image(.background) - - VStack { - - Spacer().frame(height: 111) - - mainTitleGroup - - Spacer().frame(height: 134) - - mainBottomGroup - } - } - .padding()//ZStack_End - } - - //상단 Title VStack - private var mainTitleGroup: some View { - VStack { - Group { - Text("마이펫의 이중생활") - .font(.PretendardBold(size: 30)) - .shadow(color: .black.opacity(0.25), radius: 2, x: 0, y: 4) - - Text("본인 + 동반 1인") - .font(.PretendardRegular(size:16)) - Text("30,100원") - .font(.PretendardRegular(size:24)) - }//Group_end - .foregroundStyle(Color.white) - }//VStack_end - } - - //예약하기 버튼 - private var mainBottomGroup: some View { - Button(action: { - print("Hello") - }, label: { - VStack { - Image(systemName: "chevron.up") - .resizable() - .frame(width: 18, height: 12) - Text("예매하기") - .font(.PretendardSemiBold(size:18)) - .foregroundStyle(Color.white) - }//VStack_end - .frame(width: 63, height: 40) - })//Button_end - } - } - - -#Preview { - TicketView() -} - diff --git a/kai/week1/week1_practice/week1_practice/week1_practiceApp.swift b/kai/week1/week1_practice/week1_practice/week1_practiceApp.swift deleted file mode 100644 index c0f864a..0000000 --- a/kai/week1/week1_practice/week1_practice/week1_practiceApp.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// week1_practiceApp.swift -// week1_practice -// -// Created by 김지우 on 9/17/25. -// - -import SwiftUI - -@main -struct week1_practiceApp: App { - var body: some Scene { - WindowGroup { - TicketView() - } - } -} diff --git a/kai/week2/week2_practice/MovieCard.swift b/kai/week2/week2_practice/MovieCard.swift deleted file mode 100644 index 3a1cb10..0000000 --- a/kai/week2/week2_practice/MovieCard.swift +++ /dev/null @@ -1,58 +0,0 @@ -// -// MovieCard.swift -// week2_practice -// -// Created by 김지우 on 9/24/25. -// - -import SwiftUI - -struct MovieCard: View { - - let movieInfo: MovieModel - - init(movieInfo: MovieModel) { - self.movieInfo = movieInfo - } - - var body: some View { - VStack(spacing: 5) { - movieInfo.movieImage - - Text(movieInfo.movieName) - .font(.system(size: 20, weight: .bold)) - .foregroundStyle(Color.black) - - HStack { - movieLike - - Spacer() - - Text("예매율 \(String(format: "%.1f", movieInfo.movieReserCount))%") - .font(.system(size: 9, weight: .regular)) - .foregroundStyle(Color.black) - } - } - - /* 상위 뷰의 프레임을 꼭 넣어주세요! 피그마에 보시면 fixed로 고정되어 있는게 보이실겁니다.*/ - /* HStack 내부의 Spacer()로 부모 뷰의 사이즈에 영향을 받게됩니다.*/ - .frame(width: 120, height: 216) - } - - /// 하단 영화 좋아요 - private var movieLike: some View { - HStack(spacing: 6) { - Image(systemName: "heart.fill") - .foregroundStyle(Color.red) - .frame(width: 15, height: 14) - - Text("\(movieInfo.movieLike)") - .font(.system(size: 9, weight: .regular)) - .foregroundStyle(Color.black) - } - } -} - -#Preview { - MovieCard(movieInfo: .init(movieImage: .init(.mickey), movieName: "미키", movieLike: 972, movieReserCount: 30.8)) -} diff --git a/kai/week2/week2_practice/MovieModel.swift b/kai/week2/week2_practice/MovieModel.swift deleted file mode 100644 index 31fafce..0000000 --- a/kai/week2/week2_practice/MovieModel.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// MovieModel.swift -// week2_practice -// -// Created by 김지우 on 9/24/25. -// - -import Foundation -import SwiftUI - -struct MovieModel { - let movieImage: Image /* 영화 포스터 이미지 */ - let movieName: String /* 영화 이름 */ - let movieLike: Int /* 영화 좋아요 */ - let movieReserCount: Double /* 영화 예매율 */ -} diff --git a/kai/week2/week2_practice/MovieView.swift b/kai/week2/week2_practice/MovieView.swift deleted file mode 100644 index 961edce..0000000 --- a/kai/week2/week2_practice/MovieView.swift +++ /dev/null @@ -1,105 +0,0 @@ -// -// MovieView.swift -// week2_practice -// -// Created by 김지우 on 9/24/25. -// - -import SwiftUI -import Observation - -struct MovieView: View { - - @AppStorage("movieName") private var movieName: String = "" - private var viewModel: MovieViewModel = .init() - - - var body: some View { - VStack(spacing: 56) { - MovieCard(movieInfo: viewModel.movieModel[viewModel.currentIndex]) - - leftRightChange - - settingMovie - - printAppStorageValue - } - .padding() - } - - /// 왼쪽 오른쪽 change 버튼 - private var leftRightChange: some View { - HStack { - Group { - makeChevron(name: "chevron.left", action: viewModel.previousMovie) - - Spacer() - - Text("영화 바꾸기") - .font(.system(size: 20, weight: .regular)) - - Spacer() - - makeChevron(name: "chevron.right", action: viewModel.nextMovie) - } - .foregroundStyle(Color.black) - } - .frame(width: 256) - .padding(.vertical, 17) /* 이건 뭘 의미하는 걸까요? */ - .padding(.horizontal, 22) /* 이건 뭘 의미하는 걸까요? */ - } - - /// 화살표 재사용하기 위한 하위 뷰 - /// - Parameters: - /// - name: 이미지 이름 설정 - /// - action: 버튼이 가지는 액션 기능 넣기, @escpaing은 추후 문법을 통해 배우게 될 겁니다! - /// - Returns: some View 타입 반환 - private func makeChevron(name: String, action: @escaping () -> Void) -> some View { - Button(action: { - action() - }, label: { - Image(systemName: name) - .resizable() - .frame(width: 17.47, height: 29.73) - }) - } - - /// 대표 영화 설정 - private var settingMovie: some View { - Button(action: { - /* 현재 인덱스틔 영화 이름 AppStorage에 저장 */ - self.movieName = viewModel.movieModel[viewModel.currentIndex].movieName - }, label: { - Text("대표 영화로 설정") - .font(.system(size: 20, weight: .regular)) - .foregroundStyle(Color.black) - .padding(.top, 21) - .padding(.bottom, 20) - .padding(.leading, 53) - .padding(.trailing, 52) - .overlay(content: { - RoundedRectangle(cornerRadius: 20) - .fill(Color.clear) - .stroke(Color.black, style: .init(lineWidth: 1)) - }) - }) - } - - /// 하단 AppStorage에 저장된 영화 확인 텍스트 - private var printAppStorageValue: some View { - VStack(spacing: 17) { - Text("@AppStorage에 저장된 영화") - .font(.system(size: 30, weight: .regular)) - .foregroundStyle(Color.black) - - Text("현재 저장된 영화 : \(movieName)") - .font(.system(size: 20, weight: .regular)) - .foregroundStyle(Color.red) - } - } -} - -#Preview { - MovieView() -} - diff --git a/kai/week2/week2_practice/MovieViewModel.swift b/kai/week2/week2_practice/MovieViewModel.swift deleted file mode 100644 index 0165729..0000000 --- a/kai/week2/week2_practice/MovieViewModel.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// MovieViewModel.swift -// week2_practice -// -// Created by 김지우 on 9/24/25. -// - -import Foundation -import SwiftUI - -@Observable -class MovieViewModel { - var currentIndex: Int = 0 - - let movieModel: [MovieModel] = [ - .init(movieImage: .init(.mickey), movieName: "미키", movieLike: 972, movieReserCount: 30.8), - .init(movieImage: .init(.toystory), movieName: "토이스토리", movieLike: 999, movieReserCount: 99.8), - .init(movieImage: .init(.brutalist), movieName: "브루탈리스트", movieLike: 302, movieReserCount: 24.8), - .init(movieImage: .init(.snowWhite), movieName: "백설공주", movieLike: 302, movieReserCount: 3.8), - .init(movieImage: .init(.conclave), movieName: "콘클라베", movieLike: 392, movieReserCount: 43.9), - .init(movieImage: .init(.theFall), movieName: "더폴", movieLike: 30, movieReserCount: 2.1) - ] - - /// 이전 영화로 돌아가기, 단, 첫 번째 영화일 경우 마지막 영화로 전환 - public func previousMovie() { - currentIndex = (currentIndex - 1 + movieModel.count) % movieModel.count - } - /// 오른쪽 버튼을 눌렀을 때 다음 영화로 이동하는 함수 - public func nextMovie() { - currentIndex = (currentIndex + 1) % movieModel.count - } -} diff --git a/kai/week2/week2_practice/SwiftUIView.swift b/kai/week2/week2_practice/SwiftUIView.swift deleted file mode 100644 index d43c7b4..0000000 --- a/kai/week2/week2_practice/SwiftUIView.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// SwiftUIView.swift -// week2_practice -// -// Created by 김지우 on 9/24/25. -// - -import SwiftUI - -struct SwiftUIView: View { - var body: some View { - Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) - } -} - -#Preview { - SwiftUIView() -} diff --git a/kai/week2/week2_practice/week2_practice.xcodeproj/project.pbxproj b/kai/week2/week2_practice/week2_practice.xcodeproj/project.pbxproj deleted file mode 100644 index 30b2f64..0000000 --- a/kai/week2/week2_practice/week2_practice.xcodeproj/project.pbxproj +++ /dev/null @@ -1,352 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXBuildFile section */ - 68C87DC62E83ECAE00D98C0C /* MovieView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68C87DC52E83ECAE00D98C0C /* MovieView.swift */; }; - 68C87DCA2E83ECBF00D98C0C /* MovieModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68C87DC92E83ECBF00D98C0C /* MovieModel.swift */; }; - 68C87DCC2E83ECC500D98C0C /* MovieViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68C87DCB2E83ECC500D98C0C /* MovieViewModel.swift */; }; - 68C87DCE2E83F01500D98C0C /* MovieCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68C87DCD2E83F01500D98C0C /* MovieCard.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 68C87DA52E83E26E00D98C0C /* week2_practice.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = week2_practice.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 68C87DC52E83ECAE00D98C0C /* MovieView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MovieView.swift; sourceTree = ""; }; - 68C87DC92E83ECBF00D98C0C /* MovieModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MovieModel.swift; sourceTree = ""; }; - 68C87DCB2E83ECC500D98C0C /* MovieViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MovieViewModel.swift; sourceTree = ""; }; - 68C87DCD2E83F01500D98C0C /* MovieCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MovieCard.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 68C87DA72E83E26E00D98C0C /* week2_practice */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = week2_practice; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 68C87DA22E83E26E00D98C0C /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 68C87D9C2E83E26E00D98C0C = { - isa = PBXGroup; - children = ( - 68C87DCD2E83F01500D98C0C /* MovieCard.swift */, - 68C87DC92E83ECBF00D98C0C /* MovieModel.swift */, - 68C87DCB2E83ECC500D98C0C /* MovieViewModel.swift */, - 68C87DC52E83ECAE00D98C0C /* MovieView.swift */, - 68C87DA72E83E26E00D98C0C /* week2_practice */, - 68C87DA62E83E26E00D98C0C /* Products */, - ); - sourceTree = ""; - }; - 68C87DA62E83E26E00D98C0C /* Products */ = { - isa = PBXGroup; - children = ( - 68C87DA52E83E26E00D98C0C /* week2_practice.app */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 68C87DA42E83E26E00D98C0C /* week2_practice */ = { - isa = PBXNativeTarget; - buildConfigurationList = 68C87DB02E83E27000D98C0C /* Build configuration list for PBXNativeTarget "week2_practice" */; - buildPhases = ( - 68C87DA12E83E26E00D98C0C /* Sources */, - 68C87DA22E83E26E00D98C0C /* Frameworks */, - 68C87DA32E83E26E00D98C0C /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 68C87DA72E83E26E00D98C0C /* week2_practice */, - ); - name = week2_practice; - packageProductDependencies = ( - ); - productName = week2_practice; - productReference = 68C87DA52E83E26E00D98C0C /* week2_practice.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 68C87D9D2E83E26E00D98C0C /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 2600; - LastUpgradeCheck = 2600; - TargetAttributes = { - 68C87DA42E83E26E00D98C0C = { - CreatedOnToolsVersion = 26.0; - }; - }; - }; - buildConfigurationList = 68C87DA02E83E26E00D98C0C /* Build configuration list for PBXProject "week2_practice" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 68C87D9C2E83E26E00D98C0C; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - productRefGroup = 68C87DA62E83E26E00D98C0C /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 68C87DA42E83E26E00D98C0C /* week2_practice */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 68C87DA32E83E26E00D98C0C /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 68C87DA12E83E26E00D98C0C /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 68C87DCE2E83F01500D98C0C /* MovieCard.swift in Sources */, - 68C87DCA2E83ECBF00D98C0C /* MovieModel.swift in Sources */, - 68C87DC62E83ECAE00D98C0C /* MovieView.swift in Sources */, - 68C87DCC2E83ECC500D98C0C /* MovieViewModel.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 68C87DAE2E83E27000D98C0C /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 26.0; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 68C87DAF2E83E27000D98C0C /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 26.0; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 68C87DB12E83E27000D98C0C /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "umc9th.week2-practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 68C87DB22E83E27000D98C0C /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "umc9th.week2-practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 68C87DA02E83E26E00D98C0C /* Build configuration list for PBXProject "week2_practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 68C87DAE2E83E27000D98C0C /* Debug */, - 68C87DAF2E83E27000D98C0C /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 68C87DB02E83E27000D98C0C /* Build configuration list for PBXNativeTarget "week2_practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 68C87DB12E83E27000D98C0C /* Debug */, - 68C87DB22E83E27000D98C0C /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 68C87D9D2E83E26E00D98C0C /* Project object */; -} diff --git a/kai/week2/week2_practice/week2_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/kai/week2/week2_practice/week2_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/kai/week2/week2_practice/week2_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/kai/week2/week2_practice/week2_practice/Assets.xcassets/AccentColor.colorset/Contents.json b/kai/week2/week2_practice/week2_practice/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/kai/week2/week2_practice/week2_practice/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/week2/week2_practice/week2_practice/Assets.xcassets/AppIcon.appiconset/Contents.json b/kai/week2/week2_practice/week2_practice/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/kai/week2/week2_practice/week2_practice/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/week2/week2_practice/week2_practice/Assets.xcassets/Contents.json b/kai/week2/week2_practice/week2_practice/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/kai/week2/week2_practice/week2_practice/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/kai/week2/week2_practice/week2_practice/Assets.xcassets/brutalist.imageset/Contents.json b/kai/week2/week2_practice/week2_practice/Assets.xcassets/brutalist.imageset/Contents.json deleted file mode 100644 index 4ff6933..0000000 --- a/kai/week2/week2_practice/week2_practice/Assets.xcassets/brutalist.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=브루탈리스트.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/kai/week2/week2_practice/week2_practice/Assets.xcassets/brutalist.imageset/Property 1=\353\270\214\353\243\250\355\203\210\353\246\254\354\212\244\355\212\270.pdf" "b/kai/week2/week2_practice/week2_practice/Assets.xcassets/brutalist.imageset/Property 1=\353\270\214\353\243\250\355\203\210\353\246\254\354\212\244\355\212\270.pdf" deleted file mode 100644 index 8049bc5..0000000 Binary files "a/kai/week2/week2_practice/week2_practice/Assets.xcassets/brutalist.imageset/Property 1=\353\270\214\353\243\250\355\203\210\353\246\254\354\212\244\355\212\270.pdf" and /dev/null differ diff --git a/kai/week2/week2_practice/week2_practice/Assets.xcassets/conclave.imageset/Contents.json b/kai/week2/week2_practice/week2_practice/Assets.xcassets/conclave.imageset/Contents.json deleted file mode 100644 index 0dc7ac7..0000000 --- a/kai/week2/week2_practice/week2_practice/Assets.xcassets/conclave.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=콘클라베.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/kai/week2/week2_practice/week2_practice/Assets.xcassets/conclave.imageset/Property 1=\354\275\230\355\201\264\353\235\274\353\262\240.pdf" "b/kai/week2/week2_practice/week2_practice/Assets.xcassets/conclave.imageset/Property 1=\354\275\230\355\201\264\353\235\274\353\262\240.pdf" deleted file mode 100644 index 2b559b8..0000000 Binary files "a/kai/week2/week2_practice/week2_practice/Assets.xcassets/conclave.imageset/Property 1=\354\275\230\355\201\264\353\235\274\353\262\240.pdf" and /dev/null differ diff --git a/kai/week2/week2_practice/week2_practice/Assets.xcassets/mickey.imageset/Contents.json b/kai/week2/week2_practice/week2_practice/Assets.xcassets/mickey.imageset/Contents.json deleted file mode 100644 index c84096e..0000000 --- a/kai/week2/week2_practice/week2_practice/Assets.xcassets/mickey.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=미키.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/kai/week2/week2_practice/week2_practice/Assets.xcassets/mickey.imageset/Property 1=\353\257\270\355\202\244.pdf" "b/kai/week2/week2_practice/week2_practice/Assets.xcassets/mickey.imageset/Property 1=\353\257\270\355\202\244.pdf" deleted file mode 100644 index d7c63f1..0000000 Binary files "a/kai/week2/week2_practice/week2_practice/Assets.xcassets/mickey.imageset/Property 1=\353\257\270\355\202\244.pdf" and /dev/null differ diff --git a/kai/week2/week2_practice/week2_practice/Assets.xcassets/snowWhite.imageset/Contents.json b/kai/week2/week2_practice/week2_practice/Assets.xcassets/snowWhite.imageset/Contents.json deleted file mode 100644 index a4d6c2b..0000000 --- a/kai/week2/week2_practice/week2_practice/Assets.xcassets/snowWhite.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=백설공주.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/kai/week2/week2_practice/week2_practice/Assets.xcassets/snowWhite.imageset/Property 1=\353\260\261\354\204\244\352\263\265\354\243\274.pdf" "b/kai/week2/week2_practice/week2_practice/Assets.xcassets/snowWhite.imageset/Property 1=\353\260\261\354\204\244\352\263\265\354\243\274.pdf" deleted file mode 100644 index 3f52bfa..0000000 Binary files "a/kai/week2/week2_practice/week2_practice/Assets.xcassets/snowWhite.imageset/Property 1=\353\260\261\354\204\244\352\263\265\354\243\274.pdf" and /dev/null differ diff --git a/kai/week2/week2_practice/week2_practice/Assets.xcassets/theFall.imageset/Contents.json b/kai/week2/week2_practice/week2_practice/Assets.xcassets/theFall.imageset/Contents.json deleted file mode 100644 index 492242a..0000000 --- a/kai/week2/week2_practice/week2_practice/Assets.xcassets/theFall.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=더폴.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/kai/week2/week2_practice/week2_practice/Assets.xcassets/theFall.imageset/Property 1=\353\215\224\355\217\264.pdf" "b/kai/week2/week2_practice/week2_practice/Assets.xcassets/theFall.imageset/Property 1=\353\215\224\355\217\264.pdf" deleted file mode 100644 index 4017fab..0000000 Binary files "a/kai/week2/week2_practice/week2_practice/Assets.xcassets/theFall.imageset/Property 1=\353\215\224\355\217\264.pdf" and /dev/null differ diff --git a/kai/week2/week2_practice/week2_practice/Assets.xcassets/toystory.imageset/Contents.json b/kai/week2/week2_practice/week2_practice/Assets.xcassets/toystory.imageset/Contents.json deleted file mode 100644 index 198c7d7..0000000 --- a/kai/week2/week2_practice/week2_practice/Assets.xcassets/toystory.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=토이스토리.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/kai/week2/week2_practice/week2_practice/Assets.xcassets/toystory.imageset/Property 1=\355\206\240\354\235\264\354\212\244\355\206\240\353\246\254.pdf" "b/kai/week2/week2_practice/week2_practice/Assets.xcassets/toystory.imageset/Property 1=\355\206\240\354\235\264\354\212\244\355\206\240\353\246\254.pdf" deleted file mode 100644 index 669f9cd..0000000 Binary files "a/kai/week2/week2_practice/week2_practice/Assets.xcassets/toystory.imageset/Property 1=\355\206\240\354\235\264\354\212\244\355\206\240\353\246\254.pdf" and /dev/null differ diff --git a/kai/week2/week2_practice/week2_practice/week2_practiceApp.swift b/kai/week2/week2_practice/week2_practice/week2_practiceApp.swift deleted file mode 100644 index b401587..0000000 --- a/kai/week2/week2_practice/week2_practice/week2_practiceApp.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// week2_practiceApp.swift -// week2_practice -// -// Created by 김지우 on 9/24/25. -// - -import SwiftUI - -@main -struct week2_practiceApp: App { - var body: some Scene { - WindowGroup { - } - } -} diff --git a/leehan/UMC_Megabox/Model/LoginModel.swift b/leehan/UMC_Megabox/Model/LoginModel.swift deleted file mode 100644 index e985485..0000000 --- a/leehan/UMC_Megabox/Model/LoginModel.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// LoginModel.swift -// UMC_Megabox -// -// Created by OOng E on 9/22/25. -// - -import SwiftUI -import Foundation - -struct LoginModel { - var id: String - var pwd: String -} diff --git a/leehan/UMC_Megabox/Model/MovieBoardModel.swift b/leehan/UMC_Megabox/Model/MovieBoardModel.swift deleted file mode 100644 index 84d1922..0000000 --- a/leehan/UMC_Megabox/Model/MovieBoardModel.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// MovieBoardModel.swift -// UMC_Megabox -// -// Created by 이한결 on 9/30/25. -// - -import SwiftUI -import Foundation - -struct MovieBoard: Identifiable { - var id = UUID() - var MovieImage: Image - var Title: String - var SubTitle: String -} diff --git a/leehan/UMC_Megabox/Model/MovieCardModel.swift b/leehan/UMC_Megabox/Model/MovieCardModel.swift deleted file mode 100644 index b3c6e7d..0000000 --- a/leehan/UMC_Megabox/Model/MovieCardModel.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// MovieCardModel.swift -// UMC_Megabox -// -// Created by 이한결 on 9/30/25. -// - -import SwiftUI -import Foundation - -struct MovieCard: Identifiable { - var id = UUID() // Identifiable 사용 위해선 UUID 값이 "소문자 id" 에 저장되어야 함 - var MoviePoster: Image - var MovieName: String - var People: String - - var bigPoster: Image - var subTitle: String - var explaination: String - var smallPoster: Image - var age: String - var date: String -} diff --git a/leehan/UMC_Megabox/UMC-Megabox-Info.plist b/leehan/UMC_Megabox/UMC-Megabox-Info.plist deleted file mode 100644 index e06e8fa..0000000 --- a/leehan/UMC_Megabox/UMC-Megabox-Info.plist +++ /dev/null @@ -1,48 +0,0 @@ - - - - - API_KEY - $(API_KEY) - CFBundleURLTypes - - - CFBundleTypeRole - Editor - CFBundleURLSchemes - - kakao80e2957195ff1483900445b34ade7a95 - - - - CFBundleTypeRole - None - - - CFBundleTypeRole - None - - - LSApplicationQueriesSchemes - - kakaokompassauth - kakaolink - kakaoplus - kakaotalk - - NATIVE_APP_KEY - $(NATIVE_APP_KEY) - UIAppFonts - - Pretendard-Black.otf - Pretendard-Bold.otf - Pretendard-ExtraBold.otf - Pretendard-ExtraLight.otf - Pretendard-Light.otf - Pretendard-Medium.otf - Pretendard-Regular.otf - Pretendard-SemiBold.otf - Pretendard-Thin.otf - - - diff --git a/leehan/UMC_Megabox/UMC_Megabox.xcodeproj/project.pbxproj b/leehan/UMC_Megabox/UMC_Megabox.xcodeproj/project.pbxproj deleted file mode 100644 index a37d327..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox.xcodeproj/project.pbxproj +++ /dev/null @@ -1,423 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXBuildFile section */ - 677B93782EC195BB00123AB6 /* Moya in Frameworks */ = {isa = PBXBuildFile; productRef = 677B93772EC195BB00123AB6 /* Moya */; }; - 6792B44E2EB8667C00AD53E0 /* KakaoSDKAuth in Frameworks */ = {isa = PBXBuildFile; productRef = 6792B44D2EB8667C00AD53E0 /* KakaoSDKAuth */; }; - 6792B4502EB8667C00AD53E0 /* KakaoSDKCommon in Frameworks */ = {isa = PBXBuildFile; productRef = 6792B44F2EB8667C00AD53E0 /* KakaoSDKCommon */; }; - 6792B4522EB8667C00AD53E0 /* KakaoSDKUser in Frameworks */ = {isa = PBXBuildFile; productRef = 6792B4512EB8667C00AD53E0 /* KakaoSDKUser */; }; - 67A673FF2EC1EE6700536DEF /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = 67A673FE2EC1EE6700536DEF /* Kingfisher */; }; - 67B27BC52EB876300080C848 /* KakaoSDK in Frameworks */ = {isa = PBXBuildFile; productRef = 67B27BC42EB876300080C848 /* KakaoSDK */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - F87869B52E8144A4001AFA0A /* UMC_Megabox.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = UMC_Megabox.app; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - F8431AB42E795410004CDA65 /* UMC_Megabox */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = UMC_Megabox; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - F8431AAF2E795410004CDA65 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 67A673FF2EC1EE6700536DEF /* Kingfisher in Frameworks */, - 6792B4502EB8667C00AD53E0 /* KakaoSDKCommon in Frameworks */, - 67B27BC52EB876300080C848 /* KakaoSDK in Frameworks */, - 6792B44E2EB8667C00AD53E0 /* KakaoSDKAuth in Frameworks */, - 677B93782EC195BB00123AB6 /* Moya in Frameworks */, - 6792B4522EB8667C00AD53E0 /* KakaoSDKUser in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 67B27BC62EB876B10080C848 /* Frameworks */ = { - isa = PBXGroup; - children = ( - ); - name = Frameworks; - sourceTree = ""; - }; - F8431AA92E795410004CDA65 = { - isa = PBXGroup; - children = ( - F8431AB42E795410004CDA65 /* UMC_Megabox */, - F87869B52E8144A4001AFA0A /* UMC_Megabox.app */, - 67B27BC62EB876B10080C848 /* Frameworks */, - ); - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - F8431AB12E795410004CDA65 /* UMC_Megabox */ = { - isa = PBXNativeTarget; - buildConfigurationList = F8431ABD2E795413004CDA65 /* Build configuration list for PBXNativeTarget "UMC_Megabox" */; - buildPhases = ( - F8431AAE2E795410004CDA65 /* Sources */, - F8431AAF2E795410004CDA65 /* Frameworks */, - F8431AB02E795410004CDA65 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - F8431AB42E795410004CDA65 /* UMC_Megabox */, - ); - name = UMC_Megabox; - packageProductDependencies = ( - 6792B44D2EB8667C00AD53E0 /* KakaoSDKAuth */, - 6792B44F2EB8667C00AD53E0 /* KakaoSDKCommon */, - 6792B4512EB8667C00AD53E0 /* KakaoSDKUser */, - 67B27BC42EB876300080C848 /* KakaoSDK */, - 677B93772EC195BB00123AB6 /* Moya */, - 67A673FE2EC1EE6700536DEF /* Kingfisher */, - ); - productName = UMC_Megabox; - productReference = F87869B52E8144A4001AFA0A /* UMC_Megabox.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - F8431AAA2E795410004CDA65 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1640; - LastUpgradeCheck = 1640; - TargetAttributes = { - F8431AB12E795410004CDA65 = { - CreatedOnToolsVersion = 16.4; - }; - }; - }; - buildConfigurationList = F8431AAD2E795410004CDA65 /* Build configuration list for PBXProject "UMC_Megabox" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = F8431AA92E795410004CDA65; - minimizedProjectReferenceProxies = 1; - packageReferences = ( - 6792B44C2EB8667C00AD53E0 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */, - 677B93762EC195BB00123AB6 /* XCRemoteSwiftPackageReference "Moya" */, - 67A673FD2EC1EE6700536DEF /* XCRemoteSwiftPackageReference "Kingfisher" */, - ); - preferredProjectObjectVersion = 77; - productRefGroup = F8431AA92E795410004CDA65; - projectDirPath = ""; - projectRoot = ""; - targets = ( - F8431AB12E795410004CDA65 /* UMC_Megabox */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - F8431AB02E795410004CDA65 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - F8431AAE2E795410004CDA65 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - F8431ABB2E795413004CDA65 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReferenceAnchor = F8431AB42E795410004CDA65 /* UMC_Megabox */; - baseConfigurationReferenceRelativePath = Resources/Secret.xcconfig; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - F8431ABC2E795413004CDA65 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReferenceAnchor = F8431AB42E795410004CDA65 /* UMC_Megabox */; - baseConfigurationReferenceRelativePath = Resources/Secret.xcconfig; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - F8431ABE2E795413004CDA65 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 35XX66L38D; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "UMC-Megabox-Info.plist"; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "Hangyeol-Lee--Personal-Team-.UMC-Megabox"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - F8431ABF2E795413004CDA65 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 35XX66L38D; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "UMC-Megabox-Info.plist"; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "Hangyeol-Lee--Personal-Team-.UMC-Megabox"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - F8431AAD2E795410004CDA65 /* Build configuration list for PBXProject "UMC_Megabox" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - F8431ABB2E795413004CDA65 /* Debug */, - F8431ABC2E795413004CDA65 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - F8431ABD2E795413004CDA65 /* Build configuration list for PBXNativeTarget "UMC_Megabox" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - F8431ABE2E795413004CDA65 /* Debug */, - F8431ABF2E795413004CDA65 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCRemoteSwiftPackageReference section */ - 677B93762EC195BB00123AB6 /* XCRemoteSwiftPackageReference "Moya" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/Moya/Moya"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 15.0.3; - }; - }; - 6792B44C2EB8667C00AD53E0 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/kakao/kakao-ios-sdk"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 2.25.0; - }; - }; - 67A673FD2EC1EE6700536DEF /* XCRemoteSwiftPackageReference "Kingfisher" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/onevcat/Kingfisher.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 8.6.1; - }; - }; -/* End XCRemoteSwiftPackageReference section */ - -/* Begin XCSwiftPackageProductDependency section */ - 677B93772EC195BB00123AB6 /* Moya */ = { - isa = XCSwiftPackageProductDependency; - package = 677B93762EC195BB00123AB6 /* XCRemoteSwiftPackageReference "Moya" */; - productName = Moya; - }; - 6792B44D2EB8667C00AD53E0 /* KakaoSDKAuth */ = { - isa = XCSwiftPackageProductDependency; - package = 6792B44C2EB8667C00AD53E0 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; - productName = KakaoSDKAuth; - }; - 6792B44F2EB8667C00AD53E0 /* KakaoSDKCommon */ = { - isa = XCSwiftPackageProductDependency; - package = 6792B44C2EB8667C00AD53E0 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; - productName = KakaoSDKCommon; - }; - 6792B4512EB8667C00AD53E0 /* KakaoSDKUser */ = { - isa = XCSwiftPackageProductDependency; - package = 6792B44C2EB8667C00AD53E0 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; - productName = KakaoSDKUser; - }; - 67A673FE2EC1EE6700536DEF /* Kingfisher */ = { - isa = XCSwiftPackageProductDependency; - package = 67A673FD2EC1EE6700536DEF /* XCRemoteSwiftPackageReference "Kingfisher" */; - productName = Kingfisher; - }; - 67B27BC42EB876300080C848 /* KakaoSDK */ = { - isa = XCSwiftPackageProductDependency; - package = 6792B44C2EB8667C00AD53E0 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; - productName = KakaoSDK; - }; -/* End XCSwiftPackageProductDependency section */ - }; - rootObject = F8431AAA2E795410004CDA65 /* Project object */; -} diff --git a/leehan/UMC_Megabox/UMC_Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/leehan/UMC_Megabox/UMC_Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/leehan/UMC_Megabox/UMC_Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata.xml b/leehan/UMC_Megabox/UMC_Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata.xml deleted file mode 100644 index 919434a..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/leehan/UMC_Megabox/UMC_Megabox.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/leehan/UMC_Megabox/UMC_Megabox.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved deleted file mode 100644 index 4ed1b3e..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ /dev/null @@ -1,60 +0,0 @@ -{ - "originHash" : "cc8e5f0e8df283874c4960aa2ab0605823f3b8b64d759bcf10ac486906e6960b", - "pins" : [ - { - "identity" : "alamofire", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Alamofire/Alamofire.git", - "state" : { - "revision" : "513364f870f6bfc468f9d2ff0a95caccc10044c5", - "version" : "5.10.2" - } - }, - { - "identity" : "kakao-ios-sdk", - "kind" : "remoteSourceControl", - "location" : "https://github.com/kakao/kakao-ios-sdk", - "state" : { - "revision" : "e14a8d1fad75645fd5677a295a8b1956ebd14d3d", - "version" : "2.25.0" - } - }, - { - "identity" : "kingfisher", - "kind" : "remoteSourceControl", - "location" : "https://github.com/onevcat/Kingfisher.git", - "state" : { - "revision" : "4d75de347da985a70c63af4d799ed482021f6733", - "version" : "8.6.1" - } - }, - { - "identity" : "moya", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Moya/Moya", - "state" : { - "revision" : "c263811c1f3dbf002be9bd83107f7cdc38992b26", - "version" : "15.0.3" - } - }, - { - "identity" : "reactiveswift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/ReactiveCocoa/ReactiveSwift.git", - "state" : { - "revision" : "c43bae3dac73fdd3cb906bd5a1914686ca71ed3c", - "version" : "6.7.0" - } - }, - { - "identity" : "rxswift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/ReactiveX/RxSwift.git", - "state" : { - "revision" : "5004a18539bd68905c5939aa893075f578f4f03d", - "version" : "6.9.1" - } - } - ], - "version" : 3 -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/ForNetwork/AuthorizationManager.swift b/leehan/UMC_Megabox/UMC_Megabox/ForNetwork/AuthorizationManager.swift deleted file mode 100644 index 61836fc..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/ForNetwork/AuthorizationManager.swift +++ /dev/null @@ -1,87 +0,0 @@ -// -// AuthenticationManager.swift -// UMC_Megabox -// -// Created by 이한결 on 10/5/25. -// - -import SwiftUI -import Observation -import KakaoSDKUser - -@Observable -class AuthorizationManager { - - // 앱의 현재 로그인 상태 - false면 LoginView, true면 MainTabView - var isLoggedIn: Bool = false - - // 생성자를 이용해서 자동 로그인 - 토큰을 체크해서 isLoggedIn을 변경 - init() { - checkTokenStatus() - } - - // 토큰의 상태를 체크해서 isLoggedIn 변수를 수정 - private func checkTokenStatus() { - Task { @MainActor in - self.isLoggedIn = KeychainService.shared.loadToken() // Bool타입 반환 - - if self.isLoggedIn { - print("AuthManager: 토큰 있음, 자동로그인 진행") - } else { - print("AuthManager: 토큰 없음, 자동로그인 불가") - } - } - } - - // tokenInfo: 필수 전달인자 - 키체인에 저 - // isWithKakao: 카카오 로그인이면 true, 카카오 로그인이 아니면 false(디폴트) - // loginID: 카카오 로그인이 아닌 경우 id 값을 넘겨받음 - 사용자 이름 구분 위함 - func login(tokenInfo: TokenInfo, isWithKakao: Bool = false, loginid: String = "", loginpwd: String = "") async { - // 로그인 성공 시 키체인에 토큰 저장 - KeychainService.shared.saveToken(tokenInfo) - - // --- 카카오 로그인인지 검사 --- - if isWithKakao { // 카카오 로그인 O - do { - if let userName = try await ProfileManager.profileManager.getKakaoUserName() { // getKakaoUserName() 함수를 호출하여 유저 이름 가져옴 - UserDefaults.standard.set(userName, forKey: "name") - } - } catch { - print("유저 이름 저장 불가") - } - } else { // 카카오 로그인 X - // 키체인에 로그인 정보 저장 - KeychainService.shared.saveCredential(id: loginid, pwd: loginpwd) - - // TODO: 로그인 정보마다 사용자 이름 어떻게 저장? - UserDefaults.standard.set("사용자", forKey: "name") // 그냥 사용자로 저장 - UserDefaults.standard.set(loginid, forKey: "id") // ID 저장 - - // --- 하드코딩 --- - // TODO: 로그인 정보를 서버에서 가져오도록 구현 - if loginid == "Test" { UserDefaults.standard.set("이한결", forKey: "name") } - else if !isWithKakao { UserDefaults.standard.set("사용자", forKey: "name") } - - } - - // UI 변경에 관련된 코드는 메인 스레드에서 - await MainActor.run { isLoggedIn = true } - } - - - - func logout() { - // 키체인에서 토큰 삭제 - KeychainService.shared.deleteToken() - if let loggedinID = UserDefaults.standard.string(forKey: "id") { - // 키체인에 저장된 로그인 정보 삭제 - print("keychain에서 로그인 정보 삭제") - KeychainService.shared.deleteCredential(forId: loggedinID) - } else { - print("아이디를 찾을 수 없음 - keychain에서 로그인 정보 삭제 불가") - } - - // isLoggedIn 변수를 false로 변경 - isLoggedIn = false - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/ForNetwork/KeychainService.swift b/leehan/UMC_Megabox/UMC_Megabox/ForNetwork/KeychainService.swift deleted file mode 100644 index 0105b0b..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/ForNetwork/KeychainService.swift +++ /dev/null @@ -1,156 +0,0 @@ -// -// KeychainService.swift -// UMC_Megabox -// -// Created by 이한결 on 11/2/25. -// - -import Foundation -import Security - -class KeychainService { - static let shared = KeychainService() - - private init() {} - // MARK: 토큰 저장을 위한 변수 - private let account = "authToken" - private let service = "com.myKeychain.tokenInfo" - - // MARK: 로그인 정보 저장을 위한 변수 - private let credentialService = "com.myKeychain.userCredential" - - // --- 로그인 정보 저장을 위한 새로운 함수들 --- - - // 로그인 정보 키체인에 저장하는 함수 - @discardableResult - public func saveCredential(id: String, pwd: String) -> OSStatus { - // Token객체와 다르게 pwd는 String이기 때문에 utf8로 passwordData에 저장 - guard let passwordData = pwd.data(using: .utf8) else { - print("비밀번호를 Data로 변환하는데 실패함") - return errSecParam - } - - let query: [String: Any] = [ - kSecClass as String: kSecClassGenericPassword, - kSecAttrAccount as String: id, - kSecAttrService as String: credentialService, - kSecValueData as String: passwordData, - kSecAttrAccessible as String: kSecAttrAccessibleAfterFirstUnlock - ] - - // 기존 항목 삭제 - SecItemDelete(query as CFDictionary) - // 새 항목 추가 - let status = SecItemAdd(query as CFDictionary, nil) - - if status == errSecSuccess { - print("[Keychain] 아이디 '\(id)'의 비밀번호 저장 성공") - } else { - print("[Keychain] 비밀번호 저장 실패. Status: \(status)") - } - - return status - } - - // id에 해당하는 키체인 로그인 정보를 삭제하는 함수 - @discardableResult - public func deleteCredential(forId id: String) -> OSStatus { - let query: [String: Any] = [ - kSecClass as String: kSecClassGenericPassword, - kSecAttrService as String: credentialService, - kSecAttrAccount as String: id - ] - - // 키체인에 저장된 로그인 정보 삭제 - let status = SecItemDelete(query as CFDictionary) - - if status == errSecSuccess { - print("로그인 정보 삭제 성공") - } else { - print("로그인 정보 삭제 실패") - } - - return status - } - - @discardableResult - private func saveTokenInfo(_ tokenInfo: TokenInfo) -> OSStatus { - do { - let data = try JSONEncoder().encode(tokenInfo) - - let query: [String: Any] = [ - kSecClass as String: kSecClassGenericPassword, - kSecAttrAccount as String: account, - kSecAttrService as String: service, - kSecValueData as String: data, - kSecAttrAccessible as String: kSecAttrAccessibleAfterFirstUnlock - ] - - SecItemDelete(query as CFDictionary) - - return SecItemAdd(query as CFDictionary, nil) - } catch { - print("JSON 인코딩 실패:", error) - return errSecParam - } - } - - private func loadTokenInfo() -> TokenInfo? { - let query: [String: Any] = [ - kSecClass as String: kSecClassGenericPassword, - kSecAttrAccount as String: account, - kSecAttrService as String: service, - kSecReturnData as String: true, - kSecMatchLimit as String: kSecMatchLimitOne - ] - - var item: CFTypeRef? - let status = SecItemCopyMatching(query as CFDictionary, &item) - - guard status == errSecSuccess, - let data = item as? Data else { - print("토큰 정보 불러오기 실패 - status:", status) - return nil - } - - do { - return try JSONDecoder().decode(TokenInfo.self, from: data) - } catch { - print("❌ JSON 디코딩 실패:", error) - return nil - } - } - - @discardableResult - private func deleteTokenInfo() -> OSStatus { - let query: [String: Any] = [ - kSecClass as String: kSecClassGenericPassword, - kSecAttrAccount as String: account, - kSecAttrService as String: service - ] - - return SecItemDelete(query as CFDictionary) - } - - public func saveToken(_ tokenInfo: TokenInfo) { - let saveStatus = self.saveTokenInfo(tokenInfo) - print(saveStatus == errSecSuccess ? "저장 성공" : "저장 실패") - } - - // 자동로그인 구현 위해 Bool타입 반환하도록 수정 - public func loadToken() -> Bool { - if let loadedToken = self.loadTokenInfo() { // 토큰이 있는 경우 true 반환 - print("accessToken:", loadedToken.accessToken) - print("RefreshToken:", loadedToken.refreshToken) - return true - } else { // 토큰이 없는 경우 false 반환 - print("토큰 정보 없음") - return false - } - } - - public func deleteToken() { - let deleteStatus = self.deleteTokenInfo() - print(deleteStatus == errSecSuccess ? "삭제 성공" : "삭제 실패") - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/ForNetwork/MovieService.swift b/leehan/UMC_Megabox/UMC_Megabox/ForNetwork/MovieService.swift deleted file mode 100644 index 3b7f804..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/ForNetwork/MovieService.swift +++ /dev/null @@ -1,48 +0,0 @@ -// -// MovieService.swift -// UMC_Megabox -// -// Created by 이한결 on 11/10/25. -// - -import Foundation -import Alamofire -import Moya - -@Observable -final class MovieService { - // provider 인스턴스 생성 - var provider = MoyaProvider() - - init() { - let logger = NetworkLoggerPlugin(configuration: .init(logOptions: .verbose)) - self.provider = MoyaProvider(plugins: [logger]) - } - - // --- API 호출: get Movie Data from TMDB --- - func fetchMovieData() async throws -> NowPlayingResponseDomainModel { - do { - /// Moya는 async/await 방식의 최신 비동기 호출을 지원하지 않음 - /// 따라서 withCheckedThrowingContinuation 을 이용해서 async/await를 사용할 수 있도록 만들어줌 - let response = try await withCheckedThrowingContinuation { continuation in - // provider.request(.loadMovieInfo) -> .loadMovieInfo API 호출 - provider.request(.loadMovieInfo) { result in - switch result { - case .success(let response): // 성공 시 - continuation.resume(returning: response) - case .failure(let error): // 실패 시 - continuation.resume(throwing: error) - } - } - } - - // response에 들어간 json 데이터를 map함수를 사용해서 NowPlayingResponseDTO 객체로 변환해서 dto에 저장 - let dto = try response.map(NowPlayingResponseDTO.self) - // dto.toDomain() 을 통해 DomainModel로 변환한 후 리턴 - return dto.toDomain() - } catch { - print("fetchMovieData 실패") - throw error - } - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/ForNetwork/ProfileManager.swift b/leehan/UMC_Megabox/UMC_Megabox/ForNetwork/ProfileManager.swift deleted file mode 100644 index be71507..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/ForNetwork/ProfileManager.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// ProfileManager.swift -// UMC_Megabox -// -// Created by 이한결 on 11/12/25. -// - -import Foundation -import Observation -import KakaoSDKUser - -class ProfileManager { - - static let profileManager = ProfileManager() - - // 카카오 서버에서 카카오 로그인 정보를 바탕으로 유저 이름을 받아옴 - func getKakaoUserName() async throws -> String? { - return try await withCheckedThrowingContinuation { continuation in - - // --- SDK를 통해 유저 정보를 가져옴 --- - UserApi.shared.me { ( user, error) in - if let error = error { - print("카카오 유저 정보 불러오기 실패", error) - continuation.resume(throwing: error) - // 불러온 유저 정보에서 nickname 추출하여 userName에 저장 - } else if let userName = user?.kakaoAccount?.profile?.nickname { - print("카카오 유저 정보 불러오기 성공") - continuation.resume(returning: userName) - } else { continuation.resume(returning: "사용자") } - } - } - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/ForNetwork/TMDBAPI.swift b/leehan/UMC_Megabox/UMC_Megabox/ForNetwork/TMDBAPI.swift deleted file mode 100644 index f063b53..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/ForNetwork/TMDBAPI.swift +++ /dev/null @@ -1,472 +0,0 @@ -// -// TMDBAPI.swift -// UMC_Megabox -// -// Created by 이한결 on 11/10/25. -// - -import Foundation -import Moya -import Alamofire - -enum TMDBAPI { - case loadMovieInfo -} -// 후에 API 요청이 추가되면 적절하게 BaseTargetType을 수정해야 함 - -// TargetType 프로토콜을 따르는 BaseTargetType 프로토콜 정의 -protocol BaseTargetType: TargetType {} - -// BaseTargetType 프로토콜은 아래 속성을 공통으로 가짐 -extension BaseTargetType { - // 요청을 보낼 서버의 기본 주소: TMDB 서버 주소 - var baseURL: URL { - return URL(string: "https://api.themoviedb.org/3")! - } - - // baseURL 뒤에 붙을 세부 경로 - var path: String { - return "/movie/now_playing" - } - - var method: Moya.Method { - return .get - } - - // 요청에 담을 데이터 - var task: Task { - return .requestParameters(parameters: [ - "api_key": Config.tmdbApiKey, - "language": "ko-KR", - "page": 1, - "region": "KR" - ], - encoding: URLEncoding.default) - } -} - -// BaseTargetType에서 공통으로 정의된 속성 빼고는 여기에 정의 -extension TMDBAPI: BaseTargetType { - // 지금 당장은 특별한 헤더가 필요 없으므로 - var headers: [String: String]? { - return nil - } - // 샘플 데이터 - var sampleData: Data { - let jsonString = """ - { - "dates": { - "maximum": "2023-05-03", - "minimum": "2023-03-16" - }, - "page": 1, - "results": [ - { - "adult": false, - "backdrop_path": "/iJQIbOPm81fPEGKt5BPuZmfnA54.jpg", - "genre_ids": [ - 16, - 12, - 10751, - 14, - 35 - ], - "id": 502356, - "original_language": "en", - "original_title": "The Super Mario Bros. Movie", - "overview": "While working underground to fix a water main, Brooklyn plumbers—and brothers—Mario and Luigi are transported down a mysterious pipe and wander into a magical new world. But when the brothers are separated, Mario embarks on an epic quest to find Luigi.", - "popularity": 6572.614, - "poster_path": "/qNBAXBIQlnOThrVvA6mA2B5ggV6.jpg", - "release_date": "2023-04-05", - "title": "The Super Mario Bros. Movie", - "video": false, - "vote_average": 7.5, - "vote_count": 1456 - }, - { - "adult": false, - "backdrop_path": "/nDxJJyA5giRhXx96q1sWbOUjMBI.jpg", - "genre_ids": [ - 28, - 35, - 14 - ], - "id": 594767, - "original_language": "en", - "original_title": "Shazam! Fury of the Gods", - "overview": "Billy Batson and his foster siblings, who transform into superheroes by saying \"Shazam!\", are forced to get back into action and fight the Daughters of Atlas, who they must stop from using a weapon that could destroy the world.", - "popularity": 4274.232, - "poster_path": "/2VK4d3mqqTc7LVZLnLPeRiPaJ71.jpg", - "release_date": "2023-03-15", - "title": "Shazam! Fury of the Gods", - "video": false, - "vote_average": 6.9, - "vote_count": 1231 - }, - { - "adult": false, - "backdrop_path": "/7bWxAsNPv9CXHOhZbJVlj2KxgfP.jpg", - "genre_ids": [ - 27, - 53 - ], - "id": 713704, - "original_language": "en", - "original_title": "Evil Dead Rise", - "overview": "Two sisters find an ancient vinyl that gives birth to bloodthirsty demons that run amok in a Los Angeles apartment building and thrusts them into a primal battle for survival as they face the most nightmarish version of family imaginable.", - "popularity": 1696.367, - "poster_path": "/mIBCtPvKZQlxubxKMeViO2UrP3q.jpg", - "release_date": "2023-04-12", - "title": "Evil Dead Rise", - "video": false, - "vote_average": 7, - "vote_count": 207 - }, - { - "adult": false, - "backdrop_path": "/ouB7hwclG7QI3INoYJHaZL4vOaa.jpg", - "genre_ids": [ - 16, - 10751, - 14, - 12, - 35, - 18 - ], - "id": 315162, - "original_language": "en", - "original_title": "Puss in Boots: The Last Wish", - "overview": "Puss in Boots discovers that his passion for adventure has taken its toll: He has burned through eight of his nine lives, leaving him with only one life left. Puss sets out on an epic journey to find the mythical Last Wish and restore his nine lives.", - "popularity": 1347.259, - "poster_path": "/kuf6dutpsT0vSVehic3EZIqkOBt.jpg", - "release_date": "2022-12-07", - "title": "Puss in Boots: The Last Wish", - "video": false, - "vote_average": 8.3, - "vote_count": 5331 - }, - { - "adult": false, - "backdrop_path": "/h8gHn0OzBoaefsYseUByqsmEDMY.jpg", - "genre_ids": [ - 28, - 53, - 80 - ], - "id": 603692, - "original_language": "en", - "original_title": "John Wick: Chapter 4", - "overview": "With the price on his head ever increasing, John Wick uncovers a path to defeating The High Table. But before he can earn his freedom, Wick must face off against a new enemy with powerful alliances across the globe and forces that turn old friends into foes.", - "popularity": 1320.735, - "poster_path": "/vZloFAK7NmvMGKE7VkF5UHaz0I.jpg", - "release_date": "2023-03-22", - "title": "John Wick: Chapter 4", - "video": false, - "vote_average": 8, - "vote_count": 1211 - }, - { - "adult": false, - "backdrop_path": "/a2tys4sD7xzVaogPntGsT1ypVoT.jpg", - "genre_ids": [ - 53, - 35, - 80 - ], - "id": 804150, - "original_language": "en", - "original_title": "Cocaine Bear", - "overview": "Inspired by a true story, an oddball group of cops, criminals, tourists and teens converge in a Georgia forest where a 500-pound black bear goes on a murderous rampage after unintentionally ingesting cocaine.", - "popularity": 1175.491, - "poster_path": "/gOnmaxHo0412UVr1QM5Nekv1xPi.jpg", - "release_date": "2023-02-22", - "title": "Cocaine Bear", - "video": false, - "vote_average": 6.4, - "vote_count": 878 - }, - { - "adult": false, - "backdrop_path": "/54IXMMEQKlkPXHqPExWy98UBmtE.jpg", - "genre_ids": [ - 27 - ], - "id": 1008005, - "original_language": "es", - "original_title": "La niña de la comunión", - "overview": "Spain, late 1980s. Newcomer Sara tries to fit in with the other teens in this tight-knit small town in the province of Tarragona. If only she were more like her extroverted best friend, Rebe. They go out one night at a nightclub, on the way home, they come upon a little girl holding a doll, dressed for her first communion. And that's when the nightmare begins.", - "popularity": 1154.3, - "poster_path": "/sP6AO11a7jWgsmT9T8j9EGIWAaZ.jpg", - "release_date": "2023-02-10", - "title": "The Communion Girl", - "video": false, - "vote_average": 6.5, - "vote_count": 58 - }, - { - "adult": false, - "backdrop_path": "/eSVu1FvGPy86TDo4hQbpuHx55DJ.jpg", - "genre_ids": [ - 878, - 12, - 53, - 28 - ], - "id": 700391, - "original_language": "en", - "original_title": "65", - "overview": "65 million years ago, the only 2 survivors of a spaceship from Somaris that crash-landed on Earth must fend off dinosaurs and reach the escape vessel in time before an imminent asteroid strike threatens to destroy the planet.", - "popularity": 1077.09, - "poster_path": "/rzRb63TldOKdKydCvWJM8B6EkPM.jpg", - "release_date": "2023-03-02", - "title": "65", - "video": false, - "vote_average": 6.3, - "vote_count": 763 - }, - { - "adult": false, - "backdrop_path": "/5Y5pz0NX7SZS9036I733F7uNcwK.jpg", - "genre_ids": [ - 27, - 53 - ], - "id": 758323, - "original_language": "en", - "original_title": "The Pope's Exorcist", - "overview": "Father Gabriele Amorth, Chief Exorcist of the Vatican, investigates a young boy's terrifying possession and ends up uncovering a centuries-old conspiracy the Vatican has desperately tried to keep hidden.", - "popularity": 1073.229, - "poster_path": "/9JBEPLTPSm0d1mbEcLxULjJq9Eh.jpg", - "release_date": "2023-04-05", - "title": "The Pope's Exorcist", - "video": false, - "vote_average": 6.5, - "vote_count": 143 - }, - { - "adult": false, - "backdrop_path": "/m1fgGSLK0WvRpzM1AmZu38m0Tx8.jpg", - "genre_ids": [ - 28 - ], - "id": 842945, - "original_language": "en", - "original_title": "Supercell", - "overview": "Good-hearted teenager William always lived in hope of following in his late father’s footsteps and becoming a storm chaser. His father’s legacy has now been turned into a storm-chasing tourist business, managed by the greedy and reckless Zane Rogers, who is now using William as the main attraction to lead a group of unsuspecting adventurers deep into the eye of the most dangerous supercell ever seen.", - "popularity": 942.178, - "poster_path": "/gbGHezV6yrhua0KfAgwrknSOiIY.jpg", - "release_date": "2023-03-17", - "title": "Supercell", - "video": false, - "vote_average": 6.3, - "vote_count": 125 - }, - { - "adult": false, - "backdrop_path": "/b9UCfDzwiWw7mIFsIQR9ZJUeh7q.jpg", - "genre_ids": [ - 10749, - 28, - 35 - ], - "id": 868759, - "original_language": "en", - "original_title": "Ghosted", - "overview": "Salt-of-the-earth Cole falls head over heels for enigmatic Sadie — but then makes the shocking discovery that she’s a secret agent. Before they can decide on a second date, Cole and Sadie are swept away on an international adventure to save the world.", - "popularity": 867.762, - "poster_path": "/liLN69YgoovHVgmlHJ876PKi5Yi.jpg", - "release_date": "2023-04-21", - "title": "Ghosted", - "video": false, - "vote_average": 7.3, - "vote_count": 371 - }, - { - "adult": false, - "backdrop_path": "/44immBwzhDVyjn87b3x3l9mlhAD.jpg", - "genre_ids": [ - 27, - 9648, - 53 - ], - "id": 934433, - "original_language": "en", - "original_title": "Scream VI", - "overview": "Following the latest Ghostface killings, the four survivors leave Woodsboro behind and start a fresh chapter.", - "popularity": 853.917, - "poster_path": "/wDWwtvkRRlgTiUr6TyLSMX8FCuZ.jpg", - "release_date": "2023-03-08", - "title": "Scream VI", - "video": false, - "vote_average": 7.4, - "vote_count": 706 - }, - { - "adult": false, - "backdrop_path": "/c3hl9E8E7b9opXDFVF5tSyk0ykr.jpg", - "genre_ids": [ - 16, - 35, - 10751, - 12, - 14 - ], - "id": 816904, - "original_language": "es", - "original_title": "Momias", - "overview": "Through a series of unfortunate events, three mummies end up in present-day London and embark on a wacky and hilarious journey in search of an old ring belonging to the Royal Family, stolen by ambitious archaeologist Lord Carnaby.", - "popularity": 749.77, - "poster_path": "/qVdrYN8qu7xUtsdEFeGiIVIaYd.jpg", - "release_date": "2023-01-05", - "title": "Mummies", - "video": false, - "vote_average": 7.2, - "vote_count": 220 - }, - { - "adult": false, - "backdrop_path": "/wD2kUCX1Bb6oeIb2uz7kbdfLP6k.jpg", - "genre_ids": [ - 27, - 53 - ], - "id": 980078, - "original_language": "en", - "original_title": "Winnie the Pooh: Blood and Honey", - "overview": "Christopher Robin is headed off to college and he has abandoned his old friends, Pooh and Piglet, which then leads to the duo embracing their inner monsters.", - "popularity": 690.338, - "poster_path": "/ewF3IlGscc7FjgGEPcQvZsAsgAW.jpg", - "release_date": "2023-01-27", - "title": "Winnie the Pooh: Blood and Honey", - "video": false, - "vote_average": 5.8, - "vote_count": 517 - }, - { - "adult": false, - "backdrop_path": "/dlrWhn0G3AtxYUx2D9P2bmzcsvF.jpg", - "genre_ids": [ - 878, - 27, - 35 - ], - "id": 536554, - "original_language": "en", - "original_title": "M3GAN", - "overview": "A brilliant toy company roboticist uses artificial intelligence to develop M3GAN, a life-like doll programmed to emotionally bond with her newly orphaned niece. But when the doll's programming works too well, she becomes overprotective of her new friend with terrifying results.", - "popularity": 715.958, - "poster_path": "/d9nBoowhjiiYc4FBNtQkPY7c11H.jpg", - "release_date": "2022-12-28", - "title": "M3GAN", - "video": false, - "vote_average": 7.4, - "vote_count": 2428 - }, - { - "adult": false, - "backdrop_path": "/aHcWyh0n4YbBy9gxYCDlgsNVS3M.jpg", - "genre_ids": [ - 27, - 9648, - 53 - ], - "id": 631842, - "original_language": "en", - "original_title": "Knock at the Cabin", - "overview": "While vacationing at a remote cabin, a young girl and her two fathers are taken hostage by four armed strangers who demand that the family make an unthinkable choice to avert the apocalypse. With limited access to the outside world, the family must decide what they believe before all is lost.", - "popularity": 528.208, - "poster_path": "/dm06L9pxDOL9jNSK4Cb6y139rrG.jpg", - "release_date": "2023-02-01", - "title": "Knock at the Cabin", - "video": false, - "vote_average": 6.4, - "vote_count": 1337 - }, - { - "adult": false, - "backdrop_path": "/70aVSo3fuZ94jyQ3rT64afEf8lV.jpg", - "genre_ids": [ - 16, - 12, - 35, - 10751, - 14 - ], - "id": 676710, - "original_language": "en", - "original_title": "The Amazing Maurice", - "overview": "Maurice is a streetwise ginger cat who comes up with a money-making scam by befriending a group of self-taught talking rats. When Maurice and the rodents meet a bookworm called Malicia, their little con soon goes down the drain.", - "popularity": 515.629, - "poster_path": "/ydhZeUjbzVEFclUpMhLfDZSavUY.jpg", - "release_date": "2022-12-16", - "title": "The Amazing Maurice", - "video": false, - "vote_average": 7, - "vote_count": 61 - }, - { - "adult": false, - "backdrop_path": "/zGoZB4CboMzY1z4G3nU6BWnMDB2.jpg", - "genre_ids": [ - 28, - 35, - 10749 - ], - "id": 758009, - "original_language": "en", - "original_title": "Shotgun Wedding", - "overview": "Darcy and Tom gather their families for the ultimate destination wedding but when the entire party is taken hostage, “’Til Death Do Us Part” takes on a whole new meaning in this hilarious, adrenaline-fueled adventure as Darcy and Tom must save their loved ones—if they don’t kill each other first.", - "popularity": 467.041, - "poster_path": "/t79ozwWnwekO0ADIzsFP1E5SkvR.jpg", - "release_date": "2022-12-28", - "title": "Shotgun Wedding", - "video": false, - "vote_average": 6.3, - "vote_count": 775 - }, - { - "adult": false, - "backdrop_path": "/ttXABm22Vu9MsQjDAF3Lx2nUPy0.jpg", - "genre_ids": [ - 35, - 28 - ], - "id": 1101799, - "original_language": "es", - "original_title": "Fuga de Reinas", - "overview": "When four women finally take the road trip they planned in high school, they have no idea of the things they'll bump into sometimes literally.", - "popularity": 403.116, - "poster_path": "/oUmuwUIofGsgOr05kieD3Q8ELEO.jpg", - "release_date": "2023-04-14", - "title": "Queens on the Run", - "video": false, - "vote_average": 7.2, - "vote_count": 59 - }, - { - "adult": false, - "backdrop_path": "/94TIUEhuwv8PhdIADEvSuwPljS5.jpg", - "genre_ids": [ - 10752, - 28 - ], - "id": 840326, - "original_language": "fi", - "original_title": "Sisu", - "overview": "Deep in the wilderness of Lapland, Aatami Korpi is searching for gold but after he stumbles upon Nazi patrol, a breathtaking and gold-hungry chase through the destroyed and mined Lapland wilderness begins.", - "popularity": 364.899, - "poster_path": "/dHx5yuBb05U9vNaNhIBD7jWyxPk.jpg", - "release_date": "2023-01-27", - "title": "Sisu", - "video": false, - "vote_average": 6.9, - "vote_count": 16 - } - ], - "total_pages": 87, - "total_results": 1734 - } - """ - return Data(jsonString.utf8) - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/ForNetwork/TokenInfo.swift b/leehan/UMC_Megabox/UMC_Megabox/ForNetwork/TokenInfo.swift deleted file mode 100644 index 0816f96..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/ForNetwork/TokenInfo.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// TokenInfo.swift -// UMC_Megabox -// -// Created by 이한결 on 11/2/25. -// - -import Foundation - -struct TokenInfo: Codable { - let accessToken: String - let refreshToken: String -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Models/DTO/DTO.swift b/leehan/UMC_Megabox/UMC_Megabox/Models/DTO/DTO.swift deleted file mode 100644 index 5a4a0c1..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Models/DTO/DTO.swift +++ /dev/null @@ -1,162 +0,0 @@ -// -// APIResponse.swift -// UMC_Megabox -// -// Created by 이한결 on 10/27/25. -// - -import Foundation - -struct APIResponse: Codable { - let status: String - let msg: String - let data: MoviesDTO - - enum CodingKeys: String, CodingKey { - case status = "status" - case msg = "message" - case data = "data" - } -} -extension APIResponse { - func toDomain() -> TopDomainModel { - return TopDomainModel( - status: status, - msg: msg, - data: data.toDomain() - ) - } -} - -struct MoviesDTO: Codable { - let movies: [MovieDTO] - - enum CodingKeys: String, CodingKey { - case movies = "movies" - } -} -extension MoviesDTO { - func toDomain() -> MoviesDomainModel { - return MoviesDomainModel( - movies: movies.map { $0.toDomain() } - ) - } -} - -struct MovieDTO: Codable { - let id: String - let title: String - let age: String - let schedules: [SchedulesDTO] - - enum CodingKeys: String, CodingKey { - case id = "id" - case title = "title" - case age = "age_rating" - case schedules = "schedules" - } -} -extension MovieDTO { - func toDomain() -> MovieDomainModel { - return MovieDomainModel( - id: id, - title: title, - age: Int(age) ?? 0, - schedules: schedules.map { $0.toDomain() } - ) - } -} - -struct SchedulesDTO: Codable { - let date: String? - let areas: [AreasDTO] - - enum CodingKeys: String, CodingKey { - case date = "date" - case areas = "areas" - } -} -extension SchedulesDTO { - func toDomain() -> SchedulesDomainModel { - - guard let date = date else { - return SchedulesDomainModel( - date: "undefined", - areas: areas.map { $0.toDomain() } - ) - } - return SchedulesDomainModel( - date: date, - areas: areas.map { $0.toDomain() } - ) - } -} - -struct AreasDTO: Codable { - let id: UUID = UUID() - let area: String - let items: [ItemsDTO] - - enum CodingKeys: String, CodingKey { - case area = "area" - case items = "items" - } -} -extension AreasDTO { - func toDomain() -> AreasDomainModel { - return AreasDomainModel( - id: id, - area: area, - items: items.map { $0.toDomain() } - ) - } -} - -struct ItemsDTO: Codable, Identifiable, Hashable { - let id: UUID = UUID() - let auditorium: String - let format: String - let showtimes: [ShowtimesDTO] - - enum CodingKeys: String, CodingKey { - case auditorium = "auditorium" - case format = "format" - case showtimes = "showtimes" - } -} -extension ItemsDTO { - func toDomain() -> ItemsDomainModel { - return ItemsDomainModel( - id: id, - auditorium: auditorium, - format: format, - showtimes: showtimes.map { $0.toDomain() } - ) - } -} - -struct ShowtimesDTO: Codable, Identifiable, Hashable { - let id: UUID = UUID() - let start: String - let end: String - let available: Int - let total: Int - - enum CodingKeys: String, CodingKey { - case start = "start" - case end = "end" - case available = "available" - case total = "total" - } -} -extension ShowtimesDTO { - func toDomain() -> ShowtimesDomainModel { - return ShowtimesDomainModel( - id: id, - start: start, - end: end, - available: available, - total: total - ) - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Models/DTO/NowPlayingResponseDTO.swift b/leehan/UMC_Megabox/UMC_Megabox/Models/DTO/NowPlayingResponseDTO.swift deleted file mode 100644 index a0bd15f..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Models/DTO/NowPlayingResponseDTO.swift +++ /dev/null @@ -1,71 +0,0 @@ -// -// MovieCardDTO.swift -// UMC_Megabox -// -// Created by 이한결 on 11/10/25. -// - -import Foundation - -struct NowPlayingResponseDTO: Codable { - var results: [MovieCardDTO] - - enum CodingKeys: String, CodingKey { - case results = "results" - } -} -extension NowPlayingResponseDTO { - func toDomain() -> NowPlayingResponseDomainModel { - return NowPlayingResponseDomainModel(results: results.map {$0.toDomain()} ) - } -} - -struct MovieCardDTO: Identifiable, Hashable, Codable { - var id: Int - var moviePoster: String // 영화 포스터 - var movieName: String // 영화 이름 - // var people: String // 누적 관객수 하드코딩 - - /* 포스터 클릭 시 상세화면 */ - var bigPoster: String - var subTitle: String - var explaination: String - // var smallPoster: String // 작은 포스터 하드코딩 - // var age: String // 관람 등급 하드코딩 - var date: String - - enum CodingKeys: String, CodingKey { - case id = "id" - case moviePoster = "poster_path" - case movieName = "title" - case bigPoster = "backdrop_path" - case subTitle = "original_title" - case explaination = "overview" - case date = "release_date" - } -} -extension MovieCardDTO { - // TMDB에서 제공하는 imageBaseURL - // 이 baseURL 뒤에 fetch로 받아온 이미지 데이터를 붙여서 사용함 - private var imageBaseURL: String { - return "https://image.tmdb.org/t/p/w500" - } - - func toDomain() -> MovieCardDomainModel { - // baseURL을 이용해서 포스터 URL 생성해줌 - let fullMoviePosterURL = URL(string: imageBaseURL + moviePoster) - let fullBigPosterURL = URL(string: imageBaseURL + bigPoster) - - return MovieCardDomainModel( - id: id, - moviePoster: (fullMoviePosterURL)!, // 만들어준 포스터 URL을 파싱 - movieName: movieName, - people: "1000만", // 하드코딩 - bigPoster: (fullBigPosterURL)!, // 만들어준 포스터 URL을 파싱 - subTitle: subTitle, - explaination: explaination, - smallPoster: "poster_f1_small", // 하드코딩 - age: "12세 이상 관람가", // 하드코딩 - date: date) - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Models/DomainModel/DomainModel.swift b/leehan/UMC_Megabox/UMC_Megabox/Models/DomainModel/DomainModel.swift deleted file mode 100644 index 583e968..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Models/DomainModel/DomainModel.swift +++ /dev/null @@ -1,119 +0,0 @@ -// -// DomainModel.swift -// UMC_Megabox -// -// Created by 이한결 on 10/27/25. -// - -import Foundation - -struct TopDomainModel { - let status: String - let msg: String - let data: MoviesDomainModel -} -extension TopDomainModel { - func toDTO() -> APIResponse { - return APIResponse( - status: status, - msg: msg, - data: data.toDTO() - ) - } -} - -struct MoviesDomainModel { - let movies: [MovieDomainModel] -} -extension MoviesDomainModel { - func toDTO() -> MoviesDTO { - return MoviesDTO( - movies: movies.map { $0.toDTO() } - ) - } -} - -struct MovieDomainModel { - let id: String - let title: String - let age: Int - let schedules: [SchedulesDomainModel] -} -extension MovieDomainModel { - func toDTO() -> MovieDTO { - return MovieDTO( - id: id, - title: title, - age: String(age), - schedules: schedules.map { $0.toDTO() } - ) - } -} - -struct SchedulesDomainModel { - let date: String? - let areas: [AreasDomainModel] -} -extension SchedulesDomainModel { - func toDTO() -> SchedulesDTO { - - guard let date = date else { - return SchedulesDTO( - date: "undefined", - areas: areas.map { $0.toDTO() } - ) - } - return SchedulesDTO( - date: date, - areas: areas.map { $0.toDTO() } - ) - } -} - -struct AreasDomainModel: Identifiable, Hashable { - let id: UUID - let area: String - let items: [ItemsDomainModel] -} -extension AreasDomainModel { - func toDTO() -> AreasDTO { - return AreasDTO( - area: area, - items: items.map { $0.toDTO() } - ) - } -} - -struct ItemsDomainModel: Identifiable, Hashable { - let id: UUID - let auditorium: String - let format: String - let showtimes: [ShowtimesDomainModel] -} -extension ItemsDomainModel { - func toDTO() -> ItemsDTO { - return ItemsDTO( - auditorium: auditorium, - format: format, - showtimes: showtimes.map { $0.toDTO() } - ) - } -} - -struct ShowtimesDomainModel: Identifiable, Hashable { - let id: UUID - let start: String - let end: String - let available: Int - let total: Int -} -extension ShowtimesDomainModel { - func toDTO() -> ShowtimesDTO { - return ShowtimesDTO( - start: start, - end: end, - available: available, - total: total - ) - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Models/DomainModel/NowPlayingResponseDomainModel.swift b/leehan/UMC_Megabox/UMC_Megabox/Models/DomainModel/NowPlayingResponseDomainModel.swift deleted file mode 100644 index de0a333..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Models/DomainModel/NowPlayingResponseDomainModel.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// MovieCardDomainModel.swift -// UMC_Megabox -// -// Created by 이한결 on 11/10/25. -// - -import Foundation - -struct NowPlayingResponseDomainModel { - let results: [MovieCardDomainModel] -} - - -struct MovieCardDomainModel: Identifiable, Hashable { - var id: Int - - /* 가로 스크롤에서 사용 */ - var moviePoster: URL? // 영화 포스터 - URL 객체로 받음: KingFisher로 처리 - var movieName: String // 영화 이름 - var people: String // 누적관객수 하드코딩 - - /* 영화 상세 정보 탭 */ - var bigPoster: URL? // - URL 객체로 받음: KingFisher로 처리 - var subTitle: String - var explaination: String - var smallPoster: String // 작은 포스터 하드코딩 - var age: String // 관람 등급 하드코딩 - var date: String -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Models/NormalModels/BookingModel.swift b/leehan/UMC_Megabox/UMC_Megabox/Models/NormalModels/BookingModel.swift deleted file mode 100644 index 11c223e..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Models/NormalModels/BookingModel.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// BookingModels.swift -// UMC_Megabox -// -// Created by 이한결 on 10/5/25. -// - -import Foundation - - -struct Movie: Identifiable, Hashable { - let id: String - let name: String - let imageName: String - let ageRating: Int -} - -struct Theater: Identifiable, Hashable { - let id: UUID = UUID() - let name: String -} - -struct Showtime: Identifiable, Hashable { - let id: String - let movieId: String - let theaterId: String - let time: String - let totalSeats: Int - let availableSeats: Int -} - - diff --git a/leehan/UMC_Megabox/UMC_Megabox/Models/NormalModels/LoginModel.swift b/leehan/UMC_Megabox/UMC_Megabox/Models/NormalModels/LoginModel.swift deleted file mode 100644 index 5e4ffaa..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Models/NormalModels/LoginModel.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// LoginModel.swift -// UMC_Megabox -// -// Created by OOng E on 9/22/25. -// - -import SwiftUI - -struct LoginModel { - var id: String - var pwd: String -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Models/NormalModels/MovieBoardModel.swift b/leehan/UMC_Megabox/UMC_Megabox/Models/NormalModels/MovieBoardModel.swift deleted file mode 100644 index 84d1922..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Models/NormalModels/MovieBoardModel.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// MovieBoardModel.swift -// UMC_Megabox -// -// Created by 이한결 on 9/30/25. -// - -import SwiftUI -import Foundation - -struct MovieBoard: Identifiable { - var id = UUID() - var MovieImage: Image - var Title: String - var SubTitle: String -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Models/NormalModels/MovieBookingModel.swift b/leehan/UMC_Megabox/UMC_Megabox/Models/NormalModels/MovieBookingModel.swift deleted file mode 100644 index b9b46ce..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Models/NormalModels/MovieBookingModel.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// MovieBookingModel.swift -// UMC_Megabox -// -// Created by 이한결 on 10/5/25. -// - -import SwiftUI - -struct MovieBookingModel: Identifiable { - var id = UUID() - var posterName: String -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Navigation/NavigationRouter.swift b/leehan/UMC_Megabox/UMC_Megabox/Navigation/NavigationRouter.swift deleted file mode 100644 index ad7137f..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Navigation/NavigationRouter.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// NavigationRouter.swift -// UMC_Megabox -// -// Created by 이한결 on 10/5/25. -// - -import SwiftUI - -@Observable -class NavigationRouter { - // NavigationStack과 바인딩될 경로. NavigationPath는 다양한 타입을 담을 수 있음 - var path = NavigationPath() - - // 특정 경로로 이동하는 메서드 - func push(_ route: Route) { - path.append(route) - } - - // 이전 화면으로 돌아가는 메서드 - func pop() { - if !path.isEmpty { - path.removeLast() - } - } - - // 가장 처음 화면(루트)으로 돌아가는 메서드 - func navigateToRoot() { - path = NavigationPath() - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Navigation/RouteEnum.swift b/leehan/UMC_Megabox/UMC_Megabox/Navigation/RouteEnum.swift deleted file mode 100644 index fccf832..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Navigation/RouteEnum.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// NavigationRoute.swift -// UMC_Megabox -// -// Created by 이한결 on 10/5/25. -// - -import SwiftUI - -// 앱에서 이동 가능한 모든 경로를 정의 -enum Route: Hashable { - - case login - - case home - case detail(movieCard: MovieCardDomainModel) - - case store - - case booking - - case userInfo -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/AccentColor.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/advertisement_umc.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/advertisement_umc.imageset/Contents.json deleted file mode 100644 index 9104dee..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/advertisement_umc.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "홍보 이미지.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/advertisement_umc.imageset/\355\231\215\353\263\264 \354\235\264\353\257\270\354\247\200.pdf" "b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/advertisement_umc.imageset/\355\231\215\353\263\264 \354\235\264\353\257\270\354\247\200.pdf" deleted file mode 100644 index 71436a3..0000000 Binary files "a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/advertisement_umc.imageset/\355\231\215\353\263\264 \354\235\264\353\257\270\354\247\200.pdf" and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_apple.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_apple.imageset/Contents.json deleted file mode 100644 index 798c333..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_apple.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=Apple.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_apple.imageset/Property 1=Apple.pdf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_apple.imageset/Property 1=Apple.pdf deleted file mode 100644 index 486a661..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_apple.imageset/Property 1=Apple.pdf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_kakao.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_kakao.imageset/Contents.json deleted file mode 100644 index 7c5a77c..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_kakao.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=Kakao.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_kakao.imageset/Property 1=Kakao.pdf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_kakao.imageset/Property 1=Kakao.pdf deleted file mode 100644 index e89dea6..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_kakao.imageset/Property 1=Kakao.pdf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_mobile_order.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_mobile_order.imageset/Contents.json deleted file mode 100644 index 0939947..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_mobile_order.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "free-icon-cinema-2809591.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_mobile_order.imageset/free-icon-cinema-2809591.pdf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_mobile_order.imageset/free-icon-cinema-2809591.pdf deleted file mode 100644 index 4cd3b2e..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_mobile_order.imageset/free-icon-cinema-2809591.pdf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_movie.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_movie.imageset/Contents.json deleted file mode 100644 index a8f1c68..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_movie.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "film-reel 1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_movie.imageset/film-reel 1.pdf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_movie.imageset/film-reel 1.pdf deleted file mode 100644 index e51eb6a..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_movie.imageset/film-reel 1.pdf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_naver.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_naver.imageset/Contents.json deleted file mode 100644 index e853d06..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_naver.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=Naver.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_naver.imageset/Property 1=Naver.pdf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_naver.imageset/Property 1=Naver.pdf deleted file mode 100644 index c482b4e..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_naver.imageset/Property 1=Naver.pdf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_special.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_special.imageset/Contents.json deleted file mode 100644 index 5e0f459..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_special.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "free-icon-sofa-6087271.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_special.imageset/free-icon-sofa-6087271.pdf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_special.imageset/free-icon-sofa-6087271.pdf deleted file mode 100644 index 4392a6a..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_special.imageset/free-icon-sofa-6087271.pdf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_theater.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_theater.imageset/Contents.json deleted file mode 100644 index 00ec9fa..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_theater.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "free-icon-pin-map-8358838.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_theater.imageset/free-icon-pin-map-8358838.pdf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_theater.imageset/free-icon-pin-map-8358838.pdf deleted file mode 100644 index ec3e111..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/icon_theater.imageset/free-icon-pin-map-8358838.pdf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/image_morefunfeed.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/image_morefunfeed.imageset/Contents.json deleted file mode 100644 index 6a452fc..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/image_morefunfeed.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "image 1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/image_morefunfeed.imageset/image 1.pdf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/image_morefunfeed.imageset/image 1.pdf deleted file mode 100644 index c3771b4..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/image_morefunfeed.imageset/image 1.pdf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/image_movieboard1.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/image_movieboard1.imageset/Contents.json deleted file mode 100644 index dc4f61a..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/image_movieboard1.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "image 2.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/image_movieboard1.imageset/image 2.pdf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/image_movieboard1.imageset/image 2.pdf deleted file mode 100644 index 93b04e0..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/image_movieboard1.imageset/image 2.pdf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/image_movieboard2.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/image_movieboard2.imageset/Contents.json deleted file mode 100644 index dc4f61a..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/image_movieboard2.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "image 2.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/image_movieboard2.imageset/image 2.pdf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/image_movieboard2.imageset/image 2.pdf deleted file mode 100644 index 09fef73..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/image_movieboard2.imageset/image 2.pdf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/logo_megabox.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/logo_megabox.imageset/Contents.json deleted file mode 100644 index 0de0d63..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/logo_megabox.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "meboxLogo 1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/logo_megabox.imageset/meboxLogo 1.pdf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/logo_megabox.imageset/meboxLogo 1.pdf deleted file mode 100644 index 2215acb..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/logo_megabox.imageset/meboxLogo 1.pdf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/logo_megabox2.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/logo_megabox2.imageset/Contents.json deleted file mode 100644 index 0de0d63..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/logo_megabox2.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "meboxLogo 1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/logo_megabox2.imageset/meboxLogo 1.pdf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/logo_megabox2.imageset/meboxLogo 1.pdf deleted file mode 100644 index 5032680..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/logo_megabox2.imageset/meboxLogo 1.pdf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_F1.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_F1.imageset/Contents.json deleted file mode 100644 index d6f4eb2..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_F1.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=f1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_F1.imageset/Property 1=f1.pdf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_F1.imageset/Property 1=f1.pdf deleted file mode 100644 index 9323f73..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_F1.imageset/Property 1=f1.pdf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_boss.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_boss.imageset/Contents.json deleted file mode 100644 index c63afd9..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_boss.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "image 12.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_boss.imageset/image 12.pdf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_boss.imageset/image 12.pdf deleted file mode 100644 index 35420c0..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_boss.imageset/image 12.pdf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_f1_big.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_f1_big.imageset/Contents.json deleted file mode 100644 index 4cef63a..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_f1_big.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "상단 영화 포스터.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_f1_big.imageset/\354\203\201\353\213\250 \354\230\201\355\231\224 \355\217\254\354\212\244\355\204\260.pdf" "b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_f1_big.imageset/\354\203\201\353\213\250 \354\230\201\355\231\224 \355\217\254\354\212\244\355\204\260.pdf" deleted file mode 100644 index a3f5b43..0000000 Binary files "a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_f1_big.imageset/\354\203\201\353\213\250 \354\230\201\355\231\224 \355\217\254\354\212\244\355\204\260.pdf" and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_f1_small.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_f1_small.imageset/Contents.json deleted file mode 100644 index dc40783..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_f1_small.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "f1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_f1_small.imageset/f1.pdf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_f1_small.imageset/f1.pdf deleted file mode 100644 index 99501fe..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_f1_small.imageset/f1.pdf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_face.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_face.imageset/Contents.json deleted file mode 100644 index 272357e..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_face.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=얼굴.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_face.imageset/Property 1=\354\226\274\352\265\264.pdf" "b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_face.imageset/Property 1=\354\226\274\352\265\264.pdf" deleted file mode 100644 index d67a1ce..0000000 Binary files "a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_face.imageset/Property 1=\354\226\274\352\265\264.pdf" and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_mononoke.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_mononoke.imageset/Contents.json deleted file mode 100644 index de66aed..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_mononoke.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=모노노케 히메.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_mononoke.imageset/Property 1=\353\252\250\353\205\270\353\205\270\354\274\200 \355\236\210\353\251\224.pdf" "b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_mononoke.imageset/Property 1=\353\252\250\353\205\270\353\205\270\354\274\200 \355\236\210\353\251\224.pdf" deleted file mode 100644 index b2b4189..0000000 Binary files "a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_mononoke.imageset/Property 1=\353\252\250\353\205\270\353\205\270\354\274\200 \355\236\210\353\251\224.pdf" and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_muhanseong.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_muhanseong.imageset/Contents.json deleted file mode 100644 index cae23d5..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_muhanseong.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=무한성.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_muhanseong.imageset/Property 1=\353\254\264\355\225\234\354\204\261.pdf" "b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_muhanseong.imageset/Property 1=\353\254\264\355\225\234\354\204\261.pdf" deleted file mode 100644 index b25029a..0000000 Binary files "a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_muhanseong.imageset/Property 1=\353\254\264\355\225\234\354\204\261.pdf" and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_no_choice.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_no_choice.imageset/Contents.json deleted file mode 100644 index 2b50739..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_no_choice.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=어쩔수가 없다.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_no_choice.imageset/Property 1=\354\226\264\354\251\224\354\210\230\352\260\200 \354\227\206\353\213\244.pdf" "b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_no_choice.imageset/Property 1=\354\226\264\354\251\224\354\210\230\352\260\200 \354\227\206\353\213\244.pdf" deleted file mode 100644 index 13624c5..0000000 Binary files "a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_no_choice.imageset/Property 1=\354\226\264\354\251\224\354\210\230\352\260\200 \354\227\206\353\213\244.pdf" and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_the_roses.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_the_roses.imageset/Contents.json deleted file mode 100644 index b301cb1..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_the_roses.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "image 13.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_the_roses.imageset/image 13.pdf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_the_roses.imageset/image 13.pdf deleted file mode 100644 index 435c6cc..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_the_roses.imageset/image 13.pdf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_yadang.imageset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_yadang.imageset/Contents.json deleted file mode 100644 index c63afd9..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_yadang.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "image 12.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_yadang.imageset/image 12.pdf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_yadang.imageset/image 12.pdf deleted file mode 100644 index 5553146..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Assets.xcassets/poster_yadang.imageset/image 12.pdf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/black.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/black.colorset/Contents.json deleted file mode 100644 index be9d677..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/black.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0x00", - "red" : "0x00" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0x00", - "red" : "0x00" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue00.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue00.colorset/Contents.json deleted file mode 100644 index e0075b9..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue00.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFA", - "green" : "0xF7", - "red" : "0xF3" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFA", - "green" : "0xF7", - "red" : "0xF3" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue01.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue01.colorset/Contents.json deleted file mode 100644 index 83e57dc..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue01.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF7", - "green" : "0xF2", - "red" : "0xED" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF7", - "green" : "0xF2", - "red" : "0xED" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue02.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue02.colorset/Contents.json deleted file mode 100644 index c1c58df..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue02.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEF", - "green" : "0xE5", - "red" : "0xDA" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEF", - "green" : "0xE5", - "red" : "0xDA" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue03.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue03.colorset/Contents.json deleted file mode 100644 index a586a7e..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue03.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xCC", - "green" : "0xAA", - "red" : "0x88" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xCC", - "green" : "0xAA", - "red" : "0x88" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue04.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue04.colorset/Contents.json deleted file mode 100644 index 497d343..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue04.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xB8", - "green" : "0x99", - "red" : "0x7A" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xB8", - "green" : "0x99", - "red" : "0x7A" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue05.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue05.colorset/Contents.json deleted file mode 100644 index 8772f8e..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue05.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA3", - "green" : "0x88", - "red" : "0x6D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA3", - "green" : "0x88", - "red" : "0x6D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue06.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue06.colorset/Contents.json deleted file mode 100644 index f2bb34c..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue06.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x99", - "green" : "0x80", - "red" : "0x66" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x99", - "green" : "0x80", - "red" : "0x66" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue07.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue07.colorset/Contents.json deleted file mode 100644 index e2d0333..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue07.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x7A", - "green" : "0x66", - "red" : "0x52" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x7A", - "green" : "0x66", - "red" : "0x52" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue08.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue08.colorset/Contents.json deleted file mode 100644 index a8fe629..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue08.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5C", - "green" : "0x4C", - "red" : "0x3D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5C", - "green" : "0x4C", - "red" : "0x3D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue09.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue09.colorset/Contents.json deleted file mode 100644 index be7f767..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/blue09.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x47", - "green" : "0x3B", - "red" : "0x30" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x47", - "green" : "0x3B", - "red" : "0x30" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray00.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray00.colorset/Contents.json deleted file mode 100644 index d2e4805..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray00.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF2", - "green" : "0xF2", - "red" : "0xF2" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF2", - "green" : "0xF2", - "red" : "0xF2" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray01.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray01.colorset/Contents.json deleted file mode 100644 index 771d19d..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray01.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEB", - "green" : "0xEB", - "red" : "0xEB" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEB", - "green" : "0xEB", - "red" : "0xEB" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray02.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray02.colorset/Contents.json deleted file mode 100644 index 68cea4f..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray02.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD5", - "green" : "0xD5", - "red" : "0xD5" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD5", - "green" : "0xD5", - "red" : "0xD5" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray03.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray03.colorset/Contents.json deleted file mode 100644 index 6676967..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray03.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x78", - "green" : "0x78", - "red" : "0x78" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x78", - "green" : "0x78", - "red" : "0x78" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray04.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray04.colorset/Contents.json deleted file mode 100644 index 5a493e5..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray04.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x6C", - "green" : "0x6C", - "red" : "0x6C" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x6C", - "green" : "0x6C", - "red" : "0x6C" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray05.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray05.colorset/Contents.json deleted file mode 100644 index 7e45b56..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray05.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x60", - "green" : "0x60", - "red" : "0x60" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x60", - "green" : "0x60", - "red" : "0x60" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray06.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray06.colorset/Contents.json deleted file mode 100644 index 3db5e58..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray06.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5A", - "green" : "0x5A", - "red" : "0x5A" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5A", - "green" : "0x5A", - "red" : "0x5A" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray07.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray07.colorset/Contents.json deleted file mode 100644 index 3f9d5b5..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray07.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x48", - "green" : "0x48", - "red" : "0x48" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x48", - "green" : "0x48", - "red" : "0x48" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray08.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray08.colorset/Contents.json deleted file mode 100644 index 85ca7a9..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray08.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x36", - "green" : "0x36", - "red" : "0x36" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x36", - "green" : "0x36", - "red" : "0x36" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray09.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray09.colorset/Contents.json deleted file mode 100644 index 85730c1..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/gray09.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x2A", - "green" : "0x2A", - "red" : "0x2A" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x2A", - "green" : "0x2A", - "red" : "0x2A" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple00.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple00.colorset/Contents.json deleted file mode 100644 index a56e9a7..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple00.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFB", - "green" : "0xE7", - "red" : "0xF0" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFB", - "green" : "0xE7", - "red" : "0xF0" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple01.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple01.colorset/Contents.json deleted file mode 100644 index 054d393..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple01.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF9", - "green" : "0xDB", - "red" : "0xE8" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF9", - "green" : "0xDB", - "red" : "0xE8" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple02.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple02.colorset/Contents.json deleted file mode 100644 index 1e7b4e7..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple02.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF3", - "green" : "0xB4", - "red" : "0xCF" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF3", - "green" : "0xB4", - "red" : "0xCF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple03.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple03.colorset/Contents.json deleted file mode 100644 index 4029bef..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple03.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD8", - "green" : "0x0E", - "red" : "0x65" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD8", - "green" : "0x0E", - "red" : "0x65" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple04.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple04.colorset/Contents.json deleted file mode 100644 index 45b8d3c..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple04.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xC2", - "green" : "0x0D", - "red" : "0x5B" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xC2", - "green" : "0x0D", - "red" : "0x5B" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple05.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple05.colorset/Contents.json deleted file mode 100644 index 2f6c7ed..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple05.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xAD", - "green" : "0x0B", - "red" : "0x51" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xAD", - "green" : "0x0B", - "red" : "0x51" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple06.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple06.colorset/Contents.json deleted file mode 100644 index ed745b4..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple06.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA2", - "green" : "0x0B", - "red" : "0x4C" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA2", - "green" : "0x0B", - "red" : "0x4C" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple07.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple07.colorset/Contents.json deleted file mode 100644 index f753c3d..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple07.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x82", - "green" : "0x08", - "red" : "0x3D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x82", - "green" : "0x08", - "red" : "0x3D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple08.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple08.colorset/Contents.json deleted file mode 100644 index 9490850..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple08.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x61", - "green" : "0x06", - "red" : "0x2D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x61", - "green" : "0x06", - "red" : "0x2D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple09.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple09.colorset/Contents.json deleted file mode 100644 index 333e234..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/purple09.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x4C", - "green" : "0x05", - "red" : "0x23" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x4C", - "green" : "0x05", - "red" : "0x23" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/tag.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/tag.colorset/Contents.json deleted file mode 100644 index bdcc4fc..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/tag.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD2", - "green" : "0xCE", - "red" : "0x48" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD2", - "green" : "0xCE", - "red" : "0x48" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/white.colorset/Contents.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/white.colorset/Contents.json deleted file mode 100644 index 22c4bb0..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Colors.xcassets/white.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "1.000", - "green" : "1.000", - "red" : "1.000" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "1.000", - "green" : "1.000", - "red" : "1.000" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Config.swift b/leehan/UMC_Megabox/UMC_Megabox/Resources/Config.swift deleted file mode 100644 index b188d22..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Config.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// Config.swift -// UMC_Megabox -// -// Created by 이한결 on 11/4/25. -// - -import Foundation - -enum Config { - private static let infoDictionary: [String: Any] = { - guard let dict = Bundle.main.infoDictionary else { - fatalError("Plist 없음") - } - return dict - }() - - static let nativeAppKey: String = { - guard let baseURL = Config.infoDictionary["NATIVE_APP_KEY"] as? String else { - fatalError() - } - return baseURL - }() - - static let tmdbApiKey: String = { - guard let apiKey = Config.infoDictionary["API_KEY"] as? String else { - fatalError() - } - return apiKey - }() -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Fonts_enum.swift b/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Fonts_enum.swift deleted file mode 100644 index c9e47b6..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Fonts_enum.swift +++ /dev/null @@ -1,88 +0,0 @@ -// -// Fonts_enum.swift -// UMC_Megabox -// -// Created by OOng E on 9/16/25. -// - -import Foundation -import SwiftUI - -extension Font { - enum Pretend { - case extraBold - case bold - case semibold - case medium - case regular - case light - case extraLight - case thin - - var value: String { - switch self { - case .extraBold: - return "Pretendard-ExtraBold" - case .bold: - return "Pretendard-Bold" - case .semibold: - return "Pretendard-SemiBold" - case .medium: - return "Pretendard-Medium" - case .regular: - return "Pretendard-Regular" - case .light: - return "Pretendard-Light" - case .extraLight: - return "Pretendard-ExtraLight" - case .thin: - return "Pretendard-Thin" - } - } - } - - static func pretend(type: Pretend, size: CGFloat) -> Font { - return .custom(type.value, size: size) - } - - static func PretendardBold(size: CGFloat) -> Font { - return .pretend(type: .bold, size: size) - } - - static func PretendardMedium(size: CGFloat) -> Font { - return .pretend(type: .medium, size: size) - } - - static func PretendardExtraBold(size: CGFloat) -> Font { - return .pretend(type: .extraBold, size: size) - } - - static func PretendardRegular(size: CGFloat) -> Font { - return .pretend(type: .regular, size: size) - } - - static func PretendardSemiBold(size: CGFloat) -> Font { - return .pretend(type: .semibold, size: size) - } - - static func PretendardLight(size: CGFloat) -> Font { - return .pretend(type: .medium, size: size) - } - - static func PretendardExtraLight(size: CGFloat) -> Font { - return .pretend(type: .extraLight, size: size) - } - - static func PretendardThin(size: CGFloat) -> Font { - return .pretend(type: .thin, size: size) - } - - - /* - 나중에 사용할 때에는 이렇게 씀 - - Text("Hello, SwiftUI!") - .font(.PretendardMedium(size: 16)) - - */ -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-Black.otf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-Black.otf deleted file mode 100644 index a0d849e..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-Black.otf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-Bold.otf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-Bold.otf deleted file mode 100644 index 8e5e30a..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-Bold.otf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-ExtraBold.otf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-ExtraBold.otf deleted file mode 100644 index 388f3ca..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-ExtraBold.otf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-ExtraLight.otf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-ExtraLight.otf deleted file mode 100644 index 40c8b69..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-ExtraLight.otf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-Light.otf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-Light.otf deleted file mode 100644 index 228679e..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-Light.otf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-Medium.otf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-Medium.otf deleted file mode 100644 index 0575069..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-Medium.otf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-Regular.otf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-Regular.otf deleted file mode 100644 index 08bf4cf..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-Regular.otf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-SemiBold.otf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-SemiBold.otf deleted file mode 100644 index e7e36ab..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-SemiBold.otf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-Thin.otf b/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-Thin.otf deleted file mode 100644 index 77e792d..0000000 Binary files a/leehan/UMC_Megabox/UMC_Megabox/Resources/Font/Pretendard-Thin.otf and /dev/null differ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Resources/MovieSchedule.json b/leehan/UMC_Megabox/UMC_Megabox/Resources/MovieSchedule.json deleted file mode 100644 index 6d2c23d..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Resources/MovieSchedule.json +++ /dev/null @@ -1,385 +0,0 @@ -{ - "status": "success", - "message": "Showtimes fetched successfully", - "data": { - "movies": [ - { - "id": "m-001", - "title": "어쩔수가없다", - "age_rating": "15", - "schedules": [ - { - "date": "2025-11-03", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "크리클라이너 1관", - "format": "2D", - "showtimes": [ - { "start": "11:30", "end": "13:58", "available": 109, "total": 116 }, - { "start": "14:20", "end": "16:48", "available": 19, "total": 116 }, - { "start": "17:05", "end": "19:28", "available": 1, "total": 116 }, - { "start": "19:45", "end": "22:02", "available": 100, "total": 116 }, - { "start": "22:20", "end": "00:04", "available": 116, "total": 116 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "BTS관 (7층 1관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "09:30", "end": "11:50", "available": 75, "total": 116 }, - { "start": "12:00", "end": "14:26", "available": 102, "total": 116 }, - { "start": "14:45", "end": "17:04", "available": 88, "total": 116 } - ] - }, - { - "auditorium": "BTS관 (9층 2관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "11:30", "end": "13:58", "available": 34, "total": 116 }, - { "start": "14:10", "end": "16:32", "available": 100, "total": 116 }, - { "start": "16:50", "end": "19:00", "available": 13, "total": 116 }, - { "start": "19:20", "end": "21:40", "available": 92, "total": 116 } - ] - } - ] - } - ] - }, - { - "date": "2025-11-04", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "크리클라이너 1관", - "format": "2D", - "showtimes": [ - { "start": "10:30", "end": "12:58", "available": 112, "total": 116 }, - { "start": "13:40", "end": "16:08", "available": 54, "total": 116 }, - { "start": "16:20", "end": "18:48", "available": 22, "total": 116 }, - { "start": "19:30", "end": "21:58", "available": 97, "total": 116 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "BTS관 (7층 1관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "09:50", "end": "12:10", "available": 81, "total": 116 }, - { "start": "12:30", "end": "14:56", "available": 99, "total": 116 }, - { "start": "15:20", "end": "17:39", "available": 61, "total": 116 } - ] - }, - { - "auditorium": "BTS관 (9층 2관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "11:10", "end": "13:38", "available": 45, "total": 116 }, - { "start": "14:00", "end": "16:22", "available": 88, "total": 116 }, - { "start": "16:40", "end": "18:58", "available": 24, "total": 116 }, - { "start": "19:10", "end": "21:30", "available": 90, "total": 116 } - ] - } - ] - } - ] - }, - { - "date": "2025-11-05", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "크리클라이너 1관", - "format": "2D", - "showtimes": [ - { "start": "11:00", "end": "13:28", "available": 106, "total": 116 }, - { "start": "13:50", "end": "16:18", "available": 33, "total": 116 }, - { "start": "16:40", "end": "19:08", "available": 5, "total": 116 }, - { "start": "19:20", "end": "21:48", "available": 84, "total": 116 }, - { "start": "22:10", "end": "00:34", "available": 116, "total": 116 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "BTS관 (7층 1관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "10:10", "end": "12:30", "available": 72, "total": 116 }, - { "start": "12:50", "end": "15:16", "available": 104, "total": 116 }, - { "start": "15:40", "end": "18:00", "available": 76, "total": 116 } - ] - }, - { - "auditorium": "BTS관 (9층 2관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "11:40", "end": "14:08", "available": 29, "total": 116 }, - { "start": "14:20", "end": "16:42", "available": 93, "total": 116 }, - { "start": "17:10", "end": "19:30", "available": 18, "total": 116 }, - { "start": "19:40", "end": "22:00", "available": 87, "total": 116 } - ] - } - ] - } - ] - } - ] - }, - { - "id": "m-002", - "title": "F1 더 무비", - "age_rating": "12", - "schedules": [ - { - "date": "2025-11-03", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "IMAX 1관", - "format": "IMAX", - "showtimes": [ - { "start": "10:00", "end": "12:15", "available": 45, "total": 50 }, - { "start": "13:30", "end": "15:45", "available": 12, "total": 50 }, - { "start": "17:00", "end": "19:15", "available": 8, "total": 50 }, - { "start": "20:30", "end": "22:45", "available": 35, "total": 50 } - ] - }, - { - "auditorium": "4DX 2관", - "format": "4DX", - "showtimes": [ - { "start": "11:15", "end": "13:30", "available": 28, "total": 40 }, - { "start": "15:45", "end": "18:00", "available": 5, "total": 40 }, - { "start": "19:15", "end": "21:30", "available": 22, "total": 40 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "IMAX 3관", - "format": "IMAX", - "showtimes": [ - { "start": "09:45", "end": "12:00", "available": 38, "total": 50 }, - { "start": "13:15", "end": "15:30", "available": 15, "total": 50 }, - { "start": "16:45", "end": "19:00", "available": 3, "total": 50 }, - { "start": "20:15", "end": "22:30", "available": 42, "total": 50 } - ] - } - ] - } - ] - }, - { - "date": "2025-11-04", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "IMAX 1관", - "format": "IMAX", - "showtimes": [ - { "start": "10:30", "end": "12:45", "available": 48, "total": 50 }, - { "start": "14:00", "end": "16:15", "available": 25, "total": 50 }, - { "start": "17:30", "end": "19:45", "available": 18, "total": 50 }, - { "start": "21:00", "end": "23:15", "available": 41, "total": 50 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "IMAX 3관", - "format": "IMAX", - "showtimes": [ - { "start": "10:00", "end": "12:15", "available": 33, "total": 50 }, - { "start": "13:30", "end": "15:45", "available": 7, "total": 50 }, - { "start": "17:00", "end": "19:15", "available": 12, "total": 50 }, - { "start": "20:30", "end": "22:45", "available": 39, "total": 50 } - ] - } - ] - } - ] - }, - { - "date": "2025-11-05", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "IMAX 1관", - "format": "IMAX", - "showtimes": [ - { "start": "09:30", "end": "11:45", "available": 42, "total": 50 }, - { "start": "12:45", "end": "15:00", "available": 18, "total": 50 }, - { "start": "15:30", "end": "17:45", "available": 6, "total": 50 }, - { "start": "18:15", "end": "20:30", "available": 29, "total": 50 }, - { "start": "21:00", "end": "23:15", "available": 44, "total": 50 } - ] - }, - { - "auditorium": "4DX 2관", - "format": "4DX", - "showtimes": [ - { "start": "10:30", "end": "12:45", "available": 15, "total": 40 }, - { "start": "14:00", "end": "16:15", "available": 3, "total": 40 }, - { "start": "17:30", "end": "19:45", "available": 1, "total": 40 }, - { "start": "20:00", "end": "22:15", "available": 25, "total": 40 } - ] - } - ] - } - ] - } - ] - }, - { - "id": "m-003", - "title": "귀멸의 칼날: 무한성", - "age_rating": "15", - "schedules": [ - { - "date": "2025-11-03", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:30", "end": "12:20", "available": 85, "total": 120 }, - { "start": "13:00", "end": "15:50", "available": 23, "total": 120 }, - { "start": "16:30", "end": "19:20", "available": 2, "total": 120 }, - { "start": "20:00", "end": "22:50", "available": 78, "total": 120 }, - { "start": "23:30", "end": "02:20", "available": 95, "total": 120 } - ] - }, - { - "auditorium": "4DX 3관", - "format": "4DX", - "showtimes": [ - { "start": "10:45", "end": "13:35", "available": 15, "total": 40 }, - { "start": "14:15", "end": "17:05", "available": 4, "total": 40 }, - { "start": "17:45", "end": "20:35", "available": 1, "total": 40 }, - { "start": "21:15", "end": "00:05", "available": 28, "total": 40 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:00", "end": "11:50", "available": 67, "total": 120 }, - { "start": "12:30", "end": "15:20", "available": 19, "total": 120 }, - { "start": "16:00", "end": "18:50", "available": 5, "total": 120 }, - { "start": "19:30", "end": "22:20", "available": 89, "total": 120 } - ] - }, - { - "auditorium": "Dolby Cinema 4관", - "format": "Dolby", - "showtimes": [ - { "start": "11:00", "end": "13:50", "available": 22, "total": 60 }, - { "start": "14:30", "end": "17:20", "available": 8, "total": 60 }, - { "start": "18:00", "end": "20:50", "available": 3, "total": 60 }, - { "start": "21:30", "end": "00:20", "available": 45, "total": 60 } - ] - } - ] - } - ] - }, - { - "date": "2025-11-04", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:45", "end": "12:35", "available": 92, "total": 120 }, - { "start": "13:15", "end": "16:05", "available": 31, "total": 120 }, - { "start": "16:45", "end": "19:35", "available": 7, "total": 120 }, - { "start": "20:15", "end": "23:05", "available": 84, "total": 120 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:30", "end": "12:20", "available": 74, "total": 120 }, - { "start": "13:00", "end": "15:50", "available": 26, "total": 120 }, - { "start": "16:30", "end": "19:20", "available": 11, "total": 120 }, - { "start": "20:00", "end": "22:50", "available": 96, "total": 120 } - ] - } - ] - } - ] - }, - { - "date": "2025-11-05", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "돌비시네마", - "format": "2D", - "showtimes": [ - { "start": "09:15", "end": "12:05", "available": 88, "total": 120 }, - { "start": "12:45", "end": "15:35", "available": 25, "total": 120 }, - { "start": "16:15", "end": "19:05", "available": 4, "total": 120 }, - { "start": "19:45", "end": "22:35", "available": 81, "total": 120 }, - { "start": "23:15", "end": "02:05", "available": 98, "total": 120 } - ] - } - ] - } - ] - } - ] - } - ] - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/UMC_MegaboxApp.swift b/leehan/UMC_Megabox/UMC_Megabox/UMC_MegaboxApp.swift deleted file mode 100644 index 6b9ee21..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/UMC_MegaboxApp.swift +++ /dev/null @@ -1,51 +0,0 @@ -// -// UMC_MegaboxApp.swift -// UMC_Megabox -// -// Created by OOng E on 9/16/25. -// - -import SwiftUI -import KakaoSDKCommon -import KakaoSDKAuth - -@main -struct UMC_MegaboxApp: App { - - init() { - let nativeAppKey = Config.nativeAppKey - KakaoSDK.initSDK(appKey: nativeAppKey) // SDK 초기화 - } - - var body: some Scene { - - // 인증 관리자 인스턴스 - @State var authManager = AuthorizationManager() - @State var loginViewModel = LoginViewModel() - - - - WindowGroup { - Group { - - // 로그인 상태에 따라 보여주는 뷰를 결정 - if authManager.isLoggedIn { - // 로그인이 되었다면 MainTabView를 보여줌 - MainTabView() - .environment(authManager) - } else { - // 로그인이 안 되었다면 LoginView를 보여줌 - LoginView() - .environment(authManager) - .environment(loginViewModel) - } - - // URL 감지 - }.onOpenURL { url in // url에 URL이 통째로 들어옴 - if (AuthApi.isKakaoTalkLoginUrl(url)) { // 카카오 로그인 url이 맞는지 확인 - _ = AuthController.handleOpenUrl(url: url) // SDK에 URL을 넣어줌 - } - } - } - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/ViewModels/BookingViewModel.swift b/leehan/UMC_Megabox/UMC_Megabox/ViewModels/BookingViewModel.swift deleted file mode 100644 index c73078d..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/ViewModels/BookingViewModel.swift +++ /dev/null @@ -1,245 +0,0 @@ -// -// BookingViewModel.swift -// UMC_Megabox -// -// Created by 이한결 on 10/5/25. -// - -import Foundation -import Combine - -/// Combine은 **시간의 흐름에 따라 발생하는 데이터의 변화** 를 다루는 방법 -/// 사용자의 터치 이벤트, 네트워크 응답, 사용자가 검색창에 입력하는 글자 하나하나 등 -/// 언제 어떤 순서로 일어날지 알 수 없는 비동기적인 이벤트들을 데이터 파이프라인으로 처리한다 - -class BookingViewModel: ObservableObject { - // MARK: - JSON data 관련 - @Published var isLoading1: Bool = false - @Published var movieInfo: TopDomainModel? - - // MARK: - 입력 (사용자 선택) - @Published var selectedMovie: Movie? - @Published var selectedTheaters: [Theater] = [] - @Published var selectedDate: Date? - @Published var selectedShowtime: ShowtimesDomainModel? - - // MARK: - 출력 (UI에 보여줄 데이터) - @Published var availableTheaters: [Theater] = [] - @Published var availableDates: [Date] = [] - @Published var groupedItems: [AreasDomainModel] = [] - - // MARK: - UI 상태 - @Published var isLoading: Bool = false - @Published var errorMessage: String? - - // 영화 상영일정 더미데이터 - //private var movieService = MovieService() - - private var cancellables = Set() - - - // 영화와 상영관 더미데이터 - let allMovies: [Movie] = [ .init(id: "F1 더 무비", name: "F1 더 무비", imageName: "poster_f1", ageRating: 15), - .init(id: "귀멸의 칼날: 무한성", name: "귀멸의 칼날: 무한성", imageName: "poster_muhanseong", ageRating: 15), - .init(id: "어쩔수가없다", name: "어쩔수가없다", imageName: "poster_no_choice", ageRating: 15), - .init(id: "얼굴", name: "얼굴", imageName: "얼굴", ageRating: 15), - .init(id: "모노노케히메", name: "모노노케히메", imageName: "poster_mononoke", ageRating: 15), - .init(id: "보스", name: "보스", imageName: "poster_boss", ageRating: 15), - .init(id: "야당", name: "야당", imageName: "poster_yadang", ageRating: 15), - .init(id: "더로제스", name: "더로제스", imageName: "poster_the_roses", ageRating: 15)] - - let allTheaters: [Theater] = [ .init(name: "강남"), - .init(name: "홍대"), - .init(name: "신촌")] - - init() { - setupPipelines() - } - - private func setupPipelines() { - - // 선택되는 영화 - $selectedMovie - .sink { [weak self] movie in - // 영화가 선택되었는지 확인 - guard movie != nil else { // movie == nil 이면 (영화 선택이 없으면) 밑의 코드 실행 - self?.availableTheaters = [] - self?.selectedTheaters = [] - self?.selectedDate = nil - return - } - - // 영화가 선택되면, 준비해둔 전체 극장 목록을 보여줌 - self?.availableTheaters = self?.allTheaters ?? [] - - // 이전에 선택했던 극장이 있다면 초기화 - self?.selectedTheaters = [] - self?.availableDates = [] - self?.selectedDate = nil - self?.groupedItems = [] - self?.errorMessage = nil - } - .store(in: &cancellables) - - // 상영관이 선택되면 -> 날짜 목록을 활성화한다. - $selectedTheaters - /// compactMap은 nil이 아닐 때만 통과시키는 필터 역할 - /// 이전 selectedMovie의 sink에서 selectedTheater를 nil로 바꾸어 놓았기 때문에 - /// 일단 무조건 여기서 걸러짐 - /// 상영관을 선택하면 selectedTheater이 nil이 아니게 되면서 통과하게 됨 - /// 이전에 선택한 영화와 상영관의 날짜가 보이지 않게 하기 위함 - //.compactMap { $0 } - /// map은 들어온 값을 다른 형태로 변환하는 역할 - /// 받은 theater를 Date 배열로 만들어서 반환함 - - .map { $0.isEmpty } // selectedTheater 배열이 비어있는지 확인 - .removeDuplicates() - .sink { [weak self] isEmpty in - if isEmpty { // 배열이 비어있으면 초기화 - self?.availableDates = [] - self?.selectedDate = nil - } else { - let today = Date() - let dates = (0..<7).compactMap { i in - Calendar.current.date(byAdding: .day, value: i, to: today) - } - self?.availableDates = dates - self?.selectedDate = nil - } - } - .store(in: &cancellables) - - - // 영화, 상영관, 날짜가 모두 선택되면 상영 시간표 불러옴 - Publishers.CombineLatest3($selectedMovie, $selectedTheaters, $selectedDate) - .debounce(for: 0.2, scheduler: RunLoop.main) - /// 세 가지 값이 모두 nil이 아닌 유효한 값인지 확인 - /// (Movie, Theater, Date) 튜플을 반환 - .compactMap { movie, theater, date -> (Movie, [Theater], Date)? in - guard let movie = movie, !theater.isEmpty, let date = date else { - // 세 개 중 하나라도 nil이면 nil을 반환하여 파이프라인 중단 - return nil - } - // 세 개 모두 유효하면 튜플로 묶어서 통과 - return (movie, theater, date) - } - // flatMap에서 movie, theater, date 튜플을 받아 AnyPublisher<[showtime], Error> publisher 를 반환 - .flatMap { movie, theater, date -> AnyPublisher<[AreasDomainModel], Error> in - return self.fetchShowtimes(movie: movie, theater: theater, date: date) - } - .receive(on: DispatchQueue.main) // 결과를 항상 메인 스레드에서 받도록 - .sink(receiveCompletion: { [weak self] completion in - /// receiveCompletion, receiveValue는 .sink에서 요구하는 두 가지 값 - /// receivevalue는 스트림을 통해 성공적으로 데이터가 도착했을 때 호출됨 - /// receiveCompletion는 데이터 스트림이 완전히 종료되었을 때 호출됨 - /// receiveCompletion는 .failure(Error), .finished 두 가지 값을 가질 수 있음 - /// .finished는 모든 데이터 전송이 성공적으로 완료되었을 떄, .failure(Error)는 에러가 발생했을 때 - self?.isLoading = false // 통신이 완료되면(성공/실패 모두) 로딩 상태를 false로 변경 - // 에러가 발생한 경우 에러 메시지 설정 - if case .failure(_) = completion { - self?.errorMessage = "상영 시간표를 불러오는데 실패했습니다." - } - }, receiveValue: { [weak self] items in - // 결과값이 비어있으면 "시간표 없음" 메시지 설정 - if items.isEmpty { - self?.errorMessage = "선택한 극장에 상영시간표가 없습니다." - } else { - self?.errorMessage = nil // 결과가 있으면 에러 메시지 제거 - } - // 최종 결과를 showtimes 프로퍼티에 할당 - self?.groupedItems = items - }) - .store(in: &cancellables) - - } - - // fetchShowtimes 함수는 Movie, Theater, Date 값을 받아서 AnyPublisher<[Showtime], Error> publisher를 반환함 - private func fetchShowtimes(movie: Movie, theater: [Theater], date: Date) -> AnyPublisher<[AreasDomainModel], Error> { - self.isLoading = true // 로딩 시작 - self.errorMessage = nil // 이전 메시지 제거 - self.groupedItems = [] // 이전 목록 제거 - - return self.fetchItems(movie: movie, theater: theater, date: date) - .handleEvents(receiveCompletion: { [weak self] _ in - self?.isLoading = false }) - .eraseToAnyPublisher() - - } - - func fetchInfos() async { - isLoading1 = true - - // JSON 파일 읽기: Bundle.main.url - guard let url = Bundle.main.url(forResource: "MovieSchedule", withExtension: "json"), - let data = try? Data(contentsOf: url) else { return } - - do { - // JSON -> APIResponse - let response = try JSONDecoder().decode(APIResponse.self, from: data) - - await MainActor.run { - // APIResponse의 toDomain() 메서드 호출 -> movieInfo 프로퍼티에 저장 - self.movieInfo = response.toDomain() - self.isLoading1 = false - } - } catch { - print("Decoding error:", error) - } - - /// ** 전체 흐름 ** - /// fetchInfos 함수 호출 시 JSON --> APIResponse라는 DTO로 변환 - /// APIResponse 의 toDomain() 함수를 호출하여 TopDomainModel로 변환 - /// 변환된 TopDomainModel 객체가 movieInfo 프로퍼티에 저장 - } - - func fetchItems(movie: Movie, theater: [Theater], date: Date) -> AnyPublisher<[AreasDomainModel], Error> { - - return Future<[AreasDomainModel], Error> { promise in - - // 실제 네트워크 통신을 흉내 내는 딜레이 - DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { - - guard let movieInfo = self.movieInfo else { return promise(.success([])) } - // 전달받은 Date 객체를 YYYY-MM-DD 형태의 문자열로 변환 - let dateString = self.dateFormatter().string(from: date) - - guard let movies = movieInfo.data.movies.first(where: { $0.title == movie.id }) else { - print("일치하는 영화 없음") - return promise(.success([])) - } - - guard let schedules = movies.schedules.first(where: { $0.date == dateString }) else { - print("일치하는 날짜 없음") - return promise(.success([])) - } - - // 선택된 극장 이름을 selectedMovieNames에 추출 - let selectedMovieNames = Set(theater.map { $0.name }) - - // matchingAreas에 필터링된 결과만 저장 - let matchingAreas = schedules.areas.filter { area in - selectedMovieNames.contains(area.area) - } - - guard !matchingAreas.isEmpty else { - print("일치하는 극장 없음") - return promise(.success([])) - } - - let results = matchingAreas - - // 필터링된 결과를 반환: items 배열 (상영관 이름, format, 상영 시간 들의 배열) - promise(.success(results)) - } - } - .eraseToAnyPublisher() - } - - private func dateFormatter() -> DateFormatter { - let formatter = DateFormatter() - formatter.dateFormat = "yyyy-MM-dd" - formatter.locale = Locale(identifier: "ko_KR") // 한국 시간 기준 - return formatter - } -} - diff --git a/leehan/UMC_Megabox/UMC_Megabox/ViewModels/DetailedMovieCardViewModel.swift b/leehan/UMC_Megabox/UMC_Megabox/ViewModels/DetailedMovieCardViewModel.swift deleted file mode 100644 index 6e9795c..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/ViewModels/DetailedMovieCardViewModel.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// DetailedMovieCardViewModel.swift -// UMC_Megabox -// -// Created by 이한결 on 9/30/25. -// - -import SwiftUI -import Foundation - -@Observable -class DetailedMovieCardViewModel { - var detailedMovieCards = [ - DetailedMovieCard(subTitle: "F1: The Movie", - explaination:"최고가 되지 못한 전설 VS 최고가 되고 싶은 루키\n\n한때 주목받는 유망주였지만 끔찍한 사고로 F1에서 우승하지 못하고\n한순간에 추락한 드라이버 ‘손; 헤이스'(브래드 피트).\n그의 오랜 동료인 ‘루벤 세르반테스'(하비에르 바르뎀)에게\n레이싱 복귀를 제안받으며 최하위 팀인 APGXP에 합류한다." , - smallPoster: Image("poster_f1_small"), age: "12세 이상 관람가", date: "2025.06,25 개봉") - ] -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/ViewModels/LoginViewModel.swift b/leehan/UMC_Megabox/UMC_Megabox/ViewModels/LoginViewModel.swift deleted file mode 100644 index 994b2f2..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/ViewModels/LoginViewModel.swift +++ /dev/null @@ -1,84 +0,0 @@ -// -// LoginViewModel.swift -// UMC_Megabox -// -// Created by OOng E on 9/22/25. -// - -import SwiftUI -import Observation -import Alamofire -import KakaoSDKCommon -import KakaoSDKAuth -import KakaoSDKUser - - -enum LoginError: Error { - case invalidCredentials - case networkFailed - case unknown -} - -@Observable -class LoginViewModel { - /* LoginViewModel 에서 LoginModel 초기화 */ - var loginModel: LoginModel = .init(id: "", pwd: "") - - func loginButtonTapped() async throws -> TokenInfo { - // 서버에 id, pw를 보내서 토큰을 요청함 - // let tokenInfo = try? await APIService.shared.login(id: id, password: pw) - - // --- 하드코딩 --- - if loginModel.id == "Test" && loginModel.pwd == "1234" { - print("로그인 시뮬레이션 성공") - return TokenInfo(accessToken: "MOCK_ACCESS_TOKEN", refreshToken: "MOCK_REFRESH_TOKEN") - } else { - print("로그인 시뮬레이션 실패") - throw LoginError.invalidCredentials - } - } - - func kakaoLoginButtonTapped() async throws -> TokenInfo { - - // 인가 코드 요청 + 토큰 받아와서 oauthToken에 저장 - let oauthToken = try await getAuthTokenFromSDK() - - // 받아온 토큰을 tokenInfo에 TokenInfo 객체로 저장 - let tokenInfo = TokenInfo(accessToken: oauthToken.accessToken, refreshToken: oauthToken.refreshToken) - - return tokenInfo - } - - - private func getAuthTokenFromSDK() async throws -> OAuthToken { - return try await withCheckedThrowingContinuation { continuation in - // 카카오톡 앱 설치 여부 확인 - 카카오톡 앱 O - if UserApi.isKakaoTalkLoginAvailable() { - // 카카오톡 앱으로 로그인 시도 - UserApi.shared.loginWithKakaoTalk { (oauthToken, error) in - if let error = error { - print("카카오톡 로그인 실패", error) - continuation.resume(throwing: error) - } else if let oauthToken = oauthToken { - print("카카오톡 로그인 성공(토큰 수신)") - continuation.resume(returning: oauthToken) - } - } - } else { // 카카오톡 앱 X - // 웹으로 로그인 시도 - UserApi.shared.loginWithKakaoAccount { (oauthToken, error) in - if let error = error { - print("카카오톡 로그인 실패", error) - continuation.resume(throwing: error) - } else if let oauthToken = oauthToken { - print("카카오톡 로그인 성공(토큰 수신)") - continuation.resume(returning: oauthToken) - } - } - } - } - } - -} - - diff --git a/leehan/UMC_Megabox/UMC_Megabox/ViewModels/MovieBoardViewModel.swift b/leehan/UMC_Megabox/UMC_Megabox/ViewModels/MovieBoardViewModel.swift deleted file mode 100644 index e2fd963..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/ViewModels/MovieBoardViewModel.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// MovieBoardViewModel.swift -// UMC_Megabox -// -// Created by 이한결 on 9/30/25. -// - -import SwiftUI -import Foundation - -@Observable -class MovieBoardViewModel { - var movieBoards = [ - MovieBoard(MovieImage: Image("image_movieboard2"), Title: "9월, 메가박스의 영화들(1) - 명작들의 재개봉'", SubTitle: "<모노노케 히메>, <퍼펙트 블루>"), - MovieBoard(MovieImage: Image("image_movieboard1"), Title: "메가박스 오리지널 티켓 Re.37 <얼굴>", SubTitle: "영화 속 양극적인 감정의 대비") - ] -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/ViewModels/MovieCardViewModel.swift b/leehan/UMC_Megabox/UMC_Megabox/ViewModels/MovieCardViewModel.swift deleted file mode 100644 index 1ce302e..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/ViewModels/MovieCardViewModel.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// MovieCardViewModel2.swift -// UMC_Megabox -// -// Created by 이한결 on 11/10/25. -// - -import Foundation - -@MainActor -final class MovieCardViewModel: ObservableObject { - // MovieCardDomainModel 배열 - // 뷰에서 이 배열을 감지해서 ForEach로 순회하여 반영 - @Published var movies: [MovieCardDomainModel] = [] - - // MovieService 인스턴스 생성 - private var movieService = MovieService() - - // 뷰에서 호출할 함수 - // MovieService의 fetchMovieData() 함수를 호출하는 역할 - func loadMovies() async { - Task { - do { - /// fetchMovieData()함수로 API 호출을 보냄 - /// 반환된 NowPlayingResponseDomainModel을 domainModel에 저장하고 - /// 저장되어 있는 results를 movies 배열에 저장 - let domainModel = try await movieService.fetchMovieData() - self.movies = domainModel.results - } catch { - print("MovieCardViewModel2: loadMovies() 실패", error.localizedDescription) - } - } - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/ViewModels/MovieSearchViewModel.swift b/leehan/UMC_Megabox/UMC_Megabox/ViewModels/MovieSearchViewModel.swift deleted file mode 100644 index a96d2ff..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/ViewModels/MovieSearchViewModel.swift +++ /dev/null @@ -1,60 +0,0 @@ -// -// MovieSearchViewModel.swift -// UMC_Megabox -// -// Created by 이한결 on 10/7/25. -// - -import Foundation -import Combine - -class MovieSearchViewModel: ObservableObject { - // 입력 - @Published var query: String = "" - - // 출력 - @Published var searchResults: [Movie] = [] - - private let allMovies: [Movie] = [ - .init(id: "movie01", name: "F1", imageName: "poster_f1", ageRating: 15), - .init(id: "movie02", name: "무한성", imageName: "poster_muhanseong", ageRating: 15), - .init(id: "movie03", name: "어쩔수가없다", imageName: "poster_no_choice", ageRating: 15), - .init(id: "movie04", name: "얼굴", imageName: "poster_face", ageRating: 15), - .init(id: "movie05", name: "모노노케히메", imageName: "poster_mononoke", ageRating: 15), - .init(id: "movie06", name: "보스", imageName: "poster_boss", ageRating: 15), - .init(id: "movie07", name: "야당", imageName: "poster_yadang", ageRating: 15), - .init(id: "movie08", name: "더로제스", imageName: "poster_the_roses", ageRating: 15) - ] - - private var cancellables = Set() - - init() { - // ViewModel이 생성될 때 검색 파이프라인 설정 - setupSearchPipeline() - - // 처음에는 모든 영화를 보여줌 - searchResults = allMovies - } - - private func setupSearchPipeline() { - $query - // 400ms 지연 - .debounce(for: .milliseconds(400), scheduler: RunLoop.main) - // 중복된 검색어는 무시 - .removeDuplicates() - .sink { [weak self] newQuery in - guard let self = self else { return } - - // 검색어가 비어있으면 모든 영화를 보여줌 - if newQuery.isEmpty { - self.searchResults = self.allMovies - } else { - // 검색어가 있다면, 영화 제목에 검색어가 포함된 것만 필터링 - self.searchResults = self.allMovies.filter { movie in - movie.name.localizedCaseInsensitiveContains(newQuery) - } - } - } - .store(in: &cancellables) - } -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Views/DetailedMovieCardView.swift b/leehan/UMC_Megabox/UMC_Megabox/Views/DetailedMovieCardView.swift deleted file mode 100644 index 4e1cdde..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Views/DetailedMovieCardView.swift +++ /dev/null @@ -1,128 +0,0 @@ -// -// DetailedMovieCardView.swift -// UMC_Megabox -// -// Created by 이한결 on 9/30/25. -// - -import SwiftUI -import Kingfisher - -struct DetailedMovieCardView: View { - - let movieCard: MovieCardDomainModel - - var body: some View { - ScrollView { - VStack { - bigPoster - Spacer().frame(height: 9) - titles - Spacer().frame(height: 9) - explain.padding(.horizontal) - Spacer().frame(height: 30) - btns - Spacer().frame(height: 15) - bottomView.padding(.horizontal) - Spacer() - } - } - .navigationTitle(movieCard.movieName) - } - - private var bigPoster: some View { - // KingFisher를 이용해서 구현 - KFImage(movieCard.bigPoster) - .resizable() - .placeholder { - ProgressView() - } - .scaledToFit() - .frame(height: 248) - } - - private var titles: some View { - VStack(spacing: 4) { - Text(movieCard.movieName) - .font(.PretendardBold(size: 24)) - .foregroundStyle(.black) - Text(movieCard.subTitle) - .font(.PretendardSemiBold(size: 14)) - .foregroundStyle(.gray03) - } - } - - private var explain: some View { - Text(movieCard.explaination) - .font(.PretendardSemiBold(size: 18)) - .foregroundStyle(.gray03) - .frame(height: 175) - } - - private var btns: some View { - HStack(spacing: 0) { - Button(action: { } ) { - VStack { - Text("상세 정보") - .font(.PretendardBold(size: 22)) - .foregroundStyle(.black) - .frame(width: 220, height: 30, alignment: .center) - - Rectangle() - .foregroundStyle(.black) - .frame(width: 220, height: 2) - - }.frame(height: 34.99984) - } - - Button(action: { } ) { - VStack { - Text("실관람평") - .font(.PretendardBold(size: 22)) - .foregroundStyle(.gray02) - .frame(width: 220, height: 30, alignment: .center) - - Rectangle() - .foregroundStyle(.gray02) - .frame(width: 220, height: 2) - }.frame(height: 34.99984) - } - } - } - - private var bottomView: some View { - HStack { - - Image(movieCard.smallPoster) - .frame(height: 120) - - VStack { - Text(movieCard.age) - .font(.PretendardSemiBold(size: 13)) - .foregroundStyle(.black) - .frame(height: 18) - - Spacer().frame(height: 9) - - Text(movieCard.date) - .font(.PretendardSemiBold(size: 13)) - .foregroundStyle(.black) - .frame(height: 18) - - Spacer() - }.frame(height: 120) - - - Spacer() - }.frame(height: 120) - - - } - -} - -/* -#Preview { - DetailedMovieCardView() -} -*/ diff --git a/leehan/UMC_Megabox/UMC_Megabox/Views/LoginView.swift b/leehan/UMC_Megabox/UMC_Megabox/Views/LoginView.swift deleted file mode 100644 index 24d9524..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Views/LoginView.swift +++ /dev/null @@ -1,178 +0,0 @@ -// -// LoginView.swift -// UMC_Megabox -// -// Created by OOng E on 9/16/25. -// - -import SwiftUI -import Observation - -struct LoginView: View { - - /* --- keychain --- */ - let keychain = KeychainService.shared - - - @State private var path = NavigationPath() - - @Environment(LoginViewModel.self) private var viewModel - @Environment(AuthorizationManager.self) private var authManager - - - @State private var errorMessage: String? - - - - var body: some View { - VStack { - //Spacer().frame(height: 44) - topGroup // '로그인' 텍스트 - Spacer() - .frame(height: 100) - enterGroup // '아이디', '비밀번호' - Spacer() - .frame(height: 75) - loginBtn // '로그인' - Spacer() - .frame(height: 17) - signupBtn // '회원가입' - Spacer() - .frame(height: 35) - socialLoginBtn // '네 카 애' - Spacer() - .frame(height: 39) - UMCadvertisement // 'UMC 홍보' - }.padding(.horizontal) - } // end of body - - private var topGroup: some View { - HStack { - Text("로그인") - .font(.PretendardSemiBold(size: 24)) - .foregroundStyle(.black) - } - } // end of topGroup - - private var enterGroup: some View { - - - /* - VStack을 이용해 아이디와 비밀번호가 수직으로 배치되게 함 - 텍스트 사이에 Divider()로 분리선 구현 - */ - VStack { - @Bindable var viewModel = viewModel - /* $ 기호를 활용하여 Binding */ - /* TextField, SecureField는 Binding값을 요구함 - 값을 "읽기"만 하는게 아니라 "쓰기"도 해야하기 때문 */ - TextField("아이디", text: $viewModel.loginModel.id) - - Divider() - .frame(height: 1) - .foregroundStyle(.gray02) - - - Spacer() - .frame(height: 40) - - /* 보안 입력을 위해 SecureField 사용 */ - SecureField("비밀번호", text: $viewModel.loginModel.pwd) - - Divider() - .frame(height: 1) - .foregroundStyle(.gray02) - } - } // end of enterGroup - - - private var loginBtn: some View { - /* - 로그인 버튼은 ZStack으로 배경을 만들어줌 - 배경을 적절히 꾸미고 그 위에 텍스트 컴포넌트를 올려줌 - */ - Button(action: { - Task { - do { - let loginid = viewModel.loginModel.id - let loginpwd = viewModel.loginModel.pwd - - let tokenInfo = try await viewModel.loginButtonTapped() - // authenticationmanager에 토큰과 로그인id를 인자로 전달 - await authManager.login(tokenInfo: tokenInfo, loginid: loginid, loginpwd: loginpwd) - } catch { - self.errorMessage = "아이디 또는 비밀번호가 올바르지 않습니다." - print("로그인 실패:", error.localizedDescription) - } - } - }) { - ZStack { - Rectangle() - .frame(height: 54) - .foregroundStyle(.purple03) - .clipShape(RoundedRectangle(cornerRadius: 10)) - Text("로그인") - .font(.PretendardBold(size: 18)) - .foregroundStyle(.white) - } - } - - } // end of loginBtn - - - private var signupBtn: some View { - Button(action: {}) { - Text("회원가입") - .font(.PretendardMedium(size: 13)) - .foregroundStyle(.gray03) - } - } // end of signupBtn - - - private var socialLoginBtn: some View { - /* - 네 카 애 는 HStack으로 감싸고 사이에 Spacer()로 여백을 둠 - HStack 자체에 크기를 제한해 네 애 가 양쪽으로 밀착되는걸 막아줌 - */ - HStack { - Spacer() - - Button(action: {}) { - Image("icon_naver") - } - - Spacer() - - Button(action: { - Task { - do { let kakaoToken = try await viewModel.kakaoLoginButtonTapped() - await authManager.login(tokenInfo: kakaoToken, isWithKakao: true) - } - catch { print("로그인 실패", error) } - } - }) - { Image("icon_kakao") } - - Spacer() - - Button(action: {}) { - Image("icon_apple") - } - - Spacer() - } - } // end of socialLoginBtn - - private var UMCadvertisement: some View { - Image("advertisement_umc") - .resizable() - .scaledToFit() // 원본 이미지 비율을 해치치 않으면서 화면에 맞게 조정 - .frame(height: 266) - } //end of UMCadvertisement -} - -#Preview { - LoginView() - .environment(AuthorizationManager()) - .environment(LoginViewModel()) -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Views/MainTabView.swift b/leehan/UMC_Megabox/UMC_Megabox/Views/MainTabView.swift deleted file mode 100644 index 06991af..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Views/MainTabView.swift +++ /dev/null @@ -1,65 +0,0 @@ -// -// MainTabView.swift -// UMC_Megabox -// -// Created by 이한결 on 9/30/25. -// - -import SwiftUI - -struct MainTabView: View { - // State 변수로 라우터 생성 - @State private var router = NavigationRouter() - @Environment(AuthorizationManager.self) private var auth - - var body: some View { - - NavigationStack { - TabView { - Tab("홈", systemImage: "house.fill") { - HomeView() - } - - Tab("바로 예매", systemImage: "ticket.fill") { - BookingView() - } - - Tab("모바일 오더", systemImage: "popcorn.fill") { - StoreView() - } - - Tab("마이 페이지", systemImage: "person.fill") { - UserInfoView() - } - } - - } - .navigationDestination(for: Route.self) { route in - switch route { - case .login: - LoginView() - - case .home: - HomeView() - - case .detail(let movieCard): - DetailedMovieCardView(movieCard: movieCard) - - case .booking: - BookingView() - - case .store: - StoreView() - - case .userInfo: - UserInfoView() - } - }.environment(router) - - } -} - -#Preview { - MainTabView() - .environment(AuthorizationManager()) -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Views/ManageUserInfoView.swift b/leehan/UMC_Megabox/UMC_Megabox/Views/ManageUserInfoView.swift deleted file mode 100644 index ee76a92..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Views/ManageUserInfoView.swift +++ /dev/null @@ -1,98 +0,0 @@ -// -// ManageUserInfo.swift -// UMC_Megabox -// -// Created by OOng E on 9/22/25. -// - -import SwiftUI -import Foundation - -struct ManageUserInfoView: View { - @AppStorage("id") private var id = "" - @AppStorage("name") private var name = "" - /* TextField 에서 입력받은 텍스트 임시저장, Button의 action으로 임시저장한 State 변수를 Appstorage로 */ - @State private var tempname: String = "" - - - var body: some View { - VStack { - topNavigation - - Spacer().frame(height: 53) - - text - - Spacer().frame(height: 26) - - userNameId - - Spacer() - }//.padding(16) - } - /* 상단 네비게이션 바 */ - private var topNavigation: some View { - HStack { - Text("회원정보 관리") - .font(.PretendardMedium(size: 16)) - .foregroundStyle(.black) - }.frame(height: 44) - } - - /* 기본정보 */ - private var text: some View { - HStack { - Text("기본정보") - .font(.PretendardBold(size: 18)) - .foregroundStyle(.black) - Spacer() - } - } - - /* User name / User id */ - private var userNameId: some View { - VStack { - HStack { - Text("\(id)") - .font(.PretendardMedium(size: 18)) - .foregroundStyle(.black) - Spacer() - }.frame(height: 21) - - Divider() - .padding(.top, -5) - - Spacer() - - HStack { - TextField("\(name)", text: $tempname) - .font(.PretendardMedium(size: 18)) - .foregroundStyle(.black) - - Spacer() - - Button( action: { name = tempname } ) { - RoundedRectangle(cornerRadius: 16) - /* stroke 사용시 foregroundedStyle 수정자보다 먼저 작성 + import Foundation */ - .stroke(.gray03, lineWidth: 1) - .foregroundStyle(Color.clear) - .frame(width: 38, height: 20) - .overlay( Text("변경") - .font(.PretendardMedium(size: 10)) - .foregroundStyle(.gray03)) - } - } - - - Divider() - .padding(.top, -5) - - }.frame(height: 76.1) - } -} - - - -#Preview { - ManageUserInfoView() -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/BookingView.swift b/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/BookingView.swift deleted file mode 100644 index be1a729..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/BookingView.swift +++ /dev/null @@ -1,55 +0,0 @@ -// -// EventView.swift -// UMC_Megabox -// -// Created by 이한결 on 9/30/25. -// - -import SwiftUI - -struct BookingView: View { - @StateObject private var viewModel = BookingViewModel() - - var body: some View { - NavigationBar - - VStack { - SelectMovieView(viewModel: viewModel) - Spacer().frame(height: 20) - SelectTheaterView(viewModel: viewModel) - Spacer().frame(height: 32) - SelectDateView(viewModel: viewModel) - Spacer().frame(height: 21) - newShowtimeView(viewModel: viewModel) - }.padding(.horizontal) - /// View가 나타나는 시점에(onAppear) - /// 비동기 환경에서(Task) - /// 비동기 함수 호출(await) - .onAppear { - Task { - await viewModel.fetchInfos() - } - } - } - - private var NavigationBar: some View { - Rectangle() - .frame(width: 440, height: 120) - .foregroundStyle(.purple03) - .overlay(alignment: .bottom) { - Text("영화별 예매") - .font(.PretendardBold(size: 22)) - .foregroundStyle(.white) - .padding(.bottom, 15) - } - .ignoresSafeArea() - } - - - - -} - -#Preview { - BookingView() -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/HomeView.swift b/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/HomeView.swift deleted file mode 100644 index d97b60b..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/HomeView.swift +++ /dev/null @@ -1,288 +0,0 @@ -// -// TabView.swift -// UMC_Megabox -// -// Created by 이한결 on 9/30/25. -// - -import SwiftUI -import Foundation -import Kingfisher//. - -struct HomeView: View { - @State private var movieBoard: MovieBoardViewModel = .init() - @State private var router = NavigationRouter() - @Environment(AuthorizationManager.self) private var authManager - - @StateObject private var viewModel: MovieCardViewModel = MovieCardViewModel() - - var body: some View { - - NavigationStack(path: $router.path) { - ScrollView(.vertical) { - LazyVStack { - - HeaderSection - - Spacer().frame(height: 9) - - Buttons - - Spacer().frame(height: 25) - - CinemaCard - - Spacer().frame(height: 38.5) - - MoreFunView - - Spacer().frame(height: 44) - - MovieBoardView - - }//.padding() /* end of LazyGrid */ - }.padding(.horizontal) - .onAppear { - Task { - await viewModel.loadMovies() - } - } - .navigationDestination(for: Route.self) { route in - switch route { - case .login: - LoginView() - - case .home: - HomeView() - - case .detail(let movieCard): - DetailedMovieCardView(movieCard: movieCard) - - case .booking: - BookingView() - - case .store: - StoreView() - - case .userInfo: - UserInfoView() - } - } /* end of ScrollView */ - } - } - - /* --- 상단 헤더 섹션 --- */ - private var HeaderSection: some View { - VStack { - /* 메가박스 로고 */ - HStack { - Image("logo_megabox2") - .resizable() - .scaledToFit() - .frame(height: 30) - Spacer() - Button(action: { authManager.logout() }) { Text("로그아웃") } - } - - Spacer().frame(height: 8) - - /* 로고 밑 텍스트 */ - HStack { - HStack { - Text("홈") - .font(.PretendardSemiBold(size: 24)) - .foregroundStyle(.black) - Spacer() - Text("이벤트") - .font(.PretendardSemiBold(size: 24)) - .foregroundStyle(.gray04) - Spacer() - Text("스토어") - .font(.PretendardSemiBold(size: 24)) - .foregroundStyle(.gray04) - Spacer() - Text("선호극장") - .font(.PretendardSemiBold(size: 24)) - .foregroundStyle(.gray04) - }.frame(width: 320, height: 36) - - Spacer() - } - } - } - - /* --- "무비차트" "상영예정" 버튼 --- */ - private var Buttons: some View { - HStack { - /* "무비차트" */ - Button(action: { } ) { - ZStack { - Rectangle() - .frame(width: 84, height: 38) - .foregroundStyle(.gray08) - .clipShape(RoundedRectangle(cornerRadius: 20)) - Text("무비차트") - .font(.PretendardMedium(size: 14)) - .foregroundStyle(.white) - } - } - - Spacer().frame(width: 23) - - /* "상영예정" */ - Button(action: { } ) { - ZStack { - Rectangle() - .frame(width: 84, height: 38) - .foregroundStyle(.gray02) - .clipShape(RoundedRectangle(cornerRadius: 20)) - Text("상영예정") - .font(.PretendardMedium(size: 14)) - .foregroundStyle(.gray04) - } - } - - Spacer() - } - } - - /* --- 무비카드 스크롤뷰 --- */ - private var CinemaCard: some View { - ScrollView(.horizontal, content: { - LazyHStack(spacing: 24, content: { - /* - ForEach 를 이용해 MovieCardViewModel에 있는 더미 데이터를 순환시킴 - MovieCardViewModel에 있는 데이터를 movie로 받아서 하위 뷰로 넘겨줌 - 하위 뷰에서 movie의 데이터들을 이용해 뷰를 구성하도록 함 - */ - /* - 하위 뷰 개별로 봤을 땐 패딩 포함 요소들의 위치가 제대로 들어가있는데, - 상위 뷰에서 네비게이션으로 들어가면 왜 패딩도 없어져있고 요소들의 위치도 달라져있는지 - 모르겠음 - */ - ForEach(viewModel.movies) { movie in - - VStack { - Button( action: { router.push(.detail(movieCard: movie)) } ) { - // KingFisher를 이용해서 구현 - KFImage(movie.moviePoster) - .placeholder { - ProgressView() - } - .resizable() - .scaledToFit() - .frame(width: 148, height: 212) - } - - - Spacer().frame(height: 8) - - Button( action: { } ) { - RoundedRectangle(cornerRadius: 10) - /* stroke 사용시 foregroundedStyle 수정자보다 먼저 작성 + import Foundation */ - .stroke(.purple03, lineWidth: 1) - .foregroundStyle(Color.clear) - .frame(width: 148, height: 36) - .overlay( Text("바로 예매") - .font(.PretendardMedium(size: 16)) - .foregroundStyle(.purple03)) - } - - Spacer().frame(height: 8) - - HStack { - Text(movie.movieName) - .font(.PretendardBold(size: 22)) - .foregroundStyle(.black) - .frame(height: 30) - Spacer() - } - - - Spacer().frame(height: 3) - - HStack { - Text("누적관객수 \(movie.people)") - .font(.PretendardMedium(size: 18)) - .foregroundStyle(.black) - .frame(height: 21) - Spacer() - } - - - }.frame(width: 148) /* end of VStack */ - - } - }) - }).frame(height: 318) /* end of LazyHStack */ - } - - /* --- 알고보면 더 재밌는 무비피드 --- */ - - private var MoreFunView: some View { - VStack(spacing: 0) { - HStack { - Text("알고보면 더 재밌는 무비피드") - .font(.PretendardBold(size: 24)) - .foregroundStyle(.black) - Spacer() - Button( action: { } ) { - RoundedRectangle(cornerRadius: 1000) - .frame(width: 39, height: 39) - .foregroundStyle(.gray00) - .overlay( Image(systemName: "arrow.right") - .resizable() - .scaledToFit() - .frame(height: 18) - .foregroundStyle(.gray08)) - } - }.frame(height: 36)/* end of HStack */ - - - - Image("image_morefunfeed") - .resizable() - .scaledToFit() - .frame(height: 221) - } /* end of VStack */ - } - - /* --- MovieBoard View --- */ - - private var MovieBoardView: some View { - VStack(alignment: .leading, spacing: 39, content: { - ForEach(movieBoard.movieBoards) { board in - - HStack { - board.MovieImage - .resizable() - .scaledToFit() - .frame(width: 100, height: 100) - - Spacer().frame(width: 23) - - VStack(alignment: .leading) { - Text(board.Title) - .font(.PretendardSemiBold(size: 18)) - .foregroundStyle(.black) - .frame(height: 45) - - Spacer().frame(height: 25) - - Text(board.SubTitle) - .font(.PretendardSemiBold(size: 13)) - .foregroundStyle(.gray03) - - } - } - - } - }) - } - -} - -#Preview { - HomeView() - .environment(NavigationRouter()) -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/StoreView.swift b/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/StoreView.swift deleted file mode 100644 index 79a7e3b..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/StoreView.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// StoreView.swift -// UMC_Megabox -// -// Created by 이한결 on 9/30/25. -// - -import SwiftUI - -struct StoreView: View { - var body: some View { - Text("This is Store Page") - } -} - -#Preview { - StoreView() -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/SubBookingView/MovieSearchView.swift b/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/SubBookingView/MovieSearchView.swift deleted file mode 100644 index 3b3ed1f..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/SubBookingView/MovieSearchView.swift +++ /dev/null @@ -1,46 +0,0 @@ -// -// MovieSearchView.swift -// UMC_Megabox -// -// Created by 이한결 on 10/7/25. -// - -import SwiftUI - -struct MovieSearchView: View { - // 검색 로직 위함 - @StateObject private var viewModel = MovieSearchViewModel() - @Binding var selectedMovie: Movie? - @Environment(\.dismiss) private var dismiss - private let columns = [GridItem(.adaptive(minimum: 95))] - - var body: some View { - NavigationStack { - ScrollView { - Text("영화 선택").font(.PretendardSemiBold(size: 18)) - LazyVGrid(columns: columns, spacing: 30) { - ForEach(viewModel.searchResults) { movie in - Button( action: { - selectedMovie = movie - dismiss() - }) { - VStack(spacing: 8) { - Image(movie.imageName) - .resizable() - .scaledToFit() - .frame(width: 95, height: 135) - Text(movie.name) - .font(.PretendardSemiBold(size: 14)) - .foregroundStyle(.black) - } - } - } - }.padding() - }.searchable(text: $viewModel.query, prompt: "영화명을 입력해주세요.") - } - } -} - - - - diff --git a/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/SubBookingView/SelectDateView.swift b/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/SubBookingView/SelectDateView.swift deleted file mode 100644 index 14655b9..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/SubBookingView/SelectDateView.swift +++ /dev/null @@ -1,63 +0,0 @@ -// -// SelectDateView.swift -// UMC_Megabox -// -// Created by 이한결 on 10/6/25. -// - -import SwiftUI -import Foundation - -struct SelectDateView: View { - - @ObservedObject var viewModel: BookingViewModel - - - var body: some View { - if !viewModel.availableDates.isEmpty { - VStack { - HStack(spacing: 5) { - ForEach(viewModel.availableDates, id: \.self) { date in - Button( action: { viewModel.selectedDate = date } ) { - RoundedRectangle(cornerRadius: 12) - .frame(width: 50, height: 53) - .foregroundStyle(viewModel.selectedDate == date ? .purple03 : Color.clear) - .overlay( VStack { - Spacer() - Text(formatDate(date, format: "d")) - .font(.PretendardBold(size: 18)) - .foregroundStyle(viewModel.selectedDate == date ? .white : .black) - Spacer().frame(width: 4) - Text(formatDate(date, format: "E")) - .font(.PretendardSemiBold(size: 14)) - .foregroundStyle(viewModel.selectedDate == date ? .white : .gray03) - Spacer() - }) - } - - } - } // end of HStack - - - - - } - } - } - - - - private func formatDate(_ date: Date, format: String) -> String { - let formatter = DateFormatter() - formatter.dateFormat = format - formatter.locale = Locale(identifier: "ko_KR") // 한국어로 요일 표시 - return formatter.string(from: date) - } -} - -#Preview { - SelectDateView(viewModel: BookingViewModel()) -} - - - diff --git a/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/SubBookingView/SelectMovieView.swift b/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/SubBookingView/SelectMovieView.swift deleted file mode 100644 index 3264aef..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/SubBookingView/SelectMovieView.swift +++ /dev/null @@ -1,79 +0,0 @@ -// -// SelectMovieView.swift -// UMC_Megabox -// -// Created by 이한결 on 10/6/25. -// - -import SwiftUI - -struct SelectMovieView: View { - - @ObservedObject var viewModel: BookingViewModel - @State private var isShowingMovieSearch = false - - var body: some View { - - VStack(spacing: 19) { - HStack { - if let movie = viewModel.selectedMovie { - RoundedRectangle(cornerRadius: 4) - .frame(width: 26, height: 24) - .foregroundStyle(.orange) - .overlay(Text("\(movie.ageRating)") - .foregroundStyle(.white) - .font(.PretendardBold(size: 18))) - } - - - Spacer().frame(width: 37) - - Text(viewModel.selectedMovie?.name ?? "영화를 선택하세요.") - .font(.PretendardBold(size: 18)) - - Spacer() - - Button( action: { isShowingMovieSearch = true } ) { - RoundedRectangle(cornerRadius: 8) - .stroke(.gray02, lineWidth: 1) - .foregroundStyle(.clear) - .overlay(Text("전체영화") - .foregroundStyle(.black) - .font(.PretendardSemiBold(size: 14))) - .frame(width: 69, height: 30) - } - - }.frame(height: 30) - - ScrollView(.horizontal) { - LazyHStack(spacing: 8) { - ForEach(viewModel.allMovies) { movie in - Button( action: { viewModel.selectedMovie = movie } ) { - Image(movie.imageName) - .resizable() - .scaledToFit() - .frame(width: 62, height: 89) - .clipShape(RoundedRectangle(cornerRadius: 10)) - } - - .overlay { - RoundedRectangle(cornerRadius: 10) - .stroke( viewModel.selectedMovie == movie ? .purple03 : Color.clear, lineWidth: 2) - - } - } - } - } - - }.frame(height: 139)// end of VStack - .sheet(isPresented: $isShowingMovieSearch) { - // isShowingMovieSearch가 true가 되면 이 뷰를 시트로 띄움 - // BookingViewModel의 selectedMovie를 Binding으로 전달 - MovieSearchView(selectedMovie: $viewModel.selectedMovie) - } - } -} - -#Preview { - SelectMovieView(viewModel: BookingViewModel()) -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/SubBookingView/SelectTheaterView.swift b/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/SubBookingView/SelectTheaterView.swift deleted file mode 100644 index 57f4697..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/SubBookingView/SelectTheaterView.swift +++ /dev/null @@ -1,46 +0,0 @@ -// -// SelectTheaterView.swift -// UMC_Megabox -// -// Created by 이한결 on 10/6/25. -// - -import SwiftUI - -struct SelectTheaterView: View { - @ObservedObject var viewModel: BookingViewModel - - var body: some View { - - if (!viewModel.availableTheaters.isEmpty) { - HStack(spacing: 8) { - ForEach(viewModel.availableTheaters) { theater in - Button( action: { toggleTheaterSelection(theater) } ) { - RoundedRectangle(cornerRadius: 15) - .frame(width: 55, height: 35) - .foregroundStyle( viewModel.selectedTheaters.contains(theater) ? .purple03 : .gray01 ) - .overlay(Text(theater.name) - .font(.PretendardSemiBold(size: 16)) - .foregroundStyle( viewModel.selectedTheaters.contains(theater) ? .white : .gray05) ) - } - } - - Spacer() - } - } - - } - - private func toggleTheaterSelection(_ theater: Theater) { - if let index = viewModel.selectedTheaters.firstIndex(of: theater) { - viewModel.selectedTheaters.remove(at: index) - } else { - viewModel.selectedTheaters.append(theater) - } - } - -} - -#Preview { - SelectTheaterView(viewModel: BookingViewModel()) -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/SubBookingView/newShowtimeView.swift b/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/SubBookingView/newShowtimeView.swift deleted file mode 100644 index b16af1f..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/SubBookingView/newShowtimeView.swift +++ /dev/null @@ -1,98 +0,0 @@ -// -// newShowtimeView.swift -// UMC_Megabox -// -// Created by 이한결 on 10/29/25. -// - -import SwiftUI - -struct newShowtimeView: View { - @ObservedObject var viewModel: BookingViewModel - let columns = [GridItem(.flexible()), GridItem(.flexible()), GridItem(.flexible()), GridItem(.flexible())] - - var body: some View { - ScrollView(.vertical) { - - if viewModel.isLoading { - ProgressView() - } - // 에러가 생긴 경우 - else if let message = viewModel.errorMessage { - Text(message) - .foregroundStyle(.gray02) - } - // 로딩중도 아니고 에러도 없음 + 날짜 선택도 완료함 - else if !viewModel.availableDates.isEmpty && !viewModel.selectedTheaters.isEmpty { - - VStack(alignment: .leading, spacing: 21) { - ForEach(viewModel.groupedItems) { area in - - HStack { - Text(area.area) // 극장 지역 이름 - .frame(height: 24) - .font(.PretendardBold(size: 18)) - .foregroundStyle(.black) - Spacer() - } - - ForEach(area.items) { item in - - HStack { - Text(item.auditorium) - .font(.PretendardBold(size: 18)) - .foregroundStyle(.black) - Spacer() - Text(item.format) - .font(.PretendardSemiBold(size: 14)) - .foregroundStyle(.black) - } - - LazyVGrid(columns: columns, spacing: 10) { - ForEach(item.showtimes) { showtime in - - Button( action: { viewModel.selectedShowtime = showtime } ) { - ZStack { - RoundedRectangle(cornerRadius: 12) - .stroke(viewModel.selectedShowtime == showtime ? .purple03 : .gray02, lineWidth: 1) - .frame(width: 70, height: 80) - .foregroundStyle(.clear) - - VStack { - Text(showtime.start) - .font(.PretendardBold(size: 18)) - .foregroundStyle(.black) - - - HStack(spacing: 4) { - Text("\(showtime.available) ") - .font(.PretendardSemiBold(size: 14)) - .foregroundStyle(.purple03) - Text("/ \(showtime.total)") - .font(.PretendardSemiBold(size: 14)) - .foregroundStyle(.gray03) - }.padding(.vertical, 8) - } - } - } - } // end of ForEach(item.showtimes) -> 상영 일정 순회 - - - } - } // end of ForEach(viewModel.groupedItems) -> 선택한 지역 순회 - - - } - } // end of ForEach(area.items) -> 상영관 이름과 format 순회 - - - - } - } - } -} - - -#Preview { - newShowtimeView(viewModel: BookingViewModel()) -} diff --git a/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/UserInfoView.swift b/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/UserInfoView.swift deleted file mode 100644 index a52c8af..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Views/SegmentedView/UserInfoView.swift +++ /dev/null @@ -1,234 +0,0 @@ -// -// UserInfoView.swift -// UMC_Megabox -// -// Created by OOng E on 9/22/25. -// - -import SwiftUI -import Foundation - -struct UserInfoView: View { - @AppStorage("name") private var name: String = "" - - var body: some View { - //NavigationStack { - VStack { - - Spacer().frame(height: 103) - - topUserInfoGroup - - Spacer().frame(height: 15) - - clubMembershipBtn - - Spacer().frame(height: 33) - - stateInfo - - Spacer().frame(height: 33) - - bottomView - - Spacer().frame(height: 527) - }.padding(.horizontal) - // } - } - - /* 상단 사용자 정보 */ - private var topUserInfoGroup: some View { - VStack { - /* 상단 HStack */ - HStack { - /* ~~~ 님 */ - Text("\(name)님") - .font(.PretendardBold(size: 24)) - - /* WELCOME */ - RoundedRectangle(cornerRadius: 6) - .foregroundStyle(.tag) - .frame(width: 81, height: 25) - .overlay( - Text("WELCOME") - .font(.PretendardMedium(size: 14)) - .foregroundStyle(Color.white)) - - Spacer() - - /* 회원정보 버튼 */ - NavigationLink(destination: ManageUserInfoView()){ - RoundedRectangle(cornerRadius: 16) - .foregroundStyle(.gray07) - .frame(width: 72, height: 28) - .overlay( - Text("회원정보") - .font(.PretendardSemiBold(size: 14)) - .foregroundStyle(.white)) - } - } // end of HStack - - /* 하단 HStack*/ - HStack { - /* 멤버십 포인트 */ - Text("멤버십 포인트") - .font(.PretendardSemiBold(size: 14)) - .foregroundStyle(.gray04) - - /* 500P */ - Text("500P") - .font(.PretendardMedium(size: 14)) - .foregroundStyle(.black) - - Spacer() - } // end of HStack - }.frame(height: 56) // end of VStack - } - - /* 클럽 멤버십 버튼 */ - private var clubMembershipBtn: some View { - - Button( action: {} ) { - RoundedRectangle(cornerRadius: 8) - .fill(LinearGradient( - stops: [ - Gradient.Stop(color: Color(red: 0.67, green: 0.55, blue: 1), location: 0.00), - Gradient.Stop(color: Color(red: 0.56, green: 0.68, blue: 0.95), location: 0.53), - Gradient.Stop(color: Color(red: 0.36, green: 0.8, blue: 0.93), location: 1.00) - ], - startPoint: .leading, - endPoint: .trailing - )) - .frame(height: 46) - .overlay( - HStack { - Text("클럽 멤버십") - .font(.PretendardSemiBold(size: 16)) - .foregroundStyle(.white) - .padding(.leading, 8) - - Image(systemName: "chevron.right") - .foregroundStyle(Color.white) - - Spacer() - } - ) - } - } - - /* 상태 정보 뷰 */ - private var stateInfo: some View { - - RoundedRectangle(cornerRadius: 8) - /* stroke 사용시 foregroundedStyle 수정자보다 먼저 작성 + import Foundation */ - .stroke(.gray02, lineWidth: 1) - .foregroundStyle(Color.clear) - .frame(height: 76) - .overlay( - HStack { - Spacer().frame(width: 24) - - VStack(spacing: 9) { - Text("쿠폰") - .font(.PretendardSemiBold(size: 16)) - .foregroundStyle(.gray02) - - Text("2") - .font(.PretendardSemiBold(size: 18)) - .foregroundStyle(.black) - }.frame(width: 28, height: 52) // end of VStack - /* Divider 좌우로 Spacer */ - Spacer().frame(width: 43) - - /* HStack에서는 자동으로 세로 구분선 */ - Divider().frame(height: 31) - - Spacer().frame(width: 43) - - VStack(spacing: 9) { - Text("스토어 교환권") - .font(.PretendardSemiBold(size: 16)) - .foregroundStyle(.gray02) - - Text("0") - .font(.PretendardSemiBold(size: 18)) - .foregroundStyle(.black) - }.frame(width: 87, height: 52) // end of VStack - - Spacer().frame(width: 43) - - Divider().frame(height: 31) - - Spacer().frame(width: 43) - - VStack(spacing: 9) { - Text("모바일 티켓") - .font(.PretendardSemiBold(size: 16)) - .foregroundStyle(.gray02) - - Text("0") - .font(.PretendardSemiBold(size: 18)) - .foregroundStyle(.black) - }.frame(width: 73, height: 52) // end of VStack - - Spacer().frame(width: 24) - }) // end of HStack - } - - /* 하단 뷰 */ - private var bottomView: some View { - HStack { - VStack { - Image("icon_movie") - .resizable() - .scaledToFit() - Spacer().frame(height: 12) - Text("영화별예매") - .font(.PretendardMedium(size: 16)) - .foregroundStyle(.black) - }.frame(height: 67) - - Spacer() - - VStack { - Image("icon_theater") - .resizable() - .scaledToFit() - Spacer().frame(height: 12) - Text("극장별예매") - .font(.PretendardMedium(size: 16)) - .foregroundStyle(.black) - }.frame(height: 67) - - Spacer() - - VStack { - Image("icon_special") - .resizable() - .scaledToFit() - Spacer().frame(height: 12) - Text("특별관예매") - .font(.PretendardMedium(size: 16)) - .foregroundStyle(.black) - }.frame(height: 67) - - Spacer() - - VStack { - Image("icon_mobile_order") - .resizable() - .scaledToFit() - Spacer().frame(height: 12) - Text("모바일오더") - .font(.PretendardMedium(size: 16)) - .foregroundStyle(.black) - }.frame(height: 67) - } - } -} - - -#Preview { - UserInfoView() -} - diff --git a/leehan/UMC_Megabox/UMC_Megabox/Views/SplashView.swift b/leehan/UMC_Megabox/UMC_Megabox/Views/SplashView.swift deleted file mode 100644 index 2742693..0000000 --- a/leehan/UMC_Megabox/UMC_Megabox/Views/SplashView.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// SplashView.swift -// UMC_Megabox -// -// Created by OOng E on 9/16/25. -// - -import SwiftUI - -struct SplashView: View { - var body: some View { - ZStack(alignment: .center){ - Rectangle() - .ignoresSafeArea() - .frame(maxWidth: .infinity, maxHeight: .infinity) - .foregroundStyle(Color.white) - Logo - } - } - - private var Logo: some View { - Image("logo_megabox") - .resizable() - .scaledToFit() - .frame(width: 249, height: 84) - } -} - -#Preview { - SplashView() -} diff --git a/leehan/UMC_Megabox/View/DetailedMovieCardView.swift b/leehan/UMC_Megabox/View/DetailedMovieCardView.swift deleted file mode 100644 index 1467d07..0000000 --- a/leehan/UMC_Megabox/View/DetailedMovieCardView.swift +++ /dev/null @@ -1,133 +0,0 @@ -// -// DetailedMovieCardView.swift -// UMC_Megabox -// -// Created by 이한결 on 9/30/25. -// - -import SwiftUI - -struct DetailedMovieCardView: View { - - /* - 부모 뷰의 ForEach 루프 내에서 데이터를 받아서 쓰기만 하므로 - 초기화 해줄필요도, @State변수로 선언해줄 필요도 없음 - */ - let movieCard: MovieCard - - var body: some View { - VStack { - Text("F1 더 무비") - bigPoster.ignoresSafeArea() - Spacer().frame(height: 9) - titles - Spacer().frame(height: 9) - explain.padding(.horizontal) - Spacer().frame(height: 30) - btns.ignoresSafeArea() - Spacer().frame(height: 15) - bottomView.padding(.horizontal) - Spacer() - } - } - - private var bigPoster: some View { - movieCard.bigPoster - .resizable() - .scaledToFit() - .frame(height: 248) - } - - private var titles: some View { - VStack(spacing: 4) { - Text(movieCard.MovieName) - .font(.PretendardBold(size: 24)) - .foregroundStyle(.black) - Text(movieCard.subTitle) - .font(.PretendardSemiBold(size: 14)) - .foregroundStyle(.gray03) - } - } - - private var explain: some View { - Text(movieCard.explaination) - .font(.PretendardSemiBold(size: 18)) - .foregroundStyle(.gray03) - .frame(height: 175) - } - - private var btns: some View { - HStack(spacing: 0) { - Button(action: { } ) { - VStack { - Text("상세 정보") - .font(.PretendardBold(size: 22)) - .foregroundStyle(.black) - .frame(width: 220, height: 30, alignment: .center) - - Rectangle() - .foregroundStyle(.black) - .frame(width: 220, height: 2) - - }.frame(height: 34.99984) - } - - Button(action: { } ) { - VStack { - Text("실관람평") - .font(.PretendardBold(size: 22)) - .foregroundStyle(.gray02) - .frame(width: 220, height: 30, alignment: .center) - - Rectangle() - .foregroundStyle(.gray02) - .frame(width: 220, height: 2) - }.frame(height: 34.99984) - } - } - } - - private var bottomView: some View { - HStack { - - movieCard.smallPoster - .frame(height: 120) - - VStack { - Text(movieCard.age) - .font(.PretendardSemiBold(size: 13)) - .foregroundStyle(.black) - .frame(height: 18) - - Spacer().frame(height: 9) - - Text(movieCard.date) - .font(.PretendardSemiBold(size: 13)) - .foregroundStyle(.black) - .frame(height: 18) - - Spacer() - }.frame(height: 120) - - - Spacer() - }.frame(height: 120) - - - } - -} - - -#Preview { - DetailedMovieCardView(movieCard: - MovieCard(MoviePoster: Image("F1"), - MovieName: "F1 더 무비", - People: "100만", - bigPoster: Image("bigF1"), - subTitle: "F1: The Movie", - explaination:"최고가 되지 못한 전설 VS 최고가 되고 싶은 루키\n\n한때 주목받는 유망주였지만 끔찍한 사고로 F1에서 우승하지 못하고\n한순간에 추락한 드라이버 ‘손; 헤이스'(브래드 피트).\n그의 오랜 동료인 ‘루벤 세르반테스'(하비에르 바르뎀)에게\n레이싱 복귀를 제안받으며 최하위 팀인 APGXP에 합류한다." , - smallPoster: Image("smallF1"), - age: "12세 이상 관람가", - date: "2025.06,25 개봉")) -} diff --git a/leehan/UMC_Megabox/View/SegmentedView/HomeView.swift b/leehan/UMC_Megabox/View/SegmentedView/HomeView.swift deleted file mode 100644 index 050af4d..0000000 --- a/leehan/UMC_Megabox/View/SegmentedView/HomeView.swift +++ /dev/null @@ -1,255 +0,0 @@ -// -// TabView.swift -// UMC_Megabox -// -// Created by 이한결 on 9/30/25. -// - -import SwiftUI -import Foundation - -struct HomeView: View { - @State private var movieCard: MovieCardViewModel = .init() - @State private var movieBoard: MovieBoardViewModel = .init() - - var body: some View { - - //NavigationStack { - ScrollView(.vertical) { - LazyVStack { - - HeaderSection - - Spacer().frame(height: 9) - - Buttons - - Spacer().frame(height: 25) - - CinemaCard - - Spacer().frame(height: 38.5) - - MoreFunView - - Spacer().frame(height: 44) - - MovieBoardView - - - - - }//.padding() /* end of LazyGrid */ - } /* end of ScrollView */ - // } - } - - /* --- 상단 헤더 섹션 --- */ - private var HeaderSection: some View { - VStack { - /* 메가박스 로고 */ - HStack { - Image("megaboxLogo2") - .resizable() - .scaledToFit() - .frame(height: 30) - Spacer() - } - - Spacer().frame(height: 8) - - /* 로고 밑 텍스트 */ - HStack { - HStack { - Text("홈") - .font(.PretendardSemiBold(size: 24)) - .foregroundStyle(.black) - Spacer() - Text("이벤트") - .font(.PretendardSemiBold(size: 24)) - .foregroundStyle(.gray04) - Spacer() - Text("스토어") - .font(.PretendardSemiBold(size: 24)) - .foregroundStyle(.gray04) - Spacer() - Text("선호극장") - .font(.PretendardSemiBold(size: 24)) - .foregroundStyle(.gray04) - }.frame(width: 320, height: 36) - - Spacer() - } - } - } - - /* --- "무비차트" "상영예정" 버튼 --- */ - private var Buttons: some View { - HStack { - /* "무비차트" */ - Button(action: { } ) { - ZStack { - Rectangle() - .frame(width: 84, height: 38) - .foregroundStyle(.gray08) - .clipShape(RoundedRectangle(cornerRadius: 20)) - Text("무비차트") - .font(.PretendardMedium(size: 14)) - .foregroundStyle(.white) - } - } - - Spacer().frame(width: 23) - - /* "상영예정" */ - Button(action: { } ) { - ZStack { - Rectangle() - .frame(width: 84, height: 38) - .foregroundStyle(.gray02) - .clipShape(RoundedRectangle(cornerRadius: 20)) - Text("상영예정") - .font(.PretendardMedium(size: 14)) - .foregroundStyle(.gray04) - } - } - - Spacer() - } - } - - /* --- 무비카드 스크롤뷰 --- */ - private var CinemaCard: some View { - ScrollView(.horizontal, content: { - LazyHStack(spacing: 24, content: { - /* - ForEach 를 이용해 MovieCardViewModel에 있는 더미 데이터를 순환시킴 - MovieCardViewModel에 있는 데이터를 movie로 받아서 하위 뷰로 넘겨줌 - 하위 뷰에서 movie의 데이터들을 이용해 뷰를 구성하도록 함 - */ - /* - 하위 뷰 개별로 봤을 땐 패딩 포함 요소들의 위치가 제대로 들어가있는데, - 상위 뷰에서 네비게이션으로 들어가면 왜 패딩도 없어져있고 요소들의 위치도 달라져있는지 - 모르겠음 - */ - ForEach(movieCard.movieCards) { movie in - - VStack { - NavigationLink(destination: DetailedMovieCardView(movieCard: movie)) { - movie.MoviePoster - .resizable() - .scaledToFit() - .frame(width: 148, height: 212) - } - - - Spacer().frame(height: 8) - - Button( action: { } ) { - RoundedRectangle(cornerRadius: 10) - /* stroke 사용시 foregroundedStyle 수정자보다 먼저 작성 + import Foundation */ - .stroke(.purple03, lineWidth: 1) - .foregroundStyle(Color.clear) - .frame(width: 148, height: 36) - .overlay( Text("바로 예매") - .font(.PretendardMedium(size: 16)) - .foregroundStyle(.purple03)) - } - - Spacer().frame(height: 8) - - HStack { - Text(movie.MovieName) - .font(.PretendardBold(size: 22)) - .foregroundStyle(.black) - .frame(height: 30) - Spacer() - } - - - Spacer().frame(height: 3) - - HStack { - Text("누적관객수 \(movie.People)") - .font(.PretendardMedium(size: 18)) - .foregroundStyle(.black) - .frame(height: 21) - Spacer() - } - - - }.frame(width: 148) /* end of VStack */ - - } - }) - }).frame(height: 318) /* end of LazyHStack */ - } - - /* --- 알고보면 더 재밌는 무비피드 --- */ - - private var MoreFunView: some View { - VStack(spacing: 0) { - HStack { - Text("알고보면 더 재밌는 무비피드") - .font(.PretendardBold(size: 24)) - .foregroundStyle(.black) - Spacer() - Button( action: { } ) { - RoundedRectangle(cornerRadius: 1000) - .frame(width: 39, height: 39) - .foregroundStyle(.gray00) - .overlay( Image(systemName: "arrow.right") - .resizable() - .scaledToFit() - .frame(height: 18) - .foregroundStyle(.gray08)) - } - }.frame(height: 36)/* end of HStack */ - - - - Image("MoreFunImage") - .resizable() - .scaledToFit() - .frame(height: 221) - } /* end of VStack */ - } - - /* --- MovieBoard View --- */ - - private var MovieBoardView: some View { - VStack(alignment: .leading, spacing: 39, content: { - ForEach(movieBoard.movieBoards) { board in - - HStack { - board.MovieImage - .resizable() - .scaledToFit() - .frame(width: 100, height: 100) - - Spacer().frame(width: 23) - - VStack(alignment: .leading) { - Text(board.Title) - .font(.PretendardSemiBold(size: 18)) - .foregroundStyle(.black) - .frame(height: 45) - - Spacer().frame(height: 25) - - Text(board.SubTitle) - .font(.PretendardSemiBold(size: 13)) - .foregroundStyle(.gray03) - - } - } - - } - }) - } - -} - -#Preview { - HomeView() -} diff --git a/leehan/UMC_Megabox/View/SegmentedView/StoreView.swift b/leehan/UMC_Megabox/View/SegmentedView/StoreView.swift deleted file mode 100644 index 79a7e3b..0000000 --- a/leehan/UMC_Megabox/View/SegmentedView/StoreView.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// StoreView.swift -// UMC_Megabox -// -// Created by 이한결 on 9/30/25. -// - -import SwiftUI - -struct StoreView: View { - var body: some View { - Text("This is Store Page") - } -} - -#Preview { - StoreView() -} diff --git a/leehan/UMC_Megabox/ViewModel/DetailedMovieCardViewModel.swift b/leehan/UMC_Megabox/ViewModel/DetailedMovieCardViewModel.swift deleted file mode 100644 index 4d9ba20..0000000 --- a/leehan/UMC_Megabox/ViewModel/DetailedMovieCardViewModel.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// DetailedMovieCardViewModel.swift -// UMC_Megabox -// -// Created by 이한결 on 9/30/25. -// - -import SwiftUI -import Foundation - -@Observable -class DetailedMovieCardViewModel { - var detailedMovieCards = [ - DetailedMovieCard(subTitle: "F1: The Movie", - explaination:"최고가 되지 못한 전설 VS 최고가 되고 싶은 루키\n\n한때 주목받는 유망주였지만 끔찍한 사고로 F1에서 우승하지 못하고\n한순간에 추락한 드라이버 ‘손; 헤이스'(브래드 피트).\n그의 오랜 동료인 ‘루벤 세르반테스'(하비에르 바르뎀)에게\n레이싱 복귀를 제안받으며 최하위 팀인 APGXP에 합류한다." , - smallPoster: Image("smallF1"), age: "12세 이상 관람가", date: "2025.06,25 개봉") - ] -} diff --git a/wizzy/MEGABOX/Derived/InfoPlists/MegaBox-Info.plist b/wizzy/MEGABOX/Derived/InfoPlists/MegaBox-Info.plist deleted file mode 100644 index 7cefb69..0000000 --- a/wizzy/MEGABOX/Derived/InfoPlists/MegaBox-Info.plist +++ /dev/null @@ -1,85 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleURLTypes - - - CFBundleTypeRole - Editor - CFBundleURLSchemes - - kakaoc0ea35d8efc1ff2b8a6f10a00c0816da - - - - CFBundleVersion - 1 - KAKAO_APP_KEY - $(KAKAO_APP_KEY) - LSApplicationQueriesSchemes - - kakaokompassauth - kakaolink - - LSRequiresIPhoneOS - - UIAppFonts - - Pretendard-Black.otf - Pretendard-Bold.otf - Pretendard-ExtraBold.otf - Pretendard-ExtraLight.otf - Pretendard-Light.otf - Pretendard-Medium.otf - Pretendard-Regular.otf - Pretendard-SemiBold.otf - Pretendard-Thin.otf - - UIApplicationSceneManifest - - UIApplicationSupportsMultipleScenes - - UISceneConfigurations - - - UILaunchScreen - - UIColorName - - UIImageName - - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/wizzy/MEGABOX/Derived/InfoPlists/MegaBoxTests-Info.plist b/wizzy/MEGABOX/Derived/InfoPlists/MegaBoxTests-Info.plist deleted file mode 100644 index 6c40a6c..0000000 --- a/wizzy/MEGABOX/Derived/InfoPlists/MegaBoxTests-Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/wizzy/MEGABOX/MegaBox.xcodeproj/project.pbxproj b/wizzy/MEGABOX/MegaBox.xcodeproj/project.pbxproj deleted file mode 100644 index 1c57c7c..0000000 --- a/wizzy/MEGABOX/MegaBox.xcodeproj/project.pbxproj +++ /dev/null @@ -1,628 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 70; - objects = { - -/* Begin PBXBuildFile section */ - 39E050FEB27D77B7056F85C1 /* MegaBoxApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBDC5358BCC565CEC81BDBD1 /* MegaBoxApp.swift */; }; - 611C43C82EAC8353005C2748 /* MovieSchedule.json in Resources */ = {isa = PBXBuildFile; fileRef = 611C43C72EAC8353005C2748 /* MovieSchedule.json */; }; - 611C43CA2EAC83A7005C2748 /* MovieScheduleDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 611C43C92EAC83A7005C2748 /* MovieScheduleDTO.swift */; }; - 611C45292EB23C3A005C2748 /* toDomain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 611C45282EB23C3A005C2748 /* toDomain.swift */; }; - 61A069542EC443A200D68BA1 /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = 61A069532EC443A200D68BA1 /* Kingfisher */; }; - 61C9AC322EBD83DD00E04816 /* KakaoSDK in Frameworks */ = {isa = PBXBuildFile; productRef = 61C9AC312EBD83DD00E04816 /* KakaoSDK */; }; - 61C9AC342EBDBA0C00E04816 /* Secret.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 61C9AC332EBDBA0C00E04816 /* Secret.xcconfig */; }; - 61C9AC3C2EBEC94F00E04816 /* Alamofire in Frameworks */ = {isa = PBXBuildFile; productRef = 61C9AC3B2EBEC94F00E04816 /* Alamofire */; }; - 61C9AC3F2EBEC96C00E04816 /* Moya in Frameworks */ = {isa = PBXBuildFile; productRef = 61C9AC3E2EBEC96C00E04816 /* Moya */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 73ED898B715C62B74E6DD2D7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 7250977E6D41EFB3EB6B4AF7 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D8068CE08B0A8E85A6DBB655; - remoteInfo = MegaBox; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 2F0F9DD80F1CB74D2DC4EDD4 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - BBEF3E61C485190506A1431C /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 611C43C72EAC8353005C2748 /* MovieSchedule.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = MovieSchedule.json; sourceTree = ""; }; - 611C43C92EAC83A7005C2748 /* MovieScheduleDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MovieScheduleDTO.swift; sourceTree = ""; }; - 611C45282EB23C3A005C2748 /* toDomain.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = toDomain.swift; sourceTree = ""; }; - 61C9AC332EBDBA0C00E04816 /* Secret.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Secret.xcconfig; sourceTree = ""; }; - 6833E323F8E1379B0551DAF6 /* MegaBox-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "MegaBox-Info.plist"; sourceTree = ""; }; - 70968C0934CDEE4482BF7866 /* MegaBox.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MegaBox.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 95C1869C93BEDFCAA84B26B1 /* MegaBoxTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MegaBoxTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - CEE0EA2D5F8FB9999C245CB6 /* MegaBoxTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "MegaBoxTests-Info.plist"; sourceTree = ""; }; - FBDC5358BCC565CEC81BDBD1 /* MegaBoxApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MegaBoxApp.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 611890D52E7FB69700243C23 /* Models */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Models; sourceTree = ""; }; - 611890D62E7FB69D00243C23 /* ViewModels */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = ViewModels; sourceTree = ""; }; - 6147D0A22E8A9D9E00A133C6 /* Navigation */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Navigation; sourceTree = ""; }; - 6191AD9E2E782B6100F6F18F /* Views */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Views; sourceTree = ""; }; - 6191ADA32E782B9800F6F18F /* Resources */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Resources; sourceTree = ""; }; - 61C9ABC32EBADAD000E04816 /* Services */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Services; sourceTree = ""; }; - 61C9AC372EBEC7DA00E04816 /* Network */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Network; sourceTree = ""; }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 0171995BEE3F954231D82084 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 61A069542EC443A200D68BA1 /* Kingfisher in Frameworks */, - 61C9AC322EBD83DD00E04816 /* KakaoSDK in Frameworks */, - 61C9AC3C2EBEC94F00E04816 /* Alamofire in Frameworks */, - 61C9AC3F2EBEC96C00E04816 /* Moya in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6286B97ACEFF99F43A486D0C /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 04E92A9F3F0E6F77107B0A82 /* Project */ = { - isa = PBXGroup; - children = ( - A16D279B29B1D02DE43A8F89 /* Derived */, - DD883208B22ABCFA019311D0 /* MegaBox */, - ); - name = Project; - sourceTree = ""; - }; - 1655454AFDF6D7FC7B4E361F /* Sources */ = { - isa = PBXGroup; - children = ( - 61C9AC372EBEC7DA00E04816 /* Network */, - 611C43C72EAC8353005C2748 /* MovieSchedule.json */, - 61C9ABC32EBADAD000E04816 /* Services */, - 6147D0A22E8A9D9E00A133C6 /* Navigation */, - 611890D62E7FB69D00243C23 /* ViewModels */, - 611890D52E7FB69700243C23 /* Models */, - 6191ADA32E782B9800F6F18F /* Resources */, - 6191AD9E2E782B6100F6F18F /* Views */, - FBDC5358BCC565CEC81BDBD1 /* MegaBoxApp.swift */, - 611C43C92EAC83A7005C2748 /* MovieScheduleDTO.swift */, - 611C45282EB23C3A005C2748 /* toDomain.swift */, - ); - path = Sources; - sourceTree = ""; - }; - A16D279B29B1D02DE43A8F89 /* Derived */ = { - isa = PBXGroup; - children = ( - E9FD06034A36F77F92143431 /* InfoPlists */, - ); - path = Derived; - sourceTree = ""; - }; - BFDBD67092279A3FAAC4B892 /* Products */ = { - isa = PBXGroup; - children = ( - 70968C0934CDEE4482BF7866 /* MegaBox.app */, - 95C1869C93BEDFCAA84B26B1 /* MegaBoxTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - CD24F3BA39F89388251B5EDD = { - isa = PBXGroup; - children = ( - 04E92A9F3F0E6F77107B0A82 /* Project */, - BFDBD67092279A3FAAC4B892 /* Products */, - ); - sourceTree = ""; - }; - DD883208B22ABCFA019311D0 /* MegaBox */ = { - isa = PBXGroup; - children = ( - 1655454AFDF6D7FC7B4E361F /* Sources */, - 61C9AC332EBDBA0C00E04816 /* Secret.xcconfig */, - ); - path = MegaBox; - sourceTree = ""; - }; - E9FD06034A36F77F92143431 /* InfoPlists */ = { - isa = PBXGroup; - children = ( - 6833E323F8E1379B0551DAF6 /* MegaBox-Info.plist */, - CEE0EA2D5F8FB9999C245CB6 /* MegaBoxTests-Info.plist */, - ); - path = InfoPlists; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 8B4C3A14AD6FCF7F4E85DF16 /* MegaBoxTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = BC639C183CF6DC9C3BE21533 /* Build configuration list for PBXNativeTarget "MegaBoxTests" */; - buildPhases = ( - B079524FA93733E65814A663 /* Sources */, - F2C7A5C6180065EBDA8947B8 /* Resources */, - 6286B97ACEFF99F43A486D0C /* Frameworks */, - 2F0F9DD80F1CB74D2DC4EDD4 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 90936AC3A6550242B1EB959F /* PBXTargetDependency */, - ); - name = MegaBoxTests; - packageProductDependencies = ( - ); - productName = MegaBoxTests; - productReference = 95C1869C93BEDFCAA84B26B1 /* MegaBoxTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - D8068CE08B0A8E85A6DBB655 /* MegaBox */ = { - isa = PBXNativeTarget; - buildConfigurationList = 389A7483F1C3266C7BDCA508 /* Build configuration list for PBXNativeTarget "MegaBox" */; - buildPhases = ( - 4D124BC3B84A7C65F27F2635 /* Sources */, - 04CC33FE9F044FB1C5D7ABA4 /* Resources */, - 0171995BEE3F954231D82084 /* Frameworks */, - BBEF3E61C485190506A1431C /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 611890D52E7FB69700243C23 /* Models */, - 611890D62E7FB69D00243C23 /* ViewModels */, - 6147D0A22E8A9D9E00A133C6 /* Navigation */, - 6191AD9E2E782B6100F6F18F /* Views */, - 6191ADA32E782B9800F6F18F /* Resources */, - 61C9ABC32EBADAD000E04816 /* Services */, - 61C9AC372EBEC7DA00E04816 /* Network */, - ); - name = MegaBox; - packageProductDependencies = ( - 61C9AC312EBD83DD00E04816 /* KakaoSDK */, - 61C9AC3B2EBEC94F00E04816 /* Alamofire */, - 61C9AC3E2EBEC96C00E04816 /* Moya */, - 61A069532EC443A200D68BA1 /* Kingfisher */, - ); - productName = MegaBox; - productReference = 70968C0934CDEE4482BF7866 /* MegaBox.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 7250977E6D41EFB3EB6B4AF7 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 1640; - TargetAttributes = { - 8B4C3A14AD6FCF7F4E85DF16 = { - TestTargetID = D8068CE08B0A8E85A6DBB655; - }; - }; - }; - buildConfigurationList = AAA4D51BF679B8A5006611A0 /* Build configuration list for PBXProject "MegaBox" */; - compatibilityVersion = "Xcode 14.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - Base, - en, - ); - mainGroup = CD24F3BA39F89388251B5EDD; - packageReferences = ( - 61C9AC302EBD83DD00E04816 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */, - 61C9AC3A2EBEC94F00E04816 /* XCRemoteSwiftPackageReference "Alamofire" */, - 61C9AC3D2EBEC96C00E04816 /* XCRemoteSwiftPackageReference "Moya" */, - 61A069522EC443A200D68BA1 /* XCRemoteSwiftPackageReference "Kingfisher" */, - ); - productRefGroup = BFDBD67092279A3FAAC4B892 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - D8068CE08B0A8E85A6DBB655 /* MegaBox */, - 8B4C3A14AD6FCF7F4E85DF16 /* MegaBoxTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 04CC33FE9F044FB1C5D7ABA4 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 611C43C82EAC8353005C2748 /* MovieSchedule.json in Resources */, - 61C9AC342EBDBA0C00E04816 /* Secret.xcconfig in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F2C7A5C6180065EBDA8947B8 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 4D124BC3B84A7C65F27F2635 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 39E050FEB27D77B7056F85C1 /* MegaBoxApp.swift in Sources */, - 611C43CA2EAC83A7005C2748 /* MovieScheduleDTO.swift in Sources */, - 611C45292EB23C3A005C2748 /* toDomain.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B079524FA93733E65814A663 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 90936AC3A6550242B1EB959F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = MegaBox; - target = D8068CE08B0A8E85A6DBB655 /* MegaBox */; - targetProxy = 73ED898B715C62B74E6DD2D7 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 007F387E9A536819C13F07E6 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 61C9AC332EBDBA0C00E04816 /* Secret.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - DEVELOPMENT_TEAM = XRY42MG75P; - ENABLE_PREVIEWS = YES; - INFOPLIST_FILE = "Derived/InfoPlists/MegaBox-Info.plist"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.wizzy.MegaBox; - PRODUCT_NAME = MegaBox; - SDKROOT = iphoneos; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; - SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - 2C4A9D0A57D799EED2D986F8 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 61C9AC332EBDBA0C00E04816 /* Secret.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = "$(TARGET_NAME)"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 6EA0C4E95042C63DE564A03D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 61C9AC332EBDBA0C00E04816 /* Secret.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - DEVELOPMENT_TEAM = XRY42MG75P; - ENABLE_PREVIEWS = YES; - INFOPLIST_FILE = "Derived/InfoPlists/MegaBox-Info.plist"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.wizzy.MegaBox; - PRODUCT_NAME = MegaBox; - SDKROOT = iphoneos; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; - SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; - SWIFT_COMPILATION_MODE = singlefile; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - BBE57AFAA74228C251B0D9A0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_IDENTITY = "iPhone Developer"; - INFOPLIST_FILE = "Derived/InfoPlists/MegaBoxTests-Info.plist"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = io.tuist.MegaBoxTests; - PRODUCT_NAME = MegaBoxTests; - SDKROOT = iphoneos; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; - SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; - SWIFT_COMPILATION_MODE = singlefile; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MegaBox.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/MegaBox"; - TEST_TARGET_NAME = MegaBox; - }; - name = Debug; - }; - E119EB8028F180FFE45D423B /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 61C9AC332EBDBA0C00E04816 /* Secret.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - F023CBC4FAF654FEBD47229B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_IDENTITY = "iPhone Developer"; - INFOPLIST_FILE = "Derived/InfoPlists/MegaBoxTests-Info.plist"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = io.tuist.MegaBoxTests; - PRODUCT_NAME = MegaBoxTests; - SDKROOT = iphoneos; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; - SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MegaBox.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/MegaBox"; - TEST_TARGET_NAME = MegaBox; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 389A7483F1C3266C7BDCA508 /* Build configuration list for PBXNativeTarget "MegaBox" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 6EA0C4E95042C63DE564A03D /* Debug */, - 007F387E9A536819C13F07E6 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - AAA4D51BF679B8A5006611A0 /* Build configuration list for PBXProject "MegaBox" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - E119EB8028F180FFE45D423B /* Debug */, - 2C4A9D0A57D799EED2D986F8 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - BC639C183CF6DC9C3BE21533 /* Build configuration list for PBXNativeTarget "MegaBoxTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BBE57AFAA74228C251B0D9A0 /* Debug */, - F023CBC4FAF654FEBD47229B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCRemoteSwiftPackageReference section */ - 61A069522EC443A200D68BA1 /* XCRemoteSwiftPackageReference "Kingfisher" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/onevcat/Kingfisher"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 8.6.1; - }; - }; - 61C9AC302EBD83DD00E04816 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/kakao/kakao-ios-sdk"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 2.25.0; - }; - }; - 61C9AC3A2EBEC94F00E04816 /* XCRemoteSwiftPackageReference "Alamofire" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/Alamofire/Alamofire.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 5.10.2; - }; - }; - 61C9AC3D2EBEC96C00E04816 /* XCRemoteSwiftPackageReference "Moya" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/Moya/Moya.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 15.0.3; - }; - }; -/* End XCRemoteSwiftPackageReference section */ - -/* Begin XCSwiftPackageProductDependency section */ - 61A069532EC443A200D68BA1 /* Kingfisher */ = { - isa = XCSwiftPackageProductDependency; - package = 61A069522EC443A200D68BA1 /* XCRemoteSwiftPackageReference "Kingfisher" */; - productName = Kingfisher; - }; - 61C9AC312EBD83DD00E04816 /* KakaoSDK */ = { - isa = XCSwiftPackageProductDependency; - package = 61C9AC302EBD83DD00E04816 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; - productName = KakaoSDK; - }; - 61C9AC3B2EBEC94F00E04816 /* Alamofire */ = { - isa = XCSwiftPackageProductDependency; - package = 61C9AC3A2EBEC94F00E04816 /* XCRemoteSwiftPackageReference "Alamofire" */; - productName = Alamofire; - }; - 61C9AC3E2EBEC96C00E04816 /* Moya */ = { - isa = XCSwiftPackageProductDependency; - package = 61C9AC3D2EBEC96C00E04816 /* XCRemoteSwiftPackageReference "Moya" */; - productName = Moya; - }; -/* End XCSwiftPackageProductDependency section */ - }; - rootObject = 7250977E6D41EFB3EB6B4AF7 /* Project object */; -} diff --git a/wizzy/MEGABOX/MegaBox.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/wizzy/MEGABOX/MegaBox.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/wizzy/MEGABOX/MegaBox.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/wizzy/MEGABOX/MegaBox.xcodeproj/xcshareddata/xcschemes/MegaBox.xcscheme b/wizzy/MEGABOX/MegaBox.xcodeproj/xcshareddata/xcschemes/MegaBox.xcscheme deleted file mode 100644 index 2fbbbbc..0000000 --- a/wizzy/MEGABOX/MegaBox.xcodeproj/xcshareddata/xcschemes/MegaBox.xcscheme +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/wizzy/MEGABOX/MegaBox.xcworkspace/.tuist-generated b/wizzy/MEGABOX/MegaBox.xcworkspace/.tuist-generated deleted file mode 100644 index e69de29..0000000 diff --git a/wizzy/MEGABOX/MegaBox.xcworkspace/contents.xcworkspacedata b/wizzy/MEGABOX/MegaBox.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 5f6cf98..0000000 --- a/wizzy/MEGABOX/MegaBox.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/wizzy/MEGABOX/MegaBox.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/wizzy/MEGABOX/MegaBox.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index 08de0be..0000000 --- a/wizzy/MEGABOX/MegaBox.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded - - - diff --git a/wizzy/MEGABOX/MegaBox.xcworkspace/xcshareddata/swiftpm/Package.resolved b/wizzy/MEGABOX/MegaBox.xcworkspace/xcshareddata/swiftpm/Package.resolved deleted file mode 100644 index 2d6e64f..0000000 --- a/wizzy/MEGABOX/MegaBox.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ /dev/null @@ -1,60 +0,0 @@ -{ - "originHash" : "9d6580a4cdadf3978cbbcf7c7f1ea3868973954674eb6b5e8d1765e799b4806d", - "pins" : [ - { - "identity" : "alamofire", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Alamofire/Alamofire.git", - "state" : { - "revision" : "513364f870f6bfc468f9d2ff0a95caccc10044c5", - "version" : "5.10.2" - } - }, - { - "identity" : "kakao-ios-sdk", - "kind" : "remoteSourceControl", - "location" : "https://github.com/kakao/kakao-ios-sdk", - "state" : { - "revision" : "e14a8d1fad75645fd5677a295a8b1956ebd14d3d", - "version" : "2.25.0" - } - }, - { - "identity" : "kingfisher", - "kind" : "remoteSourceControl", - "location" : "https://github.com/onevcat/Kingfisher", - "state" : { - "revision" : "4d75de347da985a70c63af4d799ed482021f6733", - "version" : "8.6.1" - } - }, - { - "identity" : "moya", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Moya/Moya.git", - "state" : { - "revision" : "c263811c1f3dbf002be9bd83107f7cdc38992b26", - "version" : "15.0.3" - } - }, - { - "identity" : "reactiveswift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/ReactiveCocoa/ReactiveSwift.git", - "state" : { - "revision" : "c43bae3dac73fdd3cb906bd5a1914686ca71ed3c", - "version" : "6.7.0" - } - }, - { - "identity" : "rxswift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/ReactiveX/RxSwift.git", - "state" : { - "revision" : "5004a18539bd68905c5939aa893075f578f4f03d", - "version" : "6.9.1" - } - } - ], - "version" : 3 -} diff --git a/wizzy/MEGABOX/MegaBox.xcworkspace/xcshareddata/xcschemes/MegaBox-Workspace.xcscheme b/wizzy/MEGABOX/MegaBox.xcworkspace/xcshareddata/xcschemes/MegaBox-Workspace.xcscheme deleted file mode 100644 index b968cc9..0000000 --- a/wizzy/MEGABOX/MegaBox.xcworkspace/xcshareddata/xcschemes/MegaBox-Workspace.xcscheme +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/wizzy/MEGABOX/MegaBox/.gitignore b/wizzy/MEGABOX/MegaBox/.gitignore deleted file mode 100644 index 24b244f..0000000 --- a/wizzy/MEGABOX/MegaBox/.gitignore +++ /dev/null @@ -1,70 +0,0 @@ -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### Xcode ### -# Xcode -# -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - -## User settings -xcuserdata/ - -## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) -*.xcscmblueprint -*.xccheckout - -## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) -build/ -DerivedData/ -*.moved-aside -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 - -### Xcode Patch ### -*.xcodeproj/* -!*.xcodeproj/project.pbxproj -!*.xcodeproj/xcshareddata/ -!*.xcworkspace/contents.xcworkspacedata -/*.gcno - -### Projects ### -*.xcodeproj -*.xcworkspace - -### Tuist derived files ### -graph.dot -Derived/ - -### Tuist managed dependencies ### -Tuist/.build \ No newline at end of file diff --git a/wizzy/MEGABOX/MegaBox/MegaBox/Resources/Assets.xcassets/AccentColor.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/MegaBox/Resources/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/wizzy/MEGABOX/MegaBox/MegaBox/Resources/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/MegaBox/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/wizzy/MEGABOX/MegaBox/MegaBox/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 9221b9b..0000000 --- a/wizzy/MEGABOX/MegaBox/MegaBox/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "20x20" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "20x20" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "29x29" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "29x29" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "40x40" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "40x40" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "60x60" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "60x60" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "20x20" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "20x20" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "29x29" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "29x29" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "40x40" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "40x40" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "76x76" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "76x76" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "83.5x83.5" - }, - { - "idiom" : "ios-marketing", - "scale" : "1x", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/MegaBox/Resources/Assets.xcassets/Contents.json b/wizzy/MEGABOX/MegaBox/MegaBox/Resources/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/wizzy/MEGABOX/MegaBox/MegaBox/Resources/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/MegaBox/Resources/Preview Content/Preview Assets.xcassets/Contents.json b/wizzy/MEGABOX/MegaBox/MegaBox/Resources/Preview Content/Preview Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/wizzy/MEGABOX/MegaBox/MegaBox/Resources/Preview Content/Preview Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/MegaBox/Sources/ContentView.swift b/wizzy/MEGABOX/MegaBox/MegaBox/Sources/ContentView.swift deleted file mode 100644 index fc75cd1..0000000 --- a/wizzy/MEGABOX/MegaBox/MegaBox/Sources/ContentView.swift +++ /dev/null @@ -1,17 +0,0 @@ -import SwiftUI - -public struct ContentView: View { - public init() {} - - public var body: some View { - Text("Hello, World!") - .padding() - } -} - - -struct ContentView_Previews: PreviewProvider { - static var previews: some View { - ContentView() - } -} diff --git a/wizzy/MEGABOX/MegaBox/MegaBox/Sources/MegaBoxApp.swift b/wizzy/MEGABOX/MegaBox/MegaBox/Sources/MegaBoxApp.swift deleted file mode 100644 index 7c4307d..0000000 --- a/wizzy/MEGABOX/MegaBox/MegaBox/Sources/MegaBoxApp.swift +++ /dev/null @@ -1,10 +0,0 @@ -import SwiftUI - -@main -struct MegaBoxApp: App { - var body: some Scene { - WindowGroup { - ContentView() - } - } -} diff --git a/wizzy/MEGABOX/MegaBox/MegaBox/Tests/MegaBoxTests.swift b/wizzy/MEGABOX/MegaBox/MegaBox/Tests/MegaBoxTests.swift deleted file mode 100644 index 0ba8842..0000000 --- a/wizzy/MEGABOX/MegaBox/MegaBox/Tests/MegaBoxTests.swift +++ /dev/null @@ -1,8 +0,0 @@ -import Foundation -import XCTest - -final class MegaBoxTests: XCTestCase { - func test_twoPlusTwo_isFour() { - XCTAssertEqual(2+2, 4) - } -} \ No newline at end of file diff --git a/wizzy/MEGABOX/MegaBox/Sources/MegaBoxApp.swift b/wizzy/MEGABOX/MegaBox/Sources/MegaBoxApp.swift deleted file mode 100644 index 495922e..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/MegaBoxApp.swift +++ /dev/null @@ -1,37 +0,0 @@ -import SwiftUI -import KakaoSDKCommon -import KakaoSDKAuth - -@main -struct MegaBoxApp: App { - - @State private var router = NavigationRouter() - @StateObject private var viewModel = MovieViewModel() - - init() { - - if let appKey = Bundle.main.infoDictionary?["KAKAO_APP_KEY"] as? String { - KakaoSDK.initSDK(appKey: appKey) - } else { - print("KAKAO_APP_KEY 가 안 보여요") - } - } - - var body: some Scene { - WindowGroup { - NavigationStack(path: $router.path) { - MainView() - .environment(router) - .environmentObject(viewModel) - .onAppear { - } - } - .onOpenURL { url in - print("OpenURL: \(url)") - if AuthApi.isKakaoTalkLoginUrl(url) { - _ = AuthController.handleOpenUrl(url: url) - } - } - } - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Models/CalendarDay.swift b/wizzy/MEGABOX/MegaBox/Sources/Models/CalendarDay.swift deleted file mode 100644 index b16690d..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Models/CalendarDay.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// CalendarDay.swift -// MegaBox -// -// Created by 이서현 on 10/5/25. -// - -import Foundation - - -struct CalendarDay: Identifiable { - var id: UUID = .init() - let day: Int - let date: Date - let isCurrentMonth: Bool -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Models/LoginModel.swift b/wizzy/MEGABOX/MegaBox/Sources/Models/LoginModel.swift deleted file mode 100644 index f834406..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Models/LoginModel.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// LoginModel.swift -// MegaBox -// -// Created by 이서현 on 9/21/25. -// - -import Foundation - -struct LoginModel { - var id: String = "" - var pwd: String = "" - -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Models/MenuItemModel.swift b/wizzy/MEGABOX/MegaBox/Sources/Models/MenuItemModel.swift deleted file mode 100644 index 2367113..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Models/MenuItemModel.swift +++ /dev/null @@ -1,114 +0,0 @@ -// -// MenuItemModel.swift -// MegaBox -// -// Created by 이서현 on 11/17/25. -// - -import SwiftUI - -struct MenuItemModel: Identifiable { - let id = UUID() - let menuImage: Image - let menuName: String - let menuPrice: String - - let isBest: Bool - let isRecommended: Bool - let discountRate: Int? - let isSoldOut: Bool - - init( - menuImage: Image, - menuName: String, - menuPrice: String, - isBest: Bool = false, - isRecommended: Bool = false, - discountRate: Int? = nil, - isSoldOut: Bool = false - ) { - self.menuImage = menuImage - self.menuName = menuName - self.menuPrice = menuPrice - self.isBest = isBest - self.isRecommended = isRecommended - self.discountRate = discountRate - self.isSoldOut = isSoldOut - } - - static let allMenu: [MenuItemModel] = [ - MenuItemModel( - menuImage: Image(.menuBest1), - menuName: "싱글 콤보", - menuPrice: "10,900원", - isBest: true, - isRecommended: false, - discountRate: nil, - isSoldOut: false - ), - MenuItemModel( - menuImage: Image(.menuImage1), - menuName: "러브 콤보", - menuPrice: "10,900원", - isBest: false, - isRecommended: true, - discountRate: nil, - isSoldOut: false - ), - MenuItemModel( - menuImage: Image(.menuImage2), - menuName: "더블 콤보", - menuPrice: "24,900원", - isBest: true, - isRecommended: true, - discountRate: nil, - isSoldOut: false - ), - MenuItemModel( - menuImage: Image(.menuImage3), - menuName: "디즈니 픽사 포스터", - menuPrice: "15,900원", - isBest: false, - isRecommended: true, - discountRate: nil, - isSoldOut: true - ), - MenuItemModel( - menuImage: Image(.menuBest2), - menuName: "러브 콤보 패키지", - menuPrice: "32,000원", - isBest: true, - isRecommended: false, - discountRate: nil, - isSoldOut: false - ), - MenuItemModel( - menuImage: Image(.menuBest1), - menuName: "패밀리 콤보 패키지", - menuPrice: "47,000원", - isBest: false, - isRecommended: false, - discountRate: nil, - isSoldOut: false - ), - MenuItemModel( - menuImage: Image(.menuTicketBook), - menuName: "메가박스 오리지널 티켓북 시즌4 돌비시네마 에디션 단품", - menuPrice: "10,900원", - isBest: false, - isRecommended: true, - discountRate: nil, - isSoldOut: false - ), - MenuItemModel( - menuImage: Image(.menuInsideOut), - menuName: "인사이드아웃2 감정", - menuPrice: "29,900원", - isBest: false, - isRecommended: true, - discountRate: 20, - isSoldOut: false - ) - - ] -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Models/MovieDetailModel.swift b/wizzy/MEGABOX/MegaBox/Sources/Models/MovieDetailModel.swift deleted file mode 100644 index 72298c8..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Models/MovieDetailModel.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// MovieDetailModel.swift -// MegaBox -// -// Created by 이서현 on 11/8/25. -// - -import Foundation - -struct MovieDetailModel: Identifiable, Hashable { - let id: Int - let title: String - let originalTitle: String - let overview: String - let posterPath: String? - let backdropPath: String? - let releaseDate: String -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Models/MovieModel.swift b/wizzy/MEGABOX/MegaBox/Sources/Models/MovieModel.swift deleted file mode 100644 index 07f8e1f..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Models/MovieModel.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// MovieModel.swift -// MegaBox -// -// Created by 이서현 on 9/29/25. -// - -import Foundation - -struct MovieModel: Identifiable, Hashable { - let id = UUID() - let title: String - let poster: String - let countAudience: String? -} - - -enum Theater: String, CaseIterable, Hashable, Identifiable { - case gangnam = "강남" - case hongdae = "홍대" - case shinchon = "신촌" - var id: String { rawValue } -} - -struct Showtime: Identifiable, Hashable { - let id = UUID() - let theater: Theater - let screenName: String // 예: "크리클라이너 1관" - let format: String // 예: "2D" - let start: Date - let end: Date - let remaining: Int - let capacity: Int -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/MovieSchedule.json b/wizzy/MEGABOX/MegaBox/Sources/MovieSchedule.json deleted file mode 100644 index 81e487a..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/MovieSchedule.json +++ /dev/null @@ -1,385 +0,0 @@ -{ - "status": "success", - "message": "Showtimes fetched successfully", - "data": { - "movies": [ - { - "id": "m-001", - "title": "어쩔수가없다", - "age_rating": "15", - "schedules": [ - { - "date": "2025-11-02", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "크리클라이너 1관", - "format": "2D", - "showtimes": [ - { "start": "11:30", "end": "13:58", "available": 109, "total": 116 }, - { "start": "14:20", "end": "16:48", "available": 19, "total": 116 }, - { "start": "17:05", "end": "19:28", "available": 1, "total": 116 }, - { "start": "19:45", "end": "22:02", "available": 100, "total": 116 }, - { "start": "22:20", "end": "00:04", "available": 116, "total": 116 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "BTS관 (7층 1관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "09:30", "end": "11:50", "available": 75, "total": 116 }, - { "start": "12:00", "end": "14:26", "available": 102, "total": 116 }, - { "start": "14:45", "end": "17:04", "available": 88, "total": 116 } - ] - }, - { - "auditorium": "BTS관 (9층 2관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "11:30", "end": "13:58", "available": 34, "total": 116 }, - { "start": "14:10", "end": "16:32", "available": 100, "total": 116 }, - { "start": "16:50", "end": "19:00", "available": 13, "total": 116 }, - { "start": "19:20", "end": "21:40", "available": 92, "total": 116 } - ] - } - ] - } - ] - }, - { - "date": "2025-11-03", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "크리클라이너 1관", - "format": "2D", - "showtimes": [ - { "start": "10:30", "end": "12:58", "available": 112, "total": 116 }, - { "start": "13:40", "end": "16:08", "available": 54, "total": 116 }, - { "start": "16:20", "end": "18:48", "available": 22, "total": 116 }, - { "start": "19:30", "end": "21:58", "available": 97, "total": 116 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "BTS관 (7층 1관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "09:50", "end": "12:10", "available": 81, "total": 116 }, - { "start": "12:30", "end": "14:56", "available": 99, "total": 116 }, - { "start": "15:20", "end": "17:39", "available": 61, "total": 116 } - ] - }, - { - "auditorium": "BTS관 (9층 2관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "11:10", "end": "13:38", "available": 45, "total": 116 }, - { "start": "14:00", "end": "16:22", "available": 88, "total": 116 }, - { "start": "16:40", "end": "18:58", "available": 24, "total": 116 }, - { "start": "19:10", "end": "21:30", "available": 90, "total": 116 } - ] - } - ] - } - ] - }, - { - "date": "2025-11-04", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "크리클라이너 1관", - "format": "2D", - "showtimes": [ - { "start": "11:00", "end": "13:28", "available": 106, "total": 116 }, - { "start": "13:50", "end": "16:18", "available": 33, "total": 116 }, - { "start": "16:40", "end": "19:08", "available": 5, "total": 116 }, - { "start": "19:20", "end": "21:48", "available": 84, "total": 116 }, - { "start": "22:10", "end": "00:34", "available": 116, "total": 116 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "BTS관 (7층 1관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "10:10", "end": "12:30", "available": 72, "total": 116 }, - { "start": "12:50", "end": "15:16", "available": 104, "total": 116 }, - { "start": "15:40", "end": "18:00", "available": 76, "total": 116 } - ] - }, - { - "auditorium": "BTS관 (9층 2관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "11:40", "end": "14:08", "available": 29, "total": 116 }, - { "start": "14:20", "end": "16:42", "available": 93, "total": 116 }, - { "start": "17:10", "end": "19:30", "available": 18, "total": 116 }, - { "start": "19:40", "end": "22:00", "available": 87, "total": 116 } - ] - } - ] - } - ] - } - ] - }, - { - "id": "m-002", - "title": "F1 더 무비", - "age_rating": "12", - "schedules": [ - { - "date": "2025-11-08", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "IMAX 1관", - "format": "IMAX", - "showtimes": [ - { "start": "10:00", "end": "12:15", "available": 45, "total": 50 }, - { "start": "13:30", "end": "15:45", "available": 12, "total": 50 }, - { "start": "17:00", "end": "19:15", "available": 8, "total": 50 }, - { "start": "20:30", "end": "22:45", "available": 35, "total": 50 } - ] - }, - { - "auditorium": "4DX 2관", - "format": "4DX", - "showtimes": [ - { "start": "11:15", "end": "13:30", "available": 28, "total": 40 }, - { "start": "15:45", "end": "18:00", "available": 5, "total": 40 }, - { "start": "19:15", "end": "21:30", "available": 22, "total": 40 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "IMAX 3관", - "format": "IMAX", - "showtimes": [ - { "start": "09:45", "end": "12:00", "available": 38, "total": 50 }, - { "start": "13:15", "end": "15:30", "available": 15, "total": 50 }, - { "start": "16:45", "end": "19:00", "available": 3, "total": 50 }, - { "start": "20:15", "end": "22:30", "available": 42, "total": 50 } - ] - } - ] - } - ] - }, - { - "date": "2025-11-06", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "IMAX 1관", - "format": "IMAX", - "showtimes": [ - { "start": "10:30", "end": "12:45", "available": 48, "total": 50 }, - { "start": "14:00", "end": "16:15", "available": 25, "total": 50 }, - { "start": "17:30", "end": "19:45", "available": 18, "total": 50 }, - { "start": "21:00", "end": "23:15", "available": 41, "total": 50 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "IMAX 3관", - "format": "IMAX", - "showtimes": [ - { "start": "10:00", "end": "12:15", "available": 33, "total": 50 }, - { "start": "13:30", "end": "15:45", "available": 7, "total": 50 }, - { "start": "17:00", "end": "19:15", "available": 12, "total": 50 }, - { "start": "20:30", "end": "22:45", "available": 39, "total": 50 } - ] - } - ] - } - ] - }, - { - "date": "2025-11-02", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "IMAX 1관", - "format": "IMAX", - "showtimes": [ - { "start": "09:30", "end": "11:45", "available": 42, "total": 50 }, - { "start": "12:45", "end": "15:00", "available": 18, "total": 50 }, - { "start": "15:30", "end": "17:45", "available": 6, "total": 50 }, - { "start": "18:15", "end": "20:30", "available": 29, "total": 50 }, - { "start": "21:00", "end": "23:15", "available": 44, "total": 50 } - ] - }, - { - "auditorium": "4DX 2관", - "format": "4DX", - "showtimes": [ - { "start": "10:30", "end": "12:45", "available": 15, "total": 40 }, - { "start": "14:00", "end": "16:15", "available": 3, "total": 40 }, - { "start": "17:30", "end": "19:45", "available": 1, "total": 40 }, - { "start": "20:00", "end": "22:15", "available": 25, "total": 40 } - ] - } - ] - } - ] - } - ] - }, - { - "id": "m-003", - "title": "귀멸의 칼날: 무한성", - "age_rating": "15", - "schedules": [ - { - "date": "2025-11-05", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:30", "end": "12:20", "available": 85, "total": 120 }, - { "start": "13:00", "end": "15:50", "available": 23, "total": 120 }, - { "start": "16:30", "end": "19:20", "available": 2, "total": 120 }, - { "start": "20:00", "end": "22:50", "available": 78, "total": 120 }, - { "start": "23:30", "end": "02:20", "available": 95, "total": 120 } - ] - }, - { - "auditorium": "4DX 3관", - "format": "4DX", - "showtimes": [ - { "start": "10:45", "end": "13:35", "available": 15, "total": 40 }, - { "start": "14:15", "end": "17:05", "available": 4, "total": 40 }, - { "start": "17:45", "end": "20:35", "available": 1, "total": 40 }, - { "start": "21:15", "end": "00:05", "available": 28, "total": 40 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:00", "end": "11:50", "available": 67, "total": 120 }, - { "start": "12:30", "end": "15:20", "available": 19, "total": 120 }, - { "start": "16:00", "end": "18:50", "available": 5, "total": 120 }, - { "start": "19:30", "end": "22:20", "available": 89, "total": 120 } - ] - }, - { - "auditorium": "Dolby Cinema 4관", - "format": "Dolby", - "showtimes": [ - { "start": "11:00", "end": "13:50", "available": 22, "total": 60 }, - { "start": "14:30", "end": "17:20", "available": 8, "total": 60 }, - { "start": "18:00", "end": "20:50", "available": 3, "total": 60 }, - { "start": "21:30", "end": "00:20", "available": 45, "total": 60 } - ] - } - ] - } - ] - }, - { - "date": "2025-11-03", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:45", "end": "12:35", "available": 92, "total": 120 }, - { "start": "13:15", "end": "16:05", "available": 31, "total": 120 }, - { "start": "16:45", "end": "19:35", "available": 7, "total": 120 }, - { "start": "20:15", "end": "23:05", "available": 84, "total": 120 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:30", "end": "12:20", "available": 74, "total": 120 }, - { "start": "13:00", "end": "15:50", "available": 26, "total": 120 }, - { "start": "16:30", "end": "19:20", "available": 11, "total": 120 }, - { "start": "20:00", "end": "22:50", "available": 96, "total": 120 } - ] - } - ] - } - ] - }, - { - "date": "2025-11-04", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "돌비시네마", - "format": "2D", - "showtimes": [ - { "start": "09:15", "end": "12:05", "available": 88, "total": 120 }, - { "start": "12:45", "end": "15:35", "available": 25, "total": 120 }, - { "start": "16:15", "end": "19:05", "available": 4, "total": 120 }, - { "start": "19:45", "end": "22:35", "available": 81, "total": 120 }, - { "start": "23:15", "end": "02:05", "available": 98, "total": 120 } - ] - } - ] - } - ] - } - ] - } - ] - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/MovieScheduleDTO.swift b/wizzy/MEGABOX/MegaBox/Sources/MovieScheduleDTO.swift deleted file mode 100644 index 351863e..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/MovieScheduleDTO.swift +++ /dev/null @@ -1,89 +0,0 @@ -// -// MovieScheduleDTO.swift -// MegaBox -// -// Created by 이서현 on 10/25/25. -// - -import Foundation - -struct APIResponse: Codable { - let status: String - let message: String - let data: MovieDataContainer -} - -struct MovieDataContainer: Codable { - let movies: [MovieData] -} - - -struct MovieData: Codable { - let id: String - let title: String - let age_rating: String - let schedules: [MovieScheduleDTO] -} - -struct MovieScheduleDTO: Codable { - let date: String - let areas: [MovieScheduleAreaDTO] -} - - -struct MovieScheduleAreaDTO: Codable { - let area: String - let items: [MovieAuditoriumDTO] -} - -struct MovieAuditoriumDTO: Codable { - let auditorium: String - let format: String - let showtimes: [MovieShowtimeDTO] -} - -struct MovieShowtimeDTO: Codable { - let start: String - let end: String - let available: Int - let total: Int -} - -struct MovieShowtimeGroup { - let movie: MovieModel - let showtimes: [Showtime] -} - - - -/* - "status": "success", - "message": "Showtimes fetched successfully", - "data": { - "movies": [ - { - "id": "m-001", - "title": "어쩔수가없다", - "age_rating": "15", - "schedules": [ - { - "date": "2025-09-22", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "크리클라이너 1관", - "format": "2D", - "showtimes": [ - { "start": "11:30", "end": "13:58", "available": 109, "total": 116 }, - { "start": "14:20", "end": "16:48", "available": 19, "total": 116 }, - { "start": "17:05", "end": "19:28", "available": 1, "total": 116 }, - { "start": "19:45", "end": "22:02", "available": 100, "total": 116 }, - { "start": "22:20", "end": "00:04", "available": 116, "total": 116 } - ] - } - ] - } - */ - diff --git a/wizzy/MEGABOX/MegaBox/Sources/Navigation/NavigationRouter.swift b/wizzy/MEGABOX/MegaBox/Sources/Navigation/NavigationRouter.swift deleted file mode 100644 index d1d55f0..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Navigation/NavigationRouter.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// NavigationRouter.swift -// MegaBox -// -// Created by 이서현 on 9/29/25. -// - -import SwiftUI -import Foundation - -@Observable -class NavigationRouter { - var path = NavigationPath() - - func push(_ route: Route) { - path.append(route) - } - - func pop() { - if !path.isEmpty { - path.removeLast() - } - } - - func reset() { - path = NavigationPath() - } - -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Navigation/Route.swift b/wizzy/MEGABOX/MegaBox/Sources/Navigation/Route.swift deleted file mode 100644 index ad03237..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Navigation/Route.swift +++ /dev/null @@ -1,19 +0,0 @@ -// -// Route.swift -// MegaBox -// -// Created by 이서현 on 9/29/25. -// - - -import SwiftUI - -enum Route: Hashable { - case home - case login - case detail(MovieModel) - case profile - case tab(index: Int) - case booking - case mobileOrder -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Network/APITargetType.swift b/wizzy/MEGABOX/MegaBox/Sources/Network/APITargetType.swift deleted file mode 100644 index 37663ce..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Network/APITargetType.swift +++ /dev/null @@ -1,28 +0,0 @@ -// -// APITargetType.swift -// MegaBox -// -// Created by 이서현 on 11/8/25. -// - -import Foundation -import Moya - -protocol APITargetType: TargetType {} - -extension APITargetType { - var baseURL: URL { - return URL(string: "https://api.themoviedb.org/3/movie")! - } - - var headers: [String : String]? { - switch task { - case .requestJSONEncodable, .requestParameters: - return ["Content-Type": "application/json"] - case .uploadMultipart: - return ["Content-Type": "multipart/form-data"] - default: - return nil - } - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Network/ContentsViewModel.swift b/wizzy/MEGABOX/MegaBox/Sources/Network/ContentsViewModel.swift deleted file mode 100644 index 0d1dd69..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Network/ContentsViewModel.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// ContentsViewModel.swift -// MegaBox -// -// Created by 이서현 on 11/12/25. -// - - -import Foundation -import Moya - -@Observable -class ContentsViewModel { - var nowPlaying: NowPlayingResponse? - var movieCards: [MovieModel] = [] - var movieDetails: [MovieDetailModel] = [] - let provider: MoyaProvider - - init() { - let logger = NetworkLoggerPlugin(configuration: .init(logOptions: [.verbose])) - self.provider = MoyaProvider(plugins: [logger]) - } - - @MainActor - func getNowPlayingMovie(language: String, page: Int, region: String) async { - do { - let response = try await provider.requestAsync(.getMovie(language: language, page: page, region: region)) - let decoded = try JSONDecoder().decode(NowPlayingResponse.self, from: response.data) - self.nowPlaying = decoded - // map -> 화면용 모델들 - self.movieCards = decoded.results.map { $0.toModel() } - self.movieDetails = decoded.results.map { $0.toDetailModel() } - } catch { - print("[getNowPlayingMovie] request/decode error:", error) - } - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Network/MovieDTO.swift b/wizzy/MEGABOX/MegaBox/Sources/Network/MovieDTO.swift deleted file mode 100644 index 71c9898..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Network/MovieDTO.swift +++ /dev/null @@ -1,96 +0,0 @@ -// -// MovieDTO.swift -// MegaBox -// -// Created by 이서현 on 11/8/25. -// - -import Foundation - -// 1) 전체 응답 -struct NowPlayingResponse: Codable { - let dates: NowPlayingDates? - let page: Int - let results: [MovieDTO] - let totalPages: Int - let totalResults: Int - - enum CodingKeys: String, CodingKey { - case dates - case page - case results - case totalPages = "total_pages" - case totalResults = "total_results" - } -} - -// 2) dates 객체 -struct NowPlayingDates: Codable { - let maximum: String //fix ; Date로? - let minimum: String -} - -// 3) 영화 하나 -struct MovieDTO: Codable { - let adult: Bool - let backdropPath: String? - let genreIDs: [Int] - let id: Int - let originalLanguage: String - let originalTitle: String - let overview: String - let popularity: Double - let posterPath: String? - let releaseDate: String - let title: String - let video: Bool - let voteAverage: Double - let voteCount: Int - - enum CodingKeys: String, CodingKey { - case adult - case backdropPath = "backdrop_path" - case genreIDs = "genre_ids" - case id - case originalLanguage = "original_language" - case originalTitle = "original_title" - case overview - case popularity - case posterPath = "poster_path" - case releaseDate = "release_date" - case title - case video - case voteAverage = "vote_average" - case voteCount = "vote_count" - } -} - - -//MARK: - 영화 모델 - -extension MovieDTO { - func toModel() -> MovieModel { - return MovieModel( - title: title, - poster: posterPath ?? "", - countAudience: nil // TMDB 응답엔 없음 - ) - } -} - - -//MARK: - 영화 상세 모델 - -extension MovieDTO { - func toDetailModel() -> MovieDetailModel { - return MovieDetailModel( - id: id, - title: title, - originalTitle: originalTitle, - overview: overview, - posterPath: posterPath, - backdropPath: backdropPath, - releaseDate: releaseDate - ) - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Network/MoyaProvider.swift b/wizzy/MEGABOX/MegaBox/Sources/Network/MoyaProvider.swift deleted file mode 100644 index d6fdf65..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Network/MoyaProvider.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// MoyaProvider.swift -// MegaBox -// -// Created by 이서현 on 11/8/25. -// - -import Moya -import Foundation - -extension MoyaProvider { - func requestAsync(_ target: Target) async throws -> Response { - try await withCheckedThrowingContinuation { continuation in - self.request(target) { result in - switch result { - case .success(let response): - continuation.resume(returning: response) - case .failure(let error): - continuation.resume(throwing: error) - } - } - } - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Network/UserRouter.swift b/wizzy/MEGABOX/MegaBox/Sources/Network/UserRouter.swift deleted file mode 100644 index a0425e0..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Network/UserRouter.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// UserRouter.swift -// MegaBox -// -// Created by 이서현 on 11/8/25. -// - -import Foundation -import Moya - - -enum UserRouter { - case getMovie(language: String, page: Int, region: String) -} - -extension UserRouter: APITargetType { - var path: String { - return "/now_playing" - } - - var method: Moya.Method { - switch self { - case .getMovie : - return .get - } - } - - var task: Moya.Task { - switch self { - case .getMovie(let language, let page, let region): - return .requestParameters(parameters: ["language": language, "page": page, "region": region], encoding: URLEncoding.queryString) - } - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/AppleButton.imageset/AppleButton.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/AppleButton.imageset/AppleButton.pdf deleted file mode 100644 index 41bf128..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/AppleButton.imageset/AppleButton.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/AppleButton.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/AppleButton.imageset/Contents.json deleted file mode 100644 index 2af8853..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/AppleButton.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "AppleButton.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/KakaoButton.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/KakaoButton.imageset/Contents.json deleted file mode 100644 index 1dbf18e..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/KakaoButton.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "KakaoButton.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/KakaoButton.imageset/KakaoButton.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/KakaoButton.imageset/KakaoButton.pdf deleted file mode 100644 index c05ab09..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/KakaoButton.imageset/KakaoButton.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/NaverButton.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/NaverButton.imageset/Contents.json deleted file mode 100644 index 8b6869f..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/NaverButton.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "NaverButton.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/NaverButton.imageset/NaverButton.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/NaverButton.imageset/NaverButton.pdf deleted file mode 100644 index c0440f6..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/NaverButton.imageset/NaverButton.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/cartIcon.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/cartIcon.imageset/Contents.json deleted file mode 100644 index c726a2b..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/cartIcon.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "cartIcon.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/cartIcon.imageset/cartIcon.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/cartIcon.imageset/cartIcon.pdf deleted file mode 100644 index 1f9a5e0..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/cartIcon.imageset/cartIcon.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/chevron_right.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/chevron_right.imageset/Contents.json deleted file mode 100644 index 800aafd..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/chevron_right.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "chevron_right.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/chevron_right.imageset/chevron_right.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/chevron_right.imageset/chevron_right.pdf deleted file mode 100644 index e12213e..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/chevron_right.imageset/chevron_right.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/locationIcon.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/locationIcon.imageset/Contents.json deleted file mode 100644 index 0dc8a6a..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/locationIcon.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "locationIcon.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/locationIcon.imageset/locationIcon.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/locationIcon.imageset/locationIcon.pdf deleted file mode 100644 index 3b647b3..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/locationIcon.imageset/locationIcon.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/meboxHeader.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/meboxHeader.imageset/Contents.json deleted file mode 100644 index 0de0d63..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/meboxHeader.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "meboxLogo 1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/meboxHeader.imageset/meboxLogo 1.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/meboxHeader.imageset/meboxLogo 1.pdf deleted file mode 100644 index be174c0..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/meboxHeader.imageset/meboxLogo 1.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/megaboxLogo1.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/megaboxLogo1.imageset/Contents.json deleted file mode 100644 index 0de0d63..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/megaboxLogo1.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "meboxLogo 1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/megaboxLogo1.imageset/meboxLogo 1.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/megaboxLogo1.imageset/meboxLogo 1.pdf deleted file mode 100644 index e731b2c..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/megaboxLogo1.imageset/meboxLogo 1.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/badgeMenu.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/badgeMenu.imageset/Contents.json deleted file mode 100644 index cc12a5c..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/badgeMenu.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "badgeMenu.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/badgeMenu.imageset/badgeMenu.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/badgeMenu.imageset/badgeMenu.pdf deleted file mode 100644 index d4487f8..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/badgeMenu.imageset/badgeMenu.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/badgeRecommand.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/badgeRecommand.imageset/Contents.json deleted file mode 100644 index 7ca7bfb..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/badgeRecommand.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "badgeRecommand.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/badgeRecommand.imageset/badgeRecommand.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/badgeRecommand.imageset/badgeRecommand.pdf deleted file mode 100644 index 00073cc..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/badgeRecommand.imageset/badgeRecommand.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/mappin.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/mappin.imageset/Contents.json deleted file mode 100644 index 4f75a04..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/mappin.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "mappin.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/mappin.imageset/mappin.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/mappin.imageset/mappin.pdf deleted file mode 100644 index edd0411..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/mappin.imageset/mappin.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuBest1.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuBest1.imageset/Contents.json deleted file mode 100644 index d843056..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuBest1.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "menuBest1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuBest1.imageset/menuBest1.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuBest1.imageset/menuBest1.pdf deleted file mode 100644 index 26dc09f..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuBest1.imageset/menuBest1.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuBest2.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuBest2.imageset/Contents.json deleted file mode 100644 index 9d721f6..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuBest2.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "menuBest2.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuBest2.imageset/menuBest2.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuBest2.imageset/menuBest2.pdf deleted file mode 100644 index 12d2159..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuBest2.imageset/menuBest2.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuImage1.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuImage1.imageset/Contents.json deleted file mode 100644 index 8d69422..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuImage1.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "menuImage1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuImage1.imageset/menuImage1.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuImage1.imageset/menuImage1.pdf deleted file mode 100644 index 5b263df..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuImage1.imageset/menuImage1.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuImage2.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuImage2.imageset/Contents.json deleted file mode 100644 index 7502901..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuImage2.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "menuImage2.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuImage2.imageset/menuImage2.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuImage2.imageset/menuImage2.pdf deleted file mode 100644 index 2ab8d12..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuImage2.imageset/menuImage2.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuImage3.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuImage3.imageset/Contents.json deleted file mode 100644 index 0bd3e46..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuImage3.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "menuImage3.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuImage3.imageset/menuImage3.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuImage3.imageset/menuImage3.pdf deleted file mode 100644 index af0ab49..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuImage3.imageset/menuImage3.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuInsideOut.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuInsideOut.imageset/Contents.json deleted file mode 100644 index fdd0e14..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuInsideOut.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "menuInsideOut.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuInsideOut.imageset/menuInsideOut.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuInsideOut.imageset/menuInsideOut.pdf deleted file mode 100644 index e769e2d..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuInsideOut.imageset/menuInsideOut.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuTicketBook.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuTicketBook.imageset/Contents.json deleted file mode 100644 index 1923da6..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuTicketBook.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "menuTicketBook.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuTicketBook.imageset/menuTicketBook.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuTicketBook.imageset/menuTicketBook.pdf deleted file mode 100644 index 32b039a..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/menuTicketBook.imageset/menuTicketBook.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/motorcycleIcon.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/motorcycleIcon.imageset/Contents.json deleted file mode 100644 index 3251bfe..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/motorcycleIcon.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "motorcycleIcon.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/motorcycleIcon.imageset/motorcycleIcon.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/motorcycleIcon.imageset/motorcycleIcon.pdf deleted file mode 100644 index c01d424..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/motorcycleIcon.imageset/motorcycleIcon.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/popcornIcon.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/popcornIcon.imageset/Contents.json deleted file mode 100644 index 93f34dc..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/popcornIcon.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "popcornIcon.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/popcornIcon.imageset/popcornIcon.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/popcornIcon.imageset/popcornIcon.pdf deleted file mode 100644 index fb111e7..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/popcornIcon.imageset/popcornIcon.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/presentIcon.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/presentIcon.imageset/Contents.json deleted file mode 100644 index 4d1bdae..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/presentIcon.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "presentIcon.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/presentIcon.imageset/presentIcon.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/presentIcon.imageset/presentIcon.pdf deleted file mode 100644 index 9e38984..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/presentIcon.imageset/presentIcon.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/ticketIcon.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/ticketIcon.imageset/Contents.json deleted file mode 100644 index c070b34..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/ticketIcon.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "ticketIcon.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/ticketIcon.imageset/ticketIcon.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/ticketIcon.imageset/ticketIcon.pdf deleted file mode 100644 index dd3601b..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/mobileOrder/ticketIcon.imageset/ticketIcon.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieFeed1.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieFeed1.imageset/Contents.json deleted file mode 100644 index f0f3163..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieFeed1.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "movieFeed1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieFeed1.imageset/movieFeed1.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieFeed1.imageset/movieFeed1.pdf deleted file mode 100644 index 6f93d11..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieFeed1.imageset/movieFeed1.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieFeed2.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieFeed2.imageset/Contents.json deleted file mode 100644 index 9ea9d37..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieFeed2.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "movieFeed2.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieFeed2.imageset/movieFeed2.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieFeed2.imageset/movieFeed2.pdf deleted file mode 100644 index 5782f1f..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieFeed2.imageset/movieFeed2.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieFeed3.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieFeed3.imageset/Contents.json deleted file mode 100644 index e81ca62..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieFeed3.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "movieFeed3.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieFeed3.imageset/movieFeed3.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieFeed3.imageset/movieFeed3.pdf deleted file mode 100644 index 5f6369b..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieFeed3.imageset/movieFeed3.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieIcon.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieIcon.imageset/Contents.json deleted file mode 100644 index f2315e8..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieIcon.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "movieIcon.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieIcon.imageset/movieIcon.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieIcon.imageset/movieIcon.pdf deleted file mode 100644 index c459b81..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/movieIcon.imageset/movieIcon.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/orderIcon.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/orderIcon.imageset/Contents.json deleted file mode 100644 index 2dcc2d3..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/orderIcon.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "orderIcon.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/orderIcon.imageset/orderIcon.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/orderIcon.imageset/orderIcon.pdf deleted file mode 100644 index d587373..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/orderIcon.imageset/orderIcon.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster1.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster1.imageset/Contents.json deleted file mode 100644 index 2b50739..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster1.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=어쩔수가 없다.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster1.imageset/Property 1=\354\226\264\354\251\224\354\210\230\352\260\200 \354\227\206\353\213\244.pdf" "b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster1.imageset/Property 1=\354\226\264\354\251\224\354\210\230\352\260\200 \354\227\206\353\213\244.pdf" deleted file mode 100644 index da5eedd..0000000 Binary files "a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster1.imageset/Property 1=\354\226\264\354\251\224\354\210\230\352\260\200 \354\227\206\353\213\244.pdf" and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster2.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster2.imageset/Contents.json deleted file mode 100644 index cae23d5..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster2.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=무한성.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster2.imageset/Property 1=\353\254\264\355\225\234\354\204\261.pdf" "b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster2.imageset/Property 1=\353\254\264\355\225\234\354\204\261.pdf" deleted file mode 100644 index 866d085..0000000 Binary files "a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster2.imageset/Property 1=\353\254\264\355\225\234\354\204\261.pdf" and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster3.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster3.imageset/Contents.json deleted file mode 100644 index d6f4eb2..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster3.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=f1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster3.imageset/Property 1=f1.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster3.imageset/Property 1=f1.pdf deleted file mode 100644 index 360a82b..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster3.imageset/Property 1=f1.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster4.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster4.imageset/Contents.json deleted file mode 100644 index 272357e..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster4.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=얼굴.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster4.imageset/Property 1=\354\226\274\352\265\264.pdf" "b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster4.imageset/Property 1=\354\226\274\352\265\264.pdf" deleted file mode 100644 index 64ea776..0000000 Binary files "a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster4.imageset/Property 1=\354\226\274\352\265\264.pdf" and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster5.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster5.imageset/Contents.json deleted file mode 100644 index de66aed..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster5.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=모노노케 히메.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster5.imageset/Property 1=\353\252\250\353\205\270\353\205\270\354\274\200 \355\236\210\353\251\224.pdf" "b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster5.imageset/Property 1=\353\252\250\353\205\270\353\205\270\354\274\200 \355\236\210\353\251\224.pdf" deleted file mode 100644 index c96549c..0000000 Binary files "a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster5.imageset/Property 1=\353\252\250\353\205\270\353\205\270\354\274\200 \355\236\210\353\251\224.pdf" and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster6.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster6.imageset/Contents.json deleted file mode 100644 index 1fe2d8c..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster6.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "poster6.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster6.imageset/poster6.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster6.imageset/poster6.pdf deleted file mode 100644 index 1877e19..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster6.imageset/poster6.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster7.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster7.imageset/Contents.json deleted file mode 100644 index b4558f5..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster7.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "poster7.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster7.imageset/poster7.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster7.imageset/poster7.pdf deleted file mode 100644 index 8716dcb..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster7.imageset/poster7.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster8.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster8.imageset/Contents.json deleted file mode 100644 index 4bcfe75..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster8.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "poster8.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster8.imageset/poster8.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster8.imageset/poster8.pdf deleted file mode 100644 index fb00387..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/poster8.imageset/poster8.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/posterF1.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/posterF1.imageset/Contents.json deleted file mode 100644 index 622b1be..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/posterF1.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "posterF1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/posterF1.imageset/posterF1.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/posterF1.imageset/posterF1.pdf deleted file mode 100644 index b75e118..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/posterF1.imageset/posterF1.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/sofaIcon.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/sofaIcon.imageset/Contents.json deleted file mode 100644 index a917153..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/sofaIcon.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "sofaIcon.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/sofaIcon.imageset/sofaIcon.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/sofaIcon.imageset/sofaIcon.pdf deleted file mode 100644 index d265768..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/sofaIcon.imageset/sofaIcon.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/topF1.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/topF1.imageset/Contents.json deleted file mode 100644 index 6fbfbab..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/topF1.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "topF1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/topF1.imageset/topF1.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/topF1.imageset/topF1.pdf deleted file mode 100644 index f92a675..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/topF1.imageset/topF1.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/umc1.imageset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/umc1.imageset/Contents.json deleted file mode 100644 index 6457313..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/umc1.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "umc 1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/umc1.imageset/umc 1.pdf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/umc1.imageset/umc 1.pdf deleted file mode 100644 index d356161..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Assets.xcassets/umc1.imageset/umc 1.pdf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue00.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue00.colorset/Contents.json deleted file mode 100644 index e0075b9..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue00.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFA", - "green" : "0xF7", - "red" : "0xF3" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFA", - "green" : "0xF7", - "red" : "0xF3" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue01.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue01.colorset/Contents.json deleted file mode 100644 index 83e57dc..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue01.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF7", - "green" : "0xF2", - "red" : "0xED" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF7", - "green" : "0xF2", - "red" : "0xED" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue02.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue02.colorset/Contents.json deleted file mode 100644 index c1c58df..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue02.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEF", - "green" : "0xE5", - "red" : "0xDA" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEF", - "green" : "0xE5", - "red" : "0xDA" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue03.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue03.colorset/Contents.json deleted file mode 100644 index a586a7e..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue03.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xCC", - "green" : "0xAA", - "red" : "0x88" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xCC", - "green" : "0xAA", - "red" : "0x88" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue04.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue04.colorset/Contents.json deleted file mode 100644 index 497d343..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue04.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xB8", - "green" : "0x99", - "red" : "0x7A" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xB8", - "green" : "0x99", - "red" : "0x7A" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue05.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue05.colorset/Contents.json deleted file mode 100644 index 8772f8e..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue05.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA3", - "green" : "0x88", - "red" : "0x6D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA3", - "green" : "0x88", - "red" : "0x6D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue06.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue06.colorset/Contents.json deleted file mode 100644 index f2bb34c..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue06.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x99", - "green" : "0x80", - "red" : "0x66" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x99", - "green" : "0x80", - "red" : "0x66" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue07.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue07.colorset/Contents.json deleted file mode 100644 index e2d0333..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue07.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x7A", - "green" : "0x66", - "red" : "0x52" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x7A", - "green" : "0x66", - "red" : "0x52" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue08.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue08.colorset/Contents.json deleted file mode 100644 index a8fe629..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue08.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5C", - "green" : "0x4C", - "red" : "0x3D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5C", - "green" : "0x4C", - "red" : "0x3D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue09.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue09.colorset/Contents.json deleted file mode 100644 index be7f767..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/blue09.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x47", - "green" : "0x3B", - "red" : "0x30" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x47", - "green" : "0x3B", - "red" : "0x30" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray00.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray00.colorset/Contents.json deleted file mode 100644 index d2e4805..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray00.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF2", - "green" : "0xF2", - "red" : "0xF2" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF2", - "green" : "0xF2", - "red" : "0xF2" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray01.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray01.colorset/Contents.json deleted file mode 100644 index 771d19d..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray01.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEB", - "green" : "0xEB", - "red" : "0xEB" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEB", - "green" : "0xEB", - "red" : "0xEB" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray02.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray02.colorset/Contents.json deleted file mode 100644 index 68cea4f..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray02.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD5", - "green" : "0xD5", - "red" : "0xD5" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD5", - "green" : "0xD5", - "red" : "0xD5" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray03.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray03.colorset/Contents.json deleted file mode 100644 index 6676967..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray03.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x78", - "green" : "0x78", - "red" : "0x78" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x78", - "green" : "0x78", - "red" : "0x78" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray04.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray04.colorset/Contents.json deleted file mode 100644 index 5a493e5..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray04.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x6C", - "green" : "0x6C", - "red" : "0x6C" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x6C", - "green" : "0x6C", - "red" : "0x6C" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray05.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray05.colorset/Contents.json deleted file mode 100644 index 7e45b56..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray05.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x60", - "green" : "0x60", - "red" : "0x60" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x60", - "green" : "0x60", - "red" : "0x60" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray06.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray06.colorset/Contents.json deleted file mode 100644 index 3db5e58..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray06.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5A", - "green" : "0x5A", - "red" : "0x5A" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5A", - "green" : "0x5A", - "red" : "0x5A" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray07.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray07.colorset/Contents.json deleted file mode 100644 index 3f9d5b5..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray07.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x48", - "green" : "0x48", - "red" : "0x48" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x48", - "green" : "0x48", - "red" : "0x48" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray08.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray08.colorset/Contents.json deleted file mode 100644 index 85ca7a9..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray08.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x36", - "green" : "0x36", - "red" : "0x36" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x36", - "green" : "0x36", - "red" : "0x36" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray09.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray09.colorset/Contents.json deleted file mode 100644 index 85730c1..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/gray09.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x2A", - "green" : "0x2A", - "red" : "0x2A" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x2A", - "green" : "0x2A", - "red" : "0x2A" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/linearColor1.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/linearColor1.colorset/Contents.json deleted file mode 100644 index fa14e75..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/linearColor1.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFF", - "green" : "0x8B", - "red" : "0xAB" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFF", - "green" : "0x8B", - "red" : "0xAB" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/linearColor2.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/linearColor2.colorset/Contents.json deleted file mode 100644 index fb00121..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/linearColor2.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF3", - "green" : "0xAE", - "red" : "0x8E" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF3", - "green" : "0xAE", - "red" : "0x8E" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/linearColor3.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/linearColor3.colorset/Contents.json deleted file mode 100644 index ff53e74..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/linearColor3.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEC", - "green" : "0xCC", - "red" : "0x5D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEC", - "green" : "0xCC", - "red" : "0x5D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple00.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple00.colorset/Contents.json deleted file mode 100644 index a56e9a7..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple00.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFB", - "green" : "0xE7", - "red" : "0xF0" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFB", - "green" : "0xE7", - "red" : "0xF0" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple01.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple01.colorset/Contents.json deleted file mode 100644 index 054d393..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple01.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF9", - "green" : "0xDB", - "red" : "0xE8" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF9", - "green" : "0xDB", - "red" : "0xE8" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple02.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple02.colorset/Contents.json deleted file mode 100644 index 1e7b4e7..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple02.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF3", - "green" : "0xB4", - "red" : "0xCF" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF3", - "green" : "0xB4", - "red" : "0xCF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple03.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple03.colorset/Contents.json deleted file mode 100644 index 4029bef..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple03.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD8", - "green" : "0x0E", - "red" : "0x65" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD8", - "green" : "0x0E", - "red" : "0x65" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple04.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple04.colorset/Contents.json deleted file mode 100644 index 45b8d3c..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple04.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xC2", - "green" : "0x0D", - "red" : "0x5B" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xC2", - "green" : "0x0D", - "red" : "0x5B" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple05.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple05.colorset/Contents.json deleted file mode 100644 index 2f6c7ed..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple05.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xAD", - "green" : "0x0B", - "red" : "0x51" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xAD", - "green" : "0x0B", - "red" : "0x51" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple06.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple06.colorset/Contents.json deleted file mode 100644 index ed745b4..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple06.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA2", - "green" : "0x0B", - "red" : "0x4C" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA2", - "green" : "0x0B", - "red" : "0x4C" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple07.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple07.colorset/Contents.json deleted file mode 100644 index f753c3d..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple07.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x82", - "green" : "0x08", - "red" : "0x3D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x82", - "green" : "0x08", - "red" : "0x3D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple08.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple08.colorset/Contents.json deleted file mode 100644 index 9490850..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple08.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x61", - "green" : "0x06", - "red" : "0x2D" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x61", - "green" : "0x06", - "red" : "0x2D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple09.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple09.colorset/Contents.json deleted file mode 100644 index 333e234..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/purple09.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x4C", - "green" : "0x05", - "red" : "0x23" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x4C", - "green" : "0x05", - "red" : "0x23" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/tag.colorset/Contents.json b/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/tag.colorset/Contents.json deleted file mode 100644 index f2ebe2b..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Colors.xcassets/tag.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD2", - "green" : "0xCD", - "red" : "0x47" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD2", - "green" : "0xCD", - "red" : "0x47" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/FontManager.swift b/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/FontManager.swift deleted file mode 100644 index 36d6041..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/FontManager.swift +++ /dev/null @@ -1,133 +0,0 @@ -// -// FontManager.swift -// MegaBox -// -// Created by 이서현 on 9/15/25. -// - -import Foundation -import SwiftUI - -extension Font { - enum Pretend { - case extraBold - case bold - case semibold - case medium - case regular - case light - - var value: String { - switch self { - case .extraBold: - return "Pretendard-ExtraBold" - case .bold: - return "Pretendard-Bold" - case .semibold: - return "Pretendard-SemiBold" - case .medium: - return "Pretendard-Medium" - case .regular: - return "Pretendard-Regular" - case .light: - return "Pretendard-Light" - } - } - } - - static func pretend(type: Pretend, size: CGFloat) -> Font { - return .custom(type.value, size: size) - } - - static var PretendardExtraBold24: Font { - return .pretend(type: .extraBold, size: 24) - } - - static var PretendardBold18: Font { - return .pretend(type: .bold, size: 18) - } - - static var PretendardBold22: Font { - return .pretend(type: .bold, size: 22) - } - - static var PretendardBold24: Font { - return .pretend(type: .bold, size: 24) - } - - static var PretendardSemiBold38: Font { - return .pretend(type: .semibold, size: 38) - } - - static var PretendardSemiBold24: Font { - return .pretend(type: .semibold, size: 24) - } - - static var PretendardSemiBold18: Font { - return .pretend(type: .semibold, size: 18) - } - - static var PretendardSemiBold16: Font { - return .pretend(type: .semibold, size: 16) - } - - static var PretendardSemiBold14: Font { - return .pretend(type: .semibold, size: 14) - } - - static var PretendardSemiBold13: Font { - return .pretend(type: .semibold, size: 13) - } - - static var PretendardSemiBold12: Font { - return .pretend(type: .semibold, size: 12) - } - - static var PretendardRegular20: Font { - return .pretend(type: .regular, size: 20) - } - - static var PretendardRegular18: Font { - return .pretend(type: .regular, size: 18) - } - - static var PretendardRegular13: Font { - return .pretend(type: .regular, size: 13) - } - - static var PretendardRegular12: Font { - return .pretend(type: .regular, size: 12) - } - - static var PretendardRegular09: Font { - return .pretend(type: .regular, size: 09) - } - - static var PretendardMedium18: Font { - return .pretend(type: .medium, size: 18) - } - - static var PretendardMedium16: Font { - return .pretend(type: .medium, size: 16) - } - - static var PretendardMedium14: Font { - return .pretend(type: .medium, size: 14) - } - - static var PretendardMedium13: Font { - return .pretend(type: .medium, size: 13) - } - - static var PretendardMedium10: Font { - return .pretend(type: .medium, size: 10) - } - - static var PretendardMedium8: Font { - return .pretend(type: .medium, size: 8) - } - - static var PretendardLight14: Font { - return .pretend(type: .light, size: 14) - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-Black.otf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-Black.otf deleted file mode 100644 index a0d849e..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-Black.otf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-Bold.otf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-Bold.otf deleted file mode 100644 index 8e5e30a..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-Bold.otf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-ExtraBold.otf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-ExtraBold.otf deleted file mode 100644 index 388f3ca..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-ExtraBold.otf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-ExtraLight.otf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-ExtraLight.otf deleted file mode 100644 index 40c8b69..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-ExtraLight.otf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-Light.otf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-Light.otf deleted file mode 100644 index 228679e..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-Light.otf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-Medium.otf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-Medium.otf deleted file mode 100644 index 0575069..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-Medium.otf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-Regular.otf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-Regular.otf deleted file mode 100644 index 08bf4cf..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-Regular.otf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-SemiBold.otf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-SemiBold.otf deleted file mode 100644 index e7e36ab..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-SemiBold.otf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-Thin.otf b/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-Thin.otf deleted file mode 100644 index 77e792d..0000000 Binary files a/wizzy/MEGABOX/MegaBox/Sources/Resources/Font/Pretendard-Thin.otf and /dev/null differ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Services/KeychainService.swift b/wizzy/MEGABOX/MegaBox/Sources/Services/KeychainService.swift deleted file mode 100644 index 44f3518..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Services/KeychainService.swift +++ /dev/null @@ -1,116 +0,0 @@ -// -// KeychainService.swift -// MegaBox -// -// Created by 이서현 on 11/5/25. -// -import Foundation -import Security - -class KeychainService { - - static let shared = KeychainService() - - private init() {} - - /// Keychain에 사용자의 비밀번호를 저장합니다. - /// 이미 동일한 계정과 서비스 조합의 항목이 존재하는 경우, 기존 항목을 삭제하고 새로 저장합니다. - /// - Parameters: - /// - account: 아이디/이메일 - /// - service: 비밀번호가 사용되는 서비스 이름 (예: "com.example.myapp.login") - /// - password: 비밀번호 - /// - Returns: 저장 작업의 결과 상태 코드 (예: `errSecSuccess`면 성공) - @discardableResult - func savePasswordToKeychain(account: String, service: String, password: String) -> OSStatus { - // 1. 저장할 데이터를 Data 타입으로 변환 - guard let passwordData = password.data(using: .utf8) else { - return errSecParam // 잘못된 데이터 - } - - // 2. Keychain Item 딕셔너리 구성 - let query: [String: Any] = [ - kSecClass as String: kSecClassGenericPassword, // 저장 유형: 일반 비밀번호 - kSecAttrAccount as String: account, // 계정 식별자 - kSecAttrService as String: service, // 서비스 이름 - kSecValueData as String: passwordData, // 실제 저장할 데이터 - kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlocked // 접근 가능 조건 - ] - - // 3. 이미 같은 항목이 있다면 삭제 (중복 방지) - SecItemDelete(query as CFDictionary) - - // 4. 새 항목 추가 - let status = SecItemAdd(query as CFDictionary, nil) - return status - } - - /// Keychain에서 저장된 데이터를 불러옵니다. - /// - Parameters: - /// - account: 계정 식별자 (예: 이메일 주소) - /// - service: 서비스 이름 (예: "com.myapp.login") - /// - Returns: 저장된 문자열 데이터 (ex: 비밀번호, 토큰 등) 또는 nil - @discardableResult - func load(account: String, service: String) -> String? { - // 1. 검색 쿼리 구성 - let query: [String: Any] = [ - kSecClass as String: kSecClassGenericPassword, // 일반 비밀번호 클래스 - kSecAttrAccount as String: account, // 계정 - kSecAttrService as String: service, // 서비스 - kSecReturnData as String: true, // 데이터를 반환하도록 요청 - kSecMatchLimit as String: kSecMatchLimitOne // 하나만 반환 - ] - - // 2. 검색 결과 저장 변수 - var item: CFTypeRef? - - // 3. Keychain에서 항목 검색 - let status = SecItemCopyMatching(query as CFDictionary, &item) - - // 4. 상태 확인 및 결과 처리 - guard status == errSecSuccess else { - print("Keychain load 실패 - status: \(status)") - return nil - } - - // 5. Data → String 변환 - guard let data = item as? Data, - let result = String(data: data, encoding: .utf8) else { - print("Keychain load 실패 - 데이터 디코딩 실패") - return nil - } - - return result - } - - /// Keychain에서 지정된 계정과 서비스에 해당하는 항목을 삭제합니다. - /// - Parameters: - /// - account: 계정 식별자 (예: 사용자 이메일) - /// - service: 서비스 이름 (예: "com.example.myapp") - /// - Returns: Keychain 삭제 작업의 상태 코드 (`errSecSuccess` 등) - @discardableResult - func delete(account: String, service: String) -> OSStatus { - // 1. 삭제할 항목을 식별할 쿼리 구성 - let query: [String: Any] = [ - kSecClass as String: kSecClassGenericPassword, // 삭제 대상 유형 - kSecAttrAccount as String: account, // 계정 식별자 - kSecAttrService as String: service // 서비스 구분자 - ] - - // 2. 항목 삭제 시도 - let status = SecItemDelete(query as CFDictionary) - - // 3. 상태 확인 및 로그 출력 - if status == errSecSuccess { - print("Keychain 삭제 성공 - [\(service) : \(account)]") - } else if status == errSecItemNotFound { - print("Keychain 항목 없음 - [\(service) : \(account)]") - } else { - print("Keychain 삭제 실패 - status: \(status)") - } - - return status - } - - - -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Services/TokenModel.swift b/wizzy/MEGABOX/MegaBox/Sources/Services/TokenModel.swift deleted file mode 100644 index f391f14..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Services/TokenModel.swift +++ /dev/null @@ -1,12 +0,0 @@ -// -// TokenModel.swift -// MegaBox -// -// Created by 이서현 on 11/5/25. -// - - -struct TokenInfo: Codable { - let accessToken: String - let refreshToken: String -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/ViewModels/CalendarViewModel.swift b/wizzy/MEGABOX/MegaBox/Sources/ViewModels/CalendarViewModel.swift deleted file mode 100644 index 7b2af33..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/ViewModels/CalendarViewModel.swift +++ /dev/null @@ -1,139 +0,0 @@ -// -// CalendarViewModel.swift -// MegaBox -// -// Created by 이서현 on 10/5/25. -// - -import Foundation - -@Observable -class CalendarViewModel { - var currentMonth: Date // 현재 보고 있는 달의 기준 날짜 - var selectedDate: Date // 사용자가 현재 선택한 날짜 - var calendar: Calendar // 날짜 계싼을 위한 Calendar 객체 - - var currentMonthYear: Int { // 현재 보고 있는 연도를 계산해서 연도로 반환 - Calendar.current.component(.year, from: currentMonth) - } - - init(currentMonth: Date = Date(), selectedDate: Date = Date(), calendar: Calendar = Calendar.current) { - self.currentMonth = currentMonth - self.selectedDate = selectedDate - self.calendar = calendar - } - - - /// 현재 보고 있는 월을 앞/뒤로 이동합니다 - /// - Parameter value: 양수면 다음 달, 음수면 이전 달로 이동해요!, currentMonth를 새로 계산된 월로 갱신합니다. - func changeMonth(by value: Int) { - let calendar = Calendar.current - if let newMonth = calendar.date(byAdding: .month, value: value, to: currentMonth) { - currentMonth = newMonth - } - } - - /// 달력 그리드를 구성하는 CalendarDay 배열을 생성합니다. - /// - Returns: 달력에 표시할 날짜들을 CalendarDay 배열로 생성합니다. 뷰에서 LazyVGrid를 통해 달력 UI를 구성할거에요! - func daysForCurrentGrid() -> [CalendarDay] { - let calendar = Calendar.current - /* - 현재 월의 정보를 계산합니다. - 이 달의 첫 날짜를 기준으로 시작 요일, 일 수 계산을 합니다. - */ - let firstDay = firstDayOfMonth() - let firstWeekDay = calendar.component(.weekday, from: firstDay) - let daysInMonth = numberOfDays(in: currentMonth) - - var days: [CalendarDay] = [] - - /* - 이번 달이 무슨 요일에 시작하는지에 따라, 앞에 몇 개의 셀을 이전 달의 날짜로 채울지 계산합니다. - */ - let leadingDays = (firstWeekDay - calendar.firstWeekday + 7) % 7 - - /* - 달력은 보통 7일 단위 그리드로 구성됩니다. - 어떤 달이 수요일에 시작한다면 앞의 일/월/화는 빈공간이 아닌 이전 달의 날짜로 미리보기로 보이도록 할 수 있죠! - 그래서 이 코드는 그 앞 부분 회색을 생성하는 부분입니다. - */ - if leadingDays > 0, let previousMonth = calendar.date(byAdding: .month, value: -1, to: currentMonth) { - let daysInPreviousMonth = numberOfDays(in: previousMonth) - for i in 0.. 0, - let nextMonth = calendar.date(byAdding: .month, value: 1, to: currentMonth) { - - let daysInNextMonth = numberOfDays(in: nextMonth) - - for day in 1...remaining { - let validDay = min(day, daysInNextMonth) - if let date = calendar.date(bySetting: .day, value: validDay, of: nextMonth) { - days.append(CalendarDay(day: validDay, date: date, isCurrentMonth: false)) - } - } - } - - return days - - } - - /// 입력된 date가 속한 해당 달의 총 일 수를 반환합니다. - /// - Parameter date: date 입력 - /// - Returns: 총 일 수 반환 - func numberOfDays(in date: Date) -> Int { - Calendar.current.range(of: .day, in: .month, for: date)?.count ?? 0 - } - - /// 입력된 date가 속한 달의 첫 번째 날짜가 무슨 요일에 시작하는지 구합니다. - /// - Parameter date: date 입력 - /// - Returns: 요일 값을 반환합니다. 일요일 = 1, 월요일 = 2 .... - private func firstWeekdayOfMonth(in date: Date) -> Int { - let components = Calendar.current.dateComponents([.year, .month], from: date) - let firstDay = Calendar.current.date(from: components)! - return Calendar.current.component(.weekday, from: firstDay) - } - - /// 주어진 date가 속한 일주일 범위의 Date 배열을 반환합니다. weekDay를 기준으로 그 주의 일요일부터 토요일까지 계산합니다. - /// - Returns: 현재 보고 있는 달의 1일 날짜 반환합니다. - func firstDayOfMonth() -> Date { - let compoents = Calendar.current.dateComponents([.year, .month], from: currentMonth) - return Calendar.current.date(from: compoents) ?? Date() - } - - /// 사용자가 날짜를 선택했을 때, 기존 선택된 날짜와 비교하여 필요할 경우에만 선택 날짜를 갱신할 수 있도록 합니다. 달력 앱에서 불필요한 상태 업데이트를 방지하고, 성능을 높이기 위해 자주 사용하는 방식이에요! - /// - Parameter date: 선택한 날짜 업데이트 - public func changeSelectedDate(_ date: Date) { - if calendar.isDate(selectedDate, inSameDayAs: date) { - return - } else { - selectedDate = date - } - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/ViewModels/LoginViewModel.swift b/wizzy/MEGABOX/MegaBox/Sources/ViewModels/LoginViewModel.swift deleted file mode 100644 index 5f6ee24..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/ViewModels/LoginViewModel.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// LoginViewModel.swift -// MegaBox -// -// Created by 이서현 on 9/21/25. -// - -import Foundation - -@Observable -class LoginViewModel { - - var loginModel: LoginModel - - init() { - self.loginModel = LoginModel() ///뷰모델이 생성될 때 항상 빈 모델로 시작하게 만들고 싶을 때 - } - - -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/ViewModels/MovieSearchViewModel.swift b/wizzy/MEGABOX/MegaBox/Sources/ViewModels/MovieSearchViewModel.swift deleted file mode 100644 index dec5efc..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/ViewModels/MovieSearchViewModel.swift +++ /dev/null @@ -1,81 +0,0 @@ -// -// MovieSearchViewModel.swift -// MegaBox -// -// Created by 이서현 on 10/5/25. -// - -import SwiftUI -import Combine - - -final class MovieSearchViewModel: ObservableObject { - - @Published var movies: [MovieModel] = [ - .init(title: "F1 더 무비", poster: "poster3", countAudience: "30만"), - .init(title: "귀멸의 칼날", poster: "poster2", countAudience: "1"), - .init(title: "어쩔 수가 없다", poster: "poster1", countAudience: "20만"), - .init(title: "얼굴", poster: "poster4", countAudience: nil), - .init(title: "모노노케 히메", poster: "poster5", countAudience: nil), - .init(title: "보스", poster: "poster6", countAudience: nil), - .init(title: "야당", poster: "poster7", countAudience: nil), - .init(title: "THE ROSES", poster: "poster8", countAudience: nil) - ] - - @Published var query: String = "" // 검색 위한 쿼리 - @Published var results: [MovieModel] = [] // 결과 저장 - @Published var isLoading = false - @Published var errorMessage: String? - - @Published var selectedMovie: MovieModel? = nil - - private var bag = Set() - - init() { - $query - .debounce(for: .milliseconds(400), scheduler: DispatchQueue.main) - .removeDuplicates() - .handleEvents(receiveOutput: { [weak self] _ in - self?.errorMessage = nil - }) - .flatMap { query in - self.search(query: query) - } - .receive(on: DispatchQueue.main) - .sink { [weak self] completion in - if case .failure(let err) = completion { - self?.errorMessage = "검색 실패: \(err.localizedDescription)" - self?.results = [] - } - } receiveValue: { [weak self] items in - self?.results = items - } - .store(in: &bag) - } - - private func search(query: String) -> AnyPublisher<[MovieModel], Error> { - return Future<[MovieModel], Error> { [weak self] promise in - let delay = Double(Int.random(in: 300...700)) / 1000.0 - guard let self else { return } - - DispatchQueue.global().asyncAfter(deadline: .now() + delay) { - let filtered = self.movies.filter { $0.title.lowercased().contains(query) } - promise(.success(filtered)) - } - } - .handleEvents( - receiveSubscription: { _ in - DispatchQueue.main.async { - self.isLoading = true - } - }, - receiveCompletion: { _ in - DispatchQueue.main.async { - self.isLoading = false - } - } - ) - .eraseToAnyPublisher() - } - -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/ViewModels/MovieViewModel.swift b/wizzy/MEGABOX/MegaBox/Sources/ViewModels/MovieViewModel.swift deleted file mode 100644 index 83c1104..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/ViewModels/MovieViewModel.swift +++ /dev/null @@ -1,117 +0,0 @@ -// -// MovieViewModel.swift -// MegaBox -// -// Created by 이서현 on 9/29/25. -// - -import Foundation -import Combine -import SwiftUI - - - -class MovieViewModel: ObservableObject { - @Published var movies: [MovieModel] = [] - - - @Published var selectedMovie: MovieModel? = nil - @Published var selectedTheaters: Set = [] - @Published var selectedDate: Date? = nil - - @Published private(set) var week: [Date] = [] // 오늘 ~ 6일 - @Published private(set) var showTheater = false // 영화 선택 후 활성화 - @Published private(set) var showDate = false // 영화+극장 선택 후 활성화 - @Published private(set) var showtimes: [Theater: [Showtime]] = [:] - @Published private(set) var isShowtimeVisible = false // 세 가지 모두 선택 후 노출 - - - @Published private(set) var showtimesByMovie: [UUID: [Showtime]] = [:] - - private var bag = Set() - - init() { - Task { await fetchMovies() } - movieSelect() - } - - func fetchMovies() async { - guard let url = Bundle.main.url(forResource: "MovieSchedule", withExtension: "json"), - let data = try? Data(contentsOf: url) else { - print("json 파일 못 찾겠어요") - return - } - do { - let response = try JSONDecoder().decode(APIResponse.self, from: data) - let groups = response.data.toDomain() ///MovieShowtimeGroup 생성 (영화별 상영데이터 묶음) - await MainActor.run { - self.movies = groups.map { $0.movie } - self.showtimesByMovie = Dictionary(uniqueKeysWithValues: groups.map { ($0.movie.id, $0.showtimes) }) - } - } catch { - print("디코딩 에러 :", error) - } - } - - private func movieSelect() { - // 1) 극장 버튼 활성화: 영화가 선택되면 true - $selectedMovie - .map { $0 != nil } - .assign(to: &$showTheater) - - // 2) 날짜 선택 활성화: 영화 선택 + 극장 1개 이상 선택 - Publishers.CombineLatest($selectedMovie.map { $0 != nil }, - $selectedTheaters.map { !$0.isEmpty }) - .map { $0 && $1 } - .assign(to: &$showDate) - - // 3) 상영정보 표시 조건 - 다 선택됨? 그럼 상영 정보 보여줘 (물론 데이터는 안 담겨서 아래 4) 가 있어야 함) - Publishers.CombineLatest3( ///3개의 Publisher를 묶음 (영화+극장+날짜) -> 3개의 퍼블리셔 중 하나라도 값이 바뀔 때마다 최신 튜플 내보냄 - $selectedMovie, - $selectedTheaters, - $selectedDate - ) - .map { movie, theaters, date in - movie != nil && !theaters.isEmpty && date != nil /// 모두 선택되었을 때 true - } - .assign(to: &$isShowtimeVisible) /// map의 값이 곧바로 isShowtimeVisible로 바인딩됨. 세 조건이 충족되면 상영 정보 UI가 보이고, 하나라도 빠지면 숨겨짐 - - // 4) 상영정보 가져오기 (세 가지 모두 선택되면 fetch) - 데이터가 있어도 3) 이 없으면 보여줄지 말지 제어가 안 됨 - Publishers.CombineLatest3( - $selectedMovie.compactMap { $0 }, - $selectedTheaters.filter { !$0.isEmpty }, - $selectedDate.compactMap { $0 } - ) - .map { [weak self] (movie: MovieModel, theaters: Set, date: Date) -> [Theater: [Showtime]] in - guard let self = self else { return [:] } - return self.realShowtimes(for: movie, theaters: theaters, date: date) - } - .receive(on: DispatchQueue.main) - .sink { [weak self] value in - self?.showtimes = value - } - .store(in: &bag) - - - } - // MARK: - 실제 JSON 기반 상영정보 필터 - private func realShowtimes(for movie: MovieModel, theaters: Set, date: Date) -> [Theater: [Showtime]] { - print("영화 :", movie.title, showtimesByMovie[movie.id]?.count ?? 0, "회차 존재") - var result: [Theater: [Showtime]] = [:] - let calendar = Calendar.current - - guard let allShowtimes = showtimesByMovie[movie.id] else { return result } - - for theater in theaters { - let filtered = allShowtimes.filter { /// 특정 극장 + 선택 날짜와 같은 날짜인 회차만 필터링 - $0.theater == theater && - calendar.isDate($0.start, inSameDayAs: date) // 날짜만!! 비교 - } - if !filtered.isEmpty { - result[theater] = filtered - } - } - return result - } - -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/BookingView.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/BookingView.swift deleted file mode 100644 index ebb65cc..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/BookingView.swift +++ /dev/null @@ -1,334 +0,0 @@ -// -// BookingView.swift -// MegaBox -// -// Created by 이서현 on 10/5/25. -// - -import SwiftUI - -struct BookingView: View { - @Environment(NavigationRouter.self) var router - @EnvironmentObject var viewModel: MovieViewModel ///영화/극장/날짜/상영정보 - - @State private var isMovieSheetOn = false - - var body: some View { - VStack(spacing: 0) { - TopBarView - .padding(.horizontal, -16) - MovieSelectView - .padding(.top, -40) //? - - if viewModel.selectedMovie != nil { - TheaterSelectView - } - if viewModel.showDate { - WeekStripView() - } - - // 하단 상영 정보 섹션 (세 가지 모두 선택되면 노출) - if viewModel.isShowtimeVisible { - ShowtimeListSection - } - - Spacer() - } - .padding(.horizontal, 16) - .sheet(isPresented: $isMovieSheetOn) { - MovieSheet(searchVM: MovieSearchViewModel()) { movie in - // 시트에서 선택한 영화를 BookingView의 상태에 반영 - viewModel.selectedMovie = movie - } - .presentationDetents([.large]) - .presentationDragIndicator(.visible) - } - } - - //MARK: - 영화 이름 - 전체 영화 바 - private var TopBarView: some View { - HStack{ - Spacer() - Text("영화별 예매") - .font(.PretendardBold22) - .frame(maxWidth: .infinity) - .foregroundStyle(.white) - .padding(.top, 71) - .padding(.bottom, 10) - Spacer() - } - .background(.purple03) - .ignoresSafeArea() - } - - private var MovieSelectView: some View { - VStack(spacing: 0) { - HStack(spacing: 0) { - ZStack { - RoundedRectangle(cornerRadius: 4) - .frame(width: 26, height: 24) - .foregroundStyle(.orange) - Text("15") - .font(.PretendardBold18) - .foregroundStyle(.white) - } - .padding(.trailing, 39) - - Text(viewModel.selectedMovie?.title ?? "영화 이름") - .font(.PretendardBold18) - .foregroundStyle(.black) - .frame(width: 238) - Spacer() - Button(action: {isMovieSheetOn = true }) { - ZStack { - RoundedRectangle(cornerRadius: 8) - .stroke(Color.gray02) - .frame(width: 69, height: 30) - .background(.white) - Text("전체영화") - .font(.PretendardSemiBold14) - .foregroundStyle(.black) - } - } - } - .padding(.bottom, 20) - - //MARK: - 영화 스크롤 뷰 - ScrollView(.horizontal, showsIndicators: false) { - LazyHStack { - ForEach(viewModel.movies) { movie in - MoviePosterButton( - movieModel: movie, - /// Id가 다를 것 같아서.. 제목 == 도 넣었습니다잇 - isSelected: (viewModel.selectedMovie?.id == movie.id) || (viewModel.selectedMovie?.title == movie.title), - onTap: { - if viewModel.selectedMovie?.id == movie.id { - // 선택 해제 - viewModel.selectedMovie = nil - viewModel.selectedTheaters.removeAll() - viewModel.selectedDate = nil - } else { - // 영화 선택 - viewModel.selectedMovie = movie - } - }) - } - } - .frame(height: 100) - } - - } - } -} - - -//MARK: - 영화 포스터 뷰 - -struct MoviePosterButton: View { - let movieModel: MovieModel - let isSelected: Bool - let onTap: () -> Void - var body: some View { - Button(action: onTap) { - Image(movieModel.poster) - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 62) - .clipShape(RoundedRectangle(cornerRadius: 10)) - .overlay( - RoundedRectangle(cornerRadius: 10) - .stroke(isSelected ? Color.purple03 : Color.clear, lineWidth: 2) - ) - .padding(.bottom, 8) - } - } -} - - -//MARK: - 강남 홍대 신촌 버튼 -private extension BookingView { - var TheaterSelectView : some View { - HStack(spacing: 8) { - ForEach(Theater.allCases, id: \.self) { t in - let isOn = viewModel.selectedTheaters.contains(t) - ///isOn ; 현재 반복 중인 극장(t)이 선택된 상태인지 - Button { ///토글 - 선택된 극장 목록에 t 추가/삭제 - if isOn { viewModel.selectedTheaters.remove(t) } - else { viewModel.selectedTheaters.insert(t) } - } label: { - Text(t.rawValue) - .padding(.horizontal, 14).padding(.vertical, 8) - .background(isOn ? Color.purple03 : Color.gray01) - .foregroundStyle(isOn ? Color.white : Color.gray05) - .clipShape(RoundedRectangle(cornerRadius: 15)) - } - .disabled(!viewModel.showTheater) - .allowsHitTesting(viewModel.showTheater) - .opacity(viewModel.showTheater ? 1 : 0.4) - } - Spacer() - } - } - - //MARK: - 극장 선택 뷰 - var ShowtimeListSection: some View { - VStack(alignment: .leading, spacing: 16) { - - // 신촌만 선택된 경우: 상영시간표 없음 메시지 - if viewModel.selectedTheaters.count == 1, - viewModel.selectedTheaters.contains(.shinchon) { - Text("선택한 극장에 상영시간표가 없습니다") - .font(.PretendardSemiBold14) - .foregroundStyle(.gray05) - .padding(.vertical, 8) - } else { - // 나머지 경우엔 상영 시간 표시 (신촌은 빼야되는디) - ForEach(Array(viewModel.showtimes.keys.sorted { $0.rawValue < $1.rawValue }), id: \.self) { theater in - VStack(alignment: .leading, spacing: 8) { - Text(theater.rawValue) - .font(.PretendardBold18) - .foregroundStyle(.black) - - let items = viewModel.showtimes[theater] ?? [] - ScrollView(.horizontal, showsIndicators: false) { - HStack(spacing: 12) { - ForEach(items) { s in - VStack(alignment: .leading, spacing: 4) { - Text(timeString(s.start)) // 11:30 - .font(.PretendardBold18) - .foregroundStyle(.black) - Text("~ \(timeString(s.end))") - .font(.PretendardSemiBold12) - .foregroundStyle(.gray05) - HStack(spacing: 2) { - Text("\(s.remaining)") - .font(.PretendardSemiBold12) - .foregroundStyle(.purple03) - Text("/\(s.capacity)") - .font(.PretendardSemiBold12) - .foregroundStyle(.gray03) - } - } - .padding(12) - .background( - RoundedRectangle(cornerRadius: 12) - .stroke(Color.gray02, lineWidth: 1) - ) - } - } - } - } - } - } - } - .padding(.top, 16) - .padding(.horizontal, 16) - } - - private func timeString(_ d: Date) -> String { - let f = DateFormatter() - f.dateFormat = "HH:mm" - return f.string(from: d) - } -} - - -//MARK: - 날짜 - -private struct WeekStripView: View { - @EnvironmentObject var viewModel: MovieViewModel - - var body: some View { - // 주간 날짜 칩 - HStack(spacing: 8) { - ForEach(weekDays, id: \.self) { d in - let isSelected = viewModel.selectedDate.map { Calendar.current.isDate($0, inSameDayAs: d) } ?? false - DateChip(date: d, isSelected: isSelected) { - viewModel.selectedDate = d - } - .disabled(!viewModel.showDate) - } - } - .frame(height: 92) - .padding(.vertical, 8) - .padding(.horizontal, 16) - } - - // 오늘부터 7일 표시 - private var weekDays: [Date] { - let cal = Calendar.current - let start = cal.startOfDay(for: Date()) // 항상 '오늘'부터 시작 - return (0..<7).compactMap { cal.date(byAdding: .day, value: $0, to: start) } - } -} - - -private struct DateChip: View { - let date: Date - let isSelected: Bool - let onTap: () -> Void - - var body: some View { - let cal = Calendar.current - let isToday = cal.isDateInToday(date) - let isTomorrow = cal.isDateInTomorrow(date) - let weekday = cal.component(.weekday, from: date) // 1:Sun ... 7:Sat - - let mainText = isToday ? monthDayString : dayNumberString - let subText = isToday ? "오늘" : (isTomorrow ? "내일" : weekdayShortKOR) - - let numberColor: Color = { - if isSelected { return .white } - if weekday == 1 { return .red } // 일요일 - if weekday == 7 { return .tag } // 청록색 - return .primary - }() - - return Button(action: onTap) { - - VStack(spacing: 6) { - Text(mainText) - .font(.PretendardBold22) - .foregroundStyle(numberColor) - - if isToday { - Text("오늘") - .font(.PretendardSemiBold16) - } else { - Text(subText) - .font(.PretendardSemiBold16) - .foregroundStyle(isSelected ? .white.opacity(0.95) : .gray) - } - } - .foregroundStyle(numberColor) - .frame(width: 55, height: 60) - .background( - RoundedRectangle(cornerRadius: 12) - .fill(isSelected ? Color.purple03 : .clear) - - ) - } - .buttonStyle(.plain) - } - - private var dayNumberString: String { - String(Calendar.current.component(.day, from: date)) - } - private var monthDayString: String { - let f = DateFormatter() - f.dateFormat = "M.d" - return f.string(from: date) - } - private var weekdayShortKOR: String { - let f = DateFormatter() - f.locale = Locale(identifier: "ko_KR") - f.dateFormat = "E" - return f.string(from: date) - } -} - -#Preview { - BookingView() - .environment(NavigationRouter()) - .environmentObject(MovieViewModel()) -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/CalenderView.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/CalenderView.swift deleted file mode 100644 index 9f3a636..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/CalenderView.swift +++ /dev/null @@ -1,130 +0,0 @@ -// -// CalenderView.swift -// MegaBox -// -// Created by 이서현 on 10/5/25. -// -/* -import SwiftUI - -struct Cell: View { - - var calendarDay: CalendarDay - var isSelected: Bool - @Bindable var viewModel: CalendarViewModel - - var body: some View { - ZStack { - if isSelected { - Circle() - .fill(Color.yellow.opacity(0.6)) - .frame(width: 26, height: 27) - .transition(.scale.combined(with: .opacity)) - } - - Text("\(calendarDay.day)") - .font(.caption) - .foregroundStyle(textColor) - .animation(.easeInOut(duration: 0.2), value: viewModel.selectedDate) - } - .frame(height: 30) - .onTapGesture { - withAnimation(.spring(response: 0.4, dampingFraction: 0.5, blendDuration: 0)) { - viewModel.changeSelectedDate(calendarDay.date) - } - } - } - - private var textColor: Color { - if calendarDay.isCurrentMonth { - return Color.black - } else { - return Color.gray.opacity(0.7) - } - } -} - -struct CalendarView: View { - - @Bindable var viewModel: CalendarViewModel = .init() - - var body: some View { - VStack(spacing: 24, content: { - hedarController // 상단 월 변경 컨트롤러 - - calendarView // 달력 본체 - }) - .padding(.vertical, 30) - .padding(.horizontal, 16) - .background(Color.white) - } - - - /// 상단 월 변경 컨틀롤러 뷰 - private var hedarController: some View { - HStack(spacing: 47, content: { - Button(action: { - viewModel.changeMonth(by: -1) - }, label: { - Image(systemName: "chevron.left") - }) - - Text(viewModel.currentMonth, formatter: calendarHeaderDateFormatter) - .font(.title3) - .foregroundStyle(Color.black) - - - Button(action: { - viewModel.changeMonth(by: 1) - }, label: { - Image(systemName: "chevron.right") - }) - }) - } - - /// 달력 본체 뷰 (한 주만 표시) - private var calendarView: some View { - VStack(spacing: 8) { - // 요일 헤더 (일 ~ 토) - HStack(spacing: 0) { - ForEach(localizedWeekdaySymbols.indices, id: \.self) { index in - Text(localizedWeekdaySymbols[index]) - .foregroundStyle(index == 0 ? Color.red : index == 6 ? Color.blue : Color.gray) - .frame(maxWidth: .infinity) - .font(.caption) - } - } - .padding(.bottom, 6) - - // 선택된 주의 7일만 표시 - HStack(spacing: 0) { - ForEach(viewModel.daysForCurrentWeek(), id: \.id) { calendarDay in - let isSelectedDate = viewModel.calendar.isDate(calendarDay.date, inSameDayAs: viewModel.selectedDate) - Cell(calendarDay: calendarDay, isSelected: isSelectedDate, viewModel: viewModel) - .frame(maxWidth: .infinity) - } - } - } - .frame(height: 90, alignment: .top) - } - - /// 요일 이름 한글로 가져오기 - let localizedWeekdaySymbols: [String] = { - let formatter = DateFormatter() - formatter.locale = Locale(identifier: "ko_KR") - return formatter.shortWeekdaySymbols ?? [] - }() - - /// 헤더 날짜 표시 포맷터 - let calendarHeaderDateFormatter: DateFormatter = { - let formatter = DateFormatter() - formatter.dateFormat = "yyyy.MM" - return formatter - }() -} - - -#Preview { - CalendarView() -} -*/ diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/EmptyView.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/EmptyView.swift deleted file mode 100644 index ffcfab4..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/EmptyView.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// EmptyView.swift -// MegaBox -// -// Created by 이서현 on 9/29/25. -// - -import SwiftUI - -struct EmptyView: View { - var body: some View { - Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) - } -} - -#Preview { - EmptyView() -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/HomeView.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/HomeView.swift deleted file mode 100644 index ee0ff5d..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/HomeView.swift +++ /dev/null @@ -1,265 +0,0 @@ -// -// HomeView.swift -// MegaBox -// -// Created by 이서현 on 9/29/25. -// - -import SwiftUI - -enum MovieTab: String, CaseIterable { - case chart = "무비차트" - case upcoming = "상영예정" -} - -struct HomeView: View { - @Environment(NavigationRouter.self) var router - @EnvironmentObject var viewModel: MovieViewModel - - @State private var contentsVM = ContentsViewModel() - - @State private var tab: MovieTab = .chart - - var body: some View { - ScrollView { - VStack(spacing: 0) { - TopBarView() - TopButtonView(select: $tab) - switch tab { - case .chart: - MovieScrollChart(movies: contentsVM.movieCards) { movie in - router.path.append(Route.detail(movie)) - } - case .upcoming: - EmptyView() - } - MovieFeedView().padding(.top, 39) - } - .padding(.horizontal, 16) - .task { - await contentsVM.getNowPlayingMovie(language: "ko-KR", page: 1, region: "KR") - } - } - } -} - - - //MARK: - 상단 헤더 뷰 - //TODO: - 버튼 클릭 시 색 변화 -struct TopBarView: View { - var body: some View { - VStack(alignment: .leading, spacing: 0) { - HStack(spacing: 0) { - Image(.meboxHeader) - .resizable() - .frame(width: 149, height: 30) - .padding(.bottom, 8) - Spacer() - } - .padding(.bottom, 8) - HStack(spacing: 0) { - Button(action: {}) { - Text("홈") - .foregroundStyle(.gray04) - .font(.PretendardSemiBold24) - } - Spacer() - Button(action: {}) { - Text("이벤트") - .foregroundStyle(.gray04) - .font(.PretendardSemiBold24) - } - Spacer() - Button(action: {}) { - Text("스토어") - .foregroundStyle(.gray04) - .font(.PretendardSemiBold24) - } - Spacer() - Button(action: {}) { - Text("선호극장") - .foregroundStyle(.gray04) - .font(.PretendardSemiBold24) - } - } - .padding(.trailing, 70) - } - .padding(.bottom, 9) - } -} - //MARK: - 상단 버튼 뷰 - 무비차트 | 상영예정 -struct TopButtonView: View { - @Binding var select: MovieTab - - var body: some View { - - VStack(alignment: .leading, spacing: 0) { - HStack(spacing: 23) { - - ForEach(MovieTab.allCases, id: \.self) {tab in - - Button (action: { select = tab }) { - ZStack { - Capsule() - .frame(width: 84, height: 38) - .glassEffect(.clear.interactive()) - .foregroundStyle(select == tab ? .gray08 : .gray02) - Text(tab.rawValue) - .font(.PretendardMedium14) - .foregroundStyle(select == tab ? .white : .gray04) - } - } - } - Spacer() - } - } - .padding(.bottom, 25) - - } -} - -//MARK: - 무비 카드 1개 -struct MovieCard: View { - @Environment(NavigationRouter.self) var router - - let movieModel: MovieModel - let onTap: () -> Void - var body: some View { - VStack(alignment: .leading, spacing: 0) { - Button(action: onTap) { - Image(movieModel.poster) - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 150) - .padding(.bottom, 8) - } - - Button(action: { - router.path.append(Route.tab(index: 1)) - }) { - ZStack { - RoundedRectangle(cornerRadius: 10) - .stroke(Color.purple03) - .frame(width: 150, height: 36) - .foregroundStyle(.white) - Text("바로 예매") - .foregroundStyle(.purple03) - .font(.PretendardMedium16) - - } - .padding(.bottom, 8) - } - - Text(movieModel.title) - .font(.PretendardBold22) - Text("누적관객수 \(movieModel.countAudience ?? "idk")") - .font(.PretendardMedium18) - } - } -} - -//MARK: - 무비차트 가로 스크롤 뷰 -struct MovieScrollChart: View { - let movies: [MovieModel] - let onSelect: (MovieModel) -> Void - var body: some View { - ScrollView(.horizontal, showsIndicators: false) { - HStack(spacing: 24) { - ForEach(movies) { movie in - MovieCard(movieModel: movie) { - onSelect(movie) - } - } - } - } - .frame(height: 320) - } -} - -//MARK: - 알고보면 더 재밌는 무비 피드 - -struct MovieFeedView: View { - var body: some View { - VStack(spacing: 0) { - TopFeedView - BottomFeedView - } - } - - - private var TopFeedView: some View { - VStack(spacing: 0) { - HStack { - Text("알고보면 더 재밌는 무비피드") - .font(.PretendardBold24) - Spacer() - Button(action: {}) { - Image(systemName: "arrow.right.circle") - .tint(.gray08) - .frame(width: 50, height: 50) - .glassEffect(.clear.interactive()) - } - } - Image(.movieFeed1) - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: .infinity) - .padding(.bottom, 44) - - } - } - - private var BottomFeedView: some View { - VStack(alignment: .leading, spacing: 0) { - - HStack(spacing: 0) { - Image(.movieFeed2) - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 100) - Spacer() - VStack(alignment: .leading, spacing: 0) { - Text("9월, 메가박스의 영화들(1) - 명작들의 재개봉") - .font(.PretendardSemiBold18) - .foregroundStyle(.black) - .padding(.bottom, 25) - Text("<모노노케 히메>,<퍼펙트 블루>") - .font(.PretendardSemiBold13) - .foregroundStyle(.gray03) - - } - } - .padding(.bottom, 39) - - HStack(spacing: 0) { - Image(.movieFeed3) - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 100) - Spacer() - VStack(alignment: .leading, spacing: 0) { - Text("메가박스 오리지널 티켓 Re.37 <얼굴>") - .font(.PretendardSemiBold18) - .foregroundStyle(.black) - .padding(.bottom, 25) - Text("영화 속 양극적인 감정의 대비") - .font(.PretendardSemiBold13) - .foregroundStyle(.gray03) - - } - } - - - } - } - - - -} - - -#Preview { - HomeView() - .environment(NavigationRouter()) - .environmentObject(MovieViewModel()) -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/LoginView.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/LoginView.swift deleted file mode 100644 index a37b418..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/LoginView.swift +++ /dev/null @@ -1,181 +0,0 @@ -// -// LoginView.swift -// MegaBox -// -// Created by 이서현 on 9/15/25. -// - -import SwiftUI -import KakaoSDKUser -import KakaoSDKCommon - -struct LoginView: View { - @State private var isLoggedIn = false - - let keychain = KeychainService.shared - let service = "MegaBox" - - @Environment(NavigationRouter.self) var router - //@Environment(MovieViewModel.self) var movieViewModel - - @State var viewModel = LoginViewModel() - private var id: String = "" - private var pwd: String = "" - - @AppStorage("id") private var storedId: String = "" - - var body: some View { - VStack(spacing: 0){ - TopBarView - Spacer() - InputView - Spacer() - LoginBarView - SNSButton - .padding(.top, 35) - imageView - .padding(.top, 39) - .padding(.bottom, 57) - - - //Spacer() - } - .padding(.horizontal, 16) - .onAppear { - // 1) 저장된 아이디가 있고 - // 2) 아직 로그인 화면 위에 아무 것도 없을 때만 - if !storedId.isEmpty, - let savedPwd = keychain.load(account: storedId, service: service), - router.path.isEmpty { // 이미 다른 화면으로 안 가 있는 경우에만 - - viewModel.loginModel.id = storedId - viewModel.loginModel.pwd = savedPwd - - DispatchQueue.main.async { - router.path.append(Route.tab(index: 0)) - } - } else { - print("저장된 로그인 정보 없음 - 로그인 화면 유지") - } - } - } - private var imageView: some View { - Image(.umc1) - .resizable() - .aspectRatio(contentMode: .fit) - //.frame(maxHeight: 206) - } - - private var TopBarView: some View { - HStack { - Text("로그인") - .font(.PretendardSemiBold24) - .foregroundStyle(Color.black) - } - } - - private var InputView: some View { - VStack(alignment: .leading, spacing: 0){ - Group { - TextField("아이디", text: $viewModel.loginModel.id) - .font(.PretendardMedium16) - Divider() - .padding(.top, 4) - } - .foregroundStyle(Color.gray03) - Spacer().frame(height: 41) - - Group { - SecureField("비밀번호", text: $viewModel.loginModel.pwd) - .font(.PretendardMedium16) - Divider() - .padding(.top, 4) - } - .foregroundStyle(Color.gray03) - } - } - - private var LoginBarView: some View { - VStack(spacing: 0) { - Button(action: { - // 여기서 바로 꺼내서 쓰기 (struct 프로퍼티에 대입 X) - let id = viewModel.loginModel.id - let pwd = viewModel.loginModel.pwd - - print("입력한 아이디: \(id), 비밀번호: \(pwd)") - - // 키체인에 저장 - keychain.savePasswordToKeychain( - account: id, - service: service, - password: pwd - ) - storedId = viewModel.loginModel.id - - // 화면 이동 - router.path.append(Route.tab(index: 0)) - - }) { - Text("로그인") - .font(.PretendardBold18) - .frame(height: 54) - .frame(maxWidth: .infinity) - .background(Color.purple03) - .foregroundStyle(.white) - .clipShape(RoundedRectangle(cornerRadius: 10)) - } - - Text("회원가입") - .font(.PretendardMedium13) - .foregroundStyle(Color.gray03) - .padding(.top, 17) - } - } - - private var SNSButton: some View { - HStack { - Spacer() - Image(.naverButton) - .resizable() - .frame(width: 40, height: 40) - Spacer() - Button(action: { - if UserApi.isKakaoTalkLoginAvailable() { - UserApi.shared.loginWithKakaoTalk { oauthToken, error in - if let error = error { - print("카카오톡 로그인 실패: \(error)") - } else { - print("카카오톡 로그인 성공") - // 로그인 성공 후 탭 화면으로 이동 - router.path.append(Route.tab(index: 0)) - } - } - } else { - UserApi.shared.loginWithKakaoAccount { oauthToken, error in - if let error = error { - print("카카오 계정 로그인 실패: \(error)") - } else { - print("카카오 계정 로그인 성공") - router.path.append(Route.tab(index: 0)) - } - } - } - }) { - Image(.kakaoButton) - .resizable() - .frame(width: 40, height: 40) - } - Spacer() - Image(.appleButton) - .resizable() - .frame(width: 40, height: 40) - Spacer() - } - } -} - - -#Preview { - LoginView() - .environment(NavigationRouter()) -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/MainView.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/MainView.swift deleted file mode 100644 index 16c7d1d..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/MainView.swift +++ /dev/null @@ -1,70 +0,0 @@ -// -// MainView.swift -// MegaBox -// -// Created by 이서현 on 9/30/25. -// - -import Foundation -import SwiftUI - -struct MainView: View { - ///한 곳(MainView)에서 만든 객체를 앱 전체 화면에서 동일하게 쓰고 싶을 때 - @Environment(NavigationRouter.self) var router - @EnvironmentObject var viewModel: MovieViewModel - - var body: some View { - @Bindable var router = router - - NavigationStack(path: $router.path) { - SplashView() - .environment(router) - .navigationDestination(for: Route.self) { route in - switch route { - case .home: - HomeView() - .navigationBarBackButtonHidden(true) - case .detail(let movie): - MovieDetailView(movie: movie) - .navigationBarBackButtonHidden(true) - case .login: - LoginView() - .navigationBarBackButtonHidden(true) - .environment(router) - .environmentObject(viewModel) - case .tab(let index): - if let tab = TabBarView.AppTab(rawValue: index) - { - TabBarView(defaultTab: tab) - .environment(router) - .environmentObject(viewModel) - .navigationBarBackButtonHidden(true) - } else { - TabBarView() // 이상한 인덱스면 기본으로 - .environment(router) - .environmentObject(viewModel) - .navigationBarBackButtonHidden(true) - } - case .profile: - ProfileManageView() - .navigationBarBackButtonHidden(true) - case .booking: - BookingView() - .navigationBarBackButtonHidden(true) - .environment(router) - .environmentObject(viewModel) - - case .mobileOrder: - DetailOrderView() - .navigationBarBackButtonHidden(true) - } - } - } - } -} - -#Preview { - MainView() - .environment(NavigationRouter()) - .environmentObject(MovieViewModel()) -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/MovieDetailView.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/MovieDetailView.swift deleted file mode 100644 index 1bbaeb7..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/MovieDetailView.swift +++ /dev/null @@ -1,143 +0,0 @@ -// -// MovieDetailView.swift -// MegaBox -// -// Created by 이서현 on 9/29/25. -// - -import SwiftUI - -struct MovieDetailView: View { - @State private var selectedTab: Int = 0 - @Environment(\.dismiss) private var dismiss - - let movie: MovieModel - var body: some View { - VStack(spacing: 0) { - TopBarView - ContentView - MovieDetailViewCard(selectedTab: $selectedTab) - if selectedTab == 0 { - CardView - } else { - EmptyView() - } - Spacer() - } - .padding(.horizontal, 16) - } - - private var TopBarView: some View { - HStack{ - Button(action: { dismiss() }) { - Image(systemName: "arrow.left.circle") - .frame(width: 50, height: 50) - .tint(.gray03) - .glassEffect(.clear.interactive()) - } - Spacer() - Text(movie.title) - .padding(.trailing, 45) - Spacer() - } - } - - //MARK: - ContentView - - private var ContentView: some View { - VStack(alignment: .center, spacing: 0) { - Image(.topF1) - .resizable() - .frame(maxWidth: .infinity) - .scaledToFit() - .padding(.bottom, 13) - Text(movie.title) - .font(.PretendardBold24) - .foregroundStyle(.black) - .padding(.bottom, 3) - Text("F1 : The Movie") // MovieModel 에 영어이름 속성을 추가해야 하는 건지? - .font(.PretendardSemiBold14) - .foregroundStyle(.gray03) - .padding(.bottom, 9) - Text(""" - 최고가 되지 못한 전설 VS 최고가 되고 싶은 루키 - - 한때 주목받는 유망주였지만 끔찍한 사고로 F1에서 우승하지 못하고 - 한순간에 추락한 드라이버 ‘손; 헤이스'(브래드 피트). - 그의 오랜 동료인 ‘루벤 세르반테스'(하비에르 바르뎀)에게 - 레이싱 복귀를 제안받으며 최하위 팀인 APGXP에 합류한다. - """) - .font(.PretendardSemiBold18) - .foregroundStyle(.gray03) - .padding(.bottom, 25) - } - } - - - private var CardView: some View { - HStack(spacing: 0) { - Image(.posterF1) - .resizable() - .scaledToFit() - .frame(width: 100) - - VStack(alignment: .center, spacing: 7) { - Group { - Text("12세 이상 관람가") - Text("2025.06.25 개봉") - } - .font(.PretendardSemiBold13) - .foregroundStyle(.black) - } - .padding(.horizontal, 26) - Spacer() - } - } - -} - -//MARK: - 상세정보 뷰 -struct MovieDetailViewCard: View { - @Binding var selectedTab: Int - var body: some View { - HStack(spacing: 0) { - ForEach(0..<2) { index in - let title = index == 0 ? "상세 정보" : "실관람평" - Button(action: { - withAnimation(.easeInOut) { - selectedTab = index - } - }) { - VStack(spacing: 2) { - if selectedTab == index { - Text(title) - .font(.PretendardBold22) - .foregroundStyle(.black) - Rectangle() - .frame(maxWidth: .infinity) - .frame(height: 1) - .foregroundStyle(.black) - - } else { - Text(title) - .font(.PretendardBold22) - .foregroundStyle(.gray02) - Rectangle() - .frame(maxWidth: .infinity) - .frame(height: 1) - .foregroundStyle(.gray02) - } - } - .padding(.bottom, 13) // 피그마 줄자 이슈.. - } - } - } - } -} - - - - -#Preview { - MovieDetailView(movie: MovieModel(title: "어쩔 수가 없다", poster: "poster1", countAudience: "20만")) -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/MovieSearchView.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/MovieSearchView.swift deleted file mode 100644 index 4f79fbd..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/MovieSearchView.swift +++ /dev/null @@ -1,80 +0,0 @@ -// -// MovieSheet.swift -// MegaBox -// -// Created by 이서현 on 10/5/25. -// - -import SwiftUI - -struct MovieSearchView: View { - @StateObject private var vm = MovieSearchViewModel() - - var body: some View { - NavigationStack { - VStack(spacing: 12) { - HStack(spacing: 10) { - Image(systemName: "magnifyingglass") - .font(.system(size: 18, weight: .semibold)) - .foregroundStyle(.primary) - - TextField("영화명을 입력해주세요", text: $vm.query) - .textInputAutocapitalization(.never) - .disableAutocorrection(true) - - Image(systemName: "mic") - .font(.system(size: 18, weight: .semibold)) - .foregroundStyle(.secondary) - } - .padding(.horizontal, 14) - .padding(.vertical, 12) - .clipShape(Capsule()) - .overlay( - Capsule() - .stroke(Color.black.opacity(0.06), lineWidth: 0.5) - ) - - if vm.isLoading { - ProgressView("검색 중...") - } - - if let error = vm.errorMessage { - Text(error).foregroundStyle(.red) - } - - /* - List(vm.results, id: \.id) { movie in - HStack(spacing: 12) { - Image(movie.poster) - .resizable() - .scaledToFill() - .frame(width: 95, height: 135) - .clipped() - .cornerRadius(8) - - VStack(alignment: .leading, spacing: 8) { - Text(movie.title) - .font(.headline) - .lineLimit(2) - - Spacer(minLength: 4) - - Text(String(format: "%.1f", movie.rate)) - .font(.subheadline) - .bold() - .foregroundStyle(.secondary) - } - .padding(.vertical, 8) - } - } - */ - } - .navigationTitle("영화 검색") - } - } -} - -#Preview { - MovieSearchView() -} - diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/MovieSheet.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/MovieSheet.swift deleted file mode 100644 index 0996ee0..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/MovieSheet.swift +++ /dev/null @@ -1,105 +0,0 @@ -// -// MovieSheet.swift -// MegaBox -// -// Created by 이서현 on 10/7/25. -// - -import SwiftUI - -struct MovieSheet: View { - @StateObject var searchVM: MovieSearchViewModel - let onSelect: (MovieModel) -> Void - - @Environment(\.dismiss) var dismiss - - private let columns: [GridItem] = Array(repeating: GridItem(.flexible(), spacing: 24), count: 3) - - var body: some View { - - ZStack(alignment: .bottom) { - ScrollView { - VStack(spacing: 20) { - Text("영화 선택") - .font(.title3.bold()) - .padding(.top, 16) - - if searchVM.isLoading { - ProgressView().padding(.top, 8) - } - if let error = searchVM.errorMessage { Text(error).foregroundStyle(.red) } - - // 포스터 그리드 - LazyVGrid(columns: columns, spacing: 36) { - ForEach(movieLineup, id: \.id) { movie in - Button { - onSelect(movie) - ///너무 빨리 샤샤샷 사라져버리길래 추가.. - DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { - dismiss() - } - } label: { - VStack(spacing: 8) { - Image(movie.poster) - .resizable() - .scaledToFill() - .frame(width: 95, height: 135) - - Text(movie.title) - .font(.PretendardSemiBold14) - .multilineTextAlignment(.center) - .frame(maxWidth: .infinity) - .foregroundStyle(.black) - } - } - } - } - .padding(.horizontal, 24) - - } - } - - MovieSearchBar - .padding(.horizontal, 16) - .padding(.bottom, 16) - } - .ignoresSafeArea(.keyboard) - } - - /// 검색어가 있으면 결과, 없으면 전체 - private var movieLineup: [MovieModel] { - if searchVM.query.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { - return searchVM.movies - } else { - return searchVM.results - } - } - - /// 하단 검색바 - private var MovieSearchBar: some View { - Group { - HStack(spacing: 10) { - Image(systemName: "magnifyingglass") - .frame(width: 26, height: 20) - TextField("영화명을 입력해주세요", text: $searchVM.query) - .textInputAutocapitalization(.never) - .disableAutocorrection(true) - Button { searchVM.query = "" } label: { - Image(systemName: "mic") - .frame(width: 18, height: 20) - .foregroundStyle(.gray05) - } - } - .padding(.horizontal, 14) - .padding(.vertical, 12) - .background(.ultraThinMaterial) - .clipShape(Capsule()) - } - } -} - - - -#Preview { - MovieSheet(searchVM: MovieSearchViewModel()) { _ in } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/BestMenuButton.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/Order/BestMenuButton.swift deleted file mode 100644 index bf74209..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/BestMenuButton.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// BestMenuButton.swift -// MegaBox -// -// Created by 이서현 on 11/17/25. -// - -import SwiftUI - -struct BestMenuButton: View { - - let item: MenuItemModel - - let action: () -> Void - - var body: some View { - VStack(alignment: .leading, spacing: 0) { - item.menuImage - .resizable() - .modifier(MenuImageStyle()) - .padding(.bottom, 12) - Text(item.menuName) - .modifier(MenuNameStyle()) - Text(item.menuPrice) - .modifier(MenuPriceStyle()) - - } - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/DetailOrderGridView.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/Order/DetailOrderGridView.swift deleted file mode 100644 index 2cd0756..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/DetailOrderGridView.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// DetailOrderGridView.swift -// MegaBox -// -// Created by 이서현 on 11/17/25. -// - -import SwiftUI - - -struct DetailOrderGridView: View { - - let menuItems = MenuItemModel.allMenu - - private let columns: [GridItem] = [ - GridItem(.flexible(), spacing: 16), - GridItem(.flexible(), spacing: 16) - ] - - var body: some View { - ScrollView { - LazyVGrid(columns: columns, spacing: 15) { - ForEach(menuItems) { item in - MenuCardView(item: item) - } - } - .padding(.vertical, 24) - } - } -} - -#Preview { - DetailOrderGridView() -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/DetailOrderView.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/Order/DetailOrderView.swift deleted file mode 100644 index 5a61bbf..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/DetailOrderView.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// DetailOrderView.swift -// MegaBox -// -// Created by 이서현 on 11/17/25. -// - -import SwiftUI - -struct DetailOrderView: View { - var body: some View { - ScrollView { - VStack(spacing: 0) { - OrderNavigationBar() - .padding(.bottom, 16) - DetailOrderGridView() - } - .padding(.horizontal, 16) - } - } -} - -#Preview { - DetailOrderView() -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/MenuCardView.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/Order/MenuCardView.swift deleted file mode 100644 index 8cef787..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/MenuCardView.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// MenuCardView.swift -// MegaBox -// -// Created by 이서현 on 11/17/25. -// - -import SwiftUI - -struct MenuCardView: View { - let item: MenuItemModel - - var body: some View { - Button(action: {}) { - VStack(alignment: .leading, spacing: 0) { - item.menuImage - .resizable() - .modifier(allMenuImageStyle()) - .modifier(RecommandBadge(isRecommand: item.isRecommended)) - .modifier(BestBadge(isBest: item.isBest)) - .modifier(SoldOutBadge(isSoldOut: item.isSoldOut)) - .padding(.bottom, 12) - - Text(item.menuName) - .modifier(MenuNameStyle()) - - Text(item.menuPrice) - .modifier(MenuPriceStyle()) - } - } - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/MenuViewModifier.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/Order/MenuViewModifier.swift deleted file mode 100644 index 80cfe85..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/MenuViewModifier.swift +++ /dev/null @@ -1,110 +0,0 @@ -// -// MenuViewModifier.swift -// MegaBox -// -// Created by 이서현 on 11/17/25. -// - -import SwiftUI - -struct MenuImageStyle: ViewModifier { - func body(content: Content) -> some View { - content - .frame(width: 152, height: 152) - .clipShape(RoundedRectangle(cornerRadius: 10)) - } -} - -struct allMenuImageStyle: ViewModifier { - func body(content: Content) -> some View { - content - .aspectRatio(1, contentMode: .fit) - .frame(maxWidth: .infinity) - .clipShape(RoundedRectangle(cornerRadius: 10)) - - } -} - - -struct MenuNameStyle: ViewModifier { - func body(content: Content) -> some View { - content - .font(.PretendardMedium14) - .foregroundStyle(.black) - } -} - -struct MenuPriceStyle: ViewModifier { - func body(content: Content) -> some View { - content - .font(.PretendardSemiBold14) - .foregroundStyle(Color(.black)) - } -} - -struct OrderMainTextStyle: ViewModifier { - func body(content: Content) -> some View { - content - .font(.PretendardBold22) - .foregroundStyle(.black) - } -} - -struct OrderSubTextStyle: ViewModifier { - func body(content: Content) -> some View { - content - .font(.PretendardRegular12) - .foregroundStyle(.gray06) - } -} - -struct BestBadge: ViewModifier { - let isBest: Bool - - func body(content: Content) -> some View { - content - .overlay(alignment: .topLeading) { - if isBest { - Image(.badgeMenu) - .resizable() - .scaledToFit() - .clipShape(RoundedRectangle(cornerRadius: 10)) - .frame(width: 51, height: 25) - } - } - } -} - -struct RecommandBadge: ViewModifier { - let isRecommand: Bool - - func body(content: Content) -> some View { - content - .overlay(alignment: .topLeading) { - if isRecommand { - Image(.badgeRecommand) - .resizable() - .scaledToFit() - .clipShape(RoundedRectangle(cornerRadius: 10)) - .frame(width: 51, height: 25) - } - } - } -} - -struct SoldOutBadge: ViewModifier { - let isSoldOut: Bool - - func body(content: Content) -> some View { - ZStack { - content - if isSoldOut { - RoundedRectangle(cornerRadius: 10) - .fill(Color.black.opacity(0.8)) - Text("품절") - .font(.PretendardSemiBold14) - .foregroundStyle(.white) - } - } - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/MobileOrderView.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/Order/MobileOrderView.swift deleted file mode 100644 index 008ce75..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/MobileOrderView.swift +++ /dev/null @@ -1,87 +0,0 @@ -// -// MobileOrderView.swift -// MegaBox -// -// Created by 이서현 on 11/17/25. -// - -import SwiftUI - -struct MobileOrderView: View { - - var body: some View { - ScrollView() { - HStack { - Image(.meboxHeader) - .resizable() - .scaledToFit() - .frame(width: 149) - Spacer() - } - .padding(.leading, 16) - VStack(alignment: .leading) { - SelectTheaterBar(style: .purple, theaterName: "강남") - .padding(.horizontal, -16) - OrderMainView() - .padding(.bottom, 35) - LabelView(menuText: "추천 메뉴", subText: "영화 볼때 뭐먹지 고민될 땐 추천 메뉴!") - RecommendMenuScrollView() - .padding(.bottom, 47) - - LabelView(menuText: "베스트 메뉴", subText: "영화 볼때 뭐먹지 고민될 땐 베스트 메뉴!") - BestMenuScrollView() - } - } - } -} - -struct LabelView: View { - let menuText: String - let subText: String - - var body: some View { - VStack (alignment: .leading, spacing: 10) { - Text(menuText) - .modifier(OrderMainTextStyle()) - Text(subText) - .modifier(OrderSubTextStyle()) - } - .padding(.leading, 16) - } -} - -struct RecommendMenuScrollView: View { - let menu = MenuItemModel.allMenu - - var body: some View { - ScrollView(.horizontal, showsIndicators: false) { - LazyHStack(spacing: 16) { - ForEach(menu.filter {$0.isRecommended}) { item in - RecommandMenuButton(item: item, action: {}) - } - } - .padding(.leading, 16) - } - } -} - -struct BestMenuScrollView: View { - let menu = MenuItemModel.allMenu - - var body: some View { - ScrollView(.horizontal, showsIndicators: false) { - LazyHStack(spacing: 16) { - ForEach(menu.filter {$0.isBest}) { item in - BestMenuButton(item: item, action: {}) - } - } - .padding(.leading, 16) - } - } -} - - -#Preview { - MobileOrderView() - .environment(NavigationRouter()) -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/OrderMainCard.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/Order/OrderMainCard.swift deleted file mode 100644 index 06c17d7..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/OrderMainCard.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// OrderMainCard.swift -// MegaBox -// -// Created by 이서현 on 11/18/25. -// - -import SwiftUI - -struct OrderMainCardButton: View { - let title: String - let subtitle: String? - let icon: Image - let action: () -> Void - - var body: some View { - Button(action: action) { - ZStack { - RoundedRectangle(cornerRadius: 16, style: .continuous) - .stroke(Color(.systemGray4), lineWidth: 1) - .background( - RoundedRectangle(cornerRadius: 16, style: .continuous) - .fill(Color.white) - ) - - VStack(alignment: .leading, spacing: 8) { - Text(title) - .font(.PretendardBold22) - - if let subtitle { - Text(subtitle) - .font(.system(size: 13)) - .foregroundColor(.gray) - } - - Spacer() - - icon - .resizable() - .scaledToFit() - .frame(width: 40, height: 40) - .frame(maxWidth: .infinity, alignment: .trailing) - } - .padding(16) - } - } - .buttonStyle(.plain) - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/OrderMainView.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/Order/OrderMainView.swift deleted file mode 100644 index 1f91ba1..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/OrderMainView.swift +++ /dev/null @@ -1,65 +0,0 @@ -// -// OrderMainView.swift -// MegaBox -// -// Created by 이서현 on 11/18/25. -// - -import SwiftUI - -struct OrderMainView: View { - - @Environment(NavigationRouter.self) var router - - var body: some View { - ZStack { - VStack(spacing: 16) { - HStack(spacing: 16) { - OrderMainCardButton( - title: "바로 주문", - subtitle: "이제 줄서지 말고\n모바일로 주문하고 픽업!", - icon: Image(.popcornIcon), - action: { - router.path.append(Route.mobileOrder) - } - ) - .frame(maxWidth: .infinity) - .frame(height: 275) - - VStack(spacing: 16) { - OrderMainCardButton( - title: "스토어 교환권", - subtitle: nil, - icon: Image(.ticketIcon), - action: {} - ) - .frame(maxWidth: .infinity) - .frame(height: 130) - - OrderMainCardButton( - title: "선물하기", - subtitle: nil, - icon: Image(.presentIcon), - action: {} - ) - .frame(maxWidth: .infinity) - .frame(height: 130) - } - .frame(maxWidth: .infinity) - } - - OrderMainCardButton( - title: "어디서든 팝콘 만나기", - subtitle: "팝콘 콜라 스낵 모든 메뉴 배달 가능!", - icon: Image(.motorcycleIcon), - action: {} - ) - .frame(maxWidth: .infinity) - .frame(height: 54) - .padding(.top, 46) - } - .padding(.horizontal, 16) - .padding(.vertical, 24) - } - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/OrderNavigationBar.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/Order/OrderNavigationBar.swift deleted file mode 100644 index 08ca2a1..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/OrderNavigationBar.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// OrderNavigationBar.swift -// MegaBox -// -// Created by 이서현 on 11/17/25. -// - -import SwiftUI - -struct OrderNavigationBar: View { - - @Environment(\.dismiss) var dismiss - - var body: some View { - HStack(spacing: 0) { - Button(action: {dismiss()}) { - Image(systemName: "chevron.left") - .resizable() - .frame(width: 15, height: 20) - .tint(Color(.black)) - } - Spacer() - Text("바로주문") - .font(.PretendardSemiBold18) - .foregroundStyle(.black) - Spacer() - Image(.cartIcon) - .resizable() - .frame(width: 35, height: 35) - } - } -} - -#Preview { - OrderNavigationBar() -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/RecommandMenuButton.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/Order/RecommandMenuButton.swift deleted file mode 100644 index 585e427..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/RecommandMenuButton.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// RecommandMenuButton.swift -// MegaBox -// -// Created by 이서현 on 11/17/25. -// - -import SwiftUI - -struct RecommandMenuButton: View { - - let item: MenuItemModel - let action: () -> Void - - var body: some View { - Button(action: action) { - VStack(alignment: .leading, spacing: 0) { - item.menuImage - .resizable() - .modifier(MenuImageStyle()) - .padding(.bottom, 12) - - Text(item.menuName) - .modifier(MenuNameStyle()) - - Text(item.menuPrice) - .modifier(MenuPriceStyle()) - } - .frame(width: 152) - } - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/SelectTheaterBar.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/Order/SelectTheaterBar.swift deleted file mode 100644 index 49f8d30..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/Order/SelectTheaterBar.swift +++ /dev/null @@ -1,153 +0,0 @@ -// -// SelectTheaterBar.swift -// MegaBox -// -// Created by 이서현 on 11/18/25. -// - -import SwiftUI - -struct SelectTheaterBar: View { - - enum Style { - case purple - case plain - } - - let style: Style - let theaterName: String - var onTapChange: () -> Void = {} - - // MARK: - Body - - var body: some View { - HStack(spacing: 0) { - Image(.mappin) - .resizable() - .modifier(MappinStyle(tint: iconColor)) - - Text(theaterName) - .modifier(TheaterLabelStyle(color: titleColor)) - .padding(.leading, 8) - - Spacer() - - Button(action: onTapChange) { - Text("극장 변경") - } - .modifier( - TheaterButtonStyle( - textColor: buttonTextColor, - borderColor: buttonBorderColor, - backgroundColor: buttonBackgroundColor - ) - ) - } - .padding(.horizontal, 16) - .padding(.vertical, 14) - .background(backgroundColor) - } - - - - private var backgroundColor: Color { - switch style { - case .purple: return .purple04 - case .plain: return .white - } - } - - private var iconColor: Color { - switch style { - case .purple: return .white - case .plain: return .black - } - } - - private var titleColor: Color { - switch style { - case .purple: return .white - case .plain: return .black - } - } - - private var buttonTextColor: Color { - switch style { - case .purple: return .white - case .plain: return .purple04 - } - } - - private var buttonBorderColor: Color { - switch style { - case .purple: return .white - case .plain: return .gray06 - } - } - - private var buttonBackgroundColor: Color { - switch style { - case .purple: return .clear - case .plain: return .white - } - } -} - -// MARK: - Modifier - -struct MappinStyle: ViewModifier { - var tint: Color - - func body(content: Content) -> some View { - content - .foregroundStyle(tint) - .frame(width: 27, height: 27) - } -} - -struct TheaterLabelStyle: ViewModifier { - var color: Color - - func body(content: Content) -> some View { - content - .font(.PretendardSemiBold13) - .foregroundStyle(color) - } -} - -struct TheaterButtonStyle: ViewModifier { - var textColor: Color - var borderColor: Color - var backgroundColor: Color = .clear - - func body(content: Content) -> some View { - content - .font(.PretendardSemiBold13) - .foregroundStyle(textColor) - .padding(.horizontal, 12) - .padding(.vertical, 6) - .background(backgroundColor) - .overlay( - RoundedRectangle(cornerRadius: 5) - .stroke(borderColor, lineWidth: 1) - ) - .clipShape(RoundedRectangle(cornerRadius:5)) - } -} - - -// MARK: - Previews - -#Preview("Purple") { - SelectTheaterBar( - style: .purple, - theaterName: "강남" - ) -} - -#Preview("Plain") { - SelectTheaterBar( - style: .plain, - theaterName: "강남" - ) -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/ProfileManageView.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/ProfileManageView.swift deleted file mode 100644 index 8124488..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/ProfileManageView.swift +++ /dev/null @@ -1,94 +0,0 @@ -// -// ProfileManageView.swift -// MegaBox -// -// Created by 이서현 on 9/21/25. -// - -import SwiftUI - -struct ProfileManageView: View { - @AppStorage("id") private var storedId: String = "Guest" - @AppStorage("name") private var storedName: String = "name" - @Environment(\.dismiss) private var dismiss - - @State private var tempName: String = "" /// 이게 최선인가? - - var body: some View { - VStack(spacing: 0) { - TopBarView - .padding(.bottom, 53) - UserInfoView - Spacer() - } - .padding(.horizontal, 16) - } - - - //MARK: - 상단 바 - private var TopBarView: some View { - HStack(alignment: .center, spacing: 0) { - Button(action: { - dismiss() - }) { - Image(systemName: "arrow.left") - .frame(width: 26, height: 22) - .padding(.trailing, 137) - .foregroundStyle(.black) - } - Text("회원정보 관리") - .font(.PretendardMedium16) - .foregroundStyle(.black) - .padding(.vertical, 11) - Spacer() - } - } - - //MARK: - 기본정보 뷰 - - private var UserInfoView: some View { - VStack(alignment: .leading, spacing: 0) { - Text("기본 정보") - .font(.PretendardBold18) - .padding(.bottom, 26) - Text(storedId) - .font(.PretendardMedium18) - .foregroundStyle(.black) - Divider() - .foregroundStyle(.gray02) - .padding(.top, 4) - .padding(.bottom, 24) - HStack(spacing: 0) { - TextField("이름을 입력해주세요", text: $tempName) - .font(.PretendardMedium18) - .foregroundStyle(.black) - Button(action: { - storedName = tempName //텍스트 필드에서의 입력값 저장 - }) { - ZStack { - RoundedRectangle(cornerRadius: 16) - .frame(width: 38, height: 20) - .overlay( - RoundedRectangle(cornerRadius: 16) - .stroke(Color.gray03, lineWidth: 1) - ) - .foregroundStyle(.white) - Text("변경") - .foregroundStyle(.gray03) - .font(.PretendardMedium10) - } - } - } - Divider() - .foregroundStyle(.gray02) - .padding(.top, 4) - .padding(.bottom, 24) - - } - } - -} - -#Preview { - ProfileManageView() -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/ProfileView.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/ProfileView.swift deleted file mode 100644 index 7de77a7..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/ProfileView.swift +++ /dev/null @@ -1,218 +0,0 @@ -// -// ProfileView.swift -// MegaBox -// -// Created by 이서현 on 9/21/25. -// - -import SwiftUI - -struct ProfileView: View { - @AppStorage("id") private var storedId: String = "Guest" - - @Environment(NavigationRouter.self) var router - @EnvironmentObject var viewModel: MovieViewModel - - //@State private var router = NavigationRouter() // 하위뷰에서 이렇게 절대 만들지 말 것!! - - var body: some View { - VStack(spacing: 0) { - headerView - .padding(.top, 59) - .padding(.bottom, 15) - ClubMemberShipView - .padding(.bottom, 33) - CouponView - .padding(.bottom, 33) - OrderBar - Spacer() - } - .padding(.horizontal, 16) - } - - //MARK: - 헤더 - private var headerView: some View { - VStack(spacing: 0) { - HStack(spacing: 0) { - Text(storedId) - .font(.PretendardBold24) - .foregroundStyle(.black) - .padding(.trailing, 5) - Text("WELCOME") - .font(.PretendardMedium14) - .padding(.vertical, 4) - .padding(.horizontal, 8) - .foregroundStyle(.white) - .background(Color.tag) - .clipShape(RoundedRectangle(cornerRadius: 6)) - Spacer() - Button(action: { - router.path.append(Route.profile) - }) { - Capsule() - .foregroundStyle(Color.gray07) - .frame(width: 72, height: 28) - .overlay(Text("회원정보") - .font(.PretendardSemiBold14) - .foregroundStyle(.white)) - } - } - HStack(spacing: 0) { - Text("멤버십 포인트") - .font(.PretendardSemiBold14) - .foregroundStyle(.gray04) - .padding(.trailing, 9) - Text("500P") - .font(.PretendardMedium14) - .foregroundStyle(.black) - Spacer() - } - .padding(.top, 7) - } - } - - //MARK: - 멤버십 - private var ClubMemberShipView: some View { - Button(action: {}) { - ZStack(alignment: .center) { - RoundedRectangle(cornerRadius: 8) - .frame(maxWidth: .infinity) - .frame(height: 46) - .foregroundStyle(LinearGradient( - colors: - [Color.linearColor1, - Color.linearColor2, - Color.linearColor3], - startPoint: .leading, - endPoint: .trailing - )) - HStack(alignment: .center, spacing: 3) { - Text("클럽 멤버십") - .font(.PretendardSemiBold16) - .foregroundStyle(.white) - Image(.chevronRight) - .frame(width: 10, height: 5) - .foregroundStyle(.white) - Spacer() - } - .padding(.leading, 8) - } - } - } - - //MARK: - 쿠폰 / 스토어 교환권 / 모바일 티켓 - - private var CouponView: some View { - HStack(spacing: 0) { - VStack(spacing: 0) { - Text("쿠폰") - .font(.PretendardSemiBold16) - .foregroundStyle(.gray02) - .padding(.bottom, 9) - Text("0") - .font(.PretendardSemiBold18) - .foregroundStyle(.black) - } - Spacer() - Rectangle() - .foregroundColor(.gray02) - .frame(width: 1, height: 31) - Spacer() - - VStack(spacing: 0) { - Text("스토어 교환권") - .font(.PretendardSemiBold16) - .foregroundStyle(.gray02) - .lineLimit(1) - .padding(.bottom, 9) - Text("0") - .font(.PretendardSemiBold18) - .foregroundStyle(.black) - } - Spacer() - Rectangle() - .foregroundColor(.gray02) - .frame(width: 1, height: 31) - Spacer() - - - VStack(spacing: 0) { - Text("모바일 티켓") - .font(.PretendardSemiBold16) - .foregroundStyle(.gray02) - .padding(.bottom, 9) - Text("0") - .font(.PretendardSemiBold18) - .foregroundStyle(.black) - } - } - .frame(maxWidth: .infinity) - .padding(.horizontal, 24) - .padding(.vertical, 12) - .background(Color.white) - .clipShape( - RoundedRectangle( - cornerRadius: 8, - style: .continuous)) - .overlay( - RoundedRectangle( - cornerRadius: 8, - style: .continuous - ) - .stroke(Color.gray02, lineWidth: 0.5) - ) - - - } - - //MARK: - 예매별 버튼 - private var OrderBar: some View { - HStack(spacing: 0) { - Button(action: {}) { - VStack(spacing: 12) { - Image(.movieIcon) - Text("영화별예매") - .font(.PretendardMedium16) - .foregroundStyle(.black) - } - } - Spacer() - Button(action: {}) { - VStack(spacing: 12) { - Image(.locationIcon) - Text("극장별예매") - .font(.PretendardMedium16) - .foregroundStyle(.black) - } - } - Spacer() - Button(action: {}) { - VStack(spacing: 12) { - Image(.sofaIcon) - Text("특별관예매") - .font(.PretendardMedium16) - .foregroundStyle(.black) - } - } - Spacer() - Button(action: {}) { - VStack(spacing: 12) { - Image(.orderIcon) - Text("모바일오더") - .font(.PretendardMedium16) - .foregroundStyle(.black) - } - } - } - } - - - - -} - -#Preview { - ProfileView() - .environment(NavigationRouter()) - .environmentObject(MovieViewModel()) -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/SplashView.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/SplashView.swift deleted file mode 100644 index f293618..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/SplashView.swift +++ /dev/null @@ -1,56 +0,0 @@ -// -// SplashView.swift -// MegaBox -// -// Created by 이서현 on 9/15/25. -// - -import SwiftUI - -struct SplashView: View { - @Environment(NavigationRouter.self) var router - @State private var isChecking = true - @State private var didRunAutoLogin = false - - - private let keychain = KeychainService.shared - private let service = "MegaBox" - - @AppStorage("id") private var storedId: String = "" - - var body: some View { - ZStack(alignment: .center) { - Rectangle() - .ignoresSafeArea() - .foregroundStyle(Color.white) - - Image(.megaboxLogo1) - .resizable() - .frame(width: 249, height: 84) - } - .onAppear { - checkAutoLogin() - } - } - - private func checkAutoLogin() { - // 앱 실행 시 키체인/스토리지 확인 - guard !didRunAutoLogin else { return } - didRunAutoLogin = true - DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { // 1초 로고 노출 - if !storedId.isEmpty, - let _ = keychain.load(account: storedId, service: service) { - print("🔐 자동로그인 성공 - TabBarView로 이동") - router.path.append(Route.tab(index: 0)) - } else { - print("저장된 로그인 정보 없음 - Login화면으로 이동") - router.path.append(Route.login) - } - } - } -} - -#Preview { - SplashView() - .environment(NavigationRouter()) -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/Views/TabBarView.swift b/wizzy/MEGABOX/MegaBox/Sources/Views/TabBarView.swift deleted file mode 100644 index 4e9aa00..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/Views/TabBarView.swift +++ /dev/null @@ -1,58 +0,0 @@ -// -// TabView.swift -// MegaBox -// -// Created by 이서현 on 9/29/25. -// - -import UIKit -import Foundation -import SwiftUI - -struct TabBarView: View { - @Environment(NavigationRouter.self) var router - @EnvironmentObject var viewModel: MovieViewModel - - enum AppTab: Int { - case home = 0 - case booking - case order - case profile - } - - ///현재 선택된 탭을 추적 - @State private var selectedTab: AppTab - - ///초기 탭을 지정 - init(defaultTab: AppTab = .home) { - _selectedTab = State(initialValue: defaultTab) - } - - var body: some View { - TabView(selection: $selectedTab) { - Tab("홈", systemImage: "house.fill", value: AppTab.home) { - HomeView() - .environment(router) - .environmentObject(viewModel) - } - - Tab("바로 예매", systemImage: "play.laptopcomputer", value: AppTab.booking) { - BookingView() - .environment(router) - .environmentObject(viewModel) - } - - Tab("모바일 오더", systemImage: "popcorn", value: AppTab.order) { - MobileOrderView() - .environment(router) - } - - Tab("마이페이지", systemImage: "person", value: AppTab.profile) { - ProfileView() - .environment(router) - .environmentObject(viewModel) - } - } - .tint(.blue) - } -} diff --git a/wizzy/MEGABOX/MegaBox/Sources/toDomain.swift b/wizzy/MEGABOX/MegaBox/Sources/toDomain.swift deleted file mode 100644 index 46a02e5..0000000 --- a/wizzy/MEGABOX/MegaBox/Sources/toDomain.swift +++ /dev/null @@ -1,80 +0,0 @@ -// -// toDomain.swift -// MegaBox -// -// Created by 이서현 on 10/29/25. -// - -import Foundation -import SwiftUI - -// MARK: - Extension - -///MovieData → MovieModel 매핑 -extension MovieData { - func toDomain() -> MovieModel { - return MovieModel( - title: title, - poster: "poster1", /// 이 부분은 어떻게 하면 좋을까요? - countAudience: nil - ) - } -} - - -/// MovieScheduleAreaDTO → [Showtime] 매핑 -extension MovieScheduleAreaDTO { - func toDomain(theater: Theater, scheduleDate: String) -> [Showtime] { - var showtimes: [Showtime] = [] - let formatter = DateFormatter() ///날짜 문자열 - formatter.dateFormat = "yyyy-MM-dd HH:mm" - - for item in items { /// area 안에는 여러 auditorium 존재 - for st in item.showtimes { ///각 상영관마다 여러 상영시간(시작/끝, 잔여좌석 ...) 존재 - // "2025-11-01" + "11:30" → "2025-11-01 11:30" - let startString = "\(scheduleDate) \(st.start)" - let endString = "\(scheduleDate) \(st.end)" - let startDate = formatter.date(from: startString) ?? Date() ///문자열 → Date 파싱, 실패하면 현재 날짜로.. - let endDate = formatter.date(from: endString) ?? Date() - - showtimes.append( ///도메인 모델로 묶어서 배열에 추가함 - Showtime( - theater: theater, - screenName: item.auditorium, - format: item.format, ///2D, 3D, IMAX 등 - start: startDate, - end: endDate, - remaining: st.available, - capacity: st.total - ) - ) - } - } - return showtimes - } -} - -///MovieDataContainer → [MovieShowtimeGroup] 매핑 -extension MovieDataContainer { - func toDomain() -> [MovieShowtimeGroup] { - var result: [MovieShowtimeGroup] = [] ///영화별 상영 정보 묶음 정보 담는 배열 - - for movieData in movies { ///api 응답에 있는 모든 영화 순회하기 - let movie = movieData.toDomain() ///MovieData → MovieModel 매핑 구조 재사용 - - var allShowtimes: [Showtime] = [] // 상영시간표들 모아놓은 배열 - for schedule in movieData.schedules { ///같은 영화 내 상영 스케줄 - for area in schedule.areas { /// 같은 영화 내 같은 스케줄 내 다른 지역 - if let theater = Theater(rawValue: area.area) { /// Theater enum값과 같다면 값 대입 (강남 홍대 신촌) - allShowtimes += area.toDomain(theater: theater, scheduleDate: schedule.date) - /// MovieScheduleAreaDTO → [Showtime] 매핑 - } - } - } - - result.append(MovieShowtimeGroup(movie: movie, showtimes: allShowtimes)) - } - - return result - } -} diff --git a/wizzy/MEGABOX/MovieSchedule.json b/wizzy/MEGABOX/MovieSchedule.json deleted file mode 100644 index b95dbe7..0000000 --- a/wizzy/MEGABOX/MovieSchedule.json +++ /dev/null @@ -1,385 +0,0 @@ -{ - "status": "success", - "message": "Showtimes fetched successfully", - "data": { - "movies": [ - { - "id": "m-001", - "title": "어쩔수가없다", - "age_rating": "15", - "schedules": [ - { - "date": "2025-09-22", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "크리클라이너 1관", - "format": "2D", - "showtimes": [ - { "start": "11:30", "end": "13:58", "available": 109, "total": 116 }, - { "start": "14:20", "end": "16:48", "available": 19, "total": 116 }, - { "start": "17:05", "end": "19:28", "available": 1, "total": 116 }, - { "start": "19:45", "end": "22:02", "available": 100, "total": 116 }, - { "start": "22:20", "end": "00:04", "available": 116, "total": 116 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "BTS관 (7층 1관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "09:30", "end": "11:50", "available": 75, "total": 116 }, - { "start": "12:00", "end": "14:26", "available": 102, "total": 116 }, - { "start": "14:45", "end": "17:04", "available": 88, "total": 116 } - ] - }, - { - "auditorium": "BTS관 (9층 2관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "11:30", "end": "13:58", "available": 34, "total": 116 }, - { "start": "14:10", "end": "16:32", "available": 100, "total": 116 }, - { "start": "16:50", "end": "19:00", "available": 13, "total": 116 }, - { "start": "19:20", "end": "21:40", "available": 92, "total": 116 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-23", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "크리클라이너 1관", - "format": "2D", - "showtimes": [ - { "start": "10:30", "end": "12:58", "available": 112, "total": 116 }, - { "start": "13:40", "end": "16:08", "available": 54, "total": 116 }, - { "start": "16:20", "end": "18:48", "available": 22, "total": 116 }, - { "start": "19:30", "end": "21:58", "available": 97, "total": 116 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "BTS관 (7층 1관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "09:50", "end": "12:10", "available": 81, "total": 116 }, - { "start": "12:30", "end": "14:56", "available": 99, "total": 116 }, - { "start": "15:20", "end": "17:39", "available": 61, "total": 116 } - ] - }, - { - "auditorium": "BTS관 (9층 2관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "11:10", "end": "13:38", "available": 45, "total": 116 }, - { "start": "14:00", "end": "16:22", "available": 88, "total": 116 }, - { "start": "16:40", "end": "18:58", "available": 24, "total": 116 }, - { "start": "19:10", "end": "21:30", "available": 90, "total": 116 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-24", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "크리클라이너 1관", - "format": "2D", - "showtimes": [ - { "start": "11:00", "end": "13:28", "available": 106, "total": 116 }, - { "start": "13:50", "end": "16:18", "available": 33, "total": 116 }, - { "start": "16:40", "end": "19:08", "available": 5, "total": 116 }, - { "start": "19:20", "end": "21:48", "available": 84, "total": 116 }, - { "start": "22:10", "end": "00:34", "available": 116, "total": 116 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "BTS관 (7층 1관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "10:10", "end": "12:30", "available": 72, "total": 116 }, - { "start": "12:50", "end": "15:16", "available": 104, "total": 116 }, - { "start": "15:40", "end": "18:00", "available": 76, "total": 116 } - ] - }, - { - "auditorium": "BTS관 (9층 2관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "11:40", "end": "14:08", "available": 29, "total": 116 }, - { "start": "14:20", "end": "16:42", "available": 93, "total": 116 }, - { "start": "17:10", "end": "19:30", "available": 18, "total": 116 }, - { "start": "19:40", "end": "22:00", "available": 87, "total": 116 } - ] - } - ] - } - ] - } - ] - }, - { - "id": "m-002", - "title": "F1 더 무비", - "age_rating": "12", - "schedules": [ - { - "date": "2025-09-22", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "IMAX 1관", - "format": "IMAX", - "showtimes": [ - { "start": "10:00", "end": "12:15", "available": 45, "total": 50 }, - { "start": "13:30", "end": "15:45", "available": 12, "total": 50 }, - { "start": "17:00", "end": "19:15", "available": 8, "total": 50 }, - { "start": "20:30", "end": "22:45", "available": 35, "total": 50 } - ] - }, - { - "auditorium": "4DX 2관", - "format": "4DX", - "showtimes": [ - { "start": "11:15", "end": "13:30", "available": 28, "total": 40 }, - { "start": "15:45", "end": "18:00", "available": 5, "total": 40 }, - { "start": "19:15", "end": "21:30", "available": 22, "total": 40 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "IMAX 3관", - "format": "IMAX", - "showtimes": [ - { "start": "09:45", "end": "12:00", "available": 38, "total": 50 }, - { "start": "13:15", "end": "15:30", "available": 15, "total": 50 }, - { "start": "16:45", "end": "19:00", "available": 3, "total": 50 }, - { "start": "20:15", "end": "22:30", "available": 42, "total": 50 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-23", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "IMAX 1관", - "format": "IMAX", - "showtimes": [ - { "start": "10:30", "end": "12:45", "available": 48, "total": 50 }, - { "start": "14:00", "end": "16:15", "available": 25, "total": 50 }, - { "start": "17:30", "end": "19:45", "available": 18, "total": 50 }, - { "start": "21:00", "end": "23:15", "available": 41, "total": 50 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "IMAX 3관", - "format": "IMAX", - "showtimes": [ - { "start": "10:00", "end": "12:15", "available": 33, "total": 50 }, - { "start": "13:30", "end": "15:45", "available": 7, "total": 50 }, - { "start": "17:00", "end": "19:15", "available": 12, "total": 50 }, - { "start": "20:30", "end": "22:45", "available": 39, "total": 50 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-24", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "IMAX 1관", - "format": "IMAX", - "showtimes": [ - { "start": "09:30", "end": "11:45", "available": 42, "total": 50 }, - { "start": "12:45", "end": "15:00", "available": 18, "total": 50 }, - { "start": "15:30", "end": "17:45", "available": 6, "total": 50 }, - { "start": "18:15", "end": "20:30", "available": 29, "total": 50 }, - { "start": "21:00", "end": "23:15", "available": 44, "total": 50 } - ] - }, - { - "auditorium": "4DX 2관", - "format": "4DX", - "showtimes": [ - { "start": "10:30", "end": "12:45", "available": 15, "total": 40 }, - { "start": "14:00", "end": "16:15", "available": 3, "total": 40 }, - { "start": "17:30", "end": "19:45", "available": 1, "total": 40 }, - { "start": "20:00", "end": "22:15", "available": 25, "total": 40 } - ] - } - ] - } - ] - } - ] - }, - { - "id": "m-003", - "title": "귀멸의 칼날: 무한성", - "age_rating": "15", - "schedules": [ - { - "date": "2025-09-22", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:30", "end": "12:20", "available": 85, "total": 120 }, - { "start": "13:00", "end": "15:50", "available": 23, "total": 120 }, - { "start": "16:30", "end": "19:20", "available": 2, "total": 120 }, - { "start": "20:00", "end": "22:50", "available": 78, "total": 120 }, - { "start": "23:30", "end": "02:20", "available": 95, "total": 120 } - ] - }, - { - "auditorium": "4DX 3관", - "format": "4DX", - "showtimes": [ - { "start": "10:45", "end": "13:35", "available": 15, "total": 40 }, - { "start": "14:15", "end": "17:05", "available": 4, "total": 40 }, - { "start": "17:45", "end": "20:35", "available": 1, "total": 40 }, - { "start": "21:15", "end": "00:05", "available": 28, "total": 40 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:00", "end": "11:50", "available": 67, "total": 120 }, - { "start": "12:30", "end": "15:20", "available": 19, "total": 120 }, - { "start": "16:00", "end": "18:50", "available": 5, "total": 120 }, - { "start": "19:30", "end": "22:20", "available": 89, "total": 120 } - ] - }, - { - "auditorium": "Dolby Cinema 4관", - "format": "Dolby", - "showtimes": [ - { "start": "11:00", "end": "13:50", "available": 22, "total": 60 }, - { "start": "14:30", "end": "17:20", "available": 8, "total": 60 }, - { "start": "18:00", "end": "20:50", "available": 3, "total": 60 }, - { "start": "21:30", "end": "00:20", "available": 45, "total": 60 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-23", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:45", "end": "12:35", "available": 92, "total": 120 }, - { "start": "13:15", "end": "16:05", "available": 31, "total": 120 }, - { "start": "16:45", "end": "19:35", "available": 7, "total": 120 }, - { "start": "20:15", "end": "23:05", "available": 84, "total": 120 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:30", "end": "12:20", "available": 74, "total": 120 }, - { "start": "13:00", "end": "15:50", "available": 26, "total": 120 }, - { "start": "16:30", "end": "19:20", "available": 11, "total": 120 }, - { "start": "20:00", "end": "22:50", "available": 96, "total": 120 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-24", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "돌비시네마", - "format": "2D", - "showtimes": [ - { "start": "09:15", "end": "12:05", "available": 88, "total": 120 }, - { "start": "12:45", "end": "15:35", "available": 25, "total": 120 }, - { "start": "16:15", "end": "19:05", "available": 4, "total": 120 }, - { "start": "19:45", "end": "22:35", "available": 81, "total": 120 }, - { "start": "23:15", "end": "02:05", "available": 98, "total": 120 } - ] - } - ] - } - ] - } - ] - } - ] - } -} diff --git a/wizzy/MEGABOX/Project.swift b/wizzy/MEGABOX/Project.swift deleted file mode 100644 index 3fb67b2..0000000 --- a/wizzy/MEGABOX/Project.swift +++ /dev/null @@ -1,34 +0,0 @@ -import ProjectDescription - -let project = Project( - name: "MegaBox", - targets: [ - .target( - name: "MegaBox", - destinations: .iOS, - product: .app, - bundleId: "io.tuist.MegaBox", - infoPlist: .extendingDefault( - with: [ - "UILaunchScreen": [ - "UIColorName": "", - "UIImageName": "", - ], - ] - ), - sources: ["MegaBox/Sources/**"], - resources: ["MegaBox/Resources/**"], - dependencies: [] - ), - .target( - name: "MegaBoxTests", - destinations: .iOS, - product: .unitTests, - bundleId: "io.tuist.MegaBoxTests", - infoPlist: .default, - sources: ["MegaBox/Tests/**"], - resources: [], - dependencies: [.target(name: "MegaBox")] - ), - ] -) diff --git a/wizzy/MEGABOX/Tuist.swift b/wizzy/MEGABOX/Tuist.swift deleted file mode 100644 index ebf9894..0000000 --- a/wizzy/MEGABOX/Tuist.swift +++ /dev/null @@ -1,3 +0,0 @@ -import ProjectDescription - -let tuist = Tuist(project: .tuist()) \ No newline at end of file diff --git a/wizzy/MEGABOX/Tuist/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/wizzy/MEGABOX/Tuist/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/wizzy/MEGABOX/Tuist/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/wizzy/MEGABOX/Tuist/Package.swift b/wizzy/MEGABOX/Tuist/Package.swift deleted file mode 100644 index 762d5fe..0000000 --- a/wizzy/MEGABOX/Tuist/Package.swift +++ /dev/null @@ -1,22 +0,0 @@ -// swift-tools-version: 6.0 -import PackageDescription - -#if TUIST - import struct ProjectDescription.PackageSettings - - let packageSettings = PackageSettings( - // Customize the product types for specific package product - // Default is .staticFramework - // productTypes: ["Alamofire": .framework,] - productTypes: [:] - ) -#endif - -let package = Package( - name: "MegaBox", - dependencies: [ - // Add your own dependencies here: - // .package(url: "https://github.com/Alamofire/Alamofire", from: "5.0.0"), - // You can read more about dependencies here: https://docs.tuist.io/documentation/tuist/dependencies - ] -) diff --git a/wizzy/MEGABOX/mise.toml b/wizzy/MEGABOX/mise.toml deleted file mode 100644 index 2604282..0000000 --- a/wizzy/MEGABOX/mise.toml +++ /dev/null @@ -1,2 +0,0 @@ -[tools] -tuist = "4.44.3" diff --git a/wizzy/week0/week0.png b/wizzy/week0/week0.png deleted file mode 100644 index 4af0104..0000000 Binary files a/wizzy/week0/week0.png and /dev/null differ diff --git a/wizzy/week1/Week1_Practice/Week1-Practice-Info.plist b/wizzy/week1/Week1_Practice/Week1-Practice-Info.plist deleted file mode 100644 index cf8c929..0000000 --- a/wizzy/week1/Week1_Practice/Week1-Practice-Info.plist +++ /dev/null @@ -1,18 +0,0 @@ - - - - - UIAppFonts - - Pretendard-Black.otf - Pretendard-Bold.otf - Pretendard-ExtraBold.otf - Pretendard-ExtraLight.otf - Pretendard-Light.otf - Pretendard-Medium.otf - Pretendard-Regular.otf - Pretendard-SemiBold.otf - Pretendard-Thin.otf - - - diff --git a/wizzy/week1/Week1_Practice/Week1_Practice.xcodeproj/project.pbxproj b/wizzy/week1/Week1_Practice/Week1_Practice.xcodeproj/project.pbxproj deleted file mode 100644 index a0f48fc..0000000 --- a/wizzy/week1/Week1_Practice/Week1_Practice.xcodeproj/project.pbxproj +++ /dev/null @@ -1,327 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXFileReference section */ - 6191AD742E78141500F6F18F /* Week1_Practice.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Week1_Practice.app; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 6191AD762E78141500F6F18F /* Week1_Practice */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = Week1_Practice; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 6191AD712E78141500F6F18F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 6191AD6B2E78141500F6F18F = { - isa = PBXGroup; - children = ( - 6191AD762E78141500F6F18F /* Week1_Practice */, - 6191AD752E78141500F6F18F /* Products */, - ); - sourceTree = ""; - }; - 6191AD752E78141500F6F18F /* Products */ = { - isa = PBXGroup; - children = ( - 6191AD742E78141500F6F18F /* Week1_Practice.app */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 6191AD732E78141500F6F18F /* Week1_Practice */ = { - isa = PBXNativeTarget; - buildConfigurationList = 6191AD7F2E78141700F6F18F /* Build configuration list for PBXNativeTarget "Week1_Practice" */; - buildPhases = ( - 6191AD702E78141500F6F18F /* Sources */, - 6191AD712E78141500F6F18F /* Frameworks */, - 6191AD722E78141500F6F18F /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 6191AD762E78141500F6F18F /* Week1_Practice */, - ); - name = Week1_Practice; - packageProductDependencies = ( - ); - productName = Week1_Practice; - productReference = 6191AD742E78141500F6F18F /* Week1_Practice.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 6191AD6C2E78141500F6F18F /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1640; - LastUpgradeCheck = 1640; - TargetAttributes = { - 6191AD732E78141500F6F18F = { - CreatedOnToolsVersion = 16.4; - }; - }; - }; - buildConfigurationList = 6191AD6F2E78141500F6F18F /* Build configuration list for PBXProject "Week1_Practice" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 6191AD6B2E78141500F6F18F; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - productRefGroup = 6191AD752E78141500F6F18F /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 6191AD732E78141500F6F18F /* Week1_Practice */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 6191AD722E78141500F6F18F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 6191AD702E78141500F6F18F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 6191AD7D2E78141700F6F18F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 6191AD7E2E78141700F6F18F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 6191AD802E78141700F6F18F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "Week1-Practice-Info.plist"; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "com.wizzy.Week1-Practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 6191AD812E78141700F6F18F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "Week1-Practice-Info.plist"; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "com.wizzy.Week1-Practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 6191AD6F2E78141500F6F18F /* Build configuration list for PBXProject "Week1_Practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 6191AD7D2E78141700F6F18F /* Debug */, - 6191AD7E2E78141700F6F18F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 6191AD7F2E78141700F6F18F /* Build configuration list for PBXNativeTarget "Week1_Practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 6191AD802E78141700F6F18F /* Debug */, - 6191AD812E78141700F6F18F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 6191AD6C2E78141500F6F18F /* Project object */; -} diff --git a/wizzy/week1/Week1_Practice/Week1_Practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/wizzy/week1/Week1_Practice/Week1_Practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/wizzy/week1/Week1_Practice/Week1_Practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Assets.xcassets/AccentColor.colorset/Contents.json b/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Assets.xcassets/Contents.json b/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Assets.xcassets/background.imageset/Contents.json b/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Assets.xcassets/background.imageset/Contents.json deleted file mode 100644 index 7e26126..0000000 --- a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Assets.xcassets/background.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "background.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Assets.xcassets/background.imageset/background.pdf b/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Assets.xcassets/background.imageset/background.pdf deleted file mode 100644 index 45be9eb..0000000 Binary files a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Assets.xcassets/background.imageset/background.pdf and /dev/null differ diff --git a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Fonts.swift b/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Fonts.swift deleted file mode 100644 index 7ee9011..0000000 --- a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Fonts.swift +++ /dev/null @@ -1,62 +0,0 @@ -// -// Fonts.swift -// Week1_Practice -// -// Created by 이서현 on 9/15/25. -// - -import Foundation -import SwiftUI - -extension Font { - enum Pretend { - case extraBold - case bold - case semibold - case medium - case regular - case light - - var value: String { - switch self { - case .extraBold: - return "Pretendard-ExtraBold" - case .bold: - return "Pretendard-Bold" - case .semibold: - return "Pretendard-SemiBold" - case .medium: - return "Pretendard-Medium" - case .regular: - return "Pretendard-Regular" - case .light: - return "Pretendard-Light" - } - } - } - - static func pretend(type: Pretend, size: CGFloat) -> Font { - return .custom(type.value, size: size) - } - - static var PretendardBold30: Font { - return .pretend(type: .bold, size: 30) - } - - static var PretendardRegular16: Font { - return .pretend(type: .regular, size: 16) - } - - static var PretendardLight16: Font { - return .pretend(type: .light, size: 16) - } - - static var PretendardBold24: Font { - return .pretend(type: .bold, size: 24) - } - - static var PretendardSemiBold18: Font { - return .pretend(type: .semibold, size: 18) - } - -} diff --git a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Black.otf b/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Black.otf deleted file mode 100644 index 8429a92..0000000 Binary files a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Black.otf and /dev/null differ diff --git a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Bold.otf b/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Bold.otf deleted file mode 100644 index e6d6ce8..0000000 Binary files a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Bold.otf and /dev/null differ diff --git a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-ExtraBold.otf b/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-ExtraBold.otf deleted file mode 100644 index 07296ec..0000000 Binary files a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-ExtraBold.otf and /dev/null differ diff --git a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-ExtraLight.otf b/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-ExtraLight.otf deleted file mode 100644 index ad7dbef..0000000 Binary files a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-ExtraLight.otf and /dev/null differ diff --git a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Light.otf b/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Light.otf deleted file mode 100644 index b29ee0d..0000000 Binary files a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Light.otf and /dev/null differ diff --git a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Medium.otf b/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Medium.otf deleted file mode 100644 index ff907c4..0000000 Binary files a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Medium.otf and /dev/null differ diff --git a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Regular.otf b/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Regular.otf deleted file mode 100644 index 858cdd3..0000000 Binary files a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Regular.otf and /dev/null differ diff --git a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-SemiBold.otf b/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-SemiBold.otf deleted file mode 100644 index fe81db7..0000000 Binary files a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-SemiBold.otf and /dev/null differ diff --git a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Thin.otf b/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Thin.otf deleted file mode 100644 index 409558c..0000000 Binary files a/wizzy/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Thin.otf and /dev/null differ diff --git a/wizzy/week1/Week1_Practice/Week1_Practice/TicketView.swift b/wizzy/week1/Week1_Practice/Week1_Practice/TicketView.swift deleted file mode 100644 index c1b83d6..0000000 --- a/wizzy/week1/Week1_Practice/Week1_Practice/TicketView.swift +++ /dev/null @@ -1,67 +0,0 @@ -// -// TicketView.swift -// Week1_Practice -// -// Created by 이서현 on 9/15/25. -// - -import SwiftUI - -struct TicketView: View { - var body: some View { - ZStack { - Image(.background) - - VStack { - - Spacer().frame(height: 111) - - mainTitleGroup - - Spacer().frame(height: 134) - - mainBottomGroup - } - } - .padding() - } - - /// 상단 VStack - private var mainTitleGroup: some View { - VStack { - Group { - Text("마이펫의 이중생활2") - .font(.PretendardBold30) - .shadow(color: .black.opacity(0.25), radius: 2, x: 0, y: 4) - Text("본인 + 동반 1인") - .font(.PretendardLight16) - Text("30,100원") - .font(.PretendardBold24) - } - .foregroundStyle(Color.white) - } - .frame(height: 84) - } - - /// 하단 VStack - private var mainBottomGroup: some View { - Button(action: { - print("Hello") - }, label: { - VStack { - Image(systemName: "chevron.up") - .resizable() - .frame(width: 18, height: 12) - .foregroundStyle(Color.white) - Text("예매하기") - .font(.PretendardSemiBold18) - .foregroundStyle(Color.white) - } - .frame(width: 63, height: 40) - }) - } -} - -#Preview { - TicketView() -} diff --git a/wizzy/week1/Week1_Practice/Week1_Practice/Week1_PracticeApp.swift b/wizzy/week1/Week1_Practice/Week1_Practice/Week1_PracticeApp.swift deleted file mode 100644 index b24f2ee..0000000 --- a/wizzy/week1/Week1_Practice/Week1_Practice/Week1_PracticeApp.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// Week1_PracticeApp.swift -// Week1_Practice -// -// Created by 이서현 on 9/15/25. -// - -import SwiftUI - -@main -struct Week1_PracticeApp: App { - var body: some Scene { - WindowGroup { - TicketView() - } - } -} diff --git a/wizzy/week2/Week2_Practice/MovieApp/MovieApp.xcodeproj/project.pbxproj b/wizzy/week2/Week2_Practice/MovieApp/MovieApp.xcodeproj/project.pbxproj deleted file mode 100644 index 1b29115..0000000 --- a/wizzy/week2/Week2_Practice/MovieApp/MovieApp.xcodeproj/project.pbxproj +++ /dev/null @@ -1,329 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXFileReference section */ - 611890E82E7FE13200243C23 /* MovieApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MovieApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 611890EA2E7FE13200243C23 /* MovieApp */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = MovieApp; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 611890E52E7FE13200243C23 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 611890DF2E7FE13200243C23 = { - isa = PBXGroup; - children = ( - 611890EA2E7FE13200243C23 /* MovieApp */, - 611890E92E7FE13200243C23 /* Products */, - ); - sourceTree = ""; - }; - 611890E92E7FE13200243C23 /* Products */ = { - isa = PBXGroup; - children = ( - 611890E82E7FE13200243C23 /* MovieApp.app */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 611890E72E7FE13200243C23 /* MovieApp */ = { - isa = PBXNativeTarget; - buildConfigurationList = 611890F32E7FE13500243C23 /* Build configuration list for PBXNativeTarget "MovieApp" */; - buildPhases = ( - 611890E42E7FE13200243C23 /* Sources */, - 611890E52E7FE13200243C23 /* Frameworks */, - 611890E62E7FE13200243C23 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 611890EA2E7FE13200243C23 /* MovieApp */, - ); - name = MovieApp; - packageProductDependencies = ( - ); - productName = MovieApp; - productReference = 611890E82E7FE13200243C23 /* MovieApp.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 611890E02E7FE13200243C23 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1640; - LastUpgradeCheck = 1640; - TargetAttributes = { - 611890E72E7FE13200243C23 = { - CreatedOnToolsVersion = 16.4; - }; - }; - }; - buildConfigurationList = 611890E32E7FE13200243C23 /* Build configuration list for PBXProject "MovieApp" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 611890DF2E7FE13200243C23; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - productRefGroup = 611890E92E7FE13200243C23 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 611890E72E7FE13200243C23 /* MovieApp */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 611890E62E7FE13200243C23 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 611890E42E7FE13200243C23 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 611890F12E7FE13500243C23 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = XRY42MG75P; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 611890F22E7FE13500243C23 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = XRY42MG75P; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 611890F42E7FE13500243C23 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = XRY42MG75P; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.wizzy.MovieApp; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 611890F52E7FE13500243C23 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = XRY42MG75P; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.wizzy.MovieApp; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 611890E32E7FE13200243C23 /* Build configuration list for PBXProject "MovieApp" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 611890F12E7FE13500243C23 /* Debug */, - 611890F22E7FE13500243C23 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 611890F32E7FE13500243C23 /* Build configuration list for PBXNativeTarget "MovieApp" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 611890F42E7FE13500243C23 /* Debug */, - 611890F52E7FE13500243C23 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 611890E02E7FE13200243C23 /* Project object */; -} diff --git a/wizzy/week2/Week2_Practice/MovieApp/MovieApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/wizzy/week2/Week2_Practice/MovieApp/MovieApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/wizzy/week2/Week2_Practice/MovieApp/MovieApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/AccentColor.colorset/Contents.json b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/AppIcon.appiconset/Contents.json b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/Contents.json b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/brutalis.imageset/Contents.json b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/brutalis.imageset/Contents.json deleted file mode 100644 index 4ff6933..0000000 --- a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/brutalis.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=브루탈리스트.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/brutalis.imageset/Property 1=\353\270\214\353\243\250\355\203\210\353\246\254\354\212\244\355\212\270.pdf" "b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/brutalis.imageset/Property 1=\353\270\214\353\243\250\355\203\210\353\246\254\354\212\244\355\212\270.pdf" deleted file mode 100644 index 0280db4..0000000 Binary files "a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/brutalis.imageset/Property 1=\353\270\214\353\243\250\355\203\210\353\246\254\354\212\244\355\212\270.pdf" and /dev/null differ diff --git a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/conclave.imageset/Contents.json b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/conclave.imageset/Contents.json deleted file mode 100644 index 0dc7ac7..0000000 --- a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/conclave.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=콘클라베.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/conclave.imageset/Property 1=\354\275\230\355\201\264\353\235\274\353\262\240.pdf" "b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/conclave.imageset/Property 1=\354\275\230\355\201\264\353\235\274\353\262\240.pdf" deleted file mode 100644 index 1cd285b..0000000 Binary files "a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/conclave.imageset/Property 1=\354\275\230\355\201\264\353\235\274\353\262\240.pdf" and /dev/null differ diff --git a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/mickey.imageset/Contents.json b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/mickey.imageset/Contents.json deleted file mode 100644 index c84096e..0000000 --- a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/mickey.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=미키.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/mickey.imageset/Property 1=\353\257\270\355\202\244.pdf" "b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/mickey.imageset/Property 1=\353\257\270\355\202\244.pdf" deleted file mode 100644 index f44d3b0..0000000 Binary files "a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/mickey.imageset/Property 1=\353\257\270\355\202\244.pdf" and /dev/null differ diff --git a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/snowWhite.imageset/Contents.json b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/snowWhite.imageset/Contents.json deleted file mode 100644 index a4d6c2b..0000000 --- a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/snowWhite.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=백설공주.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/snowWhite.imageset/Property 1=\353\260\261\354\204\244\352\263\265\354\243\274.pdf" "b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/snowWhite.imageset/Property 1=\353\260\261\354\204\244\352\263\265\354\243\274.pdf" deleted file mode 100644 index 80841d9..0000000 Binary files "a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/snowWhite.imageset/Property 1=\353\260\261\354\204\244\352\263\265\354\243\274.pdf" and /dev/null differ diff --git a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/theFall.imageset/Contents.json b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/theFall.imageset/Contents.json deleted file mode 100644 index 492242a..0000000 --- a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/theFall.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=더폴.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/theFall.imageset/Property 1=\353\215\224\355\217\264.pdf" "b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/theFall.imageset/Property 1=\353\215\224\355\217\264.pdf" deleted file mode 100644 index 354ea52..0000000 Binary files "a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/theFall.imageset/Property 1=\353\215\224\355\217\264.pdf" and /dev/null differ diff --git a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/toystory.imageset/Contents.json b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/toystory.imageset/Contents.json deleted file mode 100644 index 198c7d7..0000000 --- a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/toystory.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=토이스토리.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/toystory.imageset/Property 1=\355\206\240\354\235\264\354\212\244\355\206\240\353\246\254.pdf" "b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/toystory.imageset/Property 1=\355\206\240\354\235\264\354\212\244\355\206\240\353\246\254.pdf" deleted file mode 100644 index 9999f0c..0000000 Binary files "a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/toystory.imageset/Property 1=\355\206\240\354\235\264\354\212\244\355\206\240\353\246\254.pdf" and /dev/null differ diff --git a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/whiplash.imageset/Contents.json b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/whiplash.imageset/Contents.json deleted file mode 100644 index be343c5..0000000 --- a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/whiplash.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "image 5.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/whiplash.imageset/image 5.pdf b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/whiplash.imageset/image 5.pdf deleted file mode 100644 index 59d49da..0000000 Binary files a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/Assets.xcassets/whiplash.imageset/image 5.pdf and /dev/null differ diff --git a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/MovieAppApp.swift b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/MovieAppApp.swift deleted file mode 100644 index bb457ec..0000000 --- a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/MovieAppApp.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// MovieAppApp.swift -// MovieApp -// -// Created by 이서현 on 9/21/25. -// - -import SwiftUI - -@main -struct MovieAppApp: App { - var body: some Scene { - WindowGroup { - MovieView() - } - } -} diff --git a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/MovieCard.swift b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/MovieCard.swift deleted file mode 100644 index 247f8be..0000000 --- a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/MovieCard.swift +++ /dev/null @@ -1,58 +0,0 @@ -// -// MovieCard.swift -// MovieApp -// -// Created by 이서현 on 9/21/25. -// - -import SwiftUI - -struct MovieCard: View { - - let movieInfo: MovieModel - - init(movieInfo: MovieModel) { - self.movieInfo = movieInfo - } - - var body: some View { - VStack(spacing: 5) { - movieInfo.movieImage - - Text(movieInfo.movieName) - .font(.system(size: 20, weight: .bold)) - .foregroundStyle(Color.black) - - HStack { - movieLike - - Spacer() - - Text("예매율 \(String(format: "%.1f", movieInfo.movieReserCount))%") - .font(.system(size: 9, weight: .regular)) - .foregroundStyle(Color.black) - } - } - - /* 상위 뷰의 프레임을 꼭 넣어주세요! 피그마에 보시면 fixed로 고정되어 있는게 보이실겁니다.*/ - /* HStack 내부의 Spacer()로 부모 뷰의 사이즈에 영향을 받게됩니다.*/ - .frame(width: 120, height: 216) - } - - /// 하단 영화 좋아요 - private var movieLike: some View { - HStack(spacing: 6) { - Image(systemName: "heart.fill") - .foregroundStyle(Color.red) - .frame(width: 15, height: 14) - - Text("\(movieInfo.movieLike)") - .font(.system(size: 9, weight: .regular)) - .foregroundStyle(Color.black) - } - } -} - -#Preview { - MovieCard(movieInfo: .init(movieImage: .init(.mickey), movieName: "미키", movieLike: 972, movieReserCount: 30.8)) -} diff --git a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/MovieModel.swift b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/MovieModel.swift deleted file mode 100644 index 30fccb2..0000000 --- a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/MovieModel.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// MovieModel.swift -// MovieApp -// -// Created by 이서현 on 9/21/25. -// - -import Foundation -import SwiftUI - -struct MovieModel { - let movieImage: Image /* 영화 포스터 이미지 */ - let movieName: String /* 영화 이름 */ - let movieLike: Int /* 영화 좋아요 */ - let movieReserCount: Double /* 영화 예매율 */ -} diff --git a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/MovieView.swift b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/MovieView.swift deleted file mode 100644 index cdb261f..0000000 --- a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/MovieView.swift +++ /dev/null @@ -1,104 +0,0 @@ -// -// MovieView.swift -// MovieApp -// -// Created by 이서현 on 9/21/25. -// - -import SwiftUI -import Observation - -struct MovieView: View { - - @AppStorage("movieName") private var movieName: String = "" - private var viewModel: MovieViewModel = .init() - - - var body: some View { - VStack(spacing: 56) { - MovieCard(movieInfo: viewModel.movieModel[viewModel.currentIndex]) - - leftRightChange - - settingMovie - - printAppStorageValue - } - .padding() - } - - /// 왼쪽 오른쪽 change 버튼 - private var leftRightChange: some View { - HStack { - Group { - makeChevron(name: "chevron.left", action: viewModel.previousMovie) - - Spacer() - - Text("영화 바꾸기") - .font(.system(size: 20, weight: .regular)) - - Spacer() - - makeChevron(name: "chevron.right", action: viewModel.nextMovie) - } - .foregroundStyle(Color.black) - } - .frame(width: 256) - .padding(.vertical, 17) /* 이건 뭘 의미하는 걸까요? */ - .padding(.horizontal, 22) /* 이건 뭘 의미하는 걸까요? */ - } - - /// 화살표 재사용하기 위한 하위 뷰 - /// - Parameters: - /// - name: 이미지 이름 설정 - /// - action: 버튼이 가지는 액션 기능 넣기, @escpaing은 추후 문법을 통해 배우게 될 겁니다! - /// - Returns: some View 타입 반환 - private func makeChevron(name: String, action: @escaping () -> Void) -> some View { - Button(action: { - action() - }, label: { - Image(systemName: name) - .resizable() - .frame(width: 17.47, height: 29.73) - }) - } - - /// 대표 영화 설정 - private var settingMovie: some View { - Button(action: { - /* 현재 인덱스틔 영화 이름 AppStorage에 저장 */ - self.movieName = viewModel.movieModel[viewModel.currentIndex].movieName - }, label: { - Text("대표 영화로 설정") - .font(.system(size: 20, weight: .regular)) - .foregroundStyle(Color.black) - .padding(.top, 21) - .padding(.bottom, 20) - .padding(.leading, 53) - .padding(.trailing, 52) - .overlay(content: { - RoundedRectangle(cornerRadius: 20) - .fill(Color.clear) - .stroke(Color.black, style: .init(lineWidth: 1)) - }) - }) - } - - /// 하단 AppStorage에 저장된 영화 확인 텍스트 - private var printAppStorageValue: some View { - VStack(spacing: 17) { - Text("@AppStorage에 저장된 영화") - .font(.system(size: 30, weight: .regular)) - .foregroundStyle(Color.black) - - Text("현재 저장된 영화 : \(movieName)") - .font(.system(size: 20, weight: .regular)) - .foregroundStyle(Color.red) - } - } -} - -#Preview { - MovieView() -} diff --git a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/MovieViewModel.swift b/wizzy/week2/Week2_Practice/MovieApp/MovieApp/MovieViewModel.swift deleted file mode 100644 index 8cf7cb1..0000000 --- a/wizzy/week2/Week2_Practice/MovieApp/MovieApp/MovieViewModel.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// MovieViewModel.swift -// MovieApp -// -// Created by 이서현 on 9/21/25. -// - -import Foundation -import SwiftUI - -@Observable -class MovieViewModel { - let movieModel: [MovieModel] = [ - .init(movieImage: .init(.mickey), movieName: "미키", movieLike: 972, movieReserCount: 30.8), - .init(movieImage: .init(.toystory), movieName: "토이스토리", movieLike: 999, movieReserCount: 99.8), - .init(movieImage: .init(.brutalis), movieName: "브루탈리스트", movieLike: 302, movieReserCount: 24.8), - .init(movieImage: .init(.snowWhite), movieName: "백설공주", movieLike: 302, movieReserCount: 3.8), - .init(movieImage: .init(.whiplash), movieName: "위플래시", movieLike: 604, movieReserCount: 62.2), - .init(movieImage: .init(.conclave), movieName: "콘클라베", movieLike: 392, movieReserCount: 43.9), - .init(movieImage: .init(.theFall), movieName: "더폴", movieLike: 30, movieReserCount: 2.1) - ] - - var currentIndex: Int = 0 - - /// 이전 영화로 돌아가기, 단, 첫 번째 영화일 경우 마지막 영화로 전환 - public func previousMovie() { - currentIndex = (currentIndex - 1 + movieModel.count) % movieModel.count - } - - /// 오른쪽 버튼을 눌렀을 때 다음 영화로 이동하는 함수 - public func nextMovie() { - currentIndex = (currentIndex + 1) % movieModel.count - } -} diff --git a/wizzy/week2/week2grammer.playground/Contents.swift b/wizzy/week2/week2grammer.playground/Contents.swift deleted file mode 100644 index 0209743..0000000 --- a/wizzy/week2/week2grammer.playground/Contents.swift +++ /dev/null @@ -1,99 +0,0 @@ - -import Foundation - -// 1. 단항 연산자 -var x = 5 -x += 1 -print(x) - -// 2. 이항 연산자 -let a = 10 -let b = 20 -let sum = a + b -print(sum) - -// 3. 삼항 연산자 -let score = 60 -let result = score >= 60 ? "합격" : "불합격" -print(result) - -// 4. 논리 연산자 -let isMember = true -let points = 120 -if isMember && points >= 100 { - print("할인 가능") -} else { - print("할인 불가능") -} - -// 5. 범위 연산자 -let numbers = 1...5 -for number in numbers { - if number == numbers.last { // 마지막 원소 확인 - print(number) - } else { - print("\(number), ", terminator: "") - } -} - - -// 2-1. - -let temperature = 25 - -if temperature >= 30 { - print("덥다") -} else if temperature >= 10 { - print("적당하다") -} else { - print("춥다") -} - - -// 2-2. -let day = 6 - -switch day { -case 1...5: - print("주중") -case 6, 7: - print("주말") -default: - print("x") -} - - -//3-1. -let fruits = ["Apple", "Banana", "Cherry"] - -for fruit in fruits { - print(fruit) -} - -//3-2. -var count = 0 - -while count <= 5 { - print("Count: \(count)") - count += 1 -} - - -//4-1. - -var age: Int? = nil // 옵셔널 정수형 변수 선언 및 nil 할당 - -age = 25 // 값 할당 - -if let safeAge = age { // 안전하게 언래핑 - print("나이는 \(safeAge) 입니다.") -} else { - print("Age 값이 없습니다.") -} - -//4-2. -var score2: Double? = nil // 옵셔널 Double 변수 선언 및 nil 할당 - -score2 = 78.5 // 값 할당 - -print("점수는 \(score2!) 입니다.") // 강제 언래핑 후 출력 diff --git a/wizzy/week2/week2grammer.playground/contents.xcplayground b/wizzy/week2/week2grammer.playground/contents.xcplayground deleted file mode 100644 index 7f43ce8..0000000 --- a/wizzy/week2/week2grammer.playground/contents.xcplayground +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/wizzy/week2/week2grammer.playground/playground.xcworkspace/contents.xcworkspacedata b/wizzy/week2/week2grammer.playground/playground.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index ca3329e..0000000 --- a/wizzy/week2/week2grammer.playground/playground.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/wizzy/week3/3rd_Practice/3st_Practice.xcodeproj/project.pbxproj b/wizzy/week3/3rd_Practice/3st_Practice.xcodeproj/project.pbxproj deleted file mode 100644 index 213b06d..0000000 --- a/wizzy/week3/3rd_Practice/3st_Practice.xcodeproj/project.pbxproj +++ /dev/null @@ -1,363 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 56; - objects = { - -/* Begin PBXBuildFile section */ - 61AD1E232D9A6C760047DF1B /* _st_PracticeApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61AD1E222D9A6C760047DF1B /* _st_PracticeApp.swift */; }; - 61AD1E272D9A6C790047DF1B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 61AD1E262D9A6C790047DF1B /* Assets.xcassets */; }; - 61AD1E2A2D9A6C790047DF1B /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 61AD1E292D9A6C790047DF1B /* Preview Assets.xcassets */; }; - 61AD1E312D9A6CBC0047DF1B /* RainbowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61AD1E302D9A6CBC0047DF1B /* RainbowView.swift */; }; - 61AD1E332D9A6CCA0047DF1B /* RainbowViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61AD1E322D9A6CC90047DF1B /* RainbowViewModel.swift */; }; - 61AD1E352D9A6CD90047DF1B /* RainbowModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61AD1E342D9A6CD90047DF1B /* RainbowModel.swift */; }; - 61AD1E372D9A6D580047DF1B /* Colors.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 61AD1E362D9A6D580047DF1B /* Colors.xcassets */; }; - 61AD1E392D9A6F480047DF1B /* ColorNavigationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61AD1E382D9A6F480047DF1B /* ColorNavigationView.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 61AD1E1F2D9A6C760047DF1B /* 3st_Practice.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = 3st_Practice.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 61AD1E222D9A6C760047DF1B /* _st_PracticeApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = _st_PracticeApp.swift; sourceTree = ""; }; - 61AD1E262D9A6C790047DF1B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 61AD1E292D9A6C790047DF1B /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; - 61AD1E302D9A6CBC0047DF1B /* RainbowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RainbowView.swift; sourceTree = ""; }; - 61AD1E322D9A6CC90047DF1B /* RainbowViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RainbowViewModel.swift; sourceTree = ""; }; - 61AD1E342D9A6CD90047DF1B /* RainbowModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RainbowModel.swift; sourceTree = ""; }; - 61AD1E362D9A6D580047DF1B /* Colors.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Colors.xcassets; sourceTree = ""; }; - 61AD1E382D9A6F480047DF1B /* ColorNavigationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorNavigationView.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 61AD1E1C2D9A6C760047DF1B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 61AD1E162D9A6C760047DF1B = { - isa = PBXGroup; - children = ( - 61AD1E212D9A6C760047DF1B /* 3st_Practice */, - 61AD1E202D9A6C760047DF1B /* Products */, - ); - sourceTree = ""; - }; - 61AD1E202D9A6C760047DF1B /* Products */ = { - isa = PBXGroup; - children = ( - 61AD1E1F2D9A6C760047DF1B /* 3st_Practice.app */, - ); - name = Products; - sourceTree = ""; - }; - 61AD1E212D9A6C760047DF1B /* 3st_Practice */ = { - isa = PBXGroup; - children = ( - 61AD1E222D9A6C760047DF1B /* _st_PracticeApp.swift */, - 61AD1E302D9A6CBC0047DF1B /* RainbowView.swift */, - 61AD1E322D9A6CC90047DF1B /* RainbowViewModel.swift */, - 61AD1E342D9A6CD90047DF1B /* RainbowModel.swift */, - 61AD1E382D9A6F480047DF1B /* ColorNavigationView.swift */, - 61AD1E362D9A6D580047DF1B /* Colors.xcassets */, - 61AD1E262D9A6C790047DF1B /* Assets.xcassets */, - 61AD1E282D9A6C790047DF1B /* Preview Content */, - ); - path = 3st_Practice; - sourceTree = ""; - }; - 61AD1E282D9A6C790047DF1B /* Preview Content */ = { - isa = PBXGroup; - children = ( - 61AD1E292D9A6C790047DF1B /* Preview Assets.xcassets */, - ); - path = "Preview Content"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 61AD1E1E2D9A6C760047DF1B /* 3st_Practice */ = { - isa = PBXNativeTarget; - buildConfigurationList = 61AD1E2D2D9A6C790047DF1B /* Build configuration list for PBXNativeTarget "3st_Practice" */; - buildPhases = ( - 61AD1E1B2D9A6C760047DF1B /* Sources */, - 61AD1E1C2D9A6C760047DF1B /* Frameworks */, - 61AD1E1D2D9A6C760047DF1B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = 3st_Practice; - productName = 3st_Practice; - productReference = 61AD1E1F2D9A6C760047DF1B /* 3st_Practice.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 61AD1E172D9A6C760047DF1B /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1510; - LastUpgradeCheck = 1510; - TargetAttributes = { - 61AD1E1E2D9A6C760047DF1B = { - CreatedOnToolsVersion = 15.1; - }; - }; - }; - buildConfigurationList = 61AD1E1A2D9A6C760047DF1B /* Build configuration list for PBXProject "3st_Practice" */; - compatibilityVersion = "Xcode 14.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 61AD1E162D9A6C760047DF1B; - productRefGroup = 61AD1E202D9A6C760047DF1B /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 61AD1E1E2D9A6C760047DF1B /* 3st_Practice */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 61AD1E1D2D9A6C760047DF1B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 61AD1E372D9A6D580047DF1B /* Colors.xcassets in Resources */, - 61AD1E2A2D9A6C790047DF1B /* Preview Assets.xcassets in Resources */, - 61AD1E272D9A6C790047DF1B /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 61AD1E1B2D9A6C760047DF1B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 61AD1E392D9A6F480047DF1B /* ColorNavigationView.swift in Sources */, - 61AD1E312D9A6CBC0047DF1B /* RainbowView.swift in Sources */, - 61AD1E232D9A6C760047DF1B /* _st_PracticeApp.swift in Sources */, - 61AD1E332D9A6CCA0047DF1B /* RainbowViewModel.swift in Sources */, - 61AD1E352D9A6CD90047DF1B /* RainbowModel.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 61AD1E2B2D9A6C790047DF1B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.2; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 61AD1E2C2D9A6C790047DF1B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.2; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 61AD1E2E2D9A6C790047DF1B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"3st_Practice/Preview Content\""; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "com.wizzy.-st-Practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 61AD1E2F2D9A6C790047DF1B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"3st_Practice/Preview Content\""; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "com.wizzy.-st-Practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 61AD1E1A2D9A6C760047DF1B /* Build configuration list for PBXProject "3st_Practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 61AD1E2B2D9A6C790047DF1B /* Debug */, - 61AD1E2C2D9A6C790047DF1B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 61AD1E2D2D9A6C790047DF1B /* Build configuration list for PBXNativeTarget "3st_Practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 61AD1E2E2D9A6C790047DF1B /* Debug */, - 61AD1E2F2D9A6C790047DF1B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 61AD1E172D9A6C760047DF1B /* Project object */; -} diff --git a/wizzy/week3/3rd_Practice/3st_Practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/wizzy/week3/3rd_Practice/3st_Practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/wizzy/week3/3rd_Practice/3st_Practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/wizzy/week3/3rd_Practice/3st_Practice.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/wizzy/week3/3rd_Practice/3st_Practice.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/wizzy/week3/3rd_Practice/3st_Practice.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/wizzy/week3/3rd_Practice/3st_Practice/Assets.xcassets/AccentColor.colorset/Contents.json b/wizzy/week3/3rd_Practice/3st_Practice/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/wizzy/week3/3rd_Practice/3st_Practice/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week3/3rd_Practice/3st_Practice/Assets.xcassets/AppIcon.appiconset/Contents.json b/wizzy/week3/3rd_Practice/3st_Practice/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 13613e3..0000000 --- a/wizzy/week3/3rd_Practice/3st_Practice/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week3/3rd_Practice/3st_Practice/Assets.xcassets/Contents.json b/wizzy/week3/3rd_Practice/3st_Practice/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/wizzy/week3/3rd_Practice/3st_Practice/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week3/3rd_Practice/3st_Practice/Assets.xcassets/appleLogo.imageset/Contents.json b/wizzy/week3/3rd_Practice/3st_Practice/Assets.xcassets/appleLogo.imageset/Contents.json deleted file mode 100644 index c6f97a0..0000000 --- a/wizzy/week3/3rd_Practice/3st_Practice/Assets.xcassets/appleLogo.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Vector.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week3/3rd_Practice/3st_Practice/Assets.xcassets/appleLogo.imageset/Vector.pdf b/wizzy/week3/3rd_Practice/3st_Practice/Assets.xcassets/appleLogo.imageset/Vector.pdf deleted file mode 100644 index 7937b25..0000000 Binary files a/wizzy/week3/3rd_Practice/3st_Practice/Assets.xcassets/appleLogo.imageset/Vector.pdf and /dev/null differ diff --git a/wizzy/week3/3rd_Practice/3st_Practice/ColorNavigationView.swift b/wizzy/week3/3rd_Practice/3st_Practice/ColorNavigationView.swift deleted file mode 100644 index 70d4a7c..0000000 --- a/wizzy/week3/3rd_Practice/3st_Practice/ColorNavigationView.swift +++ /dev/null @@ -1,81 +0,0 @@ -import SwiftUI - -struct RainbowView: View { - - var viewModel: RainbowViewModel = .init() - @State private var navigationTrue: Bool = false - - var body: some View { - NavigationStack { - VStack { - colorCardGroup - - Spacer() - - bottomSelecteColorGroup - } - .safeAreaPadding(EdgeInsets(top: 47, leading: 15, bottom: 43, trailing: 15)) - .navigationDestination(isPresented: $navigationTrue, destination: { - ColorNavigationView(viewModel: viewModel) - }) - } - } - - /// 무지개 일곱가지 색상 - private var colorCardGroup: some View { - LazyVGrid(columns: Array(repeating: GridItem(.flexible(), spacing: 40), count: 3), spacing: 26, content: { - ForEach(RainbowModel.allCases, id: \.self, content: { rainbow in - makeColorCard(rainbow) - .onTapGesture { - viewModel.selectedRainbowModel = rainbow - self.navigationTrue.toggle() - } - }) - }) - } - - /// 반복 생성을 재사용하기 위한 무지개 색상 카드 뷰 - /// - Parameter model: 무지개 색을 담고 있는 모델 - /// - Returns: 색을 표현하는 카드 뷰 반환 - private func makeColorCard(_ model: RainbowModel) -> some View { - VStack(spacing: 6, content: { - Rectangle() - .fill(model.returnColor()) - - Text(model.returnColorName()) - .foregroundStyle(Color.black) - .font(.title) - }) - .frame(maxWidth: .infinity, minHeight: 110) - } - - /// 하단 사과로고 및 선택된 색상 텍스트 그룹 - private var bottomSelecteColorGroup: some View { - VStack(spacing: 70, content: { - Image(.appleLogo) - .renderingMode(.template) - .fixedSize() - .foregroundStyle(viewModel.appleLogoColor ?? Color.black) - - Text("현재 선택된 색상 : \(selectedColorName())") - .font(.title) - .foregroundStyle(Color.black) - }) - } - - /// 옵셔널에 대해 값 처리를 위한 String 반환 함수 - /// - Returns: 옵셔널 값에 따른 두 가지 중 하나 값 반환 - private func selectedColorName() -> String { - if let name = viewModel.selectedRainbowModel { - return name.returnColorName() - } else { - return "아무것도 없음" - } - } - -} - -#Preview { - RainbowView() -} - diff --git a/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/Contents.json b/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowBlue.colorset/Contents.json b/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowBlue.colorset/Contents.json deleted file mode 100644 index c91f8ce..0000000 --- a/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowBlue.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFF", - "green" : "0x00", - "red" : "0x00" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFF", - "green" : "0x00", - "red" : "0x00" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowGreen.colorset/Contents.json b/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowGreen.colorset/Contents.json deleted file mode 100644 index baa54c3..0000000 --- a/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowGreen.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0x80", - "red" : "0x00" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0x80", - "red" : "0x00" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowIndigo.colorset/Contents.json b/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowIndigo.colorset/Contents.json deleted file mode 100644 index 66a6288..0000000 --- a/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowIndigo.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x52", - "green" : "0x00", - "red" : "0x4B" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x52", - "green" : "0x00", - "red" : "0x4B" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowOrange.colorset/Contents.json b/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowOrange.colorset/Contents.json deleted file mode 100644 index 9b05e72..0000000 --- a/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowOrange.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0xA5", - "red" : "0xFF" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0xA5", - "red" : "0xFF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowPurple.colorset/Contents.json b/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowPurple.colorset/Contents.json deleted file mode 100644 index 220b2ee..0000000 --- a/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowPurple.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEE", - "green" : "0x82", - "red" : "0xEE" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEE", - "green" : "0x82", - "red" : "0xEE" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowRed.colorset/Contents.json b/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowRed.colorset/Contents.json deleted file mode 100644 index 1421f31..0000000 --- a/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowRed.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0x00", - "red" : "0xFF" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0x00", - "red" : "0xFF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowYellow.colorset/Contents.json b/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowYellow.colorset/Contents.json deleted file mode 100644 index d4f0069..0000000 --- a/wizzy/week3/3rd_Practice/3st_Practice/Colors.xcassets/rainbowYellow.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0xFF", - "red" : "0xFF" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0xFF", - "red" : "0xFF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week3/3rd_Practice/3st_Practice/Preview Content/Preview Assets.xcassets/Contents.json b/wizzy/week3/3rd_Practice/3st_Practice/Preview Content/Preview Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/wizzy/week3/3rd_Practice/3st_Practice/Preview Content/Preview Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week3/3rd_Practice/3st_Practice/RainbowModel.swift b/wizzy/week3/3rd_Practice/3st_Practice/RainbowModel.swift deleted file mode 100644 index cca2cb8..0000000 --- a/wizzy/week3/3rd_Practice/3st_Practice/RainbowModel.swift +++ /dev/null @@ -1,60 +0,0 @@ -// -// RainbowModel.swift -// 3st_Practice -// -// Created by 이서현 on 3/31/25. -// - -import Foundation -import SwiftUI - -enum RainbowModel: CaseIterable { - case red - case orange - case yellow - case green - case blue - case indigo - case purple - - // case에 해당하는 색을 반환합니다. - // - Returns: 지정된 색 반환 - func returnColor() -> Color { - switch self { - case .red: - return Color.rainbowRed - case .orange: - return Color.rainbowOrange - case .yellow: - return Color.rainbowYellow - case .green: - return Color.rainbowGreen - case .blue: - return Color.rainbowBlue - case .indigo: - return Color.rainbowIndigo - case .purple: - return Color.rainbowPurple - } - } - - func returnColorName() -> String { - switch self { - case .red: - return "빨강" - case .orange: - return "주황" - case .yellow: - return "노랑" - case .green: - return "초록" - case .blue: - return "파랑" - case .indigo: - return "남색" - case .purple: - return "보라" - } - } -} - diff --git a/wizzy/week3/3rd_Practice/3st_Practice/RainbowView.swift b/wizzy/week3/3rd_Practice/3st_Practice/RainbowView.swift deleted file mode 100644 index 66b3506..0000000 --- a/wizzy/week3/3rd_Practice/3st_Practice/RainbowView.swift +++ /dev/null @@ -1,80 +0,0 @@ -// -// RainbowView.swift -// 3st_Practice -// -// Created by 이서현 on 3/31/25. -// - -import SwiftUI - -struct RainbowView: View { - - var viewModel: RainbowViewModel = .init() - - var body: some View { - VStack { - colorCardGroup - - Spacer() - - bottomSelecteColorGroup - } - .safeAreaPadding(EdgeInsets(top: 47, leading: 15, bottom: 43, trailing: 15)) - } - - /// 무지개 일곱가지 색상 - private var colorCardGroup: some View { - LazyVGrid(columns: Array(repeating: GridItem(.flexible(), spacing: 40), count: 3), spacing: 26, content: { - ForEach(RainbowModel.allCases, id: \.self, content: { rainbow in - makeColorCard(rainbow) - .onTapGesture { - viewModel.selectedRainbowModel = rainbow - } - }) - }) - } - - /// 반복 생성을 재사용하기 위한 무지개 색상 카드 뷰 - /// - Parameter model: 무지개 색을 담고 있는 모델 - /// - Returns: 색을 표현하는 카드 뷰 반환 - private func makeColorCard(_ model: RainbowModel) -> some View { - VStack(spacing: 6, content: { - Rectangle() - .fill(model.returnColor()) - - Text(model.returnColorName()) - .foregroundStyle(Color.black) - .font(.title) - }) - .frame(maxWidth: .infinity, minHeight: 110) - } - - /// 하단 사과로고 및 선택된 색상 텍스트 그룹 - private var bottomSelecteColorGroup: some View { - VStack(spacing: 70, content: { - Image(.appleLogo) - .renderingMode(.template) - .fixedSize() - .foregroundStyle(viewModel.selectedRainbowModel?.returnColor() ?? Color.black) - - Text("현재 선택된 색상 : \(selectedColorName())") - .font(.title) - .foregroundStyle(Color.black) - }) - } - - /// 옵셔널에 대해 값 처리를 위한 String 반환 함수 - /// - Returns: 옵셔널 값에 따른 두 가지 중 하나 값 반환 - private func selectedColorName() -> String { - if let name = viewModel.selectedRainbowModel { - return name.returnColorName() - } else { - return "아무것도 없음" - } - } - -} - -#Preview { - RainbowView() -} diff --git a/wizzy/week3/3rd_Practice/3st_Practice/RainbowViewModel.swift b/wizzy/week3/3rd_Practice/3st_Practice/RainbowViewModel.swift deleted file mode 100644 index acad6c6..0000000 --- a/wizzy/week3/3rd_Practice/3st_Practice/RainbowViewModel.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// RainbowViewModel.swift -// 3st_Practice -// -// Created by 이서현 on 3/31/25. -// - -import Foundation -import SwiftUI - -@Observable -class RainbowViewModel { - var selectedRainbowModel: RainbowModel? - var appleLogoColor: Color? -} diff --git a/wizzy/week4/week4_practice/week4_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/wizzy/week4/week4_practice/week4_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/wizzy/week4/week4_practice/week4_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/AccentColor.colorset/Contents.json b/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/AppIcon.appiconset/Contents.json b/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/Contents.json b/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/brutalis.imageset/Contents.json b/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/brutalis.imageset/Contents.json deleted file mode 100644 index 7afc4ed..0000000 --- a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/brutalis.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "brutalis.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/brutalis.imageset/brutalis.pdf b/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/brutalis.imageset/brutalis.pdf deleted file mode 100644 index 82d135c..0000000 Binary files a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/brutalis.imageset/brutalis.pdf and /dev/null differ diff --git a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/conclave.imageset/Contents.json b/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/conclave.imageset/Contents.json deleted file mode 100644 index f1d1056..0000000 --- a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/conclave.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "conclave.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/conclave.imageset/conclave.pdf b/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/conclave.imageset/conclave.pdf deleted file mode 100644 index aa8337c..0000000 Binary files a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/conclave.imageset/conclave.pdf and /dev/null differ diff --git a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/mickey.imageset/Contents.json b/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/mickey.imageset/Contents.json deleted file mode 100644 index 97bb32b..0000000 --- a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/mickey.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "mickey.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/mickey.imageset/mickey.pdf b/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/mickey.imageset/mickey.pdf deleted file mode 100644 index 58058b7..0000000 Binary files a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/mickey.imageset/mickey.pdf and /dev/null differ diff --git a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/snowWhite.imageset/Contents.json b/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/snowWhite.imageset/Contents.json deleted file mode 100644 index 12f0642..0000000 --- a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/snowWhite.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "snowWhite.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/snowWhite.imageset/snowWhite.pdf b/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/snowWhite.imageset/snowWhite.pdf deleted file mode 100644 index 4e52a53..0000000 Binary files a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/snowWhite.imageset/snowWhite.pdf and /dev/null differ diff --git a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/theFall.imageset/Contents.json b/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/theFall.imageset/Contents.json deleted file mode 100644 index f00a5e1..0000000 --- a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/theFall.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "theFall.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/theFall.imageset/theFall.pdf b/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/theFall.imageset/theFall.pdf deleted file mode 100644 index fe2582b..0000000 Binary files a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/theFall.imageset/theFall.pdf and /dev/null differ diff --git a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/toystory.imageset/Contents.json b/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/toystory.imageset/Contents.json deleted file mode 100644 index 59cfb00..0000000 --- a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/toystory.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "toystory.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/toystory.imageset/toystory.pdf b/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/toystory.imageset/toystory.pdf deleted file mode 100644 index e29bd21..0000000 Binary files a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/toystory.imageset/toystory.pdf and /dev/null differ diff --git a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/whiplash.imageset/Contents.json b/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/whiplash.imageset/Contents.json deleted file mode 100644 index be343c5..0000000 --- a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/whiplash.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "image 5.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/whiplash.imageset/image 5.pdf b/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/whiplash.imageset/image 5.pdf deleted file mode 100644 index 59d49da..0000000 Binary files a/wizzy/week4/week4_practice/week4_practice/Assets.xcassets/whiplash.imageset/image 5.pdf and /dev/null differ diff --git a/wizzy/week4/week4_practice/week4_practice/ContentView.swift b/wizzy/week4/week4_practice/week4_practice/ContentView.swift deleted file mode 100644 index e48fa86..0000000 --- a/wizzy/week4/week4_practice/week4_practice/ContentView.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// ContentView.swift -// week4_practice -// -// Created by 이서현 on 10/5/25. -// - -import SwiftUI - -struct ContentView: View { - var body: some View { - VStack { - Image(systemName: "globe") - .imageScale(.large) - .foregroundStyle(.tint) - Text("Hello, world!") - } - .padding() - } -} - -#Preview { - ContentView() -} diff --git a/wizzy/week4/week4_practice/week4_practice/MovieModel.swift b/wizzy/week4/week4_practice/week4_practice/MovieModel.swift deleted file mode 100644 index 2db68cd..0000000 --- a/wizzy/week4/week4_practice/week4_practice/MovieModel.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// MovieModel.swift -// week4_practice -// -// Created by 이서현 on 10/5/25. -// - -import Foundation -import SwiftUI - -struct MovieModel: Identifiable { - let id: UUID = .init() - let movieImage: Image - let title: String - let rate: Double -} - diff --git a/wizzy/week4/week4_practice/week4_practice/MovieSearchView.swift b/wizzy/week4/week4_practice/week4_practice/MovieSearchView.swift deleted file mode 100644 index 9d5c8df..0000000 --- a/wizzy/week4/week4_practice/week4_practice/MovieSearchView.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// MovieSearchView.swift -// week4_practice -// -// Created by 이서현 on 10/5/25. -// - -import SwiftUI - -struct MovieSearchView: View { - @StateObject private var vm = MovieSearchViewModel() - - var body: some View { - NavigationStack { - VStack(spacing: 12) { - TextField("영화 명을 입력하세요", text: $vm.query) - .textFieldStyle(RoundedBorderTextFieldStyle()) - .padding(.horizontal) - - if vm.isLoading { - ProgressView("검색 중...") - } - - if let error = vm.errorMessage { - Text(error).foregroundStyle(.red) - } - - List(vm.results, id: \.id) { movie in - HStack { - movie.movieImage - .resizable() - .frame(width: 40, height: 56) - VStack(alignment: .leading) { - Text(movie.title).font(.headline) - - Spacer() - - Text(String(format: "%.1f", movie.rate)) - .font(.subheadline).bold() - } - .padding(.horizontal, 10) - } - } - } - .navigationTitle("영화 검색") - } - } -} - -#Preview { - MovieSearchView() -} diff --git a/wizzy/week4/week4_practice/week4_practice/MovieSearchViewModel.swift b/wizzy/week4/week4_practice/week4_practice/MovieSearchViewModel.swift deleted file mode 100644 index a110e72..0000000 --- a/wizzy/week4/week4_practice/week4_practice/MovieSearchViewModel.swift +++ /dev/null @@ -1,78 +0,0 @@ -// -// MovieSearchViewModel.swift -// week4_practice -// -// Created by 이서현 on 10/5/25. -// - -import SwiftUI -import Combine - - -final class MovieSearchViewModel: ObservableObject { - - private let model: [MovieModel] = [ - .init(movieImage: .init(.mickey), title: "미키", rate: 9.1), - .init(movieImage: .init(.toystory), title: "토이스토리", rate: 8.2), - .init(movieImage: .init(.brutalis), title: "브루탈리스트", rate: 8.2), - .init(movieImage: .init(.snowWhite), title: "백설공주", rate: 8.2), - .init(movieImage: .init(.whiplash), title: "위플래시", rate: 8.2), - .init(movieImage: .init(.conclave), title: "콘클라베", rate: 8.2), - .init(movieImage: .init(.theFall), title: "더폴", rate: 8.2) - ] - - @Published var query: String = "" // 검색 위한 쿼리 - @Published var results: [MovieModel] = [] // 결과 저장 - @Published var isLoading = false - @Published var errorMessage: String? - - private var bag = Set() - - init() { - $query - .debounce(for: .milliseconds(350), scheduler: DispatchQueue.main) - .removeDuplicates() - .handleEvents(receiveOutput: { [weak self] _ in - self?.errorMessage = nil - }) - .flatMap { query in - self.search(query: query) - } - .receive(on: DispatchQueue.main) - .sink { [weak self] completion in - if case .failure(let err) = completion { - self?.errorMessage = "검색 실패: \(err.localizedDescription)" - self?.results = [] - } - } receiveValue: { [weak self] items in - self?.results = items - } - .store(in: &bag) - } - - private func search(query: String) -> AnyPublisher<[MovieModel], Error> { - return Future<[MovieModel], Error> { [weak self] promise in - let delay = Double(Int.random(in: 300...700)) / 1000.0 - guard let self else { return } - - DispatchQueue.global().asyncAfter(deadline: .now() + delay) { - let filtered = self.model.filter { $0.title.lowercased().contains(query) } - promise(.success(filtered)) - } - } - .handleEvents( - receiveSubscription: { _ in - DispatchQueue.main.async { - self.isLoading = true - } - }, - receiveCompletion: { _ in - DispatchQueue.main.async { - self.isLoading = false - } - } - ) - .eraseToAnyPublisher() - } - -} diff --git a/wizzy/week4/week4_practice/week4_practice/week4_practiceApp.swift b/wizzy/week4/week4_practice/week4_practice/week4_practiceApp.swift deleted file mode 100644 index 1b2cde4..0000000 --- a/wizzy/week4/week4_practice/week4_practice/week4_practiceApp.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// week4_practiceApp.swift -// week4_practice -// -// Created by 이서현 on 10/5/25. -// - -import SwiftUI - -@main -struct week4_practiceApp: App { - var body: some Scene { - WindowGroup { - ContentView() - } - } -} diff --git a/wizzy/week5/week5_practice/week5_practice.xcodeproj/project.pbxproj b/wizzy/week5/week5_practice/week5_practice.xcodeproj/project.pbxproj deleted file mode 100644 index d7aa633..0000000 --- a/wizzy/week5/week5_practice/week5_practice.xcodeproj/project.pbxproj +++ /dev/null @@ -1,337 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXFileReference section */ - 611C43662EAC624A005C2748 /* week5_practice.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = week5_practice.app; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 611C43682EAC624A005C2748 /* week5_practice */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = week5_practice; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 611C43632EAC624A005C2748 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 611C435D2EAC624A005C2748 = { - isa = PBXGroup; - children = ( - 611C43682EAC624A005C2748 /* week5_practice */, - 611C43672EAC624A005C2748 /* Products */, - ); - sourceTree = ""; - }; - 611C43672EAC624A005C2748 /* Products */ = { - isa = PBXGroup; - children = ( - 611C43662EAC624A005C2748 /* week5_practice.app */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 611C43652EAC624A005C2748 /* week5_practice */ = { - isa = PBXNativeTarget; - buildConfigurationList = 611C43712EAC624C005C2748 /* Build configuration list for PBXNativeTarget "week5_practice" */; - buildPhases = ( - 611C43622EAC624A005C2748 /* Sources */, - 611C43632EAC624A005C2748 /* Frameworks */, - 611C43642EAC624A005C2748 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 611C43682EAC624A005C2748 /* week5_practice */, - ); - name = week5_practice; - packageProductDependencies = ( - ); - productName = week5_practice; - productReference = 611C43662EAC624A005C2748 /* week5_practice.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 611C435E2EAC624A005C2748 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 2600; - LastUpgradeCheck = 2600; - TargetAttributes = { - 611C43652EAC624A005C2748 = { - CreatedOnToolsVersion = 26.0.1; - }; - }; - }; - buildConfigurationList = 611C43612EAC624A005C2748 /* Build configuration list for PBXProject "week5_practice" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 611C435D2EAC624A005C2748; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - productRefGroup = 611C43672EAC624A005C2748 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 611C43652EAC624A005C2748 /* week5_practice */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 611C43642EAC624A005C2748 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 611C43622EAC624A005C2748 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 611C436F2EAC624C005C2748 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = XRY42MG75P; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 26.0; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 611C43702EAC624C005C2748 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = XRY42MG75P; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 26.0; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 611C43722EAC624C005C2748 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = XRY42MG75P; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "com.wizzy.week5-practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 611C43732EAC624C005C2748 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = XRY42MG75P; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "com.wizzy.week5-practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 611C43612EAC624A005C2748 /* Build configuration list for PBXProject "week5_practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 611C436F2EAC624C005C2748 /* Debug */, - 611C43702EAC624C005C2748 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 611C43712EAC624C005C2748 /* Build configuration list for PBXNativeTarget "week5_practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 611C43722EAC624C005C2748 /* Debug */, - 611C43732EAC624C005C2748 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 611C435E2EAC624A005C2748 /* Project object */; -} diff --git a/wizzy/week5/week5_practice/week5_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/wizzy/week5/week5_practice/week5_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/wizzy/week5/week5_practice/week5_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/wizzy/week5/week5_practice/week5_practice/APIResponse.swift b/wizzy/week5/week5_practice/week5_practice/APIResponse.swift deleted file mode 100644 index ccb3745..0000000 --- a/wizzy/week5/week5_practice/week5_practice/APIResponse.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// APIResponse.swift -// week5_practice -// -// Created by 이서현 on 10/25/25. -// - -import Foundation - -struct APIResponse: Codable { - let status: String - let message: String - let data: UserData -} - -struct UserData: Codable { - let users: [UserDTO] -} diff --git a/wizzy/week5/week5_practice/week5_practice/Assets.xcassets/AccentColor.colorset/Contents.json b/wizzy/week5/week5_practice/week5_practice/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/wizzy/week5/week5_practice/week5_practice/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week5/week5_practice/week5_practice/Assets.xcassets/AppIcon.appiconset/Contents.json b/wizzy/week5/week5_practice/week5_practice/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/wizzy/week5/week5_practice/week5_practice/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week5/week5_practice/week5_practice/Assets.xcassets/Contents.json b/wizzy/week5/week5_practice/week5_practice/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/wizzy/week5/week5_practice/week5_practice/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/wizzy/week5/week5_practice/week5_practice/MockData.json b/wizzy/week5/week5_practice/week5_practice/MockData.json deleted file mode 100644 index e5667a4..0000000 --- a/wizzy/week5/week5_practice/week5_practice/MockData.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "status": "success", - "message": "User list fetched successfully", - "data": { - "users": [ - { - "user_id": "1", - "user_name": "River", - "profile_image": "https://example.com/river.jpg", - "user_bio": "iOS Developer", - "created_at": "2025-01-01T10:00:00Z" - }, - { - "user_id": "2", - "user_name": "David", - "profile_image": null, - "user_bio": "Backend Developer", - "created_at": "2025-01-02T10:00:00Z" - } - ] - } -} diff --git a/wizzy/week5/week5_practice/week5_practice/UserDTO.swift b/wizzy/week5/week5_practice/week5_practice/UserDTO.swift deleted file mode 100644 index 0d27e83..0000000 --- a/wizzy/week5/week5_practice/week5_practice/UserDTO.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// UserDTO.swift -// week5_practice -// -// Created by 이서현 on 10/25/25. -// - -import Foundation - -struct UserDTO: Codable { - let userID: String - let name: String - let profileImage: String? - let userBio: String - let createdAt: String - - enum CodingKeys: String, CodingKey { - case userID = "user_id" - case name = "user_name" - case profileImage = "profile_image" - case userBio = "user_bio" - case createdAt = "created_at" - } -} - -extension UserDTO { - func toDomain() -> UserModel { - return UserModel( - id: userID, - name: name, - profileImageURL: profileImage, - bio: userBio - ) - } -} diff --git a/wizzy/week5/week5_practice/week5_practice/UserListView.swift b/wizzy/week5/week5_practice/week5_practice/UserListView.swift deleted file mode 100644 index b740cc5..0000000 --- a/wizzy/week5/week5_practice/week5_practice/UserListView.swift +++ /dev/null @@ -1,70 +0,0 @@ -// -// UserListView.swift -// week5_practice -// -// Created by 이서현 on 10/25/25. -// - -import SwiftUI - -struct UserListView: View { - @StateObject private var viewModel = UserListViewModel() - @State private var showAddUser = false - - var body: some View { - NavigationStack { - ZStack { - if viewModel.isLoading { - ProgressView("로딩 중...") - } else { - List { - ForEach(viewModel.users, id: \.id) { user in - UserRowView(user: user) - } - .onDelete { indexSet in - indexSet.forEach { index in - viewModel.deleteUser(id: viewModel.users[index].id) - } - } - } - } - } - .navigationTitle("사용자 목록") - .toolbar { - Button { - showAddUser = true - } label: { - Image(systemName: "plus") - } - } - .task { - await viewModel.fetchUsers() - } - } - } -} - -struct UserRowView: View { - let user: UserModel - - var body: some View { - VStack(alignment: .leading, spacing: 4) { - Text(user.displayName) - .font(.headline) - Text(user.bio) - .font(.subheadline) - .foregroundStyle(.gray) - - if user.isProfileComplete { - Label("프로필 완성", systemImage: "checkmark.circle.fill") - .font(.caption) - .foregroundStyle(.green) - } - } - .padding(.vertical, 4) - } -} - -#Preview { - UserListView() -} diff --git a/wizzy/week5/week5_practice/week5_practice/UserListViewModel.swift b/wizzy/week5/week5_practice/week5_practice/UserListViewModel.swift deleted file mode 100644 index 0dacba3..0000000 --- a/wizzy/week5/week5_practice/week5_practice/UserListViewModel.swift +++ /dev/null @@ -1,71 +0,0 @@ -// -// UserListViewModel.swift -// week5_practice -// -// Created by 이서현 on 10/25/25. -// - -import Foundation -import Combine - -class UserListViewModel: ObservableObject { - @Published var users: [UserModel] = [] - @Published var isLoading: Bool = false - @Published var errorMessage: String? - - private var userStore: [UserModel] = [ - UserModel(id: "1", name: "River", profileImageURL: nil, bio: "iOS Developer"), - UserModel(id: "2", name: "David", profileImageURL: nil, bio: "backend"), - UserModel(id: "3", name: "Sarah", profileImageURL: nil, bio: "designer") - ] - - func addUser(name: String, bio: String) { - let newUser = UserModel( - id: UUID().uuidString, - name: name, - profileImageURL: nil, - bio: bio - ) - userStore.append(newUser) - users = userStore - } - - func fetchUsers() async { - isLoading = true - - guard let url = Bundle.main.url( - forResource: "MockData", - withExtension: "json"), - let data = try? Data(contentsOf: url) else { return } - - do { - let response = try JSONDecoder().decode(APIResponse.self, from: data) - - await MainActor.run { - self.users = response.data.users.map { $0.toDomain() } - self.isLoading = false - } - } catch { - print("Decoding error:", error) - } - } - - - - func updateUser(id: String, name: String, bio: String) { - if let index = userStore.firstIndex(where: {$0.id == id}) { - userStore[index] = UserModel( - id: id, - name: name, - profileImageURL: userStore[index].profileImageURL, - bio: bio - ) - users = userStore - } - } - - func deleteUser(id: String) { - userStore.removeAll { $0.id == id } - users = userStore - } -} diff --git a/wizzy/week5/week5_practice/week5_practice/UserModel.swift b/wizzy/week5/week5_practice/week5_practice/UserModel.swift deleted file mode 100644 index 5c61eec..0000000 --- a/wizzy/week5/week5_practice/week5_practice/UserModel.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// UserModel.swift -// week5_practice -// -// Created by 이서현 on 10/25/25. -// - -import Foundation - -struct UserModel { - let id: String - let name: String - let profileImageURL: String? - let bio: String - - var isProfileComplete: Bool { - !name.isEmpty && !bio.isEmpty - } - - var displayName: String { - name.isEmpty ? "익명 사용자" : name - } -} diff --git a/wizzy/week5/week5_practice/week5_practice/week5_practiceApp.swift b/wizzy/week5/week5_practice/week5_practice/week5_practiceApp.swift deleted file mode 100644 index 7925795..0000000 --- a/wizzy/week5/week5_practice/week5_practice/week5_practiceApp.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// week5_practiceApp.swift -// week5_practice -// -// Created by 이서현 on 10/25/25. -// - -import SwiftUI - -@main -struct week5_practiceApp: App { - var body: some Scene { - WindowGroup { - UserListView() - } - } -} diff --git a/yoon/HttpMethodTest/.gitattributes b/yoon/HttpMethodTest/.gitattributes deleted file mode 100644 index 8af972c..0000000 --- a/yoon/HttpMethodTest/.gitattributes +++ /dev/null @@ -1,3 +0,0 @@ -/gradlew text eol=lf -*.bat text eol=crlf -*.jar binary diff --git a/yoon/HttpMethodTest/.gitignore b/yoon/HttpMethodTest/.gitignore deleted file mode 100644 index c2065bc..0000000 --- a/yoon/HttpMethodTest/.gitignore +++ /dev/null @@ -1,37 +0,0 @@ -HELP.md -.gradle -build/ -!gradle/wrapper/gradle-wrapper.jar -!**/src/main/**/build/ -!**/src/test/**/build/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache -bin/ -!**/src/main/**/bin/ -!**/src/test/**/bin/ - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr -out/ -!**/src/main/**/out/ -!**/src/test/**/out/ - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ - -### VS Code ### -.vscode/ diff --git a/yoon/HttpMethodTest/build.gradle b/yoon/HttpMethodTest/build.gradle deleted file mode 100644 index 8ad2a08..0000000 --- a/yoon/HttpMethodTest/build.gradle +++ /dev/null @@ -1,29 +0,0 @@ -plugins { - id 'java' - id 'org.springframework.boot' version '3.5.7' - id 'io.spring.dependency-management' version '1.1.7' -} - -group = 'com.example.httpTest' -version = '0.0.1-SNAPSHOT' -description = 'HttpMethodTest' - -java { - toolchain { - languageVersion = JavaLanguageVersion.of(21) - } -} - -repositories { - mavenCentral() -} - -dependencies { - implementation 'org.springframework.boot:spring-boot-starter-web' - testImplementation 'org.springframework.boot:spring-boot-starter-test' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' -} - -tasks.named('test') { - useJUnitPlatform() -} diff --git a/yoon/HttpMethodTest/gradle/wrapper/gradle-wrapper.jar b/yoon/HttpMethodTest/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 1b33c55..0000000 Binary files a/yoon/HttpMethodTest/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/yoon/HttpMethodTest/gradle/wrapper/gradle-wrapper.properties b/yoon/HttpMethodTest/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index d4081da..0000000 --- a/yoon/HttpMethodTest/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/yoon/HttpMethodTest/gradlew b/yoon/HttpMethodTest/gradlew deleted file mode 100755 index 23d15a9..0000000 --- a/yoon/HttpMethodTest/gradlew +++ /dev/null @@ -1,251 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH="\\\"\\\"" - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/yoon/HttpMethodTest/gradlew.bat b/yoon/HttpMethodTest/gradlew.bat deleted file mode 100644 index db3a6ac..0000000 --- a/yoon/HttpMethodTest/gradlew.bat +++ /dev/null @@ -1,94 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem -@rem SPDX-License-Identifier: Apache-2.0 -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH= - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/yoon/HttpMethodTest/settings.gradle b/yoon/HttpMethodTest/settings.gradle deleted file mode 100644 index 402766b..0000000 --- a/yoon/HttpMethodTest/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'HttpMethodTest' diff --git a/yoon/HttpMethodTest/src/main/java/com/example/httptest/httpmethodtest/Controller/PersonController.java b/yoon/HttpMethodTest/src/main/java/com/example/httptest/httpmethodtest/Controller/PersonController.java deleted file mode 100644 index ef17fd3..0000000 --- a/yoon/HttpMethodTest/src/main/java/com/example/httptest/httpmethodtest/Controller/PersonController.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.example.httptest.httpmethodtest.Controller; - -import com.example.httptest.httpmethodtest.DTO.Person; -import org.springframework.web.bind.annotation.*; - -import java.util.concurrent.atomic.AtomicReference; - -@RestController -@RequestMapping("/person") -public class PersonController { - private final AtomicReference personStorage = new AtomicReference<>(); - - //POST - @PostMapping - public String createPerson(@RequestBody Person person) { - personStorage.set(person); - return "사람 생성 완료"; - } - - //GET - @GetMapping - public Person getPerson(@RequestParam String name) { - Person person = personStorage.get(); - if (person == null) { - throw new RuntimeException("등록된 사람 없음"); - } - /* 쿼리 파라미터를 위한 코드 */ - if (!person.getName().equals(name)) { - throw new RuntimeException("해당 이름의 사람 없음"); - } - return person; - } - - //PUT : 사람 정보 전체 수정 - //PATCH와 PUT은 다른 개념입니다. - @PutMapping - public String updatePerson(@RequestBody Person updatePerson) { - personStorage.set(updatePerson); - return "사람 정보 업데이트"; - } - - // PATCH: 사람 정보 일부 수정 - @PatchMapping - public String patchPerson(@RequestBody Person partialPerson) { - Person currentPerson = personStorage.get(); - if (currentPerson == null) { - throw new RuntimeException("등록된 사람 없음"); - } - - if (partialPerson.getName() != null) { - currentPerson.setName(partialPerson.getName()); - } - if (partialPerson.getAge() != 0) { - currentPerson.setAge(partialPerson.getAge()); - } - if (partialPerson.getAddress() != null) { - currentPerson.setAddress(partialPerson.getAddress()); - } - if (partialPerson.getHeight() != 0.0) { - currentPerson.setHeight(partialPerson.getHeight()); - } - - personStorage.set(currentPerson); - return "사람 부분 정보 수정 완료"; - } - - //DELETE - @DeleteMapping - public String deletePerson(@RequestParam String name) { - Person person = personStorage.get(); - if (person == null) { - throw new RuntimeException("등록된 사람 없음"); - } - - if (!person.getName().equals(name)) { - throw new RuntimeException("이름 같은 사람 없음"); - } - personStorage.set(null); - return "등록된 사람 삭제 완료"; - } -} \ No newline at end of file diff --git a/yoon/HttpMethodTest/src/main/java/com/example/httptest/httpmethodtest/DTO/Person.java b/yoon/HttpMethodTest/src/main/java/com/example/httptest/httpmethodtest/DTO/Person.java deleted file mode 100644 index dac4291..0000000 --- a/yoon/HttpMethodTest/src/main/java/com/example/httptest/httpmethodtest/DTO/Person.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.example.httptest.httpmethodtest.DTO; - -public class Person { - private String name; - private int age; - private String address; - private double height; - - public Person() {} - - public Person(String name, int age, String address, double height) { - this.name = name; - this.age = age; - this.address = address; - this.height = height; - } - - // Getter, Setter 설정 - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - - public String getAddress() { - return address; - } - - public void setAddress(String address) { - this.address = address; - } - - public double getHeight() { - return height; - } - - public void setHeight(double height) { - this.height = height; - } - -} diff --git a/yoon/HttpMethodTest/src/main/java/com/example/httptest/httpmethodtest/HttpMethodTestApplication.java b/yoon/HttpMethodTest/src/main/java/com/example/httptest/httpmethodtest/HttpMethodTestApplication.java deleted file mode 100644 index 6e3a4c8..0000000 --- a/yoon/HttpMethodTest/src/main/java/com/example/httptest/httpmethodtest/HttpMethodTestApplication.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.example.httptest.httpmethodtest; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class HttpMethodTestApplication { - - public static void main(String[] args) { - SpringApplication.run(HttpMethodTestApplication.class, args); - } - -} diff --git a/yoon/HttpMethodTest/src/main/resources/application.properties b/yoon/HttpMethodTest/src/main/resources/application.properties deleted file mode 100644 index 71ede28..0000000 --- a/yoon/HttpMethodTest/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -spring.application.name=HttpMethodTest diff --git a/yoon/HttpMethodTest/src/test/java/com/example/httptest/httpmethodtest/HttpMethodTestApplicationTests.java b/yoon/HttpMethodTest/src/test/java/com/example/httptest/httpmethodtest/HttpMethodTestApplicationTests.java deleted file mode 100644 index f708745..0000000 --- a/yoon/HttpMethodTest/src/test/java/com/example/httptest/httpmethodtest/HttpMethodTestApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.example.httptest.httpmethodtest; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class HttpMethodTestApplicationTests { - - @Test - void contextLoads() { - } - -} diff --git a/yoon/MEGABOX/MEGABOX/MEGABOX.xcodeproj/project.pbxproj b/yoon/MEGABOX/MEGABOX/MEGABOX.xcodeproj/project.pbxproj deleted file mode 100644 index decdf6e..0000000 --- a/yoon/MEGABOX/MEGABOX/MEGABOX.xcodeproj/project.pbxproj +++ /dev/null @@ -1,752 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXBuildFile section */ - 347DBAD32EC63458008916E4 /* CombineMoya in Frameworks */ = {isa = PBXBuildFile; productRef = 347DBAD22EC63458008916E4 /* CombineMoya */; }; - 347DBAD52EC63458008916E4 /* Moya in Frameworks */ = {isa = PBXBuildFile; productRef = 347DBAD42EC63458008916E4 /* Moya */; }; - 347DBAD72EC63458008916E4 /* ReactiveMoya in Frameworks */ = {isa = PBXBuildFile; productRef = 347DBAD62EC63458008916E4 /* ReactiveMoya */; }; - 347DBAD92EC63458008916E4 /* RxMoya in Frameworks */ = {isa = PBXBuildFile; productRef = 347DBAD82EC63458008916E4 /* RxMoya */; }; - 347DBADB2EC63458008916E4 /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = 347DBADA2EC63458008916E4 /* Kingfisher */; }; - 34EBABD52EBDF36600CF8868 /* KakaoSDK in Frameworks */ = {isa = PBXBuildFile; productRef = 34EBABD42EBDF36600CF8868 /* KakaoSDK */; }; - 34EBABD72EBDF36600CF8868 /* KakaoSDKAuth in Frameworks */ = {isa = PBXBuildFile; productRef = 34EBABD62EBDF36600CF8868 /* KakaoSDKAuth */; }; - 34EBABD92EBDF36600CF8868 /* KakaoSDKCert in Frameworks */ = {isa = PBXBuildFile; productRef = 34EBABD82EBDF36600CF8868 /* KakaoSDKCert */; }; - 34EBABDB2EBDF36600CF8868 /* KakaoSDKCommon in Frameworks */ = {isa = PBXBuildFile; productRef = 34EBABDA2EBDF36600CF8868 /* KakaoSDKCommon */; }; - 34EBACCA2EBE40F800CF8868 /* Secret.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 34EBACC92EBE40F800CF8868 /* Secret.xcconfig */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 345C2F552E77FB8D00C64079 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 345C2F3C2E77FB8B00C64079 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 345C2F432E77FB8B00C64079; - remoteInfo = week1_homework; - }; - 345C2F5F2E77FB8D00C64079 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 345C2F3C2E77FB8B00C64079 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 345C2F432E77FB8B00C64079; - remoteInfo = week1_homework; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 3404378E2EAE487C00C58AA6 /* MEGABOX.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = MEGABOX.xcodeproj; path = MegaBox/MEGABOX.xcodeproj; sourceTree = SOURCE_ROOT; }; - 3404383A2EAF642C00C58AA6 /* MEGABOX.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = MEGABOX.xcodeproj; sourceTree = ""; }; - 340438B42EAF6DE300C58AA6 /* MEGABOX.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = MEGABOX.xcodeproj; sourceTree = ""; }; - 3404392F2EAF6E4000C58AA6 /* MEGABOX.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = MEGABOX.xcodeproj; sourceTree = ""; }; - 34043A512EAF74F500C58AA6 /* MEGABOX.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = MEGABOX.xcodeproj; sourceTree = ""; }; - 345C2F442E77FB8B00C64079 /* MEGABOX.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MEGABOX.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 345C2F542E77FB8D00C64079 /* MEGABOXTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MEGABOXTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 345C2F5E2E77FB8D00C64079 /* MEGABOXUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MEGABOXUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 34EBAB0A2EBDC1BD00CF8868 /* MEGABOX.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = MEGABOX.xcodeproj; sourceTree = ""; }; - 34EBACC92EBE40F800CF8868 /* Secret.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Secret.xcconfig; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 345C2F462E77FB8B00C64079 /* MegaBox */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = MegaBox; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 345C2F412E77FB8B00C64079 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 347DBAD72EC63458008916E4 /* ReactiveMoya in Frameworks */, - 34EBABDB2EBDF36600CF8868 /* KakaoSDKCommon in Frameworks */, - 34EBABD92EBDF36600CF8868 /* KakaoSDKCert in Frameworks */, - 347DBADB2EC63458008916E4 /* Kingfisher in Frameworks */, - 347DBAD52EC63458008916E4 /* Moya in Frameworks */, - 34EBABD52EBDF36600CF8868 /* KakaoSDK in Frameworks */, - 347DBAD32EC63458008916E4 /* CombineMoya in Frameworks */, - 347DBAD92EC63458008916E4 /* RxMoya in Frameworks */, - 34EBABD72EBDF36600CF8868 /* KakaoSDKAuth in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 345C2F512E77FB8D00C64079 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 345C2F5B2E77FB8D00C64079 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 340437912EAE487C00C58AA6 /* Products */ = { - isa = PBXGroup; - children = ( - ); - name = Products; - sourceTree = ""; - }; - 3404383D2EAF642C00C58AA6 /* Products */ = { - isa = PBXGroup; - children = ( - ); - name = Products; - sourceTree = ""; - }; - 340438B82EAF6DE300C58AA6 /* Products */ = { - isa = PBXGroup; - children = ( - ); - name = Products; - sourceTree = ""; - }; - 340439322EAF6E4000C58AA6 /* Products */ = { - isa = PBXGroup; - children = ( - ); - name = Products; - sourceTree = ""; - }; - 34043A522EAF74F500C58AA6 /* Products */ = { - isa = PBXGroup; - children = ( - ); - name = Products; - sourceTree = ""; - }; - 345C2F3B2E77FB8B00C64079 = { - isa = PBXGroup; - children = ( - 34EBACC92EBE40F800CF8868 /* Secret.xcconfig */, - 345C2F462E77FB8B00C64079 /* MegaBox */, - 347DBAD12EC63458008916E4 /* Frameworks */, - 345C2F452E77FB8B00C64079 /* Products */, - ); - sourceTree = ""; - }; - 345C2F452E77FB8B00C64079 /* Products */ = { - isa = PBXGroup; - children = ( - 345C2F442E77FB8B00C64079 /* MEGABOX.app */, - 345C2F542E77FB8D00C64079 /* MEGABOXTests.xctest */, - 345C2F5E2E77FB8D00C64079 /* MEGABOXUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 347DBAD12EC63458008916E4 /* Frameworks */ = { - isa = PBXGroup; - children = ( - ); - name = Frameworks; - sourceTree = ""; - }; - 34EBAB0E2EBDC1BD00CF8868 /* Products */ = { - isa = PBXGroup; - children = ( - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 345C2F432E77FB8B00C64079 /* MEGABOX */ = { - isa = PBXNativeTarget; - buildConfigurationList = 345C2F682E77FB8D00C64079 /* Build configuration list for PBXNativeTarget "MEGABOX" */; - buildPhases = ( - 345C2F402E77FB8B00C64079 /* Sources */, - 345C2F412E77FB8B00C64079 /* Frameworks */, - 345C2F422E77FB8B00C64079 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 345C2F462E77FB8B00C64079 /* MegaBox */, - ); - name = MEGABOX; - packageProductDependencies = ( - 34EBABD42EBDF36600CF8868 /* KakaoSDK */, - 34EBABD62EBDF36600CF8868 /* KakaoSDKAuth */, - 34EBABD82EBDF36600CF8868 /* KakaoSDKCert */, - 34EBABDA2EBDF36600CF8868 /* KakaoSDKCommon */, - 347DBAD22EC63458008916E4 /* CombineMoya */, - 347DBAD42EC63458008916E4 /* Moya */, - 347DBAD62EC63458008916E4 /* ReactiveMoya */, - 347DBAD82EC63458008916E4 /* RxMoya */, - 347DBADA2EC63458008916E4 /* Kingfisher */, - ); - productName = week1_homework; - productReference = 345C2F442E77FB8B00C64079 /* MEGABOX.app */; - productType = "com.apple.product-type.application"; - }; - 345C2F532E77FB8D00C64079 /* MEGABOXTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 345C2F6B2E77FB8D00C64079 /* Build configuration list for PBXNativeTarget "MEGABOXTests" */; - buildPhases = ( - 345C2F502E77FB8D00C64079 /* Sources */, - 345C2F512E77FB8D00C64079 /* Frameworks */, - 345C2F522E77FB8D00C64079 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 345C2F562E77FB8D00C64079 /* PBXTargetDependency */, - ); - name = MEGABOXTests; - packageProductDependencies = ( - ); - productName = week1_homeworkTests; - productReference = 345C2F542E77FB8D00C64079 /* MEGABOXTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 345C2F5D2E77FB8D00C64079 /* MEGABOXUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 345C2F6E2E77FB8D00C64079 /* Build configuration list for PBXNativeTarget "MEGABOXUITests" */; - buildPhases = ( - 345C2F5A2E77FB8D00C64079 /* Sources */, - 345C2F5B2E77FB8D00C64079 /* Frameworks */, - 345C2F5C2E77FB8D00C64079 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 345C2F602E77FB8D00C64079 /* PBXTargetDependency */, - ); - name = MEGABOXUITests; - packageProductDependencies = ( - ); - productName = week1_homeworkUITests; - productReference = 345C2F5E2E77FB8D00C64079 /* MEGABOXUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 345C2F3C2E77FB8B00C64079 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1620; - LastUpgradeCheck = 2600; - TargetAttributes = { - 345C2F432E77FB8B00C64079 = { - CreatedOnToolsVersion = 16.2; - }; - 345C2F532E77FB8D00C64079 = { - CreatedOnToolsVersion = 16.2; - TestTargetID = 345C2F432E77FB8B00C64079; - }; - 345C2F5D2E77FB8D00C64079 = { - CreatedOnToolsVersion = 16.2; - TestTargetID = 345C2F432E77FB8B00C64079; - }; - }; - }; - buildConfigurationList = 345C2F3F2E77FB8B00C64079 /* Build configuration list for PBXProject "MEGABOX" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 345C2F3B2E77FB8B00C64079; - minimizedProjectReferenceProxies = 1; - packageReferences = ( - 34EBABD32EBDF36600CF8868 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */, - 347DBAC32EC3B8D4008916E4 /* XCRemoteSwiftPackageReference "Moya" */, - 347DBAD02EC4F34A008916E4 /* XCRemoteSwiftPackageReference "Kingfisher" */, - ); - preferredProjectObjectVersion = 77; - productRefGroup = 345C2F452E77FB8B00C64079 /* Products */; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = 34043A522EAF74F500C58AA6 /* Products */; - ProjectRef = 34043A512EAF74F500C58AA6 /* MEGABOX.xcodeproj */; - }, - { - ProductGroup = 340439322EAF6E4000C58AA6 /* Products */; - ProjectRef = 3404392F2EAF6E4000C58AA6 /* MEGABOX.xcodeproj */; - }, - { - ProductGroup = 340437912EAE487C00C58AA6 /* Products */; - ProjectRef = 3404378E2EAE487C00C58AA6 /* MEGABOX.xcodeproj */; - }, - { - ProductGroup = 3404383D2EAF642C00C58AA6 /* Products */; - ProjectRef = 3404383A2EAF642C00C58AA6 /* MEGABOX.xcodeproj */; - }, - { - ProductGroup = 34EBAB0E2EBDC1BD00CF8868 /* Products */; - ProjectRef = 34EBAB0A2EBDC1BD00CF8868 /* MEGABOX.xcodeproj */; - }, - { - ProductGroup = 340438B82EAF6DE300C58AA6 /* Products */; - ProjectRef = 340438B42EAF6DE300C58AA6 /* MEGABOX.xcodeproj */; - }, - ); - projectRoot = ""; - targets = ( - 345C2F432E77FB8B00C64079 /* MEGABOX */, - 345C2F532E77FB8D00C64079 /* MEGABOXTests */, - 345C2F5D2E77FB8D00C64079 /* MEGABOXUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 345C2F422E77FB8B00C64079 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 34EBACCA2EBE40F800CF8868 /* Secret.xcconfig in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 345C2F522E77FB8D00C64079 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 345C2F5C2E77FB8D00C64079 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 345C2F402E77FB8B00C64079 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 345C2F502E77FB8D00C64079 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 345C2F5A2E77FB8D00C64079 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 345C2F562E77FB8D00C64079 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 345C2F432E77FB8B00C64079 /* MEGABOX */; - targetProxy = 345C2F552E77FB8D00C64079 /* PBXContainerItemProxy */; - }; - 345C2F602E77FB8D00C64079 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 345C2F432E77FB8B00C64079 /* MEGABOX */; - targetProxy = 345C2F5F2E77FB8D00C64079 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 345C2F662E77FB8D00C64079 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 34EBACC92EBE40F800CF8868 /* Secret.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = "MEGABOX/week1-homework-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 18.2; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 345C2F672E77FB8D00C64079 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 34EBACC92EBE40F800CF8868 /* Secret.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = "MEGABOX/week1-homework-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 18.2; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 345C2F692E77FB8D00C64079 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"MEGABOX/Preview Content\""; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "week1-homework-Info.plist"; - INFOPLIST_KEY_CFBundleDisplayName = ""; - INFOPLIST_KEY_LSApplicationCategoryType = ""; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.UMC.yoon.MEGABOX; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 345C2F6A2E77FB8D00C64079 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"MEGABOX/Preview Content\""; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "week1-homework-Info.plist"; - INFOPLIST_KEY_CFBundleDisplayName = ""; - INFOPLIST_KEY_LSApplicationCategoryType = ""; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.UMC.yoon.MEGABOX; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - 345C2F6C2E77FB8D00C64079 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.2; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "UMC.week1-homeworkTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MEGABOX.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/MEGABOX"; - }; - name = Debug; - }; - 345C2F6D2E77FB8D00C64079 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.2; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "UMC.week1-homeworkTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MEGABOX.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/MEGABOX"; - }; - name = Release; - }; - 345C2F6F2E77FB8D00C64079 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "UMC.week1-homeworkUITests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = week1_homework; - }; - name = Debug; - }; - 345C2F702E77FB8D00C64079 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "UMC.week1-homeworkUITests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = week1_homework; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 345C2F3F2E77FB8B00C64079 /* Build configuration list for PBXProject "MEGABOX" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 345C2F662E77FB8D00C64079 /* Debug */, - 345C2F672E77FB8D00C64079 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 345C2F682E77FB8D00C64079 /* Build configuration list for PBXNativeTarget "MEGABOX" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 345C2F692E77FB8D00C64079 /* Debug */, - 345C2F6A2E77FB8D00C64079 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 345C2F6B2E77FB8D00C64079 /* Build configuration list for PBXNativeTarget "MEGABOXTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 345C2F6C2E77FB8D00C64079 /* Debug */, - 345C2F6D2E77FB8D00C64079 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 345C2F6E2E77FB8D00C64079 /* Build configuration list for PBXNativeTarget "MEGABOXUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 345C2F6F2E77FB8D00C64079 /* Debug */, - 345C2F702E77FB8D00C64079 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCRemoteSwiftPackageReference section */ - 347DBAC32EC3B8D4008916E4 /* XCRemoteSwiftPackageReference "Moya" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/Moya/Moya"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 15.0.3; - }; - }; - 347DBAD02EC4F34A008916E4 /* XCRemoteSwiftPackageReference "Kingfisher" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/onevcat/Kingfisher"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 8.6.1; - }; - }; - 34EBABD32EBDF36600CF8868 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/kakao/kakao-ios-sdk"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 2.25.0; - }; - }; -/* End XCRemoteSwiftPackageReference section */ - -/* Begin XCSwiftPackageProductDependency section */ - 347DBAD22EC63458008916E4 /* CombineMoya */ = { - isa = XCSwiftPackageProductDependency; - package = 347DBAC32EC3B8D4008916E4 /* XCRemoteSwiftPackageReference "Moya" */; - productName = CombineMoya; - }; - 347DBAD42EC63458008916E4 /* Moya */ = { - isa = XCSwiftPackageProductDependency; - package = 347DBAC32EC3B8D4008916E4 /* XCRemoteSwiftPackageReference "Moya" */; - productName = Moya; - }; - 347DBAD62EC63458008916E4 /* ReactiveMoya */ = { - isa = XCSwiftPackageProductDependency; - package = 347DBAC32EC3B8D4008916E4 /* XCRemoteSwiftPackageReference "Moya" */; - productName = ReactiveMoya; - }; - 347DBAD82EC63458008916E4 /* RxMoya */ = { - isa = XCSwiftPackageProductDependency; - package = 347DBAC32EC3B8D4008916E4 /* XCRemoteSwiftPackageReference "Moya" */; - productName = RxMoya; - }; - 347DBADA2EC63458008916E4 /* Kingfisher */ = { - isa = XCSwiftPackageProductDependency; - package = 347DBAD02EC4F34A008916E4 /* XCRemoteSwiftPackageReference "Kingfisher" */; - productName = Kingfisher; - }; - 34EBABD42EBDF36600CF8868 /* KakaoSDK */ = { - isa = XCSwiftPackageProductDependency; - package = 34EBABD32EBDF36600CF8868 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; - productName = KakaoSDK; - }; - 34EBABD62EBDF36600CF8868 /* KakaoSDKAuth */ = { - isa = XCSwiftPackageProductDependency; - package = 34EBABD32EBDF36600CF8868 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; - productName = KakaoSDKAuth; - }; - 34EBABD82EBDF36600CF8868 /* KakaoSDKCert */ = { - isa = XCSwiftPackageProductDependency; - package = 34EBABD32EBDF36600CF8868 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; - productName = KakaoSDKCert; - }; - 34EBABDA2EBDF36600CF8868 /* KakaoSDKCommon */ = { - isa = XCSwiftPackageProductDependency; - package = 34EBABD32EBDF36600CF8868 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; - productName = KakaoSDKCommon; - }; -/* End XCSwiftPackageProductDependency section */ - }; - rootObject = 345C2F3C2E77FB8B00C64079 /* Project object */; -} diff --git a/yoon/MEGABOX/MEGABOX/MEGABOX.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/yoon/MEGABOX/MEGABOX/MEGABOX.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/yoon/MEGABOX/MEGABOX/MEGABOX.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/yoon/MEGABOX/MEGABOX/MEGABOX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/yoon/MEGABOX/MEGABOX/MEGABOX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved deleted file mode 100644 index a0abd4b..0000000 --- a/yoon/MEGABOX/MEGABOX/MEGABOX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ /dev/null @@ -1,60 +0,0 @@ -{ - "originHash" : "06ee61c3a9b0918d694779313c15e43432c56d66d4a54eda286a2d22a223c8da", - "pins" : [ - { - "identity" : "alamofire", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Alamofire/Alamofire.git", - "state" : { - "revision" : "513364f870f6bfc468f9d2ff0a95caccc10044c5", - "version" : "5.10.2" - } - }, - { - "identity" : "kakao-ios-sdk", - "kind" : "remoteSourceControl", - "location" : "https://github.com/kakao/kakao-ios-sdk", - "state" : { - "revision" : "e14a8d1fad75645fd5677a295a8b1956ebd14d3d", - "version" : "2.25.0" - } - }, - { - "identity" : "kingfisher", - "kind" : "remoteSourceControl", - "location" : "https://github.com/onevcat/Kingfisher", - "state" : { - "revision" : "4d75de347da985a70c63af4d799ed482021f6733", - "version" : "8.6.1" - } - }, - { - "identity" : "moya", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Moya/Moya", - "state" : { - "revision" : "c263811c1f3dbf002be9bd83107f7cdc38992b26", - "version" : "15.0.3" - } - }, - { - "identity" : "reactiveswift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/ReactiveCocoa/ReactiveSwift.git", - "state" : { - "revision" : "c43bae3dac73fdd3cb906bd5a1914686ca71ed3c", - "version" : "6.7.0" - } - }, - { - "identity" : "rxswift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/ReactiveX/RxSwift.git", - "state" : { - "revision" : "5004a18539bd68905c5939aa893075f578f4f03d", - "version" : "6.9.1" - } - } - ], - "version" : 3 -} diff --git a/yoon/MEGABOX/MEGABOX/MEGABOX.xcodeproj/xcshareddata/xcschemes/MEGABOX.xcscheme b/yoon/MEGABOX/MEGABOX/MEGABOX.xcodeproj/xcshareddata/xcschemes/MEGABOX.xcscheme deleted file mode 100644 index 1f5cc7c..0000000 --- a/yoon/MEGABOX/MEGABOX/MEGABOX.xcodeproj/xcshareddata/xcschemes/MEGABOX.xcscheme +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Config.swift b/yoon/MEGABOX/MEGABOX/MegaBox/Config.swift deleted file mode 100644 index 750cb07..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Config.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// Config.swift -// MEGABOX -// -// Created by 정승윤 on 11/12/25. -// - -import Foundation - -enum Config { - private static let infoDictionary: [String: Any] = { - guard let dict = Bundle.main.infoDictionary else { - fatalError("Plist 없음") - } - return dict - }() - - static let baseURL: String = { - guard let baseURL = Config.infoDictionary["BASE_URL"] as? String else { - fatalError() - } - return baseURL - }() - - static let tmdbAPIKey: String = { - guard let apiKey = Config.infoDictionary["TMDB_API_KEY"] as? String else { - fatalError("🚨 Info.plist에 TMDB_API_KEY 키가 설정되지 않았습니다.") - } - return apiKey - }() -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/DTO/KakaoDTO.swift b/yoon/MEGABOX/MEGABOX/MegaBox/DTO/KakaoDTO.swift deleted file mode 100644 index bc12d7c..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/DTO/KakaoDTO.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// KakaoDTO.swift -// MEGABOX -// -// Created by 정승윤 on 11/7/25. -// - -import Foundation - -struct KakaoToken: Decodable { - let token_type: String - let access_token: String - let expires_in : Int - let refresh_token: String - let refresh_token_expires_in: Int -} - -struct KakaoUser: Decodable { - let id: Int - let kakao_account: KakaoAccount? -} - -struct KakaoAccount: Decodable { - let email: String? - let profile: KakaoProfile? -} - -struct KakaoProfile: Decodable { - let nickname: String? - let profile_image_url: String? -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/DTO/ScheduleDTO.swift b/yoon/MEGABOX/MEGABOX/MegaBox/DTO/ScheduleDTO.swift deleted file mode 100644 index 217b136..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/DTO/ScheduleDTO.swift +++ /dev/null @@ -1,124 +0,0 @@ -// -// ScheduleDTO.swift -// MEGABOX -// -// Created by 정승윤 on 10/26/25. -// - -import Foundation - -struct ScheduleDTO: Codable { - let status: String - let message: String - let data: MoviesDTO -} - -extension ScheduleDTO { - func toDomain() -> ScheduleModel { - return ScheduleModel( - status: status, - message: message, - data: data.toDomain() - ) - } -} - -struct MoviesDTO: Codable { - let movies : [MovieDTO] -} - -extension MoviesDTO { - // DTO를 도메인 모델로 변환 - func toDomain() -> MoviesModel { - return MoviesModel( - movies: movies.map { $0.toDomain() } - ) - } -} - -struct MovieDTO: Codable { - let id: String - let title: String - let ageRating: String - let schedules: [DateDTO] - - enum CodingKeys: String, CodingKey { - case id - case title - case ageRating = "age_rating" - case schedules - } -} - -extension MovieDTO { - func toDomain() -> AMovieModel { - return AMovieModel( - id: id, - title: title, - ageRating: ageRating, - schedules: schedules.map { $0.toDomain() } - ) - } -} - -struct DateDTO: Codable { - let date: Date - let areas: [AreaDTO] -} - -extension DateDTO { - func toDomain() -> DateModel { - return DateModel( - date: date, - areas: areas.map { $0.toDomain() } - ) - } -} - -struct AreaDTO: Codable { - let area: String - let items: [TimeDTO] -} - -extension AreaDTO { - func toDomain() -> AreaModel { - return AreaModel( - area: area, - items: items.map { $0.toDomain() } - ) - } -} - -struct TimeDTO: Codable { - let auditorium: String - let format: String - let showtimes: [ShowTimesDTO] -} - -extension TimeDTO { - func toDomain() -> TimeModel { - return TimeModel( - auditorium: auditorium, - format: format, - showtimes: showtimes.map { $0.toDomain() } - ) - } -} - -struct ShowTimesDTO: Codable { - let start: String - let end: String - let available: Int - let total: Int -} - -extension ShowTimesDTO { - func toDomain() -> ShowTimeModel { - return ShowTimeModel( - start: start, - end: end, - available: available, - total: total - ) - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/DTO/TMDBDTO.swift b/yoon/MEGABOX/MEGABOX/MegaBox/DTO/TMDBDTO.swift deleted file mode 100644 index 6a8c244..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/DTO/TMDBDTO.swift +++ /dev/null @@ -1,95 +0,0 @@ -// -// MovieDTO.swift -// MEGABOX -// -// Created by 정승윤 on 11/12/25. -// - -import Foundation - -struct RequestDTO { - let language: String - let page: Int - let region: String -} - -struct ResponseDTO: Decodable { - let dates: DateRangeDTO? - let page: Int - let results: [MovieDetailDTO] // 실제 영화 목록 데이터 - let totalPages: Int - let totalResults: Int - - private enum CodingKeys: String, CodingKey { - case page - case results - case dates - case totalPages = "total_pages" - case totalResults = "total_results" - } - } -struct DateRangeDTO: Codable { - let maximum: String? // 최대 날짜 - let minimum: String? // 최소 날짜 -} - -struct MovieDetailDTO: Codable { - let adult: Bool? - let backdropPath: String? - let genreIds: [Int]? - let id: Int - let originalLanguage: String? - let originalTitle: String - let overview: String? - let popularity: Double? - let posterPath: String? - let releaseDate: String? - let title: String - let video: Bool? - let voteAverage: Double? - let voteCount: Int? - - private enum CodingKeys: String, CodingKey { - case adult - case backdropPath = "backdrop_path" - case id - case originalLanguage = "original_language" - case originalTitle = "original_title" - case overview - case popularity - case posterPath = "poster_path" - case releaseDate = "release_date" - case title - case video - case voteAverage = "vote_average" - case voteCount = "vote_count" - case genreIds = "genre_ids" - } -} - -extension MovieDetailDTO { - - // 이미지 기본 URL - private static let imageBaseURL = "https://image.tmdb.org/t/p/w500" - - // 1. MovieCardModel로 변환하는 매핑 함수 - func toMovieCardModel(hardcodedAttendance: String, hardcodedRating: String) -> MovieCardModel { - - let posterFullPath = MovieDetailDTO.imageBaseURL + (self.posterPath ?? "") - - let backdropFullPath = MovieDetailDTO.imageBaseURL + (self.backdropPath ?? "") - - return MovieCardModel( - id: self.id, - title: self.title, - posterURL: posterFullPath, - originalTitle: self.originalTitle, // DTO에서 바로 사용 - backdropURL: backdropFullPath, - overview: self.overview ?? "줄거리 정보 없음", // DTO에서 바로 사용 - releaseDate: self.releaseDate ?? "미정", // DTO에서 바로 사용 - rating: hardcodedRating, - attendance: hardcodedAttendance - ) - } -} - diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/MEGABOX.swift b/yoon/MEGABOX/MEGABOX/MegaBox/MEGABOX.swift deleted file mode 100644 index 4eba11f..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/MEGABOX.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// week1_homeworkApp.swift -// week1_homework -// -// Created by 정승윤 on 9/15/25. -// - -import SwiftUI -import KakaoSDKCommon -import KakaoSDKAuth - -@main -struct MEGABOX: App { - let theaterVM : TheaterViewModel = .init() - @State var selectTheaters: Set = [.gangnam] - @StateObject var loginVM = LoginViewModel() - @StateObject var router = NavigationRouter() - @StateObject var tmdbViewModel = TMDBViewModel() - init() { - // kakao sdk 초기화 - let kakaoNativeAppKey = (Bundle.main.infoDictionary?["KAKAO_NATIVE_APP_KEY"] as? String) ?? "" - KakaoSDK.initSDK(appKey: kakaoNativeAppKey) - } - - - var body: some Scene { - WindowGroup { - if loginVM.isLoggedIn { - PathView(selectTheaters: $selectTheaters) - .environmentObject(router) - .environmentObject(MovieViewModel()) - .environmentObject(theaterVM) - .environmentObject(loginVM) - .environmentObject(tmdbViewModel) - } else { - LoginView().onOpenURL(perform: { url in - if AuthApi.isKakaoTalkLoginUrl(url) { - AuthController.handleOpenUrl(url: url) - } - }) - .environmentObject(loginVM) - .environmentObject(router) - .environmentObject(tmdbViewModel) } -// 여기에도 environment를 넣어줘야 하는구나.,.,, 깨달음 + 1 -// 최상위계층에도 environment를 넣어줘야 하위 일반 뷰에서도 작동함 -// 최상위를 패스뷰로 해 놔야 함. 로그인뷰로 해 놓으니까 로그인 뷰에서 넘어가질 않음 프리뷰 안넘어가는 것과 비슷한 느낌인 듯 - } - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Model/API/ScheduleModel.swift b/yoon/MEGABOX/MEGABOX/MegaBox/Model/API/ScheduleModel.swift deleted file mode 100644 index daea47d..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Model/API/ScheduleModel.swift +++ /dev/null @@ -1,48 +0,0 @@ -// -// ScheduleModel.swift -// MEGABOX -// -// Created by 정승윤 on 10/26/25. -// - -import Foundation - -struct ScheduleModel { - let status: String - let message: String - let data: MoviesModel -} - -struct MoviesModel { - let movies: [AMovieModel] -} - -struct AMovieModel { - let id: String - let title: String - let ageRating: String - let schedules: [DateModel] -} - -struct DateModel { - let date: Date - let areas: [AreaModel] -} - -struct AreaModel { - let area: String - let items: [TimeModel] -} - -struct TimeModel { - let auditorium: String - let format: String - let showtimes: [ShowTimeModel] -} - -struct ShowTimeModel { - let start: String - let end: String - let available: Int - let total: Int -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Model/CalenderModel.swift b/yoon/MEGABOX/MEGABOX/MegaBox/Model/CalenderModel.swift deleted file mode 100644 index c61e1f6..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Model/CalenderModel.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// CalenderModel.swift -// MEGABOX -// -// Created by 정승윤 on 10/8/25. -// - -import Foundation - -struct CalendarDay: Identifiable { - var id: UUID = .init() - let day: Int - let date: Date - let isCurrentMonth: Bool -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Model/LoginModel.swift b/yoon/MEGABOX/MEGABOX/MegaBox/Model/LoginModel.swift deleted file mode 100644 index f178734..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Model/LoginModel.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// LoginModel.swift -// week1_homework -// -// Created by 정승윤 on 9/22/25. -// - -import Foundation -import SwiftUI - - -struct LoginModel { - var id: String - var pwd: String - var name: String -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Model/MoveiCardModel.swift b/yoon/MEGABOX/MEGABOX/MegaBox/Model/MoveiCardModel.swift deleted file mode 100644 index f615069..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Model/MoveiCardModel.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// MoveiCardModel.swift -// MEGABOX -// -// Created by 정승윤 on 11/12/25. -// - -import Foundation - -struct MovieCardModel: Identifiable, Equatable, Hashable{ - let id: Int - let title: String - let posterURL: String - let originalTitle: String - let backdropURL: String - let overview: String - let releaseDate: String - let rating: String - let attendance: String -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Model/MovieInfoModel.swift b/yoon/MEGABOX/MEGABOX/MegaBox/Model/MovieInfoModel.swift deleted file mode 100644 index 2fad73b..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Model/MovieInfoModel.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// MovieInfoModel.swift -// week1_homework -// -// Created by 정승윤 on 10/1/25. -// - -import Foundation -import SwiftUI - -struct MovieInfoModel { - let posterName: String - let name: String - let performance: String -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Model/MovieModel.swift b/yoon/MEGABOX/MEGABOX/MegaBox/Model/MovieModel.swift deleted file mode 100644 index cbd818e..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Model/MovieModel.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// HomeModel.swift -// week1_homework -// -// Created by 정승윤 on 10/1/25. -// - -import Foundation -import SwiftUI - -enum MvTab: String, CaseIterable{ - case chart = "무비차트" - case upcoming = "상영예정" -} - -struct MovieModel: Identifiable, Hashable { - let id = UUID() - var posterName: String - let secPosterName: String - let name: String - let engname: String - let performance: String - let age: String -} -// 이미지, 버튼 View 라서 모델에 넣는 것 비추 -// 연관값인 MovieModel에도 Hashable 넣어주기 diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Model/TheaterModel.swift b/yoon/MEGABOX/MEGABOX/MegaBox/Model/TheaterModel.swift deleted file mode 100644 index a9462bb..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Model/TheaterModel.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// TheaterModel.swift -// MEGABOX -// -// Created by 정승윤 on 10/7/25. -// - -import Foundation - - -class TheaterModel: Identifiable, Hashable { - let id: String - let name: String - - init(name: String) { - self.name = name - self.id = name - } - - static func == (lhs: TheaterModel, rhs: TheaterModel) -> Bool { - return lhs.id == rhs.id - } - - func hash(into hasher: inout Hasher) { - hasher.combine(id) - } -} - -enum Theaters: String, CaseIterable { - case gangnam = "강남" - case hongdae = "홍대" - case sinchon = "신촌" - -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/MovieSchedule.json b/yoon/MEGABOX/MEGABOX/MegaBox/MovieSchedule.json deleted file mode 100644 index b95dbe7..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/MovieSchedule.json +++ /dev/null @@ -1,385 +0,0 @@ -{ - "status": "success", - "message": "Showtimes fetched successfully", - "data": { - "movies": [ - { - "id": "m-001", - "title": "어쩔수가없다", - "age_rating": "15", - "schedules": [ - { - "date": "2025-09-22", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "크리클라이너 1관", - "format": "2D", - "showtimes": [ - { "start": "11:30", "end": "13:58", "available": 109, "total": 116 }, - { "start": "14:20", "end": "16:48", "available": 19, "total": 116 }, - { "start": "17:05", "end": "19:28", "available": 1, "total": 116 }, - { "start": "19:45", "end": "22:02", "available": 100, "total": 116 }, - { "start": "22:20", "end": "00:04", "available": 116, "total": 116 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "BTS관 (7층 1관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "09:30", "end": "11:50", "available": 75, "total": 116 }, - { "start": "12:00", "end": "14:26", "available": 102, "total": 116 }, - { "start": "14:45", "end": "17:04", "available": 88, "total": 116 } - ] - }, - { - "auditorium": "BTS관 (9층 2관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "11:30", "end": "13:58", "available": 34, "total": 116 }, - { "start": "14:10", "end": "16:32", "available": 100, "total": 116 }, - { "start": "16:50", "end": "19:00", "available": 13, "total": 116 }, - { "start": "19:20", "end": "21:40", "available": 92, "total": 116 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-23", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "크리클라이너 1관", - "format": "2D", - "showtimes": [ - { "start": "10:30", "end": "12:58", "available": 112, "total": 116 }, - { "start": "13:40", "end": "16:08", "available": 54, "total": 116 }, - { "start": "16:20", "end": "18:48", "available": 22, "total": 116 }, - { "start": "19:30", "end": "21:58", "available": 97, "total": 116 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "BTS관 (7층 1관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "09:50", "end": "12:10", "available": 81, "total": 116 }, - { "start": "12:30", "end": "14:56", "available": 99, "total": 116 }, - { "start": "15:20", "end": "17:39", "available": 61, "total": 116 } - ] - }, - { - "auditorium": "BTS관 (9층 2관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "11:10", "end": "13:38", "available": 45, "total": 116 }, - { "start": "14:00", "end": "16:22", "available": 88, "total": 116 }, - { "start": "16:40", "end": "18:58", "available": 24, "total": 116 }, - { "start": "19:10", "end": "21:30", "available": 90, "total": 116 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-24", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "크리클라이너 1관", - "format": "2D", - "showtimes": [ - { "start": "11:00", "end": "13:28", "available": 106, "total": 116 }, - { "start": "13:50", "end": "16:18", "available": 33, "total": 116 }, - { "start": "16:40", "end": "19:08", "available": 5, "total": 116 }, - { "start": "19:20", "end": "21:48", "available": 84, "total": 116 }, - { "start": "22:10", "end": "00:34", "available": 116, "total": 116 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "BTS관 (7층 1관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "10:10", "end": "12:30", "available": 72, "total": 116 }, - { "start": "12:50", "end": "15:16", "available": 104, "total": 116 }, - { "start": "15:40", "end": "18:00", "available": 76, "total": 116 } - ] - }, - { - "auditorium": "BTS관 (9층 2관 [Laser])", - "format": "2D", - "showtimes": [ - { "start": "11:40", "end": "14:08", "available": 29, "total": 116 }, - { "start": "14:20", "end": "16:42", "available": 93, "total": 116 }, - { "start": "17:10", "end": "19:30", "available": 18, "total": 116 }, - { "start": "19:40", "end": "22:00", "available": 87, "total": 116 } - ] - } - ] - } - ] - } - ] - }, - { - "id": "m-002", - "title": "F1 더 무비", - "age_rating": "12", - "schedules": [ - { - "date": "2025-09-22", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "IMAX 1관", - "format": "IMAX", - "showtimes": [ - { "start": "10:00", "end": "12:15", "available": 45, "total": 50 }, - { "start": "13:30", "end": "15:45", "available": 12, "total": 50 }, - { "start": "17:00", "end": "19:15", "available": 8, "total": 50 }, - { "start": "20:30", "end": "22:45", "available": 35, "total": 50 } - ] - }, - { - "auditorium": "4DX 2관", - "format": "4DX", - "showtimes": [ - { "start": "11:15", "end": "13:30", "available": 28, "total": 40 }, - { "start": "15:45", "end": "18:00", "available": 5, "total": 40 }, - { "start": "19:15", "end": "21:30", "available": 22, "total": 40 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "IMAX 3관", - "format": "IMAX", - "showtimes": [ - { "start": "09:45", "end": "12:00", "available": 38, "total": 50 }, - { "start": "13:15", "end": "15:30", "available": 15, "total": 50 }, - { "start": "16:45", "end": "19:00", "available": 3, "total": 50 }, - { "start": "20:15", "end": "22:30", "available": 42, "total": 50 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-23", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "IMAX 1관", - "format": "IMAX", - "showtimes": [ - { "start": "10:30", "end": "12:45", "available": 48, "total": 50 }, - { "start": "14:00", "end": "16:15", "available": 25, "total": 50 }, - { "start": "17:30", "end": "19:45", "available": 18, "total": 50 }, - { "start": "21:00", "end": "23:15", "available": 41, "total": 50 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "IMAX 3관", - "format": "IMAX", - "showtimes": [ - { "start": "10:00", "end": "12:15", "available": 33, "total": 50 }, - { "start": "13:30", "end": "15:45", "available": 7, "total": 50 }, - { "start": "17:00", "end": "19:15", "available": 12, "total": 50 }, - { "start": "20:30", "end": "22:45", "available": 39, "total": 50 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-24", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "IMAX 1관", - "format": "IMAX", - "showtimes": [ - { "start": "09:30", "end": "11:45", "available": 42, "total": 50 }, - { "start": "12:45", "end": "15:00", "available": 18, "total": 50 }, - { "start": "15:30", "end": "17:45", "available": 6, "total": 50 }, - { "start": "18:15", "end": "20:30", "available": 29, "total": 50 }, - { "start": "21:00", "end": "23:15", "available": 44, "total": 50 } - ] - }, - { - "auditorium": "4DX 2관", - "format": "4DX", - "showtimes": [ - { "start": "10:30", "end": "12:45", "available": 15, "total": 40 }, - { "start": "14:00", "end": "16:15", "available": 3, "total": 40 }, - { "start": "17:30", "end": "19:45", "available": 1, "total": 40 }, - { "start": "20:00", "end": "22:15", "available": 25, "total": 40 } - ] - } - ] - } - ] - } - ] - }, - { - "id": "m-003", - "title": "귀멸의 칼날: 무한성", - "age_rating": "15", - "schedules": [ - { - "date": "2025-09-22", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:30", "end": "12:20", "available": 85, "total": 120 }, - { "start": "13:00", "end": "15:50", "available": 23, "total": 120 }, - { "start": "16:30", "end": "19:20", "available": 2, "total": 120 }, - { "start": "20:00", "end": "22:50", "available": 78, "total": 120 }, - { "start": "23:30", "end": "02:20", "available": 95, "total": 120 } - ] - }, - { - "auditorium": "4DX 3관", - "format": "4DX", - "showtimes": [ - { "start": "10:45", "end": "13:35", "available": 15, "total": 40 }, - { "start": "14:15", "end": "17:05", "available": 4, "total": 40 }, - { "start": "17:45", "end": "20:35", "available": 1, "total": 40 }, - { "start": "21:15", "end": "00:05", "available": 28, "total": 40 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:00", "end": "11:50", "available": 67, "total": 120 }, - { "start": "12:30", "end": "15:20", "available": 19, "total": 120 }, - { "start": "16:00", "end": "18:50", "available": 5, "total": 120 }, - { "start": "19:30", "end": "22:20", "available": 89, "total": 120 } - ] - }, - { - "auditorium": "Dolby Cinema 4관", - "format": "Dolby", - "showtimes": [ - { "start": "11:00", "end": "13:50", "available": 22, "total": 60 }, - { "start": "14:30", "end": "17:20", "available": 8, "total": 60 }, - { "start": "18:00", "end": "20:50", "available": 3, "total": 60 }, - { "start": "21:30", "end": "00:20", "available": 45, "total": 60 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-23", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:45", "end": "12:35", "available": 92, "total": 120 }, - { "start": "13:15", "end": "16:05", "available": 31, "total": 120 }, - { "start": "16:45", "end": "19:35", "available": 7, "total": 120 }, - { "start": "20:15", "end": "23:05", "available": 84, "total": 120 } - ] - } - ] - }, - { - "area": "홍대", - "items": [ - { - "auditorium": "2D", - "format": "2D", - "showtimes": [ - { "start": "09:30", "end": "12:20", "available": 74, "total": 120 }, - { "start": "13:00", "end": "15:50", "available": 26, "total": 120 }, - { "start": "16:30", "end": "19:20", "available": 11, "total": 120 }, - { "start": "20:00", "end": "22:50", "available": 96, "total": 120 } - ] - } - ] - } - ] - }, - { - "date": "2025-09-24", - "areas": [ - { - "area": "강남", - "items": [ - { - "auditorium": "돌비시네마", - "format": "2D", - "showtimes": [ - { "start": "09:15", "end": "12:05", "available": 88, "total": 120 }, - { "start": "12:45", "end": "15:35", "available": 25, "total": 120 }, - { "start": "16:15", "end": "19:05", "available": 4, "total": 120 }, - { "start": "19:45", "end": "22:35", "available": 81, "total": 120 }, - { "start": "23:15", "end": "02:05", "available": 98, "total": 120 } - ] - } - ] - } - ] - } - ] - } - ] - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Preview Content/Preview Assets.xcassets/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Preview Content/Preview Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Preview Content/Preview Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/PreviewProvider.swift b/yoon/MEGABOX/MEGABOX/MegaBox/PreviewProvider.swift deleted file mode 100644 index 14e6e4f..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/PreviewProvider.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// PreviewProvider.swift -// week1_homework -// -// Created by 정승윤 on 9/15/25. -// - -import SwiftUI - -enum PREVIEW_DEVICE_TYPE : String, CaseIterable { - case iPhone_15_Pro = "iPhone 16 Pro Max" - case iPhone_11 = "iPhone 11" - - var previewDevice: PreviewDevice { - .init(rawValue: self.rawValue) - } -} - -func devicePreviews( - content: @escaping () -> Content -) -> some View { - ForEach(PREVIEW_DEVICE_TYPE.allCases, id: \.self) { device in - content() - .previewDevice(device.previewDevice) - .previewDisplayName(device.rawValue) - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/AccentColor.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/AppleLogin.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/AppleLogin.imageset/Contents.json deleted file mode 100644 index e346758..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/AppleLogin.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "LoginBtn-2.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/AppleLogin.imageset/LoginBtn-2.pdf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/AppleLogin.imageset/LoginBtn-2.pdf deleted file mode 100644 index 2dfba31..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/AppleLogin.imageset/LoginBtn-2.pdf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/KakaoLogin.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/KakaoLogin.imageset/Contents.json deleted file mode 100644 index 5f16ad9..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/KakaoLogin.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "LoginBtn-1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/KakaoLogin.imageset/LoginBtn-1.pdf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/KakaoLogin.imageset/LoginBtn-1.pdf deleted file mode 100644 index e45f4d5..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/KakaoLogin.imageset/LoginBtn-1.pdf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/NaverLogin.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/NaverLogin.imageset/Contents.json deleted file mode 100644 index ce9df2f..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/NaverLogin.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "LoginBtn.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/NaverLogin.imageset/LoginBtn.pdf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/NaverLogin.imageset/LoginBtn.pdf deleted file mode 100644 index 39b5a28..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/NaverLogin.imageset/LoginBtn.pdf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/UMC.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/UMC.imageset/Contents.json deleted file mode 100644 index b5b344a..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/UMC.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "UMC.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/UMC.imageset/UMC.pdf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/UMC.imageset/UMC.pdf deleted file mode 100644 index 6229373..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/UMC.imageset/UMC.pdf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/blade.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/blade.imageset/Contents.json deleted file mode 100644 index c0d130a..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/blade.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "blade.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/blade.imageset/blade.pdf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/blade.imageset/blade.pdf deleted file mode 100644 index 5a038eb..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/blade.imageset/blade.pdf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/boss.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/boss.imageset/Contents.json deleted file mode 100644 index 6fb7e27..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/boss.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "포스터 사진.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/boss.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" "b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/boss.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" deleted file mode 100644 index cff99e9..0000000 Binary files "a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/boss.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/chair.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/chair.imageset/Contents.json deleted file mode 100644 index 24a8f66..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/chair.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "회원정보 아이콘-1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/chair.imageset/\355\232\214\354\233\220\354\240\225\353\263\264 \354\225\204\354\235\264\354\275\230-1.pdf" "b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/chair.imageset/\355\232\214\354\233\220\354\240\225\353\263\264 \354\225\204\354\235\264\354\275\230-1.pdf" deleted file mode 100644 index 6e18326..0000000 Binary files "a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/chair.imageset/\355\232\214\354\233\220\354\240\225\353\263\264 \354\225\204\354\235\264\354\275\230-1.pdf" and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/f1.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/f1.imageset/Contents.json deleted file mode 100644 index dc40783..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/f1.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "f1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/f1.imageset/f1.pdf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/f1.imageset/f1.pdf deleted file mode 100644 index 7575c3d..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/f1.imageset/f1.pdf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/f1Poster.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/f1Poster.imageset/Contents.json deleted file mode 100644 index 4cef63a..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/f1Poster.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "상단 영화 포스터.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/f1Poster.imageset/\354\203\201\353\213\250 \354\230\201\355\231\224 \355\217\254\354\212\244\355\204\260.pdf" "b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/f1Poster.imageset/\354\203\201\353\213\250 \354\230\201\355\231\224 \355\217\254\354\212\244\355\204\260.pdf" deleted file mode 100644 index b4b13a0..0000000 Binary files "a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/f1Poster.imageset/\354\203\201\353\213\250 \354\230\201\355\231\224 \355\217\254\354\212\244\355\204\260.pdf" and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/face.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/face.imageset/Contents.json deleted file mode 100644 index 64444ed..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/face.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "face.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/face.imageset/face.pdf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/face.imageset/face.pdf deleted file mode 100644 index f308620..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/face.imageset/face.pdf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/film.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/film.imageset/Contents.json deleted file mode 100644 index 96d3d80..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/film.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "회원정보 아이콘.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/film.imageset/\355\232\214\354\233\220\354\240\225\353\263\264 \354\225\204\354\235\264\354\275\230.pdf" "b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/film.imageset/\355\232\214\354\233\220\354\240\225\353\263\264 \354\225\204\354\235\264\354\275\230.pdf" deleted file mode 100644 index f876726..0000000 Binary files "a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/film.imageset/\355\232\214\354\233\220\354\240\225\353\263\264 \354\225\204\354\235\264\354\275\230.pdf" and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/hime.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/hime.imageset/Contents.json deleted file mode 100644 index 1f4fe0a..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/hime.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "hime.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/hime.imageset/hime.pdf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/hime.imageset/hime.pdf deleted file mode 100644 index 1618ad0..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/hime.imageset/hime.pdf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/hime2.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/hime2.imageset/Contents.json deleted file mode 100644 index c97c639..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/hime2.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "hime2.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/hime2.imageset/hime2.pdf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/hime2.imageset/hime2.pdf deleted file mode 100644 index 078e03a..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/hime2.imageset/hime2.pdf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/himePoster.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/himePoster.imageset/Contents.json deleted file mode 100644 index 9eb99be..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/himePoster.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "himePoster.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/himePoster.imageset/himePoster.pdf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/himePoster.imageset/himePoster.pdf deleted file mode 100644 index e3928d0..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/himePoster.imageset/himePoster.pdf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/location.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/location.imageset/Contents.json deleted file mode 100644 index 00ec9fa..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/location.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "free-icon-pin-map-8358838.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/location.imageset/free-icon-pin-map-8358838.pdf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/location.imageset/free-icon-pin-map-8358838.pdf deleted file mode 100644 index f08546b..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/location.imageset/free-icon-pin-map-8358838.pdf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/meboxLogo 1.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/meboxLogo 1.imageset/Contents.json deleted file mode 100644 index 0de0d63..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/meboxLogo 1.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "meboxLogo 1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/meboxLogo 1.imageset/meboxLogo 1.pdf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/meboxLogo 1.imageset/meboxLogo 1.pdf deleted file mode 100644 index 0739ac7..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/meboxLogo 1.imageset/meboxLogo 1.pdf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/meboxLogo 2.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/meboxLogo 2.imageset/Contents.json deleted file mode 100644 index 0de0d63..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/meboxLogo 2.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "meboxLogo 1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/meboxLogo 2.imageset/meboxLogo 1.pdf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/meboxLogo 2.imageset/meboxLogo 1.pdf deleted file mode 100644 index 0d9bc0b..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/meboxLogo 2.imageset/meboxLogo 1.pdf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/noway.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/noway.imageset/Contents.json deleted file mode 100644 index dc0aba3..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/noway.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "noway.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/noway.imageset/noway.pdf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/noway.imageset/noway.pdf deleted file mode 100644 index b5632d3..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/noway.imageset/noway.pdf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/popcorn.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/popcorn.imageset/Contents.json deleted file mode 100644 index 09f5202..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/popcorn.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "회원정보 아이콘-2.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/popcorn.imageset/\355\232\214\354\233\220\354\240\225\353\263\264 \354\225\204\354\235\264\354\275\230-2.pdf" "b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/popcorn.imageset/\355\232\214\354\233\220\354\240\225\353\263\264 \354\225\204\354\235\264\354\275\230-2.pdf" deleted file mode 100644 index c67eb82..0000000 Binary files "a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/popcorn.imageset/\355\232\214\354\233\220\354\240\225\353\263\264 \354\225\204\354\235\264\354\275\230-2.pdf" and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/roses.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/roses.imageset/Contents.json deleted file mode 100644 index 355bf5b..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/roses.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "포스터 사진-2.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/roses.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204-2.pdf" "b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/roses.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204-2.pdf" deleted file mode 100644 index 1b16829..0000000 Binary files "a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/roses.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204-2.pdf" and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/ugly2.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/ugly2.imageset/Contents.json deleted file mode 100644 index 5774d8e..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/ugly2.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "ugly2.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/ugly2.imageset/ugly2.pdf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/ugly2.imageset/ugly2.pdf deleted file mode 100644 index 8b584d7..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/ugly2.imageset/ugly2.pdf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/yadang.imageset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/yadang.imageset/Contents.json deleted file mode 100644 index 2ebc745..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/yadang.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "포스터 사진-1.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/yadang.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204-1.pdf" "b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/yadang.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204-1.pdf" deleted file mode 100644 index 1c64a01..0000000 Binary files "a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Assets.xcassets/yadang.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204-1.pdf" and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/5DCCEC.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/5DCCEC.colorset/Contents.json deleted file mode 100644 index 65303a4..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/5DCCEC.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEC", - "green" : "0xCC", - "red" : "0x5D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/8EAEF3.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/8EAEF3.colorset/Contents.json deleted file mode 100644 index f284c4c..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/8EAEF3.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF3", - "green" : "0xAE", - "red" : "0x8E" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/AB8BFF.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/AB8BFF.colorset/Contents.json deleted file mode 100644 index 2b6f478..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/AB8BFF.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFF", - "green" : "0x8B", - "red" : "0xAB" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/black.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/black.colorset/Contents.json deleted file mode 100644 index 7e8f38f..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/black.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0x00", - "red" : "0x00" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue00.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue00.colorset/Contents.json deleted file mode 100644 index af72714..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue00.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFA", - "green" : "0xF7", - "red" : "0xF3" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue01.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue01.colorset/Contents.json deleted file mode 100644 index b8e6890..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue01.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF7", - "green" : "0xF2", - "red" : "0xED" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue02.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue02.colorset/Contents.json deleted file mode 100644 index db01767..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue02.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEF", - "green" : "0xE5", - "red" : "0xDA" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue03.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue03.colorset/Contents.json deleted file mode 100644 index c995247..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue03.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xCC", - "green" : "0xAA", - "red" : "0x88" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue04.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue04.colorset/Contents.json deleted file mode 100644 index 8af0b34..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue04.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xB8", - "green" : "0x99", - "red" : "0x7A" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue05.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue05.colorset/Contents.json deleted file mode 100644 index b516f15..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue05.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA3", - "green" : "0x88", - "red" : "0x6D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue06.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue06.colorset/Contents.json deleted file mode 100644 index 2f35b6b..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue06.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x99", - "green" : "0x80", - "red" : "0x66" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue07.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue07.colorset/Contents.json deleted file mode 100644 index 7a1d637..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue07.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x7A", - "green" : "0x66", - "red" : "0x52" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue08.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue08.colorset/Contents.json deleted file mode 100644 index 3cc1396..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue08.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5C", - "green" : "0x4C", - "red" : "0x3D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue09.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue09.colorset/Contents.json deleted file mode 100644 index e92b218..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/blue09.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x47", - "green" : "0x3B", - "red" : "0x30" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray00.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray00.colorset/Contents.json deleted file mode 100644 index 03cea30..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray00.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF2", - "green" : "0xF2", - "red" : "0xF2" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray01.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray01.colorset/Contents.json deleted file mode 100644 index 87ac527..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray01.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEB", - "green" : "0xEB", - "red" : "0xEB" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray02.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray02.colorset/Contents.json deleted file mode 100644 index b8cecbb..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray02.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD5", - "green" : "0xD5", - "red" : "0xD5" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray03.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray03.colorset/Contents.json deleted file mode 100644 index 2e42b95..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray03.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x78", - "green" : "0x78", - "red" : "0x78" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray04.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray04.colorset/Contents.json deleted file mode 100644 index 5cecbda..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray04.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x6C", - "green" : "0x6C", - "red" : "0x6C" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray05.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray05.colorset/Contents.json deleted file mode 100644 index f2550a0..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray05.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x60", - "green" : "0x60", - "red" : "0x60" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray06.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray06.colorset/Contents.json deleted file mode 100644 index 9fae929..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray06.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x5A", - "green" : "0x5A", - "red" : "0x5A" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray07.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray07.colorset/Contents.json deleted file mode 100644 index eeca32a..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray07.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x48", - "green" : "0x48", - "red" : "0x48" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray08.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray08.colorset/Contents.json deleted file mode 100644 index 4db01bd..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray08.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x36", - "green" : "0x36", - "red" : "0x36" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray09.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray09.colorset/Contents.json deleted file mode 100644 index 0526811..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/gray09.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x2A", - "green" : "0x2A", - "red" : "0x2A" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/holiday.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/holiday.colorset/Contents.json deleted file mode 100644 index 1169e62..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/holiday.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x0A", - "green" : "0x0A", - "red" : "0xFF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/orange.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/orange.colorset/Contents.json deleted file mode 100644 index 62bdc58..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/orange.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0x80", - "red" : "0xFF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple00.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple00.colorset/Contents.json deleted file mode 100644 index 8d0b40b..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple00.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFB", - "green" : "0xE7", - "red" : "0xF0" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple01.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple01.colorset/Contents.json deleted file mode 100644 index 154caa3..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple01.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF9", - "green" : "0xDB", - "red" : "0xE8" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple02.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple02.colorset/Contents.json deleted file mode 100644 index 8d23492..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple02.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xF3", - "green" : "0xB4", - "red" : "0xCF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple03.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple03.colorset/Contents.json deleted file mode 100644 index 9779789..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple03.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD8", - "green" : "0x0E", - "red" : "0x65" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple04.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple04.colorset/Contents.json deleted file mode 100644 index 32183d8..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple04.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xC2", - "green" : "0x0D", - "red" : "0x5B" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple05.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple05.colorset/Contents.json deleted file mode 100644 index 347392c..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple05.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xAD", - "green" : "0x0B", - "red" : "0x51" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple06.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple06.colorset/Contents.json deleted file mode 100644 index 2af4520..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple06.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xA2", - "green" : "0x0B", - "red" : "0x4C" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple07.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple07.colorset/Contents.json deleted file mode 100644 index 7bddef3..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple07.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x82", - "green" : "0x08", - "red" : "0x3D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple08.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple08.colorset/Contents.json deleted file mode 100644 index 4e80e27..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple08.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x61", - "green" : "0x06", - "red" : "0x2D" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple09.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple09.colorset/Contents.json deleted file mode 100644 index 29e5e03..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/purple09.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x4C", - "green" : "0x05", - "red" : "0x23" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/tag.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/tag.colorset/Contents.json deleted file mode 100644 index 5a6de06..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/tag.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xD2", - "green" : "0xCD", - "red" : "0x47" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/white.colorset/Contents.json b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/white.colorset/Contents.json deleted file mode 100644 index fafa476..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Colors.xcassets/white.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFF", - "green" : "0xFF", - "red" : "0xFF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Fonts.swift b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Fonts.swift deleted file mode 100644 index 3dede4a..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Fonts.swift +++ /dev/null @@ -1,136 +0,0 @@ -// -// Fonts.swift -// week1_homework -// -// Created by 정승윤 on 9/15/25. -// - -import Foundation -import SwiftUI - -extension Font { - enum Pretend { - case extraBold - case bold - case semibold - case medium - case regular - case light - - var value: String { - switch self { - case .extraBold: - return "Pretendard-ExtraBold" - case .bold: - return "Pretendard-Bold" - case .semibold: - return "Pretendard-SemiBold" - case .medium: - return "Pretendard-Medium" - case .regular: - return "Pretendard-Regular" - case .light: - return "Pretendard-Light" - } - } - } - - static func pretend(type: Pretend, size: CGFloat) -> Font { - return .custom(type.value, size: size) - } - - static var PretendardBold30: Font { - return .pretend(type: .bold, size: 30) - } - - static var PretendardBold18: Font { - return .pretend(type: .bold, size: 18) - } - - static var PretendardBold22: Font { - return .pretend(type: .bold, size: 22) - } - - static var PretendardBold24: Font { - return .pretend(type: .bold, size: 24) - } - - static var PretendardextraBold24: Font { - return .pretend(type:.extraBold, size: 24) - } - - static var PretendardsemiBold38: Font { - return .pretend(type:.semibold, size: 38) - } - - static var PretendardsemiBold24: Font { - return .pretend(type:.semibold, size: 24) - } - - static var PretendardsemiBold18: Font { - return .pretend(type:.semibold, size: 18) - } - - static var PretendardsemiBold16: Font { - return .pretend(type:.semibold, size: 16) - } - - static var PretendardsemiBold14: Font { - return .pretend(type:.semibold, size: 14) - } - - static var PretendardsemiBold13: Font { - return .pretend(type:.semibold, size: 13) - } - - static var PretendardsemiBold12: Font { - return .pretend(type:.semibold, size: 12) - } - - static var Pretendardregular20: Font { - return .pretend(type:.regular, size: 20) - } - - static var Pretendardregular18: Font { - return .pretend(type:.regular, size: 18) - } - - static var Pretendardregular13: Font { - return .pretend(type:.regular, size: 13) - } - static var Pretendardregular12: Font { - return .pretend(type:.regular, size: 12) - } - - static var Pretendardregular09: Font { - return .pretend(type:.regular, size: 09) - } - - static var Pretendardmedium18: Font { - return .pretend(type:.medium, size: 18) - } - - static var Pretendardmedium16: Font { - return .pretend(type:.medium, size: 16) - } - - static var Pretendardmedium14: Font { - return .pretend(type:.medium, size: 14) - } - - static var Pretendardmedium13: Font { - return .pretend(type:.medium, size: 13) - } - - static var Pretendardmedium10: Font { - return .pretend(type:.medium, size: 10) - } - - static var Pretendardmedium08: Font { - return .pretend(type:.medium, size: 08) - } - - static var Pretendardlight14: Font { - return .pretend(type:.light, size: 14) - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-Black.otf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-Black.otf deleted file mode 100644 index a0d849e..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-Black.otf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-Bold.otf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-Bold.otf deleted file mode 100644 index 8e5e30a..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-Bold.otf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-ExtraBold.otf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-ExtraBold.otf deleted file mode 100644 index 388f3ca..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-ExtraBold.otf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-ExtraLight.otf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-ExtraLight.otf deleted file mode 100644 index 40c8b69..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-ExtraLight.otf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-Light.otf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-Light.otf deleted file mode 100644 index 228679e..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-Light.otf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-Medium.otf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-Medium.otf deleted file mode 100644 index 0575069..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-Medium.otf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-Regular.otf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-Regular.otf deleted file mode 100644 index 08bf4cf..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-Regular.otf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-SemiBold.otf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-SemiBold.otf deleted file mode 100644 index e7e36ab..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-SemiBold.otf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-Thin.otf b/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-Thin.otf deleted file mode 100644 index 77e792d..0000000 Binary files a/yoon/MEGABOX/MEGABOX/MegaBox/Resources/Fonts/Pretendard-Thin.otf and /dev/null differ diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Router/NavigationRouter.swift b/yoon/MEGABOX/MEGABOX/MegaBox/Router/NavigationRouter.swift deleted file mode 100644 index cc24e8d..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Router/NavigationRouter.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// NavigationRouter.swift -// week1_homework -// -// Created by 정승윤 on 10/2/25. -// - -import Observation -import Foundation -import SwiftUI - -// 하나만 써야한다.. -@Observable -class NavigationRouter: ObservableObject { - var path = NavigationPath() - - func push(_ route: Route) { - path.append(route) - } - - func pop() { - if !path.isEmpty { - path.removeLast() - } - } - - func reset() { - path = NavigationPath() - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Router/Route.swift b/yoon/MEGABOX/MEGABOX/MegaBox/Router/Route.swift deleted file mode 100644 index d5a3692..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Router/Route.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// Route.swift -// week1_homework -// -// Created by 정승윤 on 10/2/25. -// - -import SwiftUI - -enum Route: Hashable { - case home - case login - case detail(MovieCardModel) - case profile - case userSetting -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Service/KakaoLoginService.swift b/yoon/MEGABOX/MEGABOX/MegaBox/Service/KakaoLoginService.swift deleted file mode 100644 index 7febc95..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Service/KakaoLoginService.swift +++ /dev/null @@ -1,79 +0,0 @@ -// -// KakaoLogin.swift -// MEGABOX -// -// Created by 정승윤 on 11/7/25. -// - -import KakaoSDKUser -import Alamofire -import Foundation - -class KakaoLoginService: ObservableObject { - let keychain = KeychainService.shared - let service = "KakaoLoginService" - let tokenKey = "kakaoAccessToken" - - weak var loginVM: LoginViewModel? - - init(loginVM: LoginViewModel? = nil) { - self.loginVM = loginVM - } - //MARK: - 1. 인가코드 받아오기 - func kakaoLogin() { - // 카카오톡 실행 가능 여부 확인 - if UserApi.isKakaoTalkLoginAvailable() { - // 카카오톡 로그인 - UserApi.shared.loginWithKakaoTalk { oauthToken, error in - if let error = error { - print(error) - } else if let token = oauthToken?.accessToken{ - print("카카오톡 로그인 success") - - self.keychain.savePasswordToKeychain(account: self.tokenKey, - service: self.service, - password: token) - self.getUserInfo(accessToken: token) - } - } - } else { - // 카카오계정 로그인 - UserApi.shared.loginWithKakaoAccount { oauthToken, error in - if let error = error { - print(error) - } else if let token = oauthToken?.accessToken { - print("카카오계정 로그인 success") - - // 토큰 키체인 저장 - self.keychain.savePasswordToKeychain(account: self.tokenKey, - service: self.service, - password: token) - - // 사용자 정보 가져오기 - self.getUserInfo(accessToken: token) - } - } - } - } - //MARK: - 2. 사용자 로그인 처리 - func getUserInfo(accessToken:String) { - let url = "https://kapi.kakao.com/v2/user/me" - let header: HTTPHeaders = ["Authorization" : "Bearer \(accessToken)"] - - AF.request(url, method: .get, headers: header).responseDecodable(of: KakaoUser.self) {response in - switch response.result { - case .success(let info): - print("아이디: \(info)") - if let profile = info.kakao_account?.profile { - print("닉네임: \(profile.nickname ?? "없음")") - } - DispatchQueue.main.async { - self.loginVM?.isLoggedIn = true - } - case .failure(let error): - print("정보 가져오기 실패") - } - - } - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/Service/KeychainService.swift b/yoon/MEGABOX/MEGABOX/MegaBox/Service/KeychainService.swift deleted file mode 100644 index 27f28f7..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/Service/KeychainService.swift +++ /dev/null @@ -1,115 +0,0 @@ -// -// KeychainService.swift -// MEGABOX -// -// Created by 정승윤 on 11/7/25. -// - -import Foundation -import Security - -class KeychainService { - - static let shared = KeychainService() - - private init() {} - - /// Keychain에 사용자의 비밀번호를 저장합니다. - /// 이미 동일한 계정과 서비스 조합의 항목이 존재하는 경우, 기존 항목을 삭제하고 새로 저장합니다. - /// - Parameters: - /// - account: 저장할 비밀번호와 연결된 사용자 계정 (예: 이메일 주소) - /// - service: 비밀번호가 사용되는 서비스 이름 (예: "com.example.myapp.login") - /// - password: Keychain에 저장할 실제 비밀번호 문자열 - /// - Returns: 저장 작업의 결과 상태 코드 (예: `errSecSuccess`면 성공) - @discardableResult - func savePasswordToKeychain(account: String, service: String, password: String) -> OSStatus { - // 1. 저장할 데이터를 Data 타입으로 변환 - guard let passwordData = password.data(using: .utf8) else { - return errSecParam // 잘못된 데이터 - } - - // 2. Keychain Item 딕셔너리 구성 - let query: [String: Any] = [ - kSecClass as String: kSecClassGenericPassword, // 저장 유형: 일반 비밀번호 - kSecAttrAccount as String: account, // 계정 식별자 - kSecAttrService as String: service, // 서비스 이름 - kSecValueData as String: passwordData, // 실제 저장할 데이터 - kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlocked // 접근 가능 조건 - ] - - // 3. 이미 같은 항목이 있다면 삭제 (중복 방지) - SecItemDelete(query as CFDictionary) - - // 4. 새 항목 추가 - let status = SecItemAdd(query as CFDictionary, nil) - return status - } - - /// Keychain에서 저장된 데이터를 불러옵니다. - /// - Parameters: - /// - account: 계정 식별자 (예: 이메일 주소) - /// - service: 서비스 이름 (예: "com.myapp.login") - /// - Returns: 저장된 문자열 데이터 (ex: 비밀번호, 토큰 등) 또는 nil - @discardableResult - func load(account: String, service: String) -> String? { - // 1. 검색 쿼리 구성 - let query: [String: Any] = [ - kSecClass as String: kSecClassGenericPassword, // 일반 비밀번호 클래스 - kSecAttrAccount as String: account, // 계정 - kSecAttrService as String: service, // 서비스 - kSecReturnData as String: true, // 데이터를 반환하도록 요청 - kSecMatchLimit as String: kSecMatchLimitOne // 하나만 반환 - ] - - // 2. 검색 결과 저장 변수 - var item: CFTypeRef? - - // 3. Keychain에서 항목 검색 - let status = SecItemCopyMatching(query as CFDictionary, &item) - - // 4. 상태 확인 및 결과 처리 - guard status == errSecSuccess else { - print("Keychain load 실패 - status: \(status)") - return nil - } - - // 5. Data → String 변환 - guard let data = item as? Data, - let result = String(data: data, encoding: .utf8) else { - print("Keychain load 실패 - 데이터 디코딩 실패") - return nil - } - - return result - } - - /// Keychain에서 지정된 계정과 서비스에 해당하는 항목을 삭제합니다. - /// - Parameters: - /// - account: 계정 식별자 (예: 사용자 이메일) - /// - service: 서비스 이름 (예: "com.example.myapp") - /// - Returns: Keychain 삭제 작업의 상태 코드 (`errSecSuccess` 등) - @discardableResult - func delete(account: String, service: String) -> OSStatus { - // 1. 삭제할 항목을 식별할 쿼리 구성 - let query: [String: Any] = [ - kSecClass as String: kSecClassGenericPassword, // 삭제 대상 유형 - kSecAttrAccount as String: account, // 계정 식별자 - kSecAttrService as String: service // 서비스 구분자 - ] - - // 2. 항목 삭제 시도 - let status = SecItemDelete(query as CFDictionary) - - // 3. 상태 확인 및 로그 출력 - if status == errSecSuccess { - print("Keychain 삭제 성공 - [\(service) : \(account)]") - } else if status == errSecItemNotFound { - print("Keychain 항목 없음 - [\(service) : \(account)]") - } else { - print("Keychain 삭제 실패 - status: \(status)") - } - - return status - } -} - diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/TMDBAPI.swift b/yoon/MEGABOX/MEGABOX/MegaBox/TMDBAPI.swift deleted file mode 100644 index e94acc1..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/TMDBAPI.swift +++ /dev/null @@ -1,91 +0,0 @@ -// -// TMDBAPI.swift -// MEGABOX -// -// Created by 정승윤 on 11/12/25. -// - -import Foundation -import Moya - -enum TMDBAPI { - - case getMovie(request: RequestDTO) - case getMovieDetail(id: Int) - case postMovie(name: String) // 여기에 추가 - case putMovie(name: String) - case patchMovie(name: String) - case deleteMovie(name: String) -} - -// -extension TMDBAPI: TargetType { - - // 요청을 보낼 서버의 기본 주소 - var baseURL: URL { - return URL(string: "https://api.themoviedb.org/3")! - } - - // baseURL 뒤에 붙을 세부 경로 - var path: String { - switch self { - case .getMovie: - return "/movie/now_playing" - case .getMovieDetail(let id): - return "/movie/\(id)" - // 나머지 케이스들은 명시적인 경로가 있어야 합니다. - case .postMovie, .putMovie, .patchMovie, .deleteMovie: - return "/movie/generic" - } - - } - var method: Moya.Method { - return .get - } - - var task: Task { - switch self { - case .getMovie(let request): - // RequestDTO의 파라미터를 사용합니다. - return .requestParameters(parameters: [ - "language": request.language, - "page": request.page, - "region": request.region - ], encoding: URLEncoding.default) - - case .getMovieDetail: - // 상세 정보 요청 시 언어 파라미터만 추가합니다. - return .requestParameters(parameters: [ - "language": "ko-KR" - ], encoding: URLEncoding.default) - - case .postMovie(let name): - // POST 요청은 JSON 인코딩을 사용합니다. - return .requestJSONEncodable(["name": name]) - - default: - return .requestPlain - } - } - - - var headers: [String: String]? { - // 💡 TMDB 인증 토큰 (Bearer Token)을 여기에 추가합니다. - // 예를 들어: ["Authorization": "Bearer YOUR_ACCESS_TOKEN"] - return ["Content-Type": "application/json", - "Authorization": "Bearer \(Config.tmdbAPIKey)"] - } - - // 테스트용으로 돌려줄 가짜 응답 데이터 - var sampleData: Data { - return "{\"message\": \"Hello, world!\"}".data(using: .utf8)! - } -} - -extension Encodable { - func asDictionary() throws -> [String: Any]? { - let data = try JSONEncoder().encode(self) - let jsonObject = try JSONSerialization.jsonObject(with: data, options: .allowFragments) - return jsonObject as? [String: Any] - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/View/CalenderView.swift b/yoon/MEGABOX/MEGABOX/MegaBox/View/CalenderView.swift deleted file mode 100644 index f131d48..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/View/CalenderView.swift +++ /dev/null @@ -1,94 +0,0 @@ -// -// CalenderView.swift -// MEGABOX -// -// Created by 정승윤 on 10/8/25. -// - -import Foundation -import SwiftUI - -struct CalendarView: View { - @ObservedObject var viewModel: CalendarViewModel - @ObservedObject var theaterVM: TheaterViewModel - var body: some View { - HStack(spacing: 0) { - Spacer() - ForEach(Array(viewModel.currentWeekDates().enumerated()), id: \.element.id) { index, day in - let isSelected = Calendar.current.isDate(day.date, inSameDayAs: viewModel.selectedDate) - let weekday = Calendar.current.component(.weekday, from: day.date) - - Button(action:{ - guard theaterVM.isEnabled else { return } // 극장 선택 후에만 선택 가능 - viewModel.selectDate(day.date) - theaterVM.selectedDate = day.date - - }){ - VStack(spacing : 5) { - Text(formattedDate(day.date, isToday: index == 0)) - .foregroundStyle(isSelected ? .white : .black) - .font(.PretendardBold18) - - Text(weekdayLabel(for: index, date: day.date)) - .foregroundStyle(isSelected ? .white : (weekday == 1 ? Color.holiday : weekday == 7 ? Color.tag : Color.black)) - .font(.PretendardsemiBold14) - } - }.frame(width: 55, height: 60) - .background(isSelected ? .purple03 : .white) - .cornerRadius(12) - } - Spacer() - } - } - - let monthDayFormatter: DateFormatter = { - let formatter = DateFormatter() - formatter.dateFormat = "M.d" // ex: 9.22 - return formatter - }() - - let weekdayFormatter: DateFormatter = { - let formatter = DateFormatter() - formatter.locale = Locale(identifier: "ko_KR") - formatter.dateFormat = "E" // 요일만 표시 (월, 화, 수...) - return formatter - }() -} - -private func weekdayLabel(for index: Int, date: Date) -> String { - switch index { - case 0: return "오늘" - case 1: return "내일" - default: - let formatter = DateFormatter() - formatter.locale = Locale(identifier: "ko_KR") - formatter.dateFormat = "E" - return formatter.string(from: date) - } - } - - let monthDayFormatter: DateFormatter = { - let formatter = DateFormatter() - formatter.dateFormat = "M.d" - return formatter - }() - -func formattedDate(_ date: Date, isToday: Bool) -> String { - let formatter = DateFormatter() - formatter.locale = Locale(identifier: "ko_KR") - if isToday { - formatter.dateFormat = "M.d" // 오늘은 월.일 - } else { - formatter.dateFormat = "d" // 나머지는 일만 - } - return formatter.string(from: date) -} - -struct CalenderView_Preview: PreviewProvider { - static var previews: some View { - let theaterVM = TheaterViewModel() - devicePreviews { - CalendarView(viewModel: CalendarViewModel(), theaterVM: theaterVM) - } - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/View/EmptyView.swift b/yoon/MEGABOX/MEGABOX/MegaBox/View/EmptyView.swift deleted file mode 100644 index 9ed04d1..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/View/EmptyView.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// EmptyView.swift -// week1_homework -// -// Created by 정승윤 on 10/3/25. -// - -import Foundation -import SwiftUI - -struct EmptyView: View { - var body: some View { - Text("Empty View") - } -} - -struct EmptyView_Preview: PreviewProvider { - static var previews: some View { - devicePreviews { - EmptyView() - .environment(NavigationRouter()) - - } - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/View/HomeView.swift b/yoon/MEGABOX/MEGABOX/MegaBox/View/HomeView.swift deleted file mode 100644 index 15ac5c3..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/View/HomeView.swift +++ /dev/null @@ -1,173 +0,0 @@ -// -// HomeView.swift -// week1_homework -// -// Created by 정승윤 on 9/30/25. -// - -//TODO: 라우터 이해하기. -import Foundation -import SwiftUI -import Kingfisher - -// 뷰 밖에다 써도 됌 -struct HomeView: View { - @Environment(TMDBViewModel.self) var tmdbViewModel - @Environment(NavigationRouter.self) var router - @Environment(MovieViewModel.self) var movieViewModel - @State private var tab: MvTab = .chart - var body: some View { - - ScrollView(.vertical){ - VStack(alignment:.leading){ - TopSection - Spacer().frame(height: 9) - ChartButton(select: $tab) - switch tab { - case .chart: - MovieList() - case .upcoming: - EmptyView() - } - Spacer().frame(height:37) - MovieFeed - }.padding(.horizontal,16) - .padding(.top,23) - }.task { - await tmdbViewModel.fetchNowPlayingMovies() - } - - } - // 스택 없이 컴포넌트 넣으면 페이지에 하나씩 생기는것 발견 - private var TopSection: some View { - VStack(alignment: .leading, spacing: 8){ - Image(.meboxLogo2).frame(width: 149, height: 30) - HStack { - Button(action:{}){ - Text("홈").font(.PretendardsemiBold24) - .foregroundStyle(.black) - } - Spacer() - Button(action:{}){ - Text("이벤트").font(.PretendardsemiBold24) - .foregroundStyle(.gray04) - } - Spacer() - Button(action:{}){ - Text("스토어").font(.PretendardsemiBold24) - .foregroundStyle(.gray04) - } - Spacer() - Button(action:{}){ - Text("선호극장").font(.PretendardsemiBold24) - .foregroundStyle(.gray04) - } - }.frame(width: 320) - }.frame(maxWidth: .infinity, alignment: .leading) - } - - struct ChartButton: View { - @Binding var select: MvTab - var body: some View { - HStack{ - ForEach(MvTab.allCases, id: \.self) {tab in - Button(action: {select = tab}){ - Text(tab.rawValue).font(.Pretendardmedium14) - .foregroundStyle(select == tab ? .white : .gray04) - .frame(width: 84,height: 38) - .background(select == tab ? .gray08 : .gray02) - .clipShape(RoundedRectangle(cornerRadius: 10)) - } - } - } - } - } - private var MovieFeed: some View { - VStack(alignment: .leading){ - HStack{ - Text("알고보면 더 재미있는 무비피드").font(.PretendardBold24).foregroundStyle(.black) - Spacer() - Text(Image(systemName: "arrow.right")).foregroundStyle(.black) - } - Image(.himePoster).resizable().scaledToFit() - Spacer().frame(height:44) - VStack(alignment: .leading){ - MovieFeedDetail(img: Image(.hime2), explanation: "9월, 메가박스의 영화들(1) - 명작들의 재개봉", example: "<모노노케 히메>,<퍼펙트 블루>") - Spacer().frame(height:37) - MovieFeedDetail(img: Image(.ugly2), explanation: "메가박스 오리지널 티켓 Re.37 <얼굴>", example: "영화 속 양극적인 감정의 대비") - - } - } - } - } - - struct MovieFeedDetail: View { - let img: Image - let explanation: String - let example: String - var body: some View { - HStack{ - img.frame(width:100,height:100) - Spacer().frame(width: 23) - VStack{ - Text(explanation).font(.PretendardsemiBold18).foregroundStyle(.black) - Spacer() - Text(example).font(.PretendardsemiBold13).foregroundStyle(.gray03) - } - } - } - } - - struct MovieCard: View { - @Environment(NavigationRouter.self) var router - let movie: MovieCardModel - - var body: some View { - VStack { - KFImage(URL(string: movie.posterURL)) - .placeholder { - ProgressView() - .frame(width: 148, height: 212) - .background(Color.gray.opacity(0.1)) - } - .resizable() - .frame(width: 148, height: 212) - .onTapGesture { - router.push(.detail(movie)) - } - - Button(action: {}){ - Text("바로 예매") - .frame(width: 148,height: 36) - .foregroundStyle(.purple03) - .background{RoundedRectangle(cornerRadius: 10).stroke(.purple03, lineWidth: 1)} - } - Spacer().frame(height: 8) - Text(movie.title).font(.PretendardBold22) - Spacer().frame(height: 3) - Text("누적관객수 \(movie.attendance)").font(.Pretendardmedium18) - } - } - } // Back 버튼은 네비게이션 때문에 생기는 것이다 - - struct MovieList: View { - @Environment(TMDBViewModel.self) var movieViewModel - var body: some View { - ScrollView(.horizontal, showsIndicators: false, content: { - LazyHStack(spacing:24){ - ForEach(movieViewModel.movieCards) { movie in MovieCard(movie: movie)} - } - }) - } - } - - -struct HomeView_Preview: PreviewProvider { - static var previews: some View { - devicePreviews { - HomeView() - .environment(NavigationRouter()) - .environment(MovieViewModel()) - } - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/View/LoginView.swift b/yoon/MEGABOX/MEGABOX/MegaBox/View/LoginView.swift deleted file mode 100644 index 6ecf2f7..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/View/LoginView.swift +++ /dev/null @@ -1,127 +0,0 @@ -// -// LoginView.swift -// week1_homework -// -// Created by 정승윤 on 9/15/25. -// - -import SwiftUI -import Foundation - - -struct LoginView: View { - @EnvironmentObject var router: NavigationRouter - @EnvironmentObject var loginVM: LoginViewModel - @StateObject private var kakaoLogin = KakaoLoginService() - // 초깃값을 LoginViewModel의 초깃값으로 설정 - var body: some View { - - VStack{ - TopBanner - - Spacer().frame(height: 157) - - LoginInput - - Spacer().frame(height: 35) - - SocialLogin - - Spacer().frame(height: 39) - - UMCImage - }.padding(.horizontal,16) - .onAppear { - loginVM.autoLogin() - } - } - - private var TopBanner:some View { - HStack{ - Text("로그인").font(.PretendardsemiBold24) - } - } - - private var LoginInput:some View { - - VStack{ - TextField("아이디", text: $loginVM.loginModel.id) - .padding(.bottom,4) - .foregroundStyle(.gray03) - - Divider().foregroundStyle(.gray02).frame(height:1) - - Spacer().frame(height: 40) - - SecureField("비밀번호",text: $loginVM.loginModel.pwd) - .padding(.bottom,4) - .foregroundStyle(.gray03) - - Divider().foregroundStyle(.gray02).frame(height:1) - - Spacer().frame(height:75) - - // AppStorage 저장 + 링크는 단순 링크로는 어려움 - Button(action: { - loginVM.login() - } - ) { - Text("로그인") - .frame(maxWidth:.infinity) - .frame(height: 54) - .font(.PretendardBold18) - .background(.purple03) - .foregroundStyle(.white) - .clipShape(RoundedRectangle(cornerRadius: 10)) - } - Spacer().frame(height:17) - - Text("회원가입").font(.Pretendardmedium13) - .foregroundStyle(.gray04) - - } - } - - private var SocialLogin:some View { - HStack{ - Spacer().frame(width:71) - Button(action:{ - kakaoLogin.kakaoLogin() - - }){ - Image(.kakaoLogin) - .resizable() - .frame(width:40,height:40) - } - Spacer() - Image(.appleLogin) - .resizable() - .frame(width:40,height:40) - Spacer() - Image(.naverLogin) - .resizable() - .frame(width:40,height:40) - Spacer().frame(width:71) - } - - } - - private var UMCImage:some View { - Image(.UMC) - .resizable() - .scaledToFit() - } - - - } - -struct Login_Preview: PreviewProvider { - static var previews: some View { - let loginVM = LoginViewModel() - let router = NavigationRouter() - - LoginView() - .environmentObject(loginVM) - .environmentObject(router) - } - } diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/View/MBTabView.swift b/yoon/MEGABOX/MEGABOX/MegaBox/View/MBTabView.swift deleted file mode 100644 index f519368..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/View/MBTabView.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// TabView.swift -// week1_homework -// -// Created by 정승윤 on 9/30/25. -// - -import Foundation -import SwiftUI - -struct MBTabView: View { - @Environment(TMDBViewModel.self) var tmdbViewModel - @ObservedObject var theaterVM: TheaterViewModel - @Binding var selectTheaters: Set - var body: some View { - TabView { - Tab("홈", systemImage: "house.fill") { - HomeView() - - } - Tab("바로 예매", systemImage: "play.laptopcomputer") { - MovieBookView(selectTheaters: $selectTheaters) - } - - Tab("모바일 오더", systemImage: "popcorn") { - Text("Account View") - } - - Tab("마이 페이지", systemImage: "person") { - UserInfoView() - } - } - } -} -// 그냥 탭뷰로 하니 충돌 남 -struct MBTabView_Preview: PreviewProvider { - - static var previews: some View { - let theaterVM = TheaterViewModel() - let selectTheaters: Set = [.gangnam] - let bindingSelect = Binding>( - get: { selectTheaters }, - set: { _ in } // preview에서는 값 변경 안 함 - ) - devicePreviews { - - MBTabView(theaterVM : theaterVM, selectTheaters: bindingSelect) - .environmentObject(theaterVM) - .environment(NavigationRouter()) - .environment(MovieViewModel()) - } - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/View/MovieBookView.swift b/yoon/MEGABOX/MEGABOX/MegaBox/View/MovieBookView.swift deleted file mode 100644 index 278a3bc..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/View/MovieBookView.swift +++ /dev/null @@ -1,271 +0,0 @@ -// -// MovieBook.swift -// MEGABOX -// -// Created by 정승윤 on 10/7/25. -// - -import Foundation -import SwiftUI -import Combine - -//MARK: 영화 문자열 비교해서 시간표 보여주기 -// 더 나은 방법이 있을까 - -struct MovieBookView: View { - @StateObject private var calendarVM = CalendarViewModel() - @StateObject private var scheduleVM = ScheduleViewModel() - @Environment(NavigationRouter.self) var router - @Environment(MovieViewModel.self) var movieViewModel - @EnvironmentObject var theaterVM: TheaterViewModel - @State private var selectedMovie: MovieModel? = nil - @State private var isShowingSheet: Bool = false - @Binding var selectTheaters: Set - - init(selectTheaters: Binding>) { - self._selectTheaters = selectTheaters - // VM 초기화 시점을 제어할 수 없을 때는 onAppear에서 설정해도 무방하나, - // 현재는 @StateObject로 선언되어 있으므로, onAppear에서 설정하겠습니다. - } - - var body: some View { - // 바디안에 보이는것만 뷰에서 구현 - VStack{ - - NavigationBar - - if let movie = displayMovie { - MovieNavigationBar( movie: movie, isShowingSheet: $isShowingSheet) - }// display의 결과값을 movie 로 선언하여 MovieNavigationBar에 사용 - - MovieList(selectedMovie: $selectedMovie){updateShowtimes()} - .onChange(of: selectedMovie) { oldValue, newValue in - theaterVM.selectedMovie = newValue - updateShowtimes() // 선택된 영화 변경 시 시간표 갱신 - } - // 선택된 영화가 바뀔 때마다 onChange 동작 - // theaterVM.selectedMovie 갱신 - // TheaterViewModel의 selectedMovie 변경을 반영 - - Spacer().frame(height: 32) - - TheaterButton() - // selectedMovie 변경사항을 isEnabled에 반영 - - Spacer().frame(height: 29) - - CalendarView(viewModel: calendarVM, theaterVM: theaterVM) - - Spacer().frame(height:40) - - if theaterVM.ShowTheaterInfo { - TheaterInfoView(showtimes: scheduleVM.currentShowtimes) - } - - Spacer() - - }.onChange(of: theaterVM.selectedDate) { - updateShowtimes() - } - .onChange(of: theaterVM.selectedTheater) { - updateShowtimes() - } - .onAppear { - if selectedMovie == nil, let firstMovie = movieViewModel.movies.first { - selectedMovie = firstMovie - - // 더 공부 - Task { - // json 연결 - await scheduleVM.fetchSchedule() - - let dateFormatter = DateFormatter() - dateFormatter.dateFormat = "yyyy-MM-dd" - dateFormatter.timeZone = TimeZone(secondsFromGMT: 0) - - if let fixedDate = dateFormatter.date(from: "2025-09-22") { - theaterVM.selectedDate = fixedDate - } - - // 스케줄 로드와 날짜 초기화가 모두 Task 내에서 완료된 후 호출 - updateShowtimes() - } // Task 끝 - } - } - .sheet(isPresented: $isShowingSheet){ - MovieSearchView() - } - .padding(.horizontal,16) - - } - private var NavigationBar: some View { - VStack{ - Spacer() - Text("영화별 예매") - .font(.PretendardBold22) - .foregroundStyle(.white) - .padding(.bottom,10) - }.ignoresSafeArea(.container,edges: .top) - .frame(width: 440, height: 42) - .background(Color.purple03) - } - - struct AgeBadge: View { - let movie: MovieModel - var body: some View { - ZStack{ - Rectangle() - .frame(width: 26,height: 24) - .foregroundStyle(.orange) - .clipShape(RoundedRectangle(cornerRadius: 4)) - Text(movie.age) - .font(.PretendardBold18) - .foregroundStyle(.white) - } - } - } - - private var displayMovie: MovieModel? { - selectedMovie ?? movieViewModel.movies.first - } // 영화 선택하면 그 영화 정보. 아니면 첫번째 영화 정보 - - struct MovieNavigationBar: View { - let movie: MovieModel - @Binding var isShowingSheet: Bool - var body: some View { - HStack { - AgeBadge(movie: movie) - Spacer().frame(width:37) - Text(movie.name).font(.PretendardBold18).foregroundStyle(.black) - Spacer() - Button(action:{ - isShowingSheet.toggle() - }) { - Text("전체영화") - .padding(10) - .font(.PretendardsemiBold14) - .foregroundStyle(.black) - .frame(width:69,height: 30) - .background{RoundedRectangle(cornerRadius: 8).stroke(.gray02, lineWidth: 1)} - - } - } - } - } - - - struct MovieCard: View { - @Environment(NavigationRouter.self) var router - @Binding var selectedMovie: MovieModel? - let movie: MovieModel - let onSelect: () -> Void - - private var isSelected: Bool { - selectedMovie?.id == movie.id - }// 내가 선택한 영화가 맞는지 확인 - - var body: some View { - Image(movie.posterName) - .resizable() - .clipShape(RoundedRectangle(cornerRadius: 10)) - .frame(width: 62, height: 89) - .overlay (RoundedRectangle(cornerRadius: 10) - .stroke( - isSelected ? Color.purple03 : Color.clear, - lineWidth: 2 // 테두리 두께 - ) // 내가 클릭한 영화에만 테두리 표시 - ) - .onTapGesture { - selectedMovie = movie - onSelect() - } - // 클릭한 영화를 selectedMovie로 설정 - - } - } - - struct MovieList: View { - @Environment(MovieViewModel.self) var movieViewModel - @Binding var selectedMovie: MovieModel? - let updateShowtimes: () -> Void - var body: some View { - ScrollView(.horizontal, showsIndicators: false, content: { - LazyHStack(spacing:8){ - ForEach(movieViewModel.movies) { movie in MovieCard(selectedMovie: $selectedMovie,movie: movie){updateShowtimes()}} - }.frame(height: 89) - } - ) - } - } - - struct TheaterButton: View { - @EnvironmentObject var theaterVM: TheaterViewModel - - var body: some View { - HStack(spacing: 10) { - ForEach(Theaters.allCases, id: \.self) { tab in - Button(action: { - theaterVM.selectTheater(tab) - print("현재 선택 극장:", theaterVM.selectedTheater.map { $0.rawValue }) - }) { - Text(tab.rawValue) - .font(.PretendardsemiBold16) - .foregroundStyle(theaterVM.selectedTheater.contains(tab) ? .white : .gray05) - .frame(width: 55, height: 35) - .background(theaterVM.selectedTheater.contains(tab) ? .purple03 : .gray01) - .clipShape(RoundedRectangle(cornerRadius: 15)) - } - } - Spacer() - } - } - } - - private func updateShowtimes() { - // 1. 선택된 극장 Set를 [String] 배열로 변환 - let selectedTheaterNames: [String] = theaterVM.selectedTheater.map { $0.rawValue } - - // 2. ViewModel의 필터링 함수 호출 - // 이 함수를 호출하여 scheduleVM.currentShowtimes 속성을 업데이트합니다. - scheduleVM.applyFilterAndUpdateState( - movie: selectedMovie, - date: theaterVM.selectedDate, - theaters: selectedTheaterNames - ) - } - -} - // 영화 이름, 극장 대조하여 시간표 출력 - // MovieBookView 내에서 - -struct MovieBookView_Preview: PreviewProvider { - static var previews: some View { - PreviewWrapper() - } - - struct PreviewWrapper: View { - @State private var selectTheaters: Set = [.gangnam] - @StateObject private var theaterVM: TheaterViewModel = { - let vm = TheaterViewModel() - vm.selectedMovie = MovieModel( - posterName: "f1", secPosterName: "", - name: "F1 더 무비", engname: "F1 The Movie", - performance: "50", age: "12" - ) - vm.selectedTheater = [.gangnam] - vm.selectedDate = Date() - return vm - }() - - var body: some View { - devicePreviews { - MovieBookView(selectTheaters: $selectTheaters) - .environment(NavigationRouter()) - .environment(MovieViewModel()) - .environmentObject(theaterVM) - } - } - } -} - - diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/View/MovieInfoView.swift b/yoon/MEGABOX/MEGABOX/MegaBox/View/MovieInfoView.swift deleted file mode 100644 index 19606d9..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/View/MovieInfoView.swift +++ /dev/null @@ -1,130 +0,0 @@ -// -// MovieinfoView.swift -// week1_homework -// -// Created by 정승윤 on 10/1/25. -// - -import Foundation -import SwiftUI -import Kingfisher - -// 패스뷰를 통해서 들어오면 패딩이 적용이 안됌 -// NavigationStack -> 자식 뷰로 갈때 레이아웃이 달라지기 때문 -// 패스 뷰로 들어왔을 때 레이아웃 깨지는걸 어떻게 해야 할지 모르겠음., -struct MovieInfoView: View { - - let movie: MovieCardModel - @Environment(TMDBViewModel.self) var tmdbviewModel - @Environment(\.dismiss) var dismiss - var body: some View { - VStack { - NavigationBar - ScrollView { - MovieInfo - Spacer().frame(height: 35) - MovieDetailBar - Spacer().frame(height: 17) - MovieDetail - Spacer() - } - .frame(maxWidth: .infinity) - .padding(.horizontal,16) - }.navigationBarBackButtonHidden(true) - } - // NavigationBar를 빼주니까 해결. - // 아니면 하드코딩된 넓이를 수정해줘서 해결된건가? - private var NavigationBar: some View { - VStack{ - HStack{ - Button(action: {dismiss() - }){Text(Image(systemName: "arrow.left")).foregroundStyle(.black)} - - Spacer() - - Text(movie.title) - .font(.Pretendardmedium18) - .padding(.trailing,162) - - }.frame(maxWidth: .infinity) - - }.padding(.horizontal,16) - - } - - private var MovieInfo: some View { - // 로컬 변수 쓰니 뭘 반환할지 헷갈려함 -> return으로 명시 - VStack(alignment: .center){ - KFImage(URL(string: movie.backdropURL)) - .placeholder { ProgressView() } - .resizable() - .scaledToFit() - .frame(maxHeight:248) - Spacer().frame(height: 9) - Text(movie.title).font(.PretendardBold24) - Text(movie.title).foregroundStyle(.gray03).font(.PretendardsemiBold14) - Text(movie.overview) - .font(.PretendardsemiBold18) - .foregroundStyle(.gray03) - .frame(maxWidth: .infinity, alignment: .leading) - }.onAppear { - Task{ - await tmdbviewModel.fetchNowPlayingMovies() - } - } - } - - private var MovieDetailBar: some View { - HStack{ - VStack{ - Text("상세정보").font(.PretendardBold22) - Rectangle() - .frame(height: 1) - .frame(maxWidth: .infinity) - .foregroundColor(.black) - } - - VStack{ - Text("실관람평").font(.PretendardBold22) - Rectangle().frame(height: 1) - .frame(maxWidth: .infinity) - .foregroundColor(.black) - } - } - } - - private var MovieDetail: some View { - return HStack{ - KFImage(URL(string: movie.posterURL)) - .resizable() - .frame(width: 100,height: 120) - VStack{ - Text(movie.rating).font(.PretendardsemiBold13) - Spacer().frame(height:9) - Text("\(movie.releaseDate) 개봉").font(.PretendardsemiBold13) - } - Spacer() - } - } -} - -struct MovieInfoView_Preview: PreviewProvider { - static var tmdbViewModel = TMDBViewModel() - static var previews: some View { - devicePreviews { - MovieInfoView(movie: MovieCardModel( - id: 1, - title: "영화 제목 (API)", - posterURL: "https://image.tmdb.org/t/p/w500/sample_path.jpg", // 실제 이미지 URL로 대체 - originalTitle: "영화 제목 (영)", - backdropURL: "https://image.tmdb.org/t/p/w500/sample_path.jpg", - overview: "개요", - releaseDate: "2025-10-22", - rating: "3.0", - attendance: "100만명" - )) - .environment(NavigationRouter()) - .environment(tmdbViewModel) - } - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/View/MovieSearchView.swift b/yoon/MEGABOX/MEGABOX/MegaBox/View/MovieSearchView.swift deleted file mode 100644 index 53b7749..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/View/MovieSearchView.swift +++ /dev/null @@ -1,77 +0,0 @@ -// -// MovieSearchView.swift -// MEGABOX -// -// Created by 정승윤 on 10/8/25. -// - -import Foundation -import SwiftUI -import Combine - -struct MovieSearchView: View { - @StateObject private var vm = MovieSearchViewModel() - - let columns = Array(repeating: GridItem(.flexible()), count: 3) - - var body: some View { - NavigationStack { - VStack (alignment:.center, spacing:36){ - Text("영화 선택") - .font(.PretendardsemiBold18) - - if vm.query.isEmpty { - LazyVGrid(columns:columns,spacing: 36 ) { - ForEach(vm.movies, id: \.id) {movie in - // 라벨 - VStack(spacing: 8){ - Image(movie.posterName) - .resizable() - .frame(width:95,height:135) - Text(movie.name) - .font(.PretendardsemiBold14) - } - // 라벨 - } - } - } - if vm.isLoading { - ProgressView("검색중…") - } - - else if let error = vm.errorMessage { - Text(error).foregroundStyle(.red) - } - else { - LazyVGrid(columns:columns,spacing: 36 ) { - ForEach(vm.results, id: \.id) {movie in - VStack(spacing: 8){ - Image(movie.posterName) - .resizable() - .frame(width:95,height:135) - Text(movie.name) - .font(.PretendardsemiBold14) - } - } - } - } - Spacer() - - TextField("영화명을 입력해주세요", text: $vm.query) - .textFieldStyle(RoundedBorderTextFieldStyle()) - .padding(.horizontal) - } - }.padding(.horizontal,16) - - } - } - -struct MovieSearchView_Preview: PreviewProvider { - static var previews: some View { - devicePreviews { - MovieSearchView() - .environment(NavigationRouter()) - - } - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/View/PathView.swift b/yoon/MEGABOX/MEGABOX/MegaBox/View/PathView.swift deleted file mode 100644 index 8bdf82e..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/View/PathView.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// PathView.swift -// week1_homework -// -// Created by 정승윤 on 10/2/25. -// - -import Foundation -import SwiftUI -// 페이지마다 case 넣고 경로 넣고 하기는 지저분해지니, 하나의 파일에 모아두기 -struct PathView: View { - @EnvironmentObject var router: NavigationRouter - @EnvironmentObject var loginVM: LoginViewModel - @Environment(MovieViewModel.self) var viewModel - @EnvironmentObject var theaterVM: TheaterViewModel - @Binding var selectTheaters: Set - - var body: some View { - @Bindable var router = router - NavigationStack(path: $router.path) { - MBTabView(theaterVM: theaterVM, selectTheaters: $selectTheaters) - .navigationDestination(for: Route.self) { route in - switch route { - case .home: - MBTabView(theaterVM: theaterVM, selectTheaters: $selectTheaters) - .navigationBarBackButtonHidden(true) - case .detail(let movie): - MovieInfoView(movie: movie) - .navigationBarBackButtonHidden(true) - case .login: - LoginView() - .navigationBarBackButtonHidden(true) - case .profile: - UserInfoView() - .navigationBarBackButtonHidden(true) - case .userSetting: - UserSettingsView() - .navigationBarBackButtonHidden(true) - } - } - } - } -} - -struct PathView_Preview: PreviewProvider { - static var previews: some View { - @State var selectedTheaters: Set = [.gangnam] - let theaterVM = TheaterViewModel() - - devicePreviews { - PathView( selectTheaters: $selectedTheaters ) - .environmentObject(theaterVM) - .environment(NavigationRouter()) - .environment(MovieViewModel()) - } - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/View/SplashView.swift b/yoon/MEGABOX/MEGABOX/MegaBox/View/SplashView.swift deleted file mode 100644 index f631698..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/View/SplashView.swift +++ /dev/null @@ -1,28 +0,0 @@ -// -// SplashView.swift -// week1_homework -// -// Created by 정승윤 on 9/15/25. -// - -import SwiftUI - -struct SplashView: View { - var body: some View { - ZStack(alignment: .center){ -// Rectangle().foregroundStyle(Color.white) -// .frame(maxWidth: .infinity, maxHeight: .infinity) -// .ignoresSafeArea(edges: .all) - Color(.white).ignoresSafeArea() - Image(.meboxLogo1) - } - } -} - -struct SplashView_Preview: PreviewProvider { - static var previews: some View { - devicePreviews { - SplashView() - } - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/View/TheaterInfoView.swift b/yoon/MEGABOX/MEGABOX/MegaBox/View/TheaterInfoView.swift deleted file mode 100644 index 0740f99..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/View/TheaterInfoView.swift +++ /dev/null @@ -1,94 +0,0 @@ -// -// TheaterInfoView.swift -// MEGABOX -// -// Created by 정승윤 on 10/8/25. -// - -import Foundation -import SwiftUI - -struct MovieTimeData { - let start: String - let end: String - let vacancy: Int - let capacity: Int -} - -struct MovieTime: View { - let start: String - let end: String - let vacancy : Int - let capacity : Int - var body: some View { - VStack{ - Text(start).font(.PretendardBold18) - Spacer().frame(height:4) - Text("~\(end)") - .font(.Pretendardregular12) - .foregroundStyle(.gray03) - Text("\(vacancy) / \(capacity)") - .font(.PretendardsemiBold14) - .foregroundStyle(.gray03) // 기본 색 - .overlay( - Text("\(vacancy)") - .font(.PretendardsemiBold14) - .foregroundStyle(.purple03), - alignment: .leading - ) // 오버레이로 색을 다르게 표시 - }.frame(width:75, height: 86) - .background{RoundedRectangle(cornerRadius: 12).stroke(.gray02, lineWidth: 1)} - - } -} - -struct TheaterInfoView: View { - let showtimes: [TimeModel] // MovieBookView에서 전달 - - let columns = [ - GridItem(.flexible()), - GridItem(.flexible()), - GridItem(.flexible()), - GridItem(.flexible()) - ] - - var body: some View { - VStack(alignment: .leading, spacing: 16) { - ForEach(showtimes, id: \.auditorium) { timeModel in - VStack(alignment: .leading, spacing: 8) { - Text("상영관: \(timeModel.auditorium)") - .font(.PretendardBold18) - LazyVGrid(columns: columns, spacing:36){ - ForEach(timeModel.showtimes, id: \.start) { show in - MovieTime( - start: show.start, - end: show.end, - vacancy: show.available, - capacity: show.total - ) - } - } - } - } - } - } -} - -struct TheaterInfoView_Preview: PreviewProvider { - static var previews: some View { - let sampleShowtimes: [TimeModel] = [ - TimeModel(auditorium: "크리클라이너 1관", format: "2D", showtimes: [ - ShowTimeModel(start: "10:00", end: "12:30", available: 50, total: 60), - ShowTimeModel(start: "13:00", end: "15:30", available: 30, total: 60) - ]), - TimeModel(auditorium: "BTS관 (7층 1관 [Laser])", format: "2D", showtimes: [ - ShowTimeModel(start: "11:00", end: "13:30", available: 20, total: 40), - ShowTimeModel(start: "14:00", end: "16:30", available: 10, total: 40) - ]) - ] - - return TheaterInfoView(showtimes: sampleShowtimes) - .previewLayout(.sizeThatFits) - .padding() - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/View/UserInfoView.swift b/yoon/MEGABOX/MEGABOX/MegaBox/View/UserInfoView.swift deleted file mode 100644 index e9b4604..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/View/UserInfoView.swift +++ /dev/null @@ -1,185 +0,0 @@ -// -// UserInfoView.swift -// week1_homework -// -// Created by 정승윤 on 9/25/25. -// - -import Foundation -import SwiftUI - -struct UserInfoView: View { - @EnvironmentObject var loginVM: LoginViewModel - @Environment(NavigationRouter.self) var router - var body: some View { - - VStack{ - Spacer().frame(height:59) - - ProfileHeader - - Spacer().frame(height:15) - - ClubMembership - - Spacer().frame(height:33) - - StatusInfo - - Spacer().frame(height:33) - - HStack{ - ResvItem(title: "영화별예매", iconImage: Image("film")) - Spacer() - ResvItem(title: "극장별예매", iconImage: Image("location")) - Spacer() - ResvItem(title: "특별관예매", iconImage: Image("chair")) - Spacer() - ResvItem(title: "모바일오더", iconImage: Image("popcorn")) - } - Spacer() - Button(action:{loginVM.logout()}){Text("로그아웃") - .frame(width: 72) - .padding(.vertical, 4) - .font(.PretendardsemiBold14)} - .foregroundStyle(.white) - .background(.gray07) - .clipShape(RoundedRectangle(cornerRadius: 16)) - }.padding(.horizontal,16) - } - - private var ProfileHeader:some View { - VStack(alignment: .leading){ - HStack { - Text("\(loginVM.userName ?? "회원")님") - .font(.PretendardBold24) - - Text("WELCOME") - .padding(.horizontal, 8) - .padding(.vertical,4) - .font(.Pretendardmedium14) - .foregroundStyle(.white) - .background(.tag) - .clipShape(RoundedRectangle(cornerRadius: 6)) - - Spacer() - - Button(action:{router.push(.userSetting)}){Text("회원정보") - .frame(width: 72) - .padding(.vertical, 4) - .font(.PretendardsemiBold14)} - .foregroundStyle(.white) - .background(.gray07) - .clipShape(RoundedRectangle(cornerRadius: 16))} - - // width, height 고정이면 frame으로 크기조정. padding X - HStack(spacing: 9){ - Text("멤버십 포인트") - .font(.PretendardsemiBold14) - .foregroundStyle(.gray04) - - Text("500P") - .font(.Pretendardmedium14) - .foregroundStyle(.black) - } - } - } - - private var ClubMembership:some View { - Button(action:{}){ - HStack(spacing:3){ - Text("클럽 멤버십") - .font(.PretendardsemiBold16) - .foregroundStyle(.white) - - Image(systemName: "chevron.right") - .foregroundStyle(.white) - Spacer() - } - .frame(maxWidth: .infinity) - .padding(.vertical,12) - .padding(.leading, 8) - .padding(.trailing, ) - .background( - LinearGradient( - gradient: Gradient(colors: [Color("AB8BFF"), Color("8EAEF3"), Color("5DCCEC")]), - startPoint: .leading, - endPoint: .trailing - ) // ColorAsset 등록 안하고 가능? - ) - }.frame(height: 46) - .clipShape(RoundedRectangle(cornerRadius: 8)) - } - - private var StatusInfo:some View { - ZStack{ - RoundedRectangle(cornerRadius: 8) - .stroke(Color.gray02,lineWidth: 1) - .frame(height: 76) - - HStack { - Spacer().frame(width:12) - VStack(spacing:9){ - Text("쿠폰") - .font(.PretendardsemiBold16) - .foregroundStyle(.gray02) - Text("2") - .font(.PretendardsemiBold18) - .foregroundStyle(.black) - }.frame(width: 28) - Spacer() - Divider().frame(height:31) - Spacer() - VStack(spacing:9){ - Text("스토어 교환권") - .font(.PretendardsemiBold16) - .foregroundStyle(.gray02) - Text("0") - .font(.PretendardsemiBold18) - .foregroundStyle(.black) - }.frame(width: 87) - Spacer() - Divider().frame(height:31) - Spacer() - VStack(spacing:9){ - Text("모바일 티켓") - .font(.PretendardsemiBold16) - .foregroundStyle(.gray02) - Text("0") - .font(.PretendardsemiBold18) - .foregroundStyle(.black) - }.frame(width: 73) - Spacer().frame(width:12) - }.frame(height:76) - - } - // 스택에 background 쓰면 안댐 (deprecated) - // ()로 묶으면 deprecated, {}로 묶으면 사용 가능? - - } - - struct ResvItem: View { - let title: String - let iconImage: Image - var body: some View { - VStack(spacing:12){ - iconImage - .resizable() - .frame(width:36,height:36) - Text(title) - .font(.Pretendardmedium16) - - } - } - } - } - -struct UserInfo_Preview: PreviewProvider { - static var previews: some View { - devicePreviews { - UserInfoView() - .environment(NavigationRouter()) - .environment(MovieViewModel()) - } - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/View/UserSettingsView .swift b/yoon/MEGABOX/MEGABOX/MegaBox/View/UserSettingsView .swift deleted file mode 100644 index 541c5fe..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/View/UserSettingsView .swift +++ /dev/null @@ -1,86 +0,0 @@ -// -// UserSettingsView .swift -// week1_homework -// -// Created by 정승윤 on 9/25/25. -// -// MARK: - 수정 -import Foundation -import SwiftUI - -struct UserSettingsView: View { - @AppStorage("idinfo") private var idinfo : String = "" - @AppStorage("pwdinfo") private var pwdinfo : String = "" - @AppStorage("nameinfo") private var nameinfo : String = "" - @State private var newname: String = "" - @Environment(\.dismiss) var dismiss - - var body: some View { - VStack{ - - NavigationBar - - Spacer().frame(height:53) - - HStack{ - Text("기본정보") - .font(.PretendardBold18) - .frame(height: 24,alignment: .leading) - Spacer() - } - Spacer().frame(height:26) - - UserInfo - - Spacer() - - }.padding(.horizontal, 16) -} - - private var NavigationBar: some View { - ZStack{ - HStack{ - Button(action: {dismiss() - }){Text(Image(systemName: "arrow.left")).foregroundStyle(.black) - } - - Spacer() - } - Text("회원정보 관리") - .font(.Pretendardmedium16) - } - } -// ZStack을 쓰는게 최선인가? - - private var UserInfo: some View { - VStack{ - TextField("아이디", text: $idinfo) - .disabled(true) // 텍스트로 줘도 댐 - .padding(.bottom, 3) - - Divider() - - Spacer().frame(height:24) - - HStack{ - TextField("이름", text: $newname) - - Button(action:{ - self.nameinfo = self.newname - }){Text("변경").font(.Pretendardmedium10).foregroundStyle(.gray03) - .frame(width:38,height:20) - .background{RoundedRectangle(cornerRadius: 16).stroke(Color.gray03,lineWidth: 1)}} - }.padding(.bottom, 3) - - Divider() - } - } -} - -struct UserSetting_Preview: PreviewProvider { - static var previews: some View { - devicePreviews { - UserSettingsView() - } - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/CalenderViewModel.swift b/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/CalenderViewModel.swift deleted file mode 100644 index f307e0c..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/CalenderViewModel.swift +++ /dev/null @@ -1,48 +0,0 @@ -// -// CalenderViewModel.swift -// MEGABOX -// -// Created by 정승윤 on 10/8/25. -// - -import Foundation -import Combine - - -class CalendarViewModel: ObservableObject { - var calendar: Calendar = .current - @Published var selectedDate: Date = Date() - - private let fixedStartDate: Date = { - let dateFormatter = DateFormatter() - dateFormatter.dateFormat = "yyyy-MM-dd" - dateFormatter.locale = Locale(identifier: "en_US_POSIX") - dateFormatter.timeZone = TimeZone(secondsFromGMT: 0) // UTC 자정 고정 - - return dateFormatter.date(from: "2025-09-22") ?? Date() - }() - - /// 오늘 기준 일주일 날짜 생성 - func currentWeekDates() -> [CalendarDay] { - var days: [CalendarDay] = [] - let startDay = fixedStartDate - for i in 0..<7 { - if let date = calendar.date(byAdding: .day, value: i, to: startDay) { - let day = calendar.component(.day, from: date) - days.append(CalendarDay(day: day, date: date, isCurrentMonth: true)) - } - } - return days - } - - /// 선택 날짜 변경 - func selectDate(_ date: Date) { - let components = calendar.dateComponents([.year, .month, .day], from: date) - - if let cleanDate = calendar.date(from: components) { - selectedDate = cleanDate - } else { - selectedDate = date - } - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/LoginViewModel.swift b/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/LoginViewModel.swift deleted file mode 100644 index 6bd6503..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/LoginViewModel.swift +++ /dev/null @@ -1,87 +0,0 @@ -// -// LoginViewModel.swift -// week1_homework -// -// Created by 정승윤 on 9/22/25. -// - -import Foundation -import SwiftUI -import Combine - -class LoginViewModel: ObservableObject { - var loginModel = LoginModel(id: "", pwd: "", name: "") - // LoginModel의 양식을 받아와서 초깃값 설정 - - @Published var isLoggedIn: Bool = false - @Published var userName: String? - - private let keychainService = KeychainService.shared - private let service = "com.megabox" - - lazy var kakaoService: KakaoLoginService = { - return KakaoLoginService(loginVM: self) // self 주입 확인 - }() - // 시작 시 자동 로그인 - init() { - autoLogin() - } - // 자동 로그인 - func autoLogin() { - guard let savedID = keychainService.load(account: "userId", service: "com.megabox"), - let savedPwd = keychainService.load(account: savedID, service: "com.megabox") - // ID -> Pwd 가져오기 - else { - print("자동 로그인 실패 : 저장된 로그인 정보 없음") - return - } - - self.isLoggedIn = true - self.userName = "정승윤" - self.loginModel.id = savedID - self.loginModel.pwd = "" - print("자동 로그인 성공") - } - // 수동 로그인 - func login() { - // 키체인 저장 - let inputId = loginModel.id - let inputPwd = loginModel.pwd - - guard !loginModel.id.isEmpty, !loginModel.pwd.isEmpty else { - print("아이디,비밀번호 입력") - return - } - - self.isLoggedIn = true - self.userName = "정승윤" - self.loginModel.id = inputId - self.loginModel.pwd = "" - - - keychainService.savePasswordToKeychain(account: inputId, service: service, password: inputPwd) - keychainService.savePasswordToKeychain(account: "userId", service: service, password: inputId) - // 정보 저장 - print("수동 로그인 성공") - print(isLoggedIn) - } - - func kakaoLogin() { - // KakaoLoginService의 로그인 함수 호출 - kakaoService.kakaoLogin() - } - - func logout() { - self.isLoggedIn = false - self.userName = nil - self.loginModel.id = "" - - if let savedId = keychainService.load(account: "userId", service: service) { - keychainService.delete(account: savedId, service: service) - } // 비밀번호 삭제 - keychainService.delete(account: "userId", service: service) - } // 아이디 삭제 - } - - - diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/MovieSearchViewModel.swift b/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/MovieSearchViewModel.swift deleted file mode 100644 index 649eb80..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/MovieSearchViewModel.swift +++ /dev/null @@ -1,78 +0,0 @@ -// -// MovieSearchViewModel.swift -// MEGABOX -// -// Created by 정승윤 on 10/8/25. -// - -import Foundation -import SwiftUI -import Combine - -// @Observable 쓰면 Published를 못씀 -class MovieSearchViewModel: ObservableObject { - var movies: [MovieModel] = [ - MovieModel(posterName: "noway", secPosterName: "f1Poster",name: "어쩔수가없다",engname:"No Other Choice" ,performance: "20만", age: "15"), - MovieModel(posterName: "blade",secPosterName: "f1Poster", name: "귀멸의칼날",engname:"Demon Slayer: Kimetsu no Yaiba – The Movie: Infinity Castle" ,performance: "1", age: "15"), - MovieModel(posterName: "f1",secPosterName: "f1Poster", name: "F1 더 무비",engname:"F1 The Movie" ,performance: "50", age: "12"), - MovieModel(posterName: "face", secPosterName: "f1Poster",name: "얼굴",engname:"The Ugly" ,performance: "2", age:"15"), - MovieModel(posterName: "hime",secPosterName: "f1Poster", name: "모노노케 히메 ",engname:"Princess Mononoke", performance:"3", age:"ALL"), - MovieModel(posterName: "yadang",secPosterName: "f1Poster", name: "야당 ",engname:"YADANG: The Snitch", performance:"3", age:"19"), - MovieModel(posterName: "roses",secPosterName: "f1Poster", name: "더 로즈: 완벽한 이혼 ",engname:"The Roses", performance:"3", age:"15"), - MovieModel(posterName: "boss",secPosterName: "f1Poster", name: "보스 ",engname:"Boss", performance:"3", age:"15") - ] - - @Published var query: String = "" - @Published var results: [MovieModel] = [] - @Published var isLoading = false - @Published var errorMessage: String? - - private var bag = Set() - - init() { - $query - .debounce(for: .milliseconds(400), scheduler: DispatchQueue.main) - .removeDuplicates() - .handleEvents(receiveOutput: { [weak self] _ in - self?.errorMessage = nil - }) - .flatMap { query in - self.search(query: query) - } - .receive(on: DispatchQueue.main) - .sink { [weak self] completion in - if case .failure(let err) = completion { - self?.errorMessage = "검색 실패: \(err.localizedDescription)" - self?.results = [] - } - } receiveValue: { [weak self] items in - self?.results = items - } - .store(in: &bag) - } - - private func search(query: String) -> AnyPublisher<[MovieModel], Error> { - return Future<[MovieModel], Error> { [weak self] promise in - let delay = Double(Int.random(in: 300...700)) / 1000.0 - guard let self else { return } - - DispatchQueue.global().asyncAfter(deadline: .now() + delay) { - let filtered = self.movies.filter { $0.name.lowercased().contains(query) } - promise(.success(filtered)) - } - } - .handleEvents( - receiveSubscription: { _ in - DispatchQueue.main.async { - self.isLoading = true - } - }, - receiveCompletion: { _ in - DispatchQueue.main.async { - self.isLoading = false - } - } - ) - .eraseToAnyPublisher() - } -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/MovieViewModel.swift b/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/MovieViewModel.swift deleted file mode 100644 index de7c25a..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/MovieViewModel.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// HomeViewModel.swift -// week1_homework -// -// Created by 정승윤 on 10/1/25. -// - -import Foundation -import SwiftUI -import Combine - -// @Observable 쓰면 Published를 못씀 -@Observable -class MovieViewModel: ObservableObject { - var movies: [MovieModel] = [ - MovieModel(posterName: "noway", secPosterName: "f1Poster",name: "어쩔수가없다",engname:"No Other Choice" ,performance: "20만", age: "15"), - MovieModel(posterName: "blade",secPosterName: "f1Poster", name: "귀멸의 칼날: 무한성",engname:"Demon Slayer: Kimetsu no Yaiba – The Movie: Infinity Castle" ,performance: "1", age: "15"), - MovieModel(posterName: "f1",secPosterName: "f1Poster", name: "F1 더 무비",engname:"F1 The Movie" ,performance: "50", age: "12"), - MovieModel(posterName: "face", secPosterName: "f1Poster",name: "얼굴",engname:"The Ugly" ,performance: "2", age:"15"), - MovieModel(posterName: "hime",secPosterName: "f1Poster", name: "모노노케 히메 ",engname:"Princess Mononoke", performance:"3", age:"ALL"), - MovieModel(posterName: "yadang",secPosterName: "f1Poster", name: "야당 ",engname:"YADANG: The Snitch", performance:"3", age:"19"), - MovieModel(posterName: "roses",secPosterName: "f1Poster", name: "더 로즈: 완벽한 이혼 ",engname:"The Roses", performance:"3", age:"15"), - MovieModel(posterName: "boss",secPosterName: "f1Poster", name: "보스 ",engname:"Boss", performance:"3", age:"15") - ] -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/ScheduleViewModel.swift b/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/ScheduleViewModel.swift deleted file mode 100644 index d30f739..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/ScheduleViewModel.swift +++ /dev/null @@ -1,157 +0,0 @@ -// -// ScheduleViewModel.swift -// MEGABOX -// -// Created by 정승윤 on 10/26/25. -// - -import Foundation -import SwiftUI - -class ScheduleViewModel: ObservableObject { - @Published var schedule: ScheduleModel? - @Published var isLoading: Bool = false - @Published var errorMessage: String? - @Published var currentShowtimes: [TimeModel] = [] - - func fetchSchedule() async { - isLoading = true - - guard let url = Bundle.main.url( - forResource: "MovieSchedule", withExtension: "json"), - let data = try? Data(contentsOf: url) else { - - errorMessage = "JSON 파일 없음" - isLoading = false - return - } - - do { - let decoder = JSONDecoder() - - let dateFormatter = DateFormatter() - dateFormatter.dateFormat = "yyyy-MM-dd" - dateFormatter.locale = Locale(identifier: "en_US_POSIX") - dateFormatter.timeZone = TimeZone(secondsFromGMT: 0) - - decoder.dateDecodingStrategy = .custom({ decoder in - let container = try decoder.singleValueContainer() - let dateString = try container.decode(String.self) - - // 정의한 dateFormatter를 사용하여 문자열을 Date로 변환 시도 - if let date = dateFormatter.date(from: dateString) { - return date - } - - throw DecodingError.dataCorruptedError( - in: container, - debugDescription: "Invalid date format: \(dateString). Expected 'yyyy-MM-dd'." - ) - }) - - let response = try decoder.decode(ScheduleDTO.self, from: data) - self.schedule = response.toDomain() - } catch { - errorMessage = "Decoding error: \(error)" - } - - isLoading = false - } - - private func filteredShowtimes ( - for movie: MovieModel?, - selectedDate: Date?, - selectedTheaters: [String]) -> [TimeModel] { - - guard let schedule = self.schedule, - let movie = movie, - let selectedDate = selectedDate, - !selectedTheaters.isEmpty else { - print("필수 데이터 누락") - return[] - } - - guard let scheduledMovie = schedule.data.movies.first(where: { - let jsonTitle = $0.title.lowercased() - let selectedTitle = movie.name.lowercased() - return jsonTitle == selectedTitle - }) else { - - print("DEBUG: 영화 제목 불일치. JSON에 해당 영화 없음: \(movie.name)") - return [] - } - - // 1. 날짜 - let filteredByDate = scheduledMovie.schedules.filter { dateModel in - return Calendar.current.isDate(dateModel.date, inSameDayAs: selectedDate) - } - - if filteredByDate.isEmpty { - print("DEBUG FILTER: 2단계 실패 - 날짜 불일치. 선택 날짜: \(selectedDate)") - // JSON에 있는 모든 날짜 로그로 출력 - let availableDates = scheduledMovie.schedules.map { $0.date.formatted(.dateTime.day().month()) } - print("DEBUG FILTER: JSON 내 상영 가능 날짜: \(availableDates)") - return [] - } - - // 2. 극장 - var filteredByTheater: [AreaModel] = [] - - for dateSchedule in filteredByDate { - let matchingAreas = dateSchedule.areas.filter { area in - let areaName = area.area.trimmingCharacters(in: .whitespacesAndNewlines) - - return selectedTheaters.contains(where: { - $0.trimmingCharacters(in: .whitespacesAndNewlines).lowercased() == areaName - }) - } - filteredByTheater.append(contentsOf: matchingAreas) - } - - if filteredByTheater.isEmpty { - print("DEBUG FILTER: 3단계 실패 - 극장 불일치. 선택 극장: \(selectedTheaters)") - // JSON에 있는 모든 극장 로그로 출력 (첫 번째 날짜 스케줄에서만) - if let firstDate = filteredByDate.first { - let availableTheaters = firstDate.areas.map { $0.area } - print("DEBUG FILTER: JSON 내 상영 가능 극장: \(availableTheaters)") - } - return [] - } - - // 3. TimeModel - var showtimes: [TimeModel] = [] - for area in filteredByTheater { - showtimes.append(contentsOf: area.items) - } - if showtimes.isEmpty { - print("DEBUG FILTER: 4단계 실패 - TimeModel은 있으나 내부 showtimes가 비어있음.") - } - - return showtimes - } - - public func applyFilterAndUpdateState( - movie: MovieModel?, - date: Date?, - theaters: [String] - ) { - let filtered = self.filteredShowtimes( - for: movie, - selectedDate: date, - selectedTheaters: theaters - ) - - // @Published 변수인 currentShowtimes를 업데이트 - // 이는 MovieBookView의 TheaterInfoView에 반영됩니다. - self.currentShowtimes = filtered - - // 디버깅 로그 (선택 사항) - print("=== ScheduleViewModel Updated ===") - print("Filtered Showtimes Count: \(filtered.count)") - for tm in filtered { - print(" - \(tm.auditorium): \(tm.showtimes.count) times") - } - print("================================") - } -} -// MainActor 공부해보고 써보기 diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/TMDBViewModel.swift b/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/TMDBViewModel.swift deleted file mode 100644 index 1858529..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/TMDBViewModel.swift +++ /dev/null @@ -1,91 +0,0 @@ -// -// MovieCardViewModel.swift -// MEGABOX -// -// Created by 정승윤 on 11/12/25. -// - -import Foundation -import Moya -import Observation - -@Observable -final class TMDBViewModel: ObservableObject{ - - // MoyaProvider 인스턴스 - private let provider = MoyaProvider() - - // UI에 바인딩될 데이터 (Published) - var movieCards: [MovieCardModel] = [] - var errorMessage: String? - - // 하드코딩 값 (TMDB API에 없는 데이터) - private let hardcodedAttendance = "500,000명" // 누적 관객수 - private let hardcodedRating = "15세 이상 관람가" // 영화 관람 등급 - - // MARK: - API 호출 및 DTO 매핑 - - @MainActor // UI 업데이트는 메인 스레드에서 이루어져야 합니다. - func fetchNowPlayingMovies() async { - self.errorMessage = nil - // 초기화 - let requestDTO = RequestDTO(language: "ko-KR", page: 1, region: "KR") - // TargetType Enum이라고 가정 - let target = TMDBAPI.getMovie(request: requestDTO) - - do { - // 1. MoyaProvider를 async/await로 호출 - // provider.requestAsync(target)을 await하여 Response를 즉시 받습니다. - let response = try await provider.requestAsync(target) - - if let jsonString = String(data: response.data, encoding: .utf8) { - print("[TMDB RAW RESPONSE]: \(jsonString)") - } else { - print("[TMDB RAW RESPONSE]: Data could not be converted to string.") - } - - // 2. 응답 데이터를 Response DTO로 디코딩 - let responseDTO = try JSONDecoder().decode(ResponseDTO.self, from: response.data) - - // 3. DTO의 데이터를 앱 모델로 매핑 (toMovieCardModel 사용) - let attendance = self.hardcodedAttendance - let rating = self.hardcodedRating - self.movieCards = responseDTO.results.map { dto in - // DTO 확장 함수 사용 - dto.toMovieCardModel(hardcodedAttendance: attendance, hardcodedRating: rating) - } - } catch { - // 5. 에러 처리 (do-try-catch) - if let moyaError = error as? MoyaError { - self.errorMessage = "네트워크 오류: \(moyaError.localizedDescription)" - print("Moya 에러 상세: \(moyaError)") - } else if error is DecodingError { - self.errorMessage = "데이터 디코딩 오류가 발생했습니다." - print("디코딩 에러: \(error)") - } else { - self.errorMessage = "알 수 없는 오류: \(error.localizedDescription)" - } - } - } - -} - -extension MoyaProvider { - // withCheckedThrowingContinuation을 사용하여 클로저 기반 코드를 async/await로 래핑합니다. - func requestAsync(_ target: Target) async throws -> Response { - return try await withCheckedThrowingContinuation { continuation in - // Moya의 오리지널 request 함수 호출 - self.request(target) { result in - switch result { - case .success(let response): - continuation.resume(returning: response) - case .failure(let error): - // 에러 발생 시 MoyaError를 던집니다. - continuation.resume(throwing: error) - } - } - } - } -} - - diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/TheaterViewModel.swift b/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/TheaterViewModel.swift deleted file mode 100644 index e3f9790..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/ViewModel/TheaterViewModel.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// TheaterViewModel.swift -// MEGABOX -// -// Created by 정승윤 on 10/7/25. -// - -import SwiftUI -import Combine - -final class TheaterViewModel: ObservableObject { - // enum 타입으로? - - @Published var selectedTheater: Set = [] - // 중복 선택 가능 - @Published var selectedMovie: MovieModel? = nil - // 옵셔널 - @Published private(set) var isEnabled: Bool = false - // 극장 버튼 활성화여부, 내부에서만 수정 가능 - @Published var selectedDate: Date? = nil - // 날짜 관리 - @Published private(set) var ShowTheaterInfo: Bool = false - // 상영관 표시 - @Published var bag = Set() - - init() { - $selectedMovie.map { $0 != nil} - .assign(to: &$isEnabled) - // selectedMovie가 바뀔때마다 이벤트 발생 - // 영화가 선택되었는지 확인 후, isEnabled에 반영 (자기 자신에 있는 isEnabled) - - Publishers.CombineLatest3($selectedMovie, $selectedTheater, $selectedDate) - .map{movie,theater,date in - return movie != nil && !theater.isEmpty && date != nil} - .assign(to: &$ShowTheaterInfo) - // 세개의 퍼블리셔 조합 -> 모두 존재하면 ShowTheaterInfo True 설정 - } - - func selectTheater(_ theater: Theaters) { - guard isEnabled else { return } // true일때만 작동 - if selectedTheater.contains(theater) { - selectedTheater.remove(theater) - } else { - selectedTheater.insert(theater) - } - } // 토글 기능 -} diff --git a/yoon/MEGABOX/MEGABOX/MegaBox/week1-homework-Info.plist b/yoon/MEGABOX/MEGABOX/MegaBox/week1-homework-Info.plist deleted file mode 100644 index cf8c929..0000000 --- a/yoon/MEGABOX/MEGABOX/MegaBox/week1-homework-Info.plist +++ /dev/null @@ -1,18 +0,0 @@ - - - - - UIAppFonts - - Pretendard-Black.otf - Pretendard-Bold.otf - Pretendard-ExtraBold.otf - Pretendard-ExtraLight.otf - Pretendard-Light.otf - Pretendard-Medium.otf - Pretendard-Regular.otf - Pretendard-SemiBold.otf - Pretendard-Thin.otf - - - diff --git a/yoon/MEGABOX/MEGABOX/week1-homework-Info.plist b/yoon/MEGABOX/MEGABOX/week1-homework-Info.plist deleted file mode 100644 index 1816a8a..0000000 --- a/yoon/MEGABOX/MEGABOX/week1-homework-Info.plist +++ /dev/null @@ -1,39 +0,0 @@ - - - - - CFBundleURLTypes - - - CFBundleTypeRole - Editor - CFBundleURLSchemes - - kakao8d2fead94aa1190f5ed3d6829503be31 - - - - KAKAO_NATIVE_APP_KEY - $(KAKAO_NATIVE_APP_KEY) - KAKAO_REST_API_KEY - $(KAKAO_REST_API_KEY) - LSApplicationQueriesSchemes - - kakaokompassauth - - TMDB_API_KEY - $(TMDB_API_KEY) - UIAppFonts - - Pretendard-Black.otf - Pretendard-Bold.otf - Pretendard-ExtraBold.otf - Pretendard-ExtraLight.otf - Pretendard-Light.otf - Pretendard-Medium.otf - Pretendard-Regular.otf - Pretendard-SemiBold.otf - Pretendard-Thin.otf - - - diff --git a/yoon/week1/Week1_Practice/Week1-Practice-Info.plist b/yoon/week1/Week1_Practice/Week1-Practice-Info.plist deleted file mode 100644 index cf8c929..0000000 --- a/yoon/week1/Week1_Practice/Week1-Practice-Info.plist +++ /dev/null @@ -1,18 +0,0 @@ - - - - - UIAppFonts - - Pretendard-Black.otf - Pretendard-Bold.otf - Pretendard-ExtraBold.otf - Pretendard-ExtraLight.otf - Pretendard-Light.otf - Pretendard-Medium.otf - Pretendard-Regular.otf - Pretendard-SemiBold.otf - Pretendard-Thin.otf - - - diff --git a/yoon/week1/Week1_Practice/Week1_Practice.xcodeproj/project.pbxproj b/yoon/week1/Week1_Practice/Week1_Practice.xcodeproj/project.pbxproj deleted file mode 100644 index 7737079..0000000 --- a/yoon/week1/Week1_Practice/Week1_Practice.xcodeproj/project.pbxproj +++ /dev/null @@ -1,565 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXContainerItemProxy section */ - 345C2EE02E77F36200C64079 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 345C2EC72E77F36100C64079 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 345C2ECE2E77F36100C64079; - remoteInfo = Week1_Practice; - }; - 345C2EEA2E77F36200C64079 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 345C2EC72E77F36100C64079 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 345C2ECE2E77F36100C64079; - remoteInfo = Week1_Practice; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 345C2ECF2E77F36100C64079 /* Week1_Practice.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Week1_Practice.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 345C2EDF2E77F36200C64079 /* Week1_PracticeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Week1_PracticeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 345C2EE92E77F36200C64079 /* Week1_PracticeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Week1_PracticeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 345C2ED12E77F36100C64079 /* Week1_Practice */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = Week1_Practice; - sourceTree = ""; - }; - 345C2EE22E77F36200C64079 /* Week1_PracticeTests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = Week1_PracticeTests; - sourceTree = ""; - }; - 345C2EEC2E77F36200C64079 /* Week1_PracticeUITests */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = Week1_PracticeUITests; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 345C2ECC2E77F36100C64079 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 345C2EDC2E77F36200C64079 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 345C2EE62E77F36200C64079 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 345C2EC62E77F36100C64079 = { - isa = PBXGroup; - children = ( - 345C2ED12E77F36100C64079 /* Week1_Practice */, - 345C2EE22E77F36200C64079 /* Week1_PracticeTests */, - 345C2EEC2E77F36200C64079 /* Week1_PracticeUITests */, - 345C2ED02E77F36100C64079 /* Products */, - ); - sourceTree = ""; - }; - 345C2ED02E77F36100C64079 /* Products */ = { - isa = PBXGroup; - children = ( - 345C2ECF2E77F36100C64079 /* Week1_Practice.app */, - 345C2EDF2E77F36200C64079 /* Week1_PracticeTests.xctest */, - 345C2EE92E77F36200C64079 /* Week1_PracticeUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 345C2ECE2E77F36100C64079 /* Week1_Practice */ = { - isa = PBXNativeTarget; - buildConfigurationList = 345C2EF32E77F36200C64079 /* Build configuration list for PBXNativeTarget "Week1_Practice" */; - buildPhases = ( - 345C2ECB2E77F36100C64079 /* Sources */, - 345C2ECC2E77F36100C64079 /* Frameworks */, - 345C2ECD2E77F36100C64079 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 345C2ED12E77F36100C64079 /* Week1_Practice */, - ); - name = Week1_Practice; - packageProductDependencies = ( - ); - productName = Week1_Practice; - productReference = 345C2ECF2E77F36100C64079 /* Week1_Practice.app */; - productType = "com.apple.product-type.application"; - }; - 345C2EDE2E77F36200C64079 /* Week1_PracticeTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 345C2EF62E77F36200C64079 /* Build configuration list for PBXNativeTarget "Week1_PracticeTests" */; - buildPhases = ( - 345C2EDB2E77F36200C64079 /* Sources */, - 345C2EDC2E77F36200C64079 /* Frameworks */, - 345C2EDD2E77F36200C64079 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 345C2EE12E77F36200C64079 /* PBXTargetDependency */, - ); - fileSystemSynchronizedGroups = ( - 345C2EE22E77F36200C64079 /* Week1_PracticeTests */, - ); - name = Week1_PracticeTests; - packageProductDependencies = ( - ); - productName = Week1_PracticeTests; - productReference = 345C2EDF2E77F36200C64079 /* Week1_PracticeTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 345C2EE82E77F36200C64079 /* Week1_PracticeUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 345C2EF92E77F36200C64079 /* Build configuration list for PBXNativeTarget "Week1_PracticeUITests" */; - buildPhases = ( - 345C2EE52E77F36200C64079 /* Sources */, - 345C2EE62E77F36200C64079 /* Frameworks */, - 345C2EE72E77F36200C64079 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 345C2EEB2E77F36200C64079 /* PBXTargetDependency */, - ); - fileSystemSynchronizedGroups = ( - 345C2EEC2E77F36200C64079 /* Week1_PracticeUITests */, - ); - name = Week1_PracticeUITests; - packageProductDependencies = ( - ); - productName = Week1_PracticeUITests; - productReference = 345C2EE92E77F36200C64079 /* Week1_PracticeUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 345C2EC72E77F36100C64079 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1620; - LastUpgradeCheck = 1620; - TargetAttributes = { - 345C2ECE2E77F36100C64079 = { - CreatedOnToolsVersion = 16.2; - }; - 345C2EDE2E77F36200C64079 = { - CreatedOnToolsVersion = 16.2; - TestTargetID = 345C2ECE2E77F36100C64079; - }; - 345C2EE82E77F36200C64079 = { - CreatedOnToolsVersion = 16.2; - TestTargetID = 345C2ECE2E77F36100C64079; - }; - }; - }; - buildConfigurationList = 345C2ECA2E77F36100C64079 /* Build configuration list for PBXProject "Week1_Practice" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 345C2EC62E77F36100C64079; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - productRefGroup = 345C2ED02E77F36100C64079 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 345C2ECE2E77F36100C64079 /* Week1_Practice */, - 345C2EDE2E77F36200C64079 /* Week1_PracticeTests */, - 345C2EE82E77F36200C64079 /* Week1_PracticeUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 345C2ECD2E77F36100C64079 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 345C2EDD2E77F36200C64079 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 345C2EE72E77F36200C64079 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 345C2ECB2E77F36100C64079 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 345C2EDB2E77F36200C64079 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 345C2EE52E77F36200C64079 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 345C2EE12E77F36200C64079 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 345C2ECE2E77F36100C64079 /* Week1_Practice */; - targetProxy = 345C2EE02E77F36200C64079 /* PBXContainerItemProxy */; - }; - 345C2EEB2E77F36200C64079 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 345C2ECE2E77F36100C64079 /* Week1_Practice */; - targetProxy = 345C2EEA2E77F36200C64079 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 345C2EF12E77F36200C64079 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.2; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 345C2EF22E77F36200C64079 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.2; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 345C2EF42E77F36200C64079 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"Week1_Practice/Preview Content\""; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "Week1-Practice-Info.plist"; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "UMC.Week1-Practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 345C2EF52E77F36200C64079 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"Week1_Practice/Preview Content\""; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = "Week1-Practice-Info.plist"; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "UMC.Week1-Practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - 345C2EF72E77F36200C64079 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 4HP2RU9G92; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.2; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "UMC.Week1-PracticeTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Week1_Practice.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Week1_Practice"; - }; - name = Debug; - }; - 345C2EF82E77F36200C64079 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 4HP2RU9G92; - GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.2; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "UMC.Week1-PracticeTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Week1_Practice.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Week1_Practice"; - }; - name = Release; - }; - 345C2EFA2E77F36200C64079 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 4HP2RU9G92; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "UMC.Week1-PracticeUITests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = Week1_Practice; - }; - name = Debug; - }; - 345C2EFB2E77F36200C64079 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 4HP2RU9G92; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "UMC.Week1-PracticeUITests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = Week1_Practice; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 345C2ECA2E77F36100C64079 /* Build configuration list for PBXProject "Week1_Practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 345C2EF12E77F36200C64079 /* Debug */, - 345C2EF22E77F36200C64079 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 345C2EF32E77F36200C64079 /* Build configuration list for PBXNativeTarget "Week1_Practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 345C2EF42E77F36200C64079 /* Debug */, - 345C2EF52E77F36200C64079 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 345C2EF62E77F36200C64079 /* Build configuration list for PBXNativeTarget "Week1_PracticeTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 345C2EF72E77F36200C64079 /* Debug */, - 345C2EF82E77F36200C64079 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 345C2EF92E77F36200C64079 /* Build configuration list for PBXNativeTarget "Week1_PracticeUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 345C2EFA2E77F36200C64079 /* Debug */, - 345C2EFB2E77F36200C64079 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 345C2EC72E77F36100C64079 /* Project object */; -} diff --git a/yoon/week1/Week1_Practice/Week1_Practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/yoon/week1/Week1_Practice/Week1_Practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/yoon/week1/Week1_Practice/Week1_Practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/yoon/week1/Week1_Practice/Week1_Practice/Assets.xcassets/AccentColor.colorset/Contents.json b/yoon/week1/Week1_Practice/Week1_Practice/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/yoon/week1/Week1_Practice/Week1_Practice/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week1/Week1_Practice/Week1_Practice/Assets.xcassets/AppIcon.appiconset/Contents.json b/yoon/week1/Week1_Practice/Week1_Practice/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/yoon/week1/Week1_Practice/Week1_Practice/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week1/Week1_Practice/Week1_Practice/Assets.xcassets/Contents.json b/yoon/week1/Week1_Practice/Week1_Practice/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/yoon/week1/Week1_Practice/Week1_Practice/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week1/Week1_Practice/Week1_Practice/Assets.xcassets/background.imageset/Contents.json b/yoon/week1/Week1_Practice/Week1_Practice/Assets.xcassets/background.imageset/Contents.json deleted file mode 100644 index 7e26126..0000000 --- a/yoon/week1/Week1_Practice/Week1_Practice/Assets.xcassets/background.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "background.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week1/Week1_Practice/Week1_Practice/Assets.xcassets/background.imageset/background.pdf b/yoon/week1/Week1_Practice/Week1_Practice/Assets.xcassets/background.imageset/background.pdf deleted file mode 100644 index 8564375..0000000 Binary files a/yoon/week1/Week1_Practice/Week1_Practice/Assets.xcassets/background.imageset/background.pdf and /dev/null differ diff --git a/yoon/week1/Week1_Practice/Week1_Practice/Preview Content/Preview Assets.xcassets/Contents.json b/yoon/week1/Week1_Practice/Week1_Practice/Preview Content/Preview Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/yoon/week1/Week1_Practice/Week1_Practice/Preview Content/Preview Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Fonts.swift b/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Fonts.swift deleted file mode 100644 index 0148fcb..0000000 --- a/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Fonts.swift +++ /dev/null @@ -1,56 +0,0 @@ -// -// Fonts.swift -// Week1_Practice -// -// Created by 정승윤 on 9/15/25. -// - -import SwiftUI - -extension Font { - enum Pretend { - case extraBold - case bold - case semibold - case medium - case regular - case light - - var value: String { - switch self { - case .extraBold: - return "Pretendard-ExtraBold" - case .bold: - return "Pretendard-Bold" - case .semibold: - return "Pretendard-SemiBold" - case .medium: - return "Pretendard-Medium" - case .regular: - return "Pretendard-Regular" - case .light: - return "Pretendard-Light" - } - } - } - - static func pretend(type: Pretend, size: CGFloat) -> Font { - return .custom(type.value, size: size) - } - - static var PretendardBold30: Font { - return .pretend(type: .bold, size: 30) - } - - static var PretendardRegular16: Font { - return .pretend(type: .regular, size: 16) - } - - static var PretendardBold24: Font { - return .pretend(type: .bold, size: 24) - } - - static var PretendardBold18: Font { - return .pretend(type: .bold, size: 18) - } -} diff --git a/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Black.otf b/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Black.otf deleted file mode 100644 index a0d849e..0000000 Binary files a/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Black.otf and /dev/null differ diff --git a/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Bold.otf b/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Bold.otf deleted file mode 100644 index 8e5e30a..0000000 Binary files a/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Bold.otf and /dev/null differ diff --git a/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-ExtraBold.otf b/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-ExtraBold.otf deleted file mode 100644 index 388f3ca..0000000 Binary files a/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-ExtraBold.otf and /dev/null differ diff --git a/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-ExtraLight.otf b/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-ExtraLight.otf deleted file mode 100644 index 40c8b69..0000000 Binary files a/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-ExtraLight.otf and /dev/null differ diff --git a/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Light.otf b/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Light.otf deleted file mode 100644 index 228679e..0000000 Binary files a/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Light.otf and /dev/null differ diff --git a/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Medium.otf b/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Medium.otf deleted file mode 100644 index 0575069..0000000 Binary files a/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Medium.otf and /dev/null differ diff --git a/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Regular.otf b/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Regular.otf deleted file mode 100644 index 08bf4cf..0000000 Binary files a/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Regular.otf and /dev/null differ diff --git a/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-SemiBold.otf b/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-SemiBold.otf deleted file mode 100644 index e7e36ab..0000000 Binary files a/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-SemiBold.otf and /dev/null differ diff --git a/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Thin.otf b/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Thin.otf deleted file mode 100644 index 77e792d..0000000 Binary files a/yoon/week1/Week1_Practice/Week1_Practice/Resources/Fonts/Pretendard-Thin.otf and /dev/null differ diff --git a/yoon/week1/Week1_Practice/Week1_Practice/TicketView.swift b/yoon/week1/Week1_Practice/Week1_Practice/TicketView.swift deleted file mode 100644 index 8f913b6..0000000 --- a/yoon/week1/Week1_Practice/Week1_Practice/TicketView.swift +++ /dev/null @@ -1,61 +0,0 @@ -// -// TicketView.swift -// Week1_Practice -// -// Created by 정승윤 on 9/15/25. -// - -import SwiftUI - -struct TicketView: View { - var body: some View { - ZStack{ - Image(.background) - VStack{ - Spacer().frame(height:111) - - mainTitleGroup - - Spacer().frame(height:134) - - mainBottomGroup} - } - .padding() - } - - private var mainTitleGroup: some View { - VStack{ - Group{ - Text("마이펫의 이중생활") - .font(.PretendardBold30) - .shadow(color: .black.opacity(0.25), radius: 2, x:0, y:4) - Text("본인 + 동반 1인") - .font(.PretendardRegular16) - Text("30.100원") - .font(.PretendardBold24) - } - .foregroundStyle(Color.white) - } - .frame(height: 84) - } -} - -private var mainBottomGroup: some View { - Button(action: { - print("Hello") - }, label: { - VStack { - Image(systemName: "chevron.up") - .resizable() - .frame(width: 18,height: 12) - Text("예매하기") - .font(.PretendardBold18) - .foregroundStyle(Color.white) - } - .frame(width:63, height:40) - }) -} - -#Preview { - TicketView() -} diff --git a/yoon/week1/Week1_Practice/Week1_Practice/Week1_PracticeApp.swift b/yoon/week1/Week1_Practice/Week1_Practice/Week1_PracticeApp.swift deleted file mode 100644 index af5e0b8..0000000 --- a/yoon/week1/Week1_Practice/Week1_Practice/Week1_PracticeApp.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// Week1_PracticeApp.swift -// Week1_Practice -// -// Created by 정승윤 on 9/15/25. -// - -import SwiftUI - -@main -struct Week1_PracticeApp: App { - var body: some Scene { - WindowGroup { - TicketView() - } - } -} diff --git a/yoon/week1/Week1_Practice/Week1_PracticeTests/Week1_PracticeTests.swift b/yoon/week1/Week1_Practice/Week1_PracticeTests/Week1_PracticeTests.swift deleted file mode 100644 index bba7aa0..0000000 --- a/yoon/week1/Week1_Practice/Week1_PracticeTests/Week1_PracticeTests.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// Week1_PracticeTests.swift -// Week1_PracticeTests -// -// Created by 정승윤 on 9/15/25. -// - -import Testing -@testable import Week1_Practice - -struct Week1_PracticeTests { - - @Test func example() async throws { - // Write your test here and use APIs like `#expect(...)` to check expected conditions. - } - -} diff --git a/yoon/week1/Week1_Practice/Week1_PracticeUITests/Week1_PracticeUITests.swift b/yoon/week1/Week1_Practice/Week1_PracticeUITests/Week1_PracticeUITests.swift deleted file mode 100644 index 9424d4b..0000000 --- a/yoon/week1/Week1_Practice/Week1_PracticeUITests/Week1_PracticeUITests.swift +++ /dev/null @@ -1,43 +0,0 @@ -// -// Week1_PracticeUITests.swift -// Week1_PracticeUITests -// -// Created by 정승윤 on 9/15/25. -// - -import XCTest - -final class Week1_PracticeUITests: XCTestCase { - - override func setUpWithError() throws { - // Put setup code here. This method is called before the invocation of each test method in the class. - - // In UI tests it is usually best to stop immediately when a failure occurs. - continueAfterFailure = false - - // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. - } - - override func tearDownWithError() throws { - // Put teardown code here. This method is called after the invocation of each test method in the class. - } - - @MainActor - func testExample() throws { - // UI tests must launch the application that they test. - let app = XCUIApplication() - app.launch() - - // Use XCTAssert and related functions to verify your tests produce the correct results. - } - - @MainActor - func testLaunchPerformance() throws { - if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) { - // This measures how long it takes to launch your application. - measure(metrics: [XCTApplicationLaunchMetric()]) { - XCUIApplication().launch() - } - } - } -} diff --git a/yoon/week1/Week1_Practice/Week1_PracticeUITests/Week1_PracticeUITestsLaunchTests.swift b/yoon/week1/Week1_Practice/Week1_PracticeUITests/Week1_PracticeUITestsLaunchTests.swift deleted file mode 100644 index bb18701..0000000 --- a/yoon/week1/Week1_Practice/Week1_PracticeUITests/Week1_PracticeUITestsLaunchTests.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// Week1_PracticeUITestsLaunchTests.swift -// Week1_PracticeUITests -// -// Created by 정승윤 on 9/15/25. -// - -import XCTest - -final class Week1_PracticeUITestsLaunchTests: XCTestCase { - - override class var runsForEachTargetApplicationUIConfiguration: Bool { - true - } - - override func setUpWithError() throws { - continueAfterFailure = false - } - - @MainActor - func testLaunch() throws { - let app = XCUIApplication() - app.launch() - - // Insert steps here to perform after app launch but before taking a screenshot, - // such as logging into a test account or navigating somewhere in the app - - let attachment = XCTAttachment(screenshot: app.screenshot()) - attachment.name = "Launch Screen" - attachment.lifetime = .keepAlways - add(attachment) - } -} diff --git a/yoon/week1/week1_grammar.playground/Contents.swift b/yoon/week1/week1_grammar.playground/Contents.swift deleted file mode 100644 index 657f0d4..0000000 --- a/yoon/week1/week1_grammar.playground/Contents.swift +++ /dev/null @@ -1,22 +0,0 @@ -import UIKit - -//let name:String = "UMC" -//var age:Int = 10 -// -//let msg:String = """ -//이름: \(name) -//나이: \(age) -//""" -// -//print(msg) - -//let numA: Int = 10 -//let numB: Double = 10.2 -// -//let sum = numA + Int(numB) -//print("결과 : \(sum)") - -var name:String = "Jeong" -var age:Int = 28 - -print("이름 : \(name), 나이: \(age)") diff --git a/yoon/week1/week1_grammar.playground/contents.xcplayground b/yoon/week1/week1_grammar.playground/contents.xcplayground deleted file mode 100644 index 7f43ce8..0000000 --- a/yoon/week1/week1_grammar.playground/contents.xcplayground +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/yoon/week1/week1_grammar.playground/playground.xcworkspace/contents.xcworkspacedata b/yoon/week1/week1_grammar.playground/playground.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index ca3329e..0000000 --- a/yoon/week1/week1_grammar.playground/playground.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/yoon/week2/week2_Grammar.playground/Contents.swift b/yoon/week2/week2_Grammar.playground/Contents.swift deleted file mode 100644 index 5e0b434..0000000 --- a/yoon/week2/week2_Grammar.playground/Contents.swift +++ /dev/null @@ -1,91 +0,0 @@ -import UIKit - -var x = 5 -x += 1 -print(x) - -var a = 10, b = 20 -var sum = a + b -print(sum) - -//var score = 80 -//score >= 60 ? print("합격") : print("불합격") - -var points = 120 -var isMember = true - -points >= 100 && isMember ? print("할인 가능") : print("할인 불가능") - -for number in 1...5 { - print(number, terminator: ",") -} - -var temperature = 25 -if temperature >= 30 { - print("덥다") -} -else if temperature < 30 && temperature >= 10 { - print("적당하다") - } -else { - print("춥다") -} - -var day = 3 - -switch day { -case 1: - print("월요일") -case 2: - print("화요일") -case 3: - print("수요일") -case 4: - print("목요일") -case 5: - print("금요일") -case 6: - print("토요일") -case 7: - print("일요일") -default: - print("오류") -} - -switch day { -case 1...5: - print("주중") -case 6...7: - print("주말") -default : - print("오류") -} - -var fruits:[String] = ["Apple", "Banana", "Cherry"] - -for fruit in fruits { - print(fruit) -} - -var count:Int = 0 - -while count <= 5 { - print("Count: \(count)") - count+=1 -} - -var age:Int? - -age = 25 - -if let Age = age { - print(Age) -} - -var score:Double? - -score = 78.5 - -print("점수는 \(score!)점 입니다.") - - diff --git a/yoon/week2/week2_Grammar.playground/contents.xcplayground b/yoon/week2/week2_Grammar.playground/contents.xcplayground deleted file mode 100644 index 7f43ce8..0000000 --- a/yoon/week2/week2_Grammar.playground/contents.xcplayground +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/yoon/week2/week2_Grammar.playground/playground.xcworkspace/contents.xcworkspacedata b/yoon/week2/week2_Grammar.playground/playground.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index ca3329e..0000000 --- a/yoon/week2/week2_Grammar.playground/playground.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/yoon/week2/week2_Practice.xcodeproj/project.pbxproj b/yoon/week2/week2_Practice.xcodeproj/project.pbxproj deleted file mode 100644 index 2eb583b..0000000 --- a/yoon/week2/week2_Practice.xcodeproj/project.pbxproj +++ /dev/null @@ -1,329 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXFileReference section */ - 3406D34E2E7EEE670096A465 /* week2_Practice.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = week2_Practice.app; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 3406D3502E7EEE670096A465 /* week2_Practice */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = week2_Practice; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 3406D34B2E7EEE670096A465 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 3406D3452E7EEE670096A465 = { - isa = PBXGroup; - children = ( - 3406D3502E7EEE670096A465 /* week2_Practice */, - 3406D34F2E7EEE670096A465 /* Products */, - ); - sourceTree = ""; - }; - 3406D34F2E7EEE670096A465 /* Products */ = { - isa = PBXGroup; - children = ( - 3406D34E2E7EEE670096A465 /* week2_Practice.app */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 3406D34D2E7EEE670096A465 /* week2_Practice */ = { - isa = PBXNativeTarget; - buildConfigurationList = 3406D35C2E7EEE690096A465 /* Build configuration list for PBXNativeTarget "week2_Practice" */; - buildPhases = ( - 3406D34A2E7EEE670096A465 /* Sources */, - 3406D34B2E7EEE670096A465 /* Frameworks */, - 3406D34C2E7EEE670096A465 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 3406D3502E7EEE670096A465 /* week2_Practice */, - ); - name = week2_Practice; - packageProductDependencies = ( - ); - productName = week2_Practice; - productReference = 3406D34E2E7EEE670096A465 /* week2_Practice.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 3406D3462E7EEE670096A465 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1620; - LastUpgradeCheck = 1620; - TargetAttributes = { - 3406D34D2E7EEE670096A465 = { - CreatedOnToolsVersion = 16.2; - }; - }; - }; - buildConfigurationList = 3406D3492E7EEE670096A465 /* Build configuration list for PBXProject "week2_Practice" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 3406D3452E7EEE670096A465; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - productRefGroup = 3406D34F2E7EEE670096A465 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 3406D34D2E7EEE670096A465 /* week2_Practice */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 3406D34C2E7EEE670096A465 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 3406D34A2E7EEE670096A465 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 3406D35A2E7EEE690096A465 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.2; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 3406D35B2E7EEE690096A465 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.2; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 3406D35D2E7EEE690096A465 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"week2_Practice/Preview Content\""; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "UMC.week2-Practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 3406D35E2E7EEE690096A465 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"week2_Practice/Preview Content\""; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "UMC.week2-Practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 3406D3492E7EEE670096A465 /* Build configuration list for PBXProject "week2_Practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3406D35A2E7EEE690096A465 /* Debug */, - 3406D35B2E7EEE690096A465 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 3406D35C2E7EEE690096A465 /* Build configuration list for PBXNativeTarget "week2_Practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3406D35D2E7EEE690096A465 /* Debug */, - 3406D35E2E7EEE690096A465 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 3406D3462E7EEE670096A465 /* Project object */; -} diff --git a/yoon/week2/week2_Practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/yoon/week2/week2_Practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/yoon/week2/week2_Practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/yoon/week2/week2_Practice/2-1/UserModel.swift b/yoon/week2/week2_Practice/2-1/UserModel.swift deleted file mode 100644 index fcf0091..0000000 --- a/yoon/week2/week2_Practice/2-1/UserModel.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// UserModel.swift -// week2_Practice -// -// Created by 정승윤 on 9/20/25. -// - -import Foundation - -struct UserModel { - var name: String - var age: Int - - mutating func increaseAge() { - self.age += 1 - } - - mutating func decreaseAge() { - self.age -= 1 - } -} diff --git a/yoon/week2/week2_Practice/2-1/UserView.swift b/yoon/week2/week2_Practice/2-1/UserView.swift deleted file mode 100644 index cda0103..0000000 --- a/yoon/week2/week2_Practice/2-1/UserView.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// UserView.swift -// week2_Practice -// -// Created by 정승윤 on 9/20/25. -// - -import SwiftUI - -struct UserView: View { - - @StateObject var viewModel: UserViewModel1 - - init() { - self._viewModel = .init(wrappedValue: .init(userModel: .init(name: "제옹/정의찬", age: 29))) - } - - - var body: some View { - VStack { - HStack { - Button(action: { - viewModel.increaseAge() - }, label: { - Image(systemName: "arrow.up.square") // SFSymbol입니다. 0주차를 확인해주세요! - .resizable() - .frame(width: 30, height: 30) - .foregroundStyle(Color.black) - }) - - Button(action: { - viewModel.decreaseAge() - }, label: { - Image(systemName: "arrow.down.square") - .resizable() - .frame(width: 30, height: 30) - .foregroundStyle(Color.black) - }) - } - - Group { - Text("이름: \(viewModel.userModel.name)") - Text("나이: \(viewModel.userModel.age)") - } - .padding(.top, 20) - } - } -} - -#Preview { - UserView() -} diff --git a/yoon/week2/week2_Practice/2-1/UserViewModel1.swift b/yoon/week2/week2_Practice/2-1/UserViewModel1.swift deleted file mode 100644 index 007eeaa..0000000 --- a/yoon/week2/week2_Practice/2-1/UserViewModel1.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// UserViewModel.swift -// week2_Practice -// -// Created by 정승윤 on 9/20/25. -// - -import Foundation - -class UserViewModel1: ObservableObject { - - @Published var userModel: UserModel - - init(userModel: UserModel) { - self.userModel = userModel - } - - func increaseAge() { - self.userModel.increaseAge() - } - - func decreaseAge() { - self.userModel.decreaseAge() - } - -} diff --git a/yoon/week2/week2_Practice/2-2/CounterView.swift b/yoon/week2/week2_Practice/2-2/CounterView.swift deleted file mode 100644 index 9e2ad31..0000000 --- a/yoon/week2/week2_Practice/2-2/CounterView.swift +++ /dev/null @@ -1,108 +0,0 @@ -// -// CounterView.swift -// week2_Practice -// -// Created by 정승윤 on 9/20/25. -// - -import SwiftUI - -//struct CounterView: View { -// @State private var count = 0 // 상태 프로퍼티 선언 -// -// var body: some View { -// VStack { -// Text("카운트: \(count)") // 값이 변경되면 자동 업데이트 -// .font(.largeTitle) -// -// Button("증가") { -// count += 1 // 상태 변경 시 UI 자동 업데이트 -// } -// .padding() -// } -// } -//} - -//struct CounterView: View { -// @State private var text: String = "" -// -// var body: some View { -// VStack { -// Text("텍스트 내용: \(text)") -// .font(.largeTitle) -// -// TextField("아무 값을 입력해보세요!", text: $text) -// .frame(width: 350) -// } -// } -//} - -//struct CounterView: View { -// @State private var isClicked: Bool = false -// -// var body: some View { -// VStack { -// Text("현재 State 변수 값: \(isClicked)") -// -// CustomButton(isClicked: $isClicked) -// } -// } -//} - -// ObservedObject -//struct CounterView: View { -// @ObservedObject var viewModel: CounterViewModel = .init() -// -// var body: some View { -// VStack { -// Text("\(viewModel.count)") -// -// Button(action: { -// viewModel.count += 1 -// }, label: { -// Text("카운트 증가 버튼") -// }) -// } -// } -//} - -// StateObject // -//struct CounterView: View { -// @StateObject var viewModel: CounterViewModel = .init() -// -// var body: some View { -// VStack { -// Text("\(viewModel.count)") -// -// Button(action: { -// viewModel.count += 1 -// }, label: { -// Text("카운트 증가 버튼") -// }) -// } -// } -//} -// - -//import SwiftUI -// -//struct CounterView: View { -// @StateObject var viewModel: CounterViewModel = .init() -// -// var body: some View { -// VStack { -// Text("\(viewModel.count)") -// -// Button(action: { -// viewModel.count += 1 -// }, label: { -// Text("카운트 증가 버튼") -// }) -// } -// } -//} -// -//#Preview { -// CounterView() -//} - diff --git a/yoon/week2/week2_Practice/2-2/CounterViewModel.swift b/yoon/week2/week2_Practice/2-2/CounterViewModel.swift deleted file mode 100644 index 7d06f08..0000000 --- a/yoon/week2/week2_Practice/2-2/CounterViewModel.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// CounterViewModel.swift -// week2_Practice -// -// Created by 정승윤 on 9/21/25. -// - -import SwiftUI - -//class CounterViewModel: ObservableObject { -// @Published var count: Int = 0 -//} - -//@Observable -//final class CounterViewModel { var count = 0 } -// -//struct CounterParentView: View { -// @State private var counter = CounterViewModel() // 소유/수명 -// var body: some View { -// VStack { -// Text("부모: \(counter.count)") -// CounterEditView(counter: counter) // 주입(plain) -// } -// } -//} -// -//struct CounterEditView: View { -// @Bindable var counter: CounterViewModel // 수정 권한(바인딩) -// var body: some View { -// Stepper("자식: \(counter.count)", value: $counter.count) -// } -//} - -/* viewModel */ - -import Foundation - -@Observable -class CounterViewModel { - var count = 0 -} -//#Preview { -// CounterParentView() -//} - diff --git a/yoon/week2/week2_Practice/2-2/CustomButton.swift b/yoon/week2/week2_Practice/2-2/CustomButton.swift deleted file mode 100644 index ac33872..0000000 --- a/yoon/week2/week2_Practice/2-2/CustomButton.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// CustomButton.swift -// week2_Practice -// -// Created by 정승윤 on 9/20/25. -// - -import SwiftUI - -struct CustomButton: View { - - @Binding var isClicked: Bool - - init(isClicked: Binding) { - self._isClicked = isClicked - } - - var body: some View { - Button(action: { - isClicked.toggle() - print("하위 뷰에서 클릭해서 값 변경함 : \(isClicked)") - }, label: { - Text("상위 뷰의 값을 State 값 변경") - }) - } -} diff --git a/yoon/week2/week2_Practice/2-3/BottomView.swift b/yoon/week2/week2_Practice/2-3/BottomView.swift deleted file mode 100644 index aa9a1ce..0000000 --- a/yoon/week2/week2_Practice/2-3/BottomView.swift +++ /dev/null @@ -1,28 +0,0 @@ -// -// BottomView.swift -// week2_Practice -// -// Created by 정승윤 on 9/21/25. -// - -import SwiftUI - -struct BottomView: View { - @ObservedObject var viewModel: TextViewModel - - init(viewModel: TextViewModel) { - self.viewModel = viewModel - } - - var body: some View { - VStack { - Text("하위 뷰 입니다.") - Text("현재 입력된 값 : \(viewModel.inputText)") - Button("강제 초기화") { - viewModel.inputText = "초기화됨" - } - Spacer() - } - } -} - diff --git a/yoon/week2/week2_Practice/2-3/ContentView.swift b/yoon/week2/week2_Practice/2-3/ContentView.swift deleted file mode 100644 index a1a5f18..0000000 --- a/yoon/week2/week2_Practice/2-3/ContentView.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// ContentView.swift -// week2_Practice -// -// Created by 정승윤 on 9/21/25. -// - -/* View */ - -import SwiftUI - -struct ContentView: View { - - var viewModel: CounterViewModel = .init() - - var body: some View { - VStack { - - Text("\(viewModel.count)") - - Button(action: { - viewModel.count += 1 - }, label: { - Text("카운트 증가합니다.") - }) - } - .padding() - } -} - -#Preview { - ContentView() -} - diff --git a/yoon/week2/week2_Practice/2-3/DogViewModel.swift b/yoon/week2/week2_Practice/2-3/DogViewModel.swift deleted file mode 100644 index f7ee339..0000000 --- a/yoon/week2/week2_Practice/2-3/DogViewModel.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// DogViewModel.swift -// week2_Practice -// -// Created by 정승윤 on 9/21/25. -// - -import SwiftUI - -@Observable -final class DogViewModel { - var name: String - var age: Int - - init(name: String, age: Int) { - self.name = name - self.age = age - } -} - -struct DogParentView: View { - // 소유/생명주기는 부모가 책임 - @State private var dog = DogViewModel(name: "Rex", age: 2) - - var body: some View { - VStack(spacing: 16) { - // 부모에서 값 변경 → 자식은 자동 갱신(plain property여도 관찰됨) - Button("나이 +1") { dog.age += 1 } - - DogDetailView(dog: dog) // 수정 권한 없이 "읽기 전용"으로 전달 - } - .padding() - } -} - -struct DogDetailView: View { - // 부모가 내려준 모델을 "그냥 읽기"만 한다 - let dog: DogViewModel // plain property - - var body: some View { - VStack(spacing: 12) { - Text("이름: \(dog.name)") - .font(.title2) - Text("나이: \(dog.age)") - .font(.body) - } - .padding() - } -} - -#Preview { - DogParentView() -} diff --git a/yoon/week2/week2_Practice/2-3/TextViewModel.swift b/yoon/week2/week2_Practice/2-3/TextViewModel.swift deleted file mode 100644 index 7c1cdfb..0000000 --- a/yoon/week2/week2_Practice/2-3/TextViewModel.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// TextViewModel.swift -// week2_Practice -// -// Created by 정승윤 on 9/21/25. -// - -import SwiftUI - -class TextViewModel: ObservableObject { - @Published var inputText: String = "" - - init() { - print("✅ 새로운 TextViewModel 인스턴스 생성됨! ✅") - } -} - diff --git a/yoon/week2/week2_Practice/2-3/TopView.swift b/yoon/week2/week2_Practice/2-3/TopView.swift deleted file mode 100644 index b3e4041..0000000 --- a/yoon/week2/week2_Practice/2-3/TopView.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// TopView.swift -// week2_Practice -// -// Created by 정승윤 on 9/21/25. -// - -import SwiftUI - -struct TopView: View { - @StateObject var viewModel: TextViewModel = .init() - @State private var showBottomView = false - - var body: some View { - NavigationStack { - VStack { - - Text("상위뷰입니다.") - Text("텍스트 입력 값 : \(viewModel.inputText)") - TextField("아무런 값을 넣어보세요!", text: $viewModel.inputText) - .frame(width: 350) - - Button("하위뷰 부르기") { - showBottomView.toggle() - } - .sheet(isPresented: $showBottomView) { - BottomView(viewModel: viewModel) - } - } - } - } -} - -#Preview { - TopView() -} - - diff --git a/yoon/week2/week2_Practice/2-4/EnvironmentExampleView.swift b/yoon/week2/week2_Practice/2-4/EnvironmentExampleView.swift deleted file mode 100644 index dd97fc5..0000000 --- a/yoon/week2/week2_Practice/2-4/EnvironmentExampleView.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// EnvironmentExampleView.swift -// week2_Practice -// -// Created by 정승윤 on 9/21/25. -// - -import SwiftUI - -struct EnvironmentExampleView: View { - @Environment(\.colorScheme) var colorScheme - - var body: some View { - VStack { - Text("현재 색상 모드: \(colorScheme == .dark ? "다크모드" : "라이트모드")") - .padding() - .background(colorScheme == .dark ? Color.black : Color.white) - .foregroundStyle(colorScheme == .dark ? Color.white : Color.black) - } - .padding() - } -} - -#Preview { - EnvironmentExampleView() -} - diff --git a/yoon/week2/week2_Practice/2-4/ParentView.swift b/yoon/week2/week2_Practice/2-4/ParentView.swift deleted file mode 100644 index 9ae4291..0000000 --- a/yoon/week2/week2_Practice/2-4/ParentView.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// ParentView.swift -// week2_Practice -// -// Created by 정승윤 on 9/21/25. -// - -import SwiftUI -//import Foundation -// -//struct ParentView: View { -// @StateObject var userViewModel: UserViewModel = .init() -// -// var body: some View { -// NavigationStack { -// VStack { -// Text("현재 사용자: \(userViewModel.username)").font(.title) -// -// NavigationLink("프로필 화면으로 이동", destination: ProfileView().environmentObject(userViewModel)) -// -// NavigationLink("설정 화면으로 이동", -// destination: SettingsView().environmentObject(userViewModel)) -// } -// } -// } -//} - -struct ParentView: View { - @State var userViewModel: UserViewModel = UserViewModel() - - var body: some View { - NavigationStack { - VStack { - Text("현재 사용자: \(userViewModel.username)") - .font(.title) - - NavigationLink( - "프로필 화면으로 이동", - destination: ProfileView() - .environment(userViewModel) - ) - NavigationLink("설정 화면으로 이동", - destination: SettingViewContainer().environment(userViewModel) - ) - } - } - } -} - -#Preview { - ParentView() -} diff --git a/yoon/week2/week2_Practice/2-4/ProfileView.swift b/yoon/week2/week2_Practice/2-4/ProfileView.swift deleted file mode 100644 index b9a8f9f..0000000 --- a/yoon/week2/week2_Practice/2-4/ProfileView.swift +++ /dev/null @@ -1,61 +0,0 @@ -// -// ProfileView.swift -// week2_Practice -// -// Created by 정승윤 on 9/21/25. -// - -import SwiftUI - -//struct ProfileView: View { -// @EnvironmentObject var userViewModel: UserViewModel -// -// var body: some View { -// VStack { -// Text("프로필 화면") -// .font(.largeTitle) -// Text("사용자 이름: \(userViewModel.username)") -// .font(.title) -// -// Button("이름 변경") { -// userViewModel.username = "새로운 사용자" -// } -// .padding() -// .background(Color.blue) -// .foregroundStyle(.white) -// } -// } -//} - -//#Preview { -// ProfileView() -// .environmentObject(UserViewModel()) -//} - -struct ProfileView: View { - @Environment(UserViewModel.self) private var userViewModel - - var body: some View { - VStack { - Text("프로필 화면") - .font(.largeTitle) - - Text("사용자 이름: \(userViewModel.username)") - .font(.title) - - Button("이름 변경") { - userViewModel.username = "새로운 사용자" - } - .padding() - .background(Color.blue) - .foregroundStyle(.white) - } - } -} - -#Preview { - ProfileView() - .environment(UserViewModel()) -} - - diff --git a/yoon/week2/week2_Practice/2-4/SettingsView.swift b/yoon/week2/week2_Practice/2-4/SettingsView.swift deleted file mode 100644 index 566662b..0000000 --- a/yoon/week2/week2_Practice/2-4/SettingsView.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// SettingVire.swift -// week2_Practice -// -// Created by 정승윤 on 9/21/25. -// - -import SwiftUI - -//struct SettingsView: View { -// @EnvironmentObject var userViewModel: UserViewModel -// -// var body: some View { -// VStack { -// Text("설정 화면") -// .font(.largeTitle) -// -// TextField("사용자 이름 변경", text: $userViewModel.username) // TextField로 직접 변경 가능 -// .textFieldStyle(RoundedBorderTextFieldStyle()) -// } -// } -//} -// -//#Preview { -// SettingsView() -// .environmentObject(UserViewModel()) -//} - -struct SettingViewContainer: View { - @Environment(UserViewModel.self) private var userViewModel - - var body: some View { - SettingsView(userViewModel: userViewModel) - } -} - -struct SettingsView: View { - @Bindable var userViewModel: UserViewModel - - var body: some View { - VStack { - Text("설정 화면") - .font(.largeTitle) - - TextField("사용자 이름 변경", text: $userViewModel.username) - .textFieldStyle(RoundedBorderTextFieldStyle()) - - } - } -} - -#Preview { - SettingsView(userViewModel: .init()) -} diff --git a/yoon/week2/week2_Practice/2-4/UserViewModel.swift b/yoon/week2/week2_Practice/2-4/UserViewModel.swift deleted file mode 100644 index ba73e90..0000000 --- a/yoon/week2/week2_Practice/2-4/UserViewModel.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// UserViewModel.swift -// week2_Practice -// -// Created by 정승윤 on 9/21/25. -// - -//import SwiftUI -// -//class UserViewModel: ObservableObject { -// @Published var username: String = "초기 사용자" -//} - -import Foundation - -/* 뷰모델 */ - -@Observable -class UserViewModel { - var username: String = "초기 사용자" -} diff --git a/yoon/week2/week2_Practice/Assets.xcassets/AccentColor.colorset/Contents.json b/yoon/week2/week2_Practice/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/yoon/week2/week2_Practice/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week2/week2_Practice/Assets.xcassets/AppIcon.appiconset/Contents.json b/yoon/week2/week2_Practice/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/yoon/week2/week2_Practice/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week2/week2_Practice/Assets.xcassets/Contents.json b/yoon/week2/week2_Practice/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/yoon/week2/week2_Practice/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week2/week2_Practice/Assets.xcassets/brutalist.imageset/Contents.json b/yoon/week2/week2_Practice/Assets.xcassets/brutalist.imageset/Contents.json deleted file mode 100644 index 4ff6933..0000000 --- a/yoon/week2/week2_Practice/Assets.xcassets/brutalist.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=브루탈리스트.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/yoon/week2/week2_Practice/Assets.xcassets/brutalist.imageset/Property 1=\353\270\214\353\243\250\355\203\210\353\246\254\354\212\244\355\212\270.pdf" "b/yoon/week2/week2_Practice/Assets.xcassets/brutalist.imageset/Property 1=\353\270\214\353\243\250\355\203\210\353\246\254\354\212\244\355\212\270.pdf" deleted file mode 100644 index a4ef433..0000000 Binary files "a/yoon/week2/week2_Practice/Assets.xcassets/brutalist.imageset/Property 1=\353\270\214\353\243\250\355\203\210\353\246\254\354\212\244\355\212\270.pdf" and /dev/null differ diff --git a/yoon/week2/week2_Practice/Assets.xcassets/conclave.imageset/Contents.json b/yoon/week2/week2_Practice/Assets.xcassets/conclave.imageset/Contents.json deleted file mode 100644 index 0dc7ac7..0000000 --- a/yoon/week2/week2_Practice/Assets.xcassets/conclave.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=콘클라베.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/yoon/week2/week2_Practice/Assets.xcassets/conclave.imageset/Property 1=\354\275\230\355\201\264\353\235\274\353\262\240.pdf" "b/yoon/week2/week2_Practice/Assets.xcassets/conclave.imageset/Property 1=\354\275\230\355\201\264\353\235\274\353\262\240.pdf" deleted file mode 100644 index 6a57099..0000000 Binary files "a/yoon/week2/week2_Practice/Assets.xcassets/conclave.imageset/Property 1=\354\275\230\355\201\264\353\235\274\353\262\240.pdf" and /dev/null differ diff --git a/yoon/week2/week2_Practice/Assets.xcassets/mickey.imageset/Contents.json b/yoon/week2/week2_Practice/Assets.xcassets/mickey.imageset/Contents.json deleted file mode 100644 index c84096e..0000000 --- a/yoon/week2/week2_Practice/Assets.xcassets/mickey.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=미키.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/yoon/week2/week2_Practice/Assets.xcassets/mickey.imageset/Property 1=\353\257\270\355\202\244.pdf" "b/yoon/week2/week2_Practice/Assets.xcassets/mickey.imageset/Property 1=\353\257\270\355\202\244.pdf" deleted file mode 100644 index 202b8f2..0000000 Binary files "a/yoon/week2/week2_Practice/Assets.xcassets/mickey.imageset/Property 1=\353\257\270\355\202\244.pdf" and /dev/null differ diff --git a/yoon/week2/week2_Practice/Assets.xcassets/snowWhite.imageset/Contents.json b/yoon/week2/week2_Practice/Assets.xcassets/snowWhite.imageset/Contents.json deleted file mode 100644 index a4d6c2b..0000000 --- a/yoon/week2/week2_Practice/Assets.xcassets/snowWhite.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=백설공주.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/yoon/week2/week2_Practice/Assets.xcassets/snowWhite.imageset/Property 1=\353\260\261\354\204\244\352\263\265\354\243\274.pdf" "b/yoon/week2/week2_Practice/Assets.xcassets/snowWhite.imageset/Property 1=\353\260\261\354\204\244\352\263\265\354\243\274.pdf" deleted file mode 100644 index 82a5237..0000000 Binary files "a/yoon/week2/week2_Practice/Assets.xcassets/snowWhite.imageset/Property 1=\353\260\261\354\204\244\352\263\265\354\243\274.pdf" and /dev/null differ diff --git a/yoon/week2/week2_Practice/Assets.xcassets/theFall.imageset/Contents.json b/yoon/week2/week2_Practice/Assets.xcassets/theFall.imageset/Contents.json deleted file mode 100644 index 492242a..0000000 --- a/yoon/week2/week2_Practice/Assets.xcassets/theFall.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=더폴.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/yoon/week2/week2_Practice/Assets.xcassets/theFall.imageset/Property 1=\353\215\224\355\217\264.pdf" "b/yoon/week2/week2_Practice/Assets.xcassets/theFall.imageset/Property 1=\353\215\224\355\217\264.pdf" deleted file mode 100644 index c212e91..0000000 Binary files "a/yoon/week2/week2_Practice/Assets.xcassets/theFall.imageset/Property 1=\353\215\224\355\217\264.pdf" and /dev/null differ diff --git a/yoon/week2/week2_Practice/Assets.xcassets/toystory.imageset/Contents.json b/yoon/week2/week2_Practice/Assets.xcassets/toystory.imageset/Contents.json deleted file mode 100644 index 198c7d7..0000000 --- a/yoon/week2/week2_Practice/Assets.xcassets/toystory.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=토이스토리.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/yoon/week2/week2_Practice/Assets.xcassets/toystory.imageset/Property 1=\355\206\240\354\235\264\354\212\244\355\206\240\353\246\254.pdf" "b/yoon/week2/week2_Practice/Assets.xcassets/toystory.imageset/Property 1=\355\206\240\354\235\264\354\212\244\355\206\240\353\246\254.pdf" deleted file mode 100644 index af65916..0000000 Binary files "a/yoon/week2/week2_Practice/Assets.xcassets/toystory.imageset/Property 1=\355\206\240\354\235\264\354\212\244\355\206\240\353\246\254.pdf" and /dev/null differ diff --git a/yoon/week2/week2_Practice/Assets.xcassets/whiplash.imageset/Contents.json b/yoon/week2/week2_Practice/Assets.xcassets/whiplash.imageset/Contents.json deleted file mode 100644 index be343c5..0000000 --- a/yoon/week2/week2_Practice/Assets.xcassets/whiplash.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "image 5.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week2/week2_Practice/Assets.xcassets/whiplash.imageset/image 5.pdf b/yoon/week2/week2_Practice/Assets.xcassets/whiplash.imageset/image 5.pdf deleted file mode 100644 index b183760..0000000 Binary files a/yoon/week2/week2_Practice/Assets.xcassets/whiplash.imageset/image 5.pdf and /dev/null differ diff --git a/yoon/week2/week2_Practice/Movie/MovieCard.swift b/yoon/week2/week2_Practice/Movie/MovieCard.swift deleted file mode 100644 index 3aeb0f7..0000000 --- a/yoon/week2/week2_Practice/Movie/MovieCard.swift +++ /dev/null @@ -1,56 +0,0 @@ -// -// MovieCard.swift -// week2_Practice -// -// Created by 정승윤 on 9/22/25. -// - -import Foundation -import SwiftUI - -struct MovieCard: View { - - let movieInfo: MovieModel - - init(movieInfo: MovieModel) { - self.movieInfo = movieInfo - } - - var body: some View { - VStack(spacing: 5) { - movieInfo.movieImage - - Text(movieInfo.movieName) - .font(.system(size:20, weight: .bold)) - .foregroundStyle(Color.black) - - HStack { - movieLike - - Spacer() - - Text("예매율 \(String(format: "%.1f", movieInfo.movieReserCount))%") - .font(.system(size:9, weight: .regular)) - .foregroundStyle(Color.black) - } - } - .frame(width: 120, height: 216) - } - - - private var movieLike: some View { - HStack(spacing: 6) { - Image(systemName: "heart.fill") - .foregroundStyle(Color.red) - .frame(width: 15, height: 14) - - Text("\(movieInfo.movieLike)") - .font(.system(size:9, weight: .regular)) - .foregroundStyle(Color.black) - } - } -} - -#Preview { - MovieCard(movieInfo: .init(movieImage: .init(.mickey), movieName: "미키", movieLike: 972, movieReserCount: 30.8)) -} diff --git a/yoon/week2/week2_Practice/Movie/MovieModel.swift b/yoon/week2/week2_Practice/Movie/MovieModel.swift deleted file mode 100644 index 17f977b..0000000 --- a/yoon/week2/week2_Practice/Movie/MovieModel.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// MovieModel.swift -// week2_Practice -// -// Created by 정승윤 on 9/22/25. -// - -import Foundation -import SwiftUI - -struct MovieModel { - let movieImage: Image - let movieName: String - let movieLike: Int - let movieReserCount: Double -} - diff --git a/yoon/week2/week2_Practice/Movie/MovieView.swift b/yoon/week2/week2_Practice/Movie/MovieView.swift deleted file mode 100644 index d7df607..0000000 --- a/yoon/week2/week2_Practice/Movie/MovieView.swift +++ /dev/null @@ -1,98 +0,0 @@ -// -// MovieView.swift -// week2_Practice -// -// Created by 정승윤 on 9/22/25. -// - -import Observation -import SwiftUI - -struct MovieView: View { - @AppStorage("movieName") private var movieName: String = "" // 영화 이름 저장 - private var viewModel: MovieViewModel = .init() // movieModel 관리 - - var body: some View { - VStack{ - MovieCard(movieInfo: viewModel.movieModel[viewModel.currentIndex]) - // 현재 선택된 영화 이미지, 정보 - // MovieCard의 레이아웃만 사용 - // 영화 정보는 뷰 모델에서의 현재 인덱스의 정보 - leftRightChange - - settingMovie - - printAppStorageValue - } - .padding() - } - - private var leftRightChange: some View { - HStack { - Group { - makeChevron(name: "chevron.left", action: viewModel.previousMovie) - - Spacer() - - Text("영화 바꾸기") - .font(.system(size: 20, weight: .regular)) - - Spacer() - - makeChevron(name: "chevron.right", action: viewModel.nextMovie) - } - .foregroundStyle(Color.black) - } - .frame(width: 256) - .padding(.vertical, 17) - .padding(.horizontal, 22) - } - - private func makeChevron(name:String, action: @escaping () -> Void) -> some View { - Button(action: { - action() - }, label: { - Image(systemName: name) - .resizable() - .frame(width: 17.47, height: 29.73) - }) - } - - private var settingMovie: some View { - Button(action: { - self.movieName = viewModel.movieModel[viewModel.currentIndex].movieName - }, label: { - Text("대표 영화로 설정") - .font(.system(size:20, weight: .regular)) - .foregroundStyle(Color.black) - .padding(.top, 21) - .padding(.bottom, 20) - .padding(.leading, 53) - .padding(.trailing, 52) - .overlay(content: { - RoundedRectangle(cornerRadius: 20) - .fill(Color.clear) - .stroke(Color.black, style: .init(lineWidth:1)) - }) - }) - } - - private var printAppStorageValue: some View { - VStack(spacing:17) { - Text("@AppStorage에 저장된 영화") - .font(.system(size:30, weight: .regular)) - .foregroundStyle(Color.black) - - Text("현재 저장된 영화 : \(movieName)") - .font(.system(size: 20, weight: .regular)) - .foregroundStyle(Color.red) - - } - } -} - -#Preview { - MovieView() -} - - diff --git a/yoon/week2/week2_Practice/Movie/MovieViewModel.swift b/yoon/week2/week2_Practice/Movie/MovieViewModel.swift deleted file mode 100644 index 0943a48..0000000 --- a/yoon/week2/week2_Practice/Movie/MovieViewModel.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// MovieViewModel.swift -// week2_Practice -// -// Created by 정승윤 on 9/22/25. -// - -import Foundation -import SwiftUI - -@Observable -class MovieViewModel { - var currentIndex: Int = 0 - - let movieModel: [MovieModel] = [ - .init(movieImage: .init(.mickey), movieName: "미키", movieLike: 972, movieReserCount: 30.8), - .init(movieImage: .init(.toystory), movieName: "토이스토리", movieLike: 999, movieReserCount: 99.8), - .init(movieImage: .init(.brutalist), movieName: "브루탈리스트", movieLike: 302, movieReserCount: 24.8), - .init(movieImage: .init(.snowWhite), movieName: "백설공주", movieLike: 302, movieReserCount: 3.8), - .init(movieImage: .init(.whiplash), movieName: "위플래시", movieLike: 604, movieReserCount: 62.2), - .init(movieImage: .init(.conclave), movieName: "콘클라베", movieLike: 392, movieReserCount: 43.9), - .init(movieImage: .init(.theFall), movieName: "더폴", movieLike: 30, movieReserCount: 2.1) - ] - - public func nextMovie() { - currentIndex = (currentIndex + 1) % movieModel.count - } - - public func previousMovie() { - currentIndex = (currentIndex - 1 + movieModel.count) % movieModel.count - } - -} - - diff --git a/yoon/week2/week2_Practice/Preview Content/Preview Assets.xcassets/Contents.json b/yoon/week2/week2_Practice/Preview Content/Preview Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/yoon/week2/week2_Practice/Preview Content/Preview Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week2/week2_Practice/week2_PracticeApp.swift b/yoon/week2/week2_Practice/week2_PracticeApp.swift deleted file mode 100644 index 80390d2..0000000 --- a/yoon/week2/week2_Practice/week2_PracticeApp.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// week2_PracticeApp.swift -// week2_Practice -// -// Created by 정승윤 on 9/20/25. -// - -import SwiftUI - -@main -struct week2_PracticeApp: App { - var body: some Scene { - WindowGroup { - UserView() - } - } -} diff --git a/yoon/week3/week3_grammar.playground/Contents.swift b/yoon/week3/week3_grammar.playground/Contents.swift deleted file mode 100644 index 893471b..0000000 --- a/yoon/week3/week3_grammar.playground/Contents.swift +++ /dev/null @@ -1,52 +0,0 @@ -import UIKit - -//var Dict: [String:Int] = ["Alice":80,"Bob":80,"Min":80] -// -//Dict["Alice"] = 95 -// -//Dict["Bob"] = nil -// -//for (name,score) in Dict { -// print("\(name)의 점수 \(score)") -//} - -//Set를 사용하여 중복되지 않는 과일 목록을 관리하는 프로그램 작성 -// -//1. Set를 사용하여 “Apple”, “Banana”, “Orange”를 추가하는 과일 목록을 선언 -//2. “Banana”가 이미 존재하는지 확인하고, 존재하면 “Mango”를 추가하세요 -//3. 세트에 있는 모든 과일을 반복문으로 출력하세요 - -//var FruitSet: Set = ["Apple", "Banana", "Orange"] -// -//if FruitSet.contains("Banana") { -// FruitSet.insert( "Mango" ) -//} -// -//for (fruit) in FruitSet { -// print(fruit) -//} - -// 1. 네트워크 요청 상태 열거형 정의 - -enum State { - case idle - case requesting - case success(String) - case failure(String) -} - -// 2. 네트워크 요청 상태를 나타내는 변수 선언 - -var currentState: State = .success("데이터 로드 완료") - -// 3. switch문으로 상태에 맞는 출력 작성 -switch currentState { -case .idle: - print("현재 대기 상태입니다.") -case .requesting: - print("요청 중입니다...") -case .success(let success): - print("요청 성공: \(success)") -case .failure(let error): - print("요청 실패: \(error)") -} diff --git a/yoon/week3/week3_grammar.playground/contents.xcplayground b/yoon/week3/week3_grammar.playground/contents.xcplayground deleted file mode 100644 index 7f43ce8..0000000 --- a/yoon/week3/week3_grammar.playground/contents.xcplayground +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/yoon/week3/week3_grammar.playground/playground.xcworkspace/contents.xcworkspacedata b/yoon/week3/week3_grammar.playground/playground.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index ca3329e..0000000 --- a/yoon/week3/week3_grammar.playground/playground.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/yoon/week3/week3_practice/week3_practice.xcodeproj/project.pbxproj b/yoon/week3/week3_practice/week3_practice.xcodeproj/project.pbxproj deleted file mode 100644 index a70458e..0000000 --- a/yoon/week3/week3_practice/week3_practice.xcodeproj/project.pbxproj +++ /dev/null @@ -1,329 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXFileReference section */ - 3474DD452E8A7D6500824DB4 /* week3_practice.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = week3_practice.app; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 3474DD472E8A7D6500824DB4 /* week3_practice */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = week3_practice; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 3474DD422E8A7D6500824DB4 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 3474DD3C2E8A7D6500824DB4 = { - isa = PBXGroup; - children = ( - 3474DD472E8A7D6500824DB4 /* week3_practice */, - 3474DD462E8A7D6500824DB4 /* Products */, - ); - sourceTree = ""; - }; - 3474DD462E8A7D6500824DB4 /* Products */ = { - isa = PBXGroup; - children = ( - 3474DD452E8A7D6500824DB4 /* week3_practice.app */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 3474DD442E8A7D6500824DB4 /* week3_practice */ = { - isa = PBXNativeTarget; - buildConfigurationList = 3474DD532E8A7D6600824DB4 /* Build configuration list for PBXNativeTarget "week3_practice" */; - buildPhases = ( - 3474DD412E8A7D6500824DB4 /* Sources */, - 3474DD422E8A7D6500824DB4 /* Frameworks */, - 3474DD432E8A7D6500824DB4 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 3474DD472E8A7D6500824DB4 /* week3_practice */, - ); - name = week3_practice; - packageProductDependencies = ( - ); - productName = week3_practice; - productReference = 3474DD452E8A7D6500824DB4 /* week3_practice.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 3474DD3D2E8A7D6500824DB4 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1620; - LastUpgradeCheck = 1620; - TargetAttributes = { - 3474DD442E8A7D6500824DB4 = { - CreatedOnToolsVersion = 16.2; - }; - }; - }; - buildConfigurationList = 3474DD402E8A7D6500824DB4 /* Build configuration list for PBXProject "week3_practice" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 3474DD3C2E8A7D6500824DB4; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - productRefGroup = 3474DD462E8A7D6500824DB4 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 3474DD442E8A7D6500824DB4 /* week3_practice */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 3474DD432E8A7D6500824DB4 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 3474DD412E8A7D6500824DB4 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 3474DD512E8A7D6600824DB4 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.2; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 3474DD522E8A7D6600824DB4 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.2; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 3474DD542E8A7D6600824DB4 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"week3_practice/Preview Content\""; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "UMC.week3-practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 3474DD552E8A7D6600824DB4 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"week3_practice/Preview Content\""; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "UMC.week3-practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 3474DD402E8A7D6500824DB4 /* Build configuration list for PBXProject "week3_practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3474DD512E8A7D6600824DB4 /* Debug */, - 3474DD522E8A7D6600824DB4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 3474DD532E8A7D6600824DB4 /* Build configuration list for PBXNativeTarget "week3_practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3474DD542E8A7D6600824DB4 /* Debug */, - 3474DD552E8A7D6600824DB4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 3474DD3D2E8A7D6500824DB4 /* Project object */; -} diff --git a/yoon/week3/week3_practice/week3_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/yoon/week3/week3_practice/week3_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/yoon/week3/week3_practice/week3_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/yoon/week3/week3_practice/week3_practice/Assets.xcassets/AccentColor.colorset/Contents.json b/yoon/week3/week3_practice/week3_practice/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/yoon/week3/week3_practice/week3_practice/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week3/week3_practice/week3_practice/Assets.xcassets/AppIcon.appiconset/Contents.json b/yoon/week3/week3_practice/week3_practice/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/yoon/week3/week3_practice/week3_practice/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week3/week3_practice/week3_practice/Assets.xcassets/Contents.json b/yoon/week3/week3_practice/week3_practice/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/yoon/week3/week3_practice/week3_practice/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week3/week3_practice/week3_practice/Assets.xcassets/appleLogo.imageset/Contents.json b/yoon/week3/week3_practice/week3_practice/Assets.xcassets/appleLogo.imageset/Contents.json deleted file mode 100644 index c6f97a0..0000000 --- a/yoon/week3/week3_practice/week3_practice/Assets.xcassets/appleLogo.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Vector.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week3/week3_practice/week3_practice/Assets.xcassets/appleLogo.imageset/Vector.pdf b/yoon/week3/week3_practice/week3_practice/Assets.xcassets/appleLogo.imageset/Vector.pdf deleted file mode 100644 index 41a5b3d..0000000 Binary files a/yoon/week3/week3_practice/week3_practice/Assets.xcassets/appleLogo.imageset/Vector.pdf and /dev/null differ diff --git a/yoon/week3/week3_practice/week3_practice/Colors.xcassets/Contents.json b/yoon/week3/week3_practice/week3_practice/Colors.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/yoon/week3/week3_practice/week3_practice/Colors.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowGreen.colorset/Contents.json b/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowGreen.colorset/Contents.json deleted file mode 100644 index 47bd126..0000000 --- a/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowGreen.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0x80", - "red" : "0x00" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowIndigo.colorset/Contents.json b/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowIndigo.colorset/Contents.json deleted file mode 100644 index ff49512..0000000 --- a/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowIndigo.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x52", - "green" : "0x00", - "red" : "0x4B" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowOrange.colorset/Contents.json b/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowOrange.colorset/Contents.json deleted file mode 100644 index 7db8b95..0000000 --- a/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowOrange.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0xA5", - "red" : "0xFF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowPurple.colorset/Contents.json b/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowPurple.colorset/Contents.json deleted file mode 100644 index cab4787..0000000 --- a/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowPurple.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xEE", - "green" : "0x82", - "red" : "0xEE" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowRed.colorset/Contents.json b/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowRed.colorset/Contents.json deleted file mode 100644 index 51bb24a..0000000 --- a/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowRed.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0x00", - "red" : "0xFF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowYellow.colorset/Contents.json b/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowYellow.colorset/Contents.json deleted file mode 100644 index 6564063..0000000 --- a/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowYellow.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0x00", - "green" : "0xFF", - "red" : "0xFF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowblue.colorset/Contents.json b/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowblue.colorset/Contents.json deleted file mode 100644 index 9382b89..0000000 --- a/yoon/week3/week3_practice/week3_practice/Colors.xcassets/rainbowblue.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0xFF", - "green" : "0x00", - "red" : "0x00" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week3/week3_practice/week3_practice/CombineLazyStack.swift b/yoon/week3/week3_practice/week3_practice/CombineLazyStack.swift deleted file mode 100644 index 6c6fdb5..0000000 --- a/yoon/week3/week3_practice/week3_practice/CombineLazyStack.swift +++ /dev/null @@ -1,74 +0,0 @@ -// -// CombineLazyStack.swift -// week3_practice -// -// Created by 정승윤 on 9/29/25. -// - -//import Foundation -//import SwiftUI -// -//struct CombineLazyStack: View { -// -// var body: some View { -// ScrollView { -// LazyVStack(spacing: 20, content: { -// ForEach(1...10, id: \.self) { rowIndex in -// VStack(alignment: .leading, content: { -// Text("섹션 \(rowIndex)") -// .font(.headline) -// -// ScrollView(.horizontal, content: { -// LazyHStack(spacing: 10, content: { -// ForEach(1...10, id: \.self) { columnIndex in -// Text("아이템 :\(columnIndex)") -// .frame(width: 80, height: 80) -// .background(Color.blue.opacity(0.3)) -// .clipShape(RoundedRectangle(cornerRadius: 20)) -// } -// }) -// .padding(.bottom, 10) -// }) -// }) -// } -// }) -// } -// } -//} -// -//#Preview { -// CombineLazyStack() -//} - -import SwiftUI - -struct CombineLazyStack: View { - @State private var path = NavigationPath() - - var body: some View { - NavigationStack(path: $path) { - VStack { - Button("Go to Detail") { - path.append("Detail") - } - } - .navigationDestination(for: String.self) { value in - DetailView(title: value) - } - .navigationTitle("Home") - } - } -} - -struct DetailView: View { - let title: String - - var body: some View { - Text("This is \(title) View") - .navigationTitle(title) - } -} - -#Preview { - CombineLazyStack() -} diff --git a/yoon/week3/week3_practice/week3_practice/LazyHStackExample.swift b/yoon/week3/week3_practice/week3_practice/LazyHStackExample.swift deleted file mode 100644 index 35eb900..0000000 --- a/yoon/week3/week3_practice/week3_practice/LazyHStackExample.swift +++ /dev/null @@ -1,28 +0,0 @@ -// -// LazyHStackExample.swift -// week3_practice -// -// Created by 정승윤 on 9/29/25. -// - -import Foundation -import SwiftUI - -struct LazyHStackExample: View { - - var body: some View { - ScrollView(.horizontal, content: { - LazyHStack(spacing: 15, content: { - ForEach(1...50, id: \.self) { index in - Text("아이템: \(index)") - .background(Color.green) - .frame(width: 100, height: 100) - } - }) - }) - } -} - -#Preview { - LazyHStackExample() -} diff --git a/yoon/week3/week3_practice/week3_practice/LazyVStackExample.swift b/yoon/week3/week3_practice/week3_practice/LazyVStackExample.swift deleted file mode 100644 index 49c1252..0000000 --- a/yoon/week3/week3_practice/week3_practice/LazyVStackExample.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// LazyVStackExample.swift -// week3_practice -// -// Created by 정승윤 on 9/29/25. -// - -import SwiftUI - -struct LazyVstackExample: View { - - var body: some View { - ScrollView(.vertical, content: { - LazyVStack(spacing: 15, content: { - ForEach(1...50, id: \.self) { index in - Text("아이템: \(index)") - .background(Color.green) - .frame(width: 100, height: 100) - } - }) - }) - } -} - -#Preview { - LazyVstackExample() -} diff --git a/yoon/week3/week3_practice/week3_practice/Preview Content/Preview Assets.xcassets/Contents.json b/yoon/week3/week3_practice/week3_practice/Preview Content/Preview Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/yoon/week3/week3_practice/week3_practice/Preview Content/Preview Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week3/week3_practice/week3_practice/SimpleListView.swift b/yoon/week3/week3_practice/week3_practice/SimpleListView.swift deleted file mode 100644 index cbc0b28..0000000 --- a/yoon/week3/week3_practice/week3_practice/SimpleListView.swift +++ /dev/null @@ -1,159 +0,0 @@ -// -// ContentView.swift -// week3_practice -// -// Created by 정승윤 on 9/29/25. -// - -//import SwiftUI -// -//struct SimpleListView: View { -// let fruits = ["🍎 Apple", "🍌 Banana", "🍊 Orange", "🍇 Grape", "🍓 Strawberry"] -// -// var body: some View { -// List { -// ForEach(fruits, id: \.self) { fruit in -// Text(fruit) -// .font(.title2) -// } -// } -// } -//} -// -//struct ForEachArrayView_Previews: PreviewProvider { -// static var previews: some View { -// SimpleListView() -// } -//} - -//import SwiftUI -// -//struct SimpleListView: View { -// var body: some View { -// ScrollView { -// VStack(spacing: 20) { -// ForEach(1...50, id: \.self) { index in -// Text("Item \(index)") -// .frame(maxWidth: .infinity) -// .background(Color.gray.opacity(0.2)) -// } -// } -// } -// .scrollIndicators(.visible, axes: .vertical) // 스크롤 표시기 활성화 -// .contentMargins(.horizontal, 0, for: .scrollIndicators) -// } -//} -// -//#Preview { -// SimpleListView() -//} - -//import SwiftUI -// -//struct SimpleListView: View { -// @State private var scrollToIndex: Int = 0 -// -// var body: some View { -// VStack { -// ScrollViewReader { proxy in -// ScrollView { -// LazyVStack { -// ForEach(0..<50, id: \.self) { index in -// Text("Item \(index)") -// .frame(maxWidth: .infinity) -// .background(Color.blue.opacity(0.3)) -// .id(index) // 각 항목에 ID 부여 -// .padding() -// } -// } -// } -// .onChange(of: scrollToIndex) { oldIndex, newIndex in -// withAnimation { -// proxy.scrollTo(newIndex, anchor: .top) // 지정된 index로 스크롤 이동 -// } -// } -// } -// -// HStack { -// Button("Top") { scrollToIndex = 0 } -// Button("Middle") { scrollToIndex = 25 } -// Button("Bottom") { scrollToIndex = 49 } -// } -// } -// } -//} -// -//#Preview { -// SimpleListView() -//} - -//import SwiftUI -// -//struct SimpleListView: View { -// var body: some View { -// ScrollViewReader { proxy in -// ScrollView { -// LazyVStack { -// ForEach(1...50, id: \.self) { index in -// Text("Item \(index)") -// .font(.title) -// .frame(maxWidth: .infinity) -// .padding() -// .background(Color.blue.opacity(0.2)) -// .padding(.horizontal) -// .id(index) // 각 아이템에 ID를 부여해야 scrollTo가 동작!! -// } -// } -// } -// .onAppear { -// DispatchQueue.main.asyncAfter(deadline: .now() + 2) { -// withAnimation { -// proxy.scrollTo(25, anchor: .center) // 25번 아이템으로 이동!! -// } -// } -// } -// } -// } -//} -// -//#Preview { -// SimpleListView() -//} - -import SwiftUI - -struct SimpleListView: View { - @State private var scrollOffset: CGFloat = 0 - - var body: some View { - VStack { - Text("Offset: \(Int(scrollOffset))") - .font(.headline) - - ScrollView { - LazyVStack { - ForEach(0..<50, id: \.self) { index in - Text("Item \(index)") - .frame(maxWidth: .infinity) - .background(Color.green.opacity(0.3)) - } - } - .background( - GeometryReader { proxy in - Color.clear - .onAppear { - scrollOffset = proxy.frame(in: .global).minY - } - .onChange(of: proxy.frame(in: .global).minY) { oldValue, newValue in - scrollOffset = newValue - } - } - ) - } - } - } -} - -#Preview { - SimpleListView() -} diff --git a/yoon/week3/week3_practice/week3_practice/Views/ColorNavigationView.swift b/yoon/week3/week3_practice/week3_practice/Views/ColorNavigationView.swift deleted file mode 100644 index d739719..0000000 --- a/yoon/week3/week3_practice/week3_practice/Views/ColorNavigationView.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// ColorNavigationView.swift -// week3_practice -// -// Created by 정승윤 on 9/30/25. -// - -import SwiftUI -import Observation - -struct ColorNavigationView: View { - - @Bindable var viewModel: RainbowViewModel - @Environment(\.dismiss) var dismiss - - var body: some View { - VStack(spacing: 70) { - if let selectedRainbowModel = viewModel.selectedRainbowModel { - Text("현재 선택된 색상 \n\(selectedRainbowModel.returnColorName())") - .font(.title) - .foregroundStyle(Color.black) - - Button(action: { - viewModel.appleLogoColor = selectedRainbowModel.returnColor() - dismiss() - }, label: { - Text("사과 색 바꾸기") - .padding(.vertical, 43) - .padding(.horizontal, 36) - .overlay(content: { - RoundedRectangle(cornerRadius: 30) - .fill(Color.clear) - .stroke(Color.black, style: .init(lineWidth: 1)) - }) - }) - } - } - .navigationTitle("색 네비") - } -} -#Preview { - ColorNavigationView(viewModel: RainbowViewModel()) -} - - diff --git a/yoon/week3/week3_practice/week3_practice/Views/RainbowModel.swift b/yoon/week3/week3_practice/week3_practice/Views/RainbowModel.swift deleted file mode 100644 index ee6927f..0000000 --- a/yoon/week3/week3_practice/week3_practice/Views/RainbowModel.swift +++ /dev/null @@ -1,60 +0,0 @@ -// -// RainbowModel.swift -// week3_practice -// -// Created by 정승윤 on 9/30/25. -// - -import Foundation -import SwiftUI - -enum RainbowModel: CaseIterable { - case red - case orange - case yellow - case green - case blue - case indigo - case purple - - func returnColor() -> Color { - switch self { - case .red: - return Color.rainbowRed - case .orange: - return Color.rainbowOrange - case .yellow: - return Color.rainbowYellow - case .green: - return Color.rainbowGreen - case .blue: - return Color.rainbowBlue - case .indigo: - return Color.rainbowIndigo - case .purple: - return Color.rainbowPurple - - } - } - - func returnColorName() -> String { - switch self { - case .red: - return "빨강" - case .orange: - return "주황" - case .yellow: - return "노랑" - case .green: - return "초록" - case .blue: - return "파랑" - case .indigo: - return "남색" - case .purple: - return "보라" - } - } -} - - diff --git a/yoon/week3/week3_practice/week3_practice/Views/RainbowView.swift b/yoon/week3/week3_practice/week3_practice/Views/RainbowView.swift deleted file mode 100644 index b091e0c..0000000 --- a/yoon/week3/week3_practice/week3_practice/Views/RainbowView.swift +++ /dev/null @@ -1,81 +0,0 @@ -import SwiftUI - -struct RainbowView: View { - - var viewModel: RainbowViewModel = .init() - @State private var navigationTrue: Bool = false - - - var body: some View { - NavigationStack { - VStack { - colorCardGroup - - Spacer() - - bottomSelecteColorGroup - } - .safeAreaPadding(EdgeInsets(top: 47, leading: 15, bottom: 43, trailing: 15)) - .navigationDestination(isPresented: $navigationTrue, destination: { - ColorNavigationView(viewModel: viewModel) - }) - } - } - - /// 무지개 일곱가지 색상 - private var colorCardGroup: some View { - LazyVGrid(columns: Array(repeating: GridItem(.flexible(), spacing: 40), count: 3), spacing: 26, content: { - ForEach(RainbowModel.allCases, id: \.self, content: { rainbow in - makeColorCard(rainbow) - .onTapGesture { - viewModel.selectedRainbowModel = rainbow - self.navigationTrue.toggle() - } - }) - }) - } - - /// 반복 생성을 재사용하기 위한 무지개 색상 카드 뷰 - /// - Parameter model: 무지개 색을 담고 있는 모델 - /// - Returns: 색을 표현하는 카드 뷰 반환 - private func makeColorCard(_ model: RainbowModel) -> some View { - VStack(spacing: 6, content: { - Rectangle() - .fill(model.returnColor()) - - Text(model.returnColorName()) - .foregroundStyle(Color.black) - .font(.title) - }) - .frame(maxWidth: .infinity, minHeight: 110) - } - - /// 하단 사과로고 및 선택된 색상 텍스트 그룹 - private var bottomSelecteColorGroup: some View { - VStack(spacing: 70, content: { - Image(.appleLogo) - .renderingMode(.template) - .fixedSize() - .foregroundStyle(viewModel.appleLogoColor ?? Color.black) - - Text("현재 선택된 색상 : \(selectedColorName())") - .font(.title) - .foregroundStyle(Color.black) - }) - } - - /// 옵셔널에 대해 값 처리를 위한 String 반환 함수 - /// - Returns: 옵셔널 값에 따른 두 가지 중 하나 값 반환 - private func selectedColorName() -> String { - if let name = viewModel.selectedRainbowModel { - return name.returnColorName() - } else { - return "아무것도 없음" - } - } - -} - -#Preview { - RainbowView() -} diff --git a/yoon/week3/week3_practice/week3_practice/Views/RainbowViewModel.swift b/yoon/week3/week3_practice/week3_practice/Views/RainbowViewModel.swift deleted file mode 100644 index 0b88cee..0000000 --- a/yoon/week3/week3_practice/week3_practice/Views/RainbowViewModel.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// RainbowViewModel.swift -// week3_practice -// -// Created by 정승윤 on 9/30/25. -// - -import Foundation -import SwiftUI - -@Observable -class RainbowViewModel { - var selectedRainbowModel: RainbowModel? - var appleLogoColor: Color? -} diff --git a/yoon/week3/week3_practice/week3_practice/week3_practiceApp.swift b/yoon/week3/week3_practice/week3_practice/week3_practiceApp.swift deleted file mode 100644 index 1141b4b..0000000 --- a/yoon/week3/week3_practice/week3_practice/week3_practiceApp.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// week3_practiceApp.swift -// week3_practice -// -// Created by 정승윤 on 9/29/25. -// - -import SwiftUI - -@main -struct week3_practiceApp: App { - var body: some Scene { - WindowGroup { - SimpleListView() - } - } -} diff --git a/yoon/week4/week4_grammar.playground/Contents.swift b/yoon/week4/week4_grammar.playground/Contents.swift deleted file mode 100644 index b3a0154..0000000 --- a/yoon/week4/week4_grammar.playground/Contents.swift +++ /dev/null @@ -1,123 +0,0 @@ -import UIKit - -//func calculateTotalPrice(total:Int, tip:Int) { -// print("최종 결제 금액 : \(tip + total)원") -//} -// -//func checkTemperature (temp:Int) { -// if temp >= 30 {print("덥다")} -// else if temp >= 15 {print("적당하다")} -// else {print("춥다")} -//} -// -//func printTravelBudget (city:String, Day:Int, Budget: Int) { -// print("\(city)에서의 총 여행 예산은 \(Budget)원입니다.") -//} -// -//func getCurrentDate () { -// let now=Date() -// let formatter = DateFormatter() -// formatter.dateFormat = "yyyy-MM-dd" -// print("오늘 날짜: \(formatter.string(from: now))") -//} -// -//calculateTotalPrice(total: 20, tip: 20) -//checkTemperature(temp: 25) -//printTravelBudget(city: "서울", Day: 3, Budget: 300000) -//getCurrentDate() - -//var addValue = {(number: Int) in -// var sum = 0 -// for i in 1...number { -// sum += i -// } -// return sum -//} - -//let addValue: (Int) -> Int = { (1...$0).reduce(0, +) } -// -//print(addValue(5)) -//let result = addValue(5) -//print(result) - -//class BankAccount { -//let accountNumber: String -//private var initialBalance: Double -// init(accountNumber: String, initialBalance: Double) { -// self.accountNumber = accountNumber -// self.initialBalance = initialBalance < 0 ? 0 : initialBalance -// } -// -//func deposit(amount: Double) { -// self.initialBalance += amount -// print("Deposited \(amount) Current balance: \( initialBalance)") -// } -// -// func withdraw(amount: Double) { -// if amount > initialBalance -// {print("Insufficient funds. Current balance : \(initialBalance)")} -// else { -// self.initialBalance -= amount -// print("Withdrawn \(amount), Current balance: \(initialBalance)") -// } -// } -//} -// -//let account = BankAccount(accountNumber: "123-456", initialBalance: 100.0) -// -//account.deposit(amount: 50.0) // 출력: "Deposited 50.0. Current balance: 150.0" -//account.withdraw(amount: 30.0) // 출력: "Withdrew 30.0. Current balance: 120.0" -//account.withdraw(amount: 200.0) // 출력: "Insufficient funds. Current balance: 120.0" - -struct Car { - var make: String - var model: String - var year: Int - var mileage: Double - var isRunning: Bool - - init(make: String, model: String, year: Int, mileage: Double, isRunning: Bool) { - self.make = make - self.model = model - self.year = year - self.mileage = mileage - self.isRunning = isRunning - } - - mutating func start() { - if isRunning == false { - isRunning = true - print("차 시동 걸림") - } - else { - print("차 이미 시동 중") - } - } - mutating func stop() { - if isRunning == true { - isRunning = false - print("차 시동 꺼짐") - } - else { - print("차 이미 꺼짐") - } - } - mutating func drive(distance: Double) { - if isRunning == true { - mileage += distance - print("이동거리 \(distance)km. 현재 mileage: \(mileage)km") - } - else { - print("이동 불가능. 차 시동 꺼짐") - } - } -} - -var myCar = Car(make: "한국", model: "KIA", year: 2024, mileage: 15000.0, isRunning: false) - -myCar.start() // 출력: "차 시동 걸림." -myCar.drive(distance: 100) // 출력: "이동거리 100 km. 현재 mileage: 15100 km" -myCar.stop() // 출력: "차 시동 꺼짐." -myCar.drive(distance: 50) // 출력: "이동 불가능. 차 시동 꺼짐." -myCar.start() // 출력: "차 시동 켜짐" -myCar.start() // 출력: "차 이미 시동 중." diff --git a/yoon/week4/week4_grammar.playground/contents.xcplayground b/yoon/week4/week4_grammar.playground/contents.xcplayground deleted file mode 100644 index 17a8039..0000000 --- a/yoon/week4/week4_grammar.playground/contents.xcplayground +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/yoon/week4/week4_grammar.playground/playground.xcworkspace/contents.xcworkspacedata b/yoon/week4/week4_grammar.playground/playground.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index ca3329e..0000000 --- a/yoon/week4/week4_grammar.playground/playground.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/yoon/week4/week4_practice/week4_practice.xcodeproj/project.pbxproj b/yoon/week4/week4_practice/week4_practice.xcodeproj/project.pbxproj deleted file mode 100644 index c1fcfec..0000000 --- a/yoon/week4/week4_practice/week4_practice.xcodeproj/project.pbxproj +++ /dev/null @@ -1,337 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXFileReference section */ - 340B0FA32E94F46800448E86 /* week4_practice.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = week4_practice.app; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 340B0FA52E94F46800448E86 /* week4_practice */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = week4_practice; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 340B0FA02E94F46800448E86 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 340B0F9A2E94F46800448E86 = { - isa = PBXGroup; - children = ( - 340B0FA52E94F46800448E86 /* week4_practice */, - 340B0FA42E94F46800448E86 /* Products */, - ); - sourceTree = ""; - }; - 340B0FA42E94F46800448E86 /* Products */ = { - isa = PBXGroup; - children = ( - 340B0FA32E94F46800448E86 /* week4_practice.app */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 340B0FA22E94F46800448E86 /* week4_practice */ = { - isa = PBXNativeTarget; - buildConfigurationList = 340B0FAE2E94F46A00448E86 /* Build configuration list for PBXNativeTarget "week4_practice" */; - buildPhases = ( - 340B0F9F2E94F46800448E86 /* Sources */, - 340B0FA02E94F46800448E86 /* Frameworks */, - 340B0FA12E94F46800448E86 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 340B0FA52E94F46800448E86 /* week4_practice */, - ); - name = week4_practice; - packageProductDependencies = ( - ); - productName = week4_practice; - productReference = 340B0FA32E94F46800448E86 /* week4_practice.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 340B0F9B2E94F46800448E86 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 2600; - LastUpgradeCheck = 2600; - TargetAttributes = { - 340B0FA22E94F46800448E86 = { - CreatedOnToolsVersion = 26.0.1; - }; - }; - }; - buildConfigurationList = 340B0F9E2E94F46800448E86 /* Build configuration list for PBXProject "week4_practice" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 340B0F9A2E94F46800448E86; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - productRefGroup = 340B0FA42E94F46800448E86 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 340B0FA22E94F46800448E86 /* week4_practice */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 340B0FA12E94F46800448E86 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 340B0F9F2E94F46800448E86 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 340B0FAC2E94F46A00448E86 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 26.0; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 340B0FAD2E94F46A00448E86 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 26.0; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 340B0FAF2E94F46A00448E86 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "UMC.week4-practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 340B0FB02E94F46A00448E86 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "UMC.week4-practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 340B0F9E2E94F46800448E86 /* Build configuration list for PBXProject "week4_practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 340B0FAC2E94F46A00448E86 /* Debug */, - 340B0FAD2E94F46A00448E86 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 340B0FAE2E94F46A00448E86 /* Build configuration list for PBXNativeTarget "week4_practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 340B0FAF2E94F46A00448E86 /* Debug */, - 340B0FB02E94F46A00448E86 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 340B0F9B2E94F46800448E86 /* Project object */; -} diff --git a/yoon/week4/week4_practice/week4_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/yoon/week4/week4_practice/week4_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/yoon/week4/week4_practice/week4_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/AccentColor.colorset/Contents.json b/yoon/week4/week4_practice/week4_practice/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/AppIcon.appiconset/Contents.json b/yoon/week4/week4_practice/week4_practice/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/Contents.json b/yoon/week4/week4_practice/week4_practice/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/brutalist.imageset/Contents.json b/yoon/week4/week4_practice/week4_practice/Assets.xcassets/brutalist.imageset/Contents.json deleted file mode 100644 index 4ff6933..0000000 --- a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/brutalist.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=브루탈리스트.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/brutalist.imageset/Property 1=\353\270\214\353\243\250\355\203\210\353\246\254\354\212\244\355\212\270.pdf" "b/yoon/week4/week4_practice/week4_practice/Assets.xcassets/brutalist.imageset/Property 1=\353\270\214\353\243\250\355\203\210\353\246\254\354\212\244\355\212\270.pdf" deleted file mode 100644 index a4ef433..0000000 Binary files "a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/brutalist.imageset/Property 1=\353\270\214\353\243\250\355\203\210\353\246\254\354\212\244\355\212\270.pdf" and /dev/null differ diff --git a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/conclave.imageset/Contents.json b/yoon/week4/week4_practice/week4_practice/Assets.xcassets/conclave.imageset/Contents.json deleted file mode 100644 index 0dc7ac7..0000000 --- a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/conclave.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=콘클라베.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/conclave.imageset/Property 1=\354\275\230\355\201\264\353\235\274\353\262\240.pdf" "b/yoon/week4/week4_practice/week4_practice/Assets.xcassets/conclave.imageset/Property 1=\354\275\230\355\201\264\353\235\274\353\262\240.pdf" deleted file mode 100644 index 6a57099..0000000 Binary files "a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/conclave.imageset/Property 1=\354\275\230\355\201\264\353\235\274\353\262\240.pdf" and /dev/null differ diff --git a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/mickey.imageset/Contents.json b/yoon/week4/week4_practice/week4_practice/Assets.xcassets/mickey.imageset/Contents.json deleted file mode 100644 index c84096e..0000000 --- a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/mickey.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=미키.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/mickey.imageset/Property 1=\353\257\270\355\202\244.pdf" "b/yoon/week4/week4_practice/week4_practice/Assets.xcassets/mickey.imageset/Property 1=\353\257\270\355\202\244.pdf" deleted file mode 100644 index 202b8f2..0000000 Binary files "a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/mickey.imageset/Property 1=\353\257\270\355\202\244.pdf" and /dev/null differ diff --git a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/snowWhite.imageset/Contents.json b/yoon/week4/week4_practice/week4_practice/Assets.xcassets/snowWhite.imageset/Contents.json deleted file mode 100644 index a4d6c2b..0000000 --- a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/snowWhite.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=백설공주.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/snowWhite.imageset/Property 1=\353\260\261\354\204\244\352\263\265\354\243\274.pdf" "b/yoon/week4/week4_practice/week4_practice/Assets.xcassets/snowWhite.imageset/Property 1=\353\260\261\354\204\244\352\263\265\354\243\274.pdf" deleted file mode 100644 index 82a5237..0000000 Binary files "a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/snowWhite.imageset/Property 1=\353\260\261\354\204\244\352\263\265\354\243\274.pdf" and /dev/null differ diff --git a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/theFall.imageset/Contents.json b/yoon/week4/week4_practice/week4_practice/Assets.xcassets/theFall.imageset/Contents.json deleted file mode 100644 index 492242a..0000000 --- a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/theFall.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=더폴.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/theFall.imageset/Property 1=\353\215\224\355\217\264.pdf" "b/yoon/week4/week4_practice/week4_practice/Assets.xcassets/theFall.imageset/Property 1=\353\215\224\355\217\264.pdf" deleted file mode 100644 index c212e91..0000000 Binary files "a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/theFall.imageset/Property 1=\353\215\224\355\217\264.pdf" and /dev/null differ diff --git a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/toystory.imageset/Contents.json b/yoon/week4/week4_practice/week4_practice/Assets.xcassets/toystory.imageset/Contents.json deleted file mode 100644 index 198c7d7..0000000 --- a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/toystory.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "Property 1=토이스토리.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/toystory.imageset/Property 1=\355\206\240\354\235\264\354\212\244\355\206\240\353\246\254.pdf" "b/yoon/week4/week4_practice/week4_practice/Assets.xcassets/toystory.imageset/Property 1=\355\206\240\354\235\264\354\212\244\355\206\240\353\246\254.pdf" deleted file mode 100644 index af65916..0000000 Binary files "a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/toystory.imageset/Property 1=\355\206\240\354\235\264\354\212\244\355\206\240\353\246\254.pdf" and /dev/null differ diff --git a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/whiplash.imageset/Contents.json b/yoon/week4/week4_practice/week4_practice/Assets.xcassets/whiplash.imageset/Contents.json deleted file mode 100644 index be343c5..0000000 --- a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/whiplash.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "image 5.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/whiplash.imageset/image 5.pdf b/yoon/week4/week4_practice/week4_practice/Assets.xcassets/whiplash.imageset/image 5.pdf deleted file mode 100644 index b183760..0000000 Binary files a/yoon/week4/week4_practice/week4_practice/Assets.xcassets/whiplash.imageset/image 5.pdf and /dev/null differ diff --git a/yoon/week4/week4_practice/week4_practice/ContentView.swift b/yoon/week4/week4_practice/week4_practice/ContentView.swift deleted file mode 100644 index 7c03e10..0000000 --- a/yoon/week4/week4_practice/week4_practice/ContentView.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// ContentView.swift -// week4_practice -// -// Created by 정승윤 on 10/7/25. -// - -import SwiftUI - -struct ContentView: View { - var body: some View { - VStack { - Image(systemName: "globe") - .imageScale(.large) - .foregroundStyle(.tint) - Text("Hello, world!") - } - .padding() - } -} - -#Preview { - ContentView() -} diff --git a/yoon/week4/week4_practice/week4_practice/ListFlowView.swift b/yoon/week4/week4_practice/week4_practice/ListFlowView.swift deleted file mode 100644 index 1679b7d..0000000 --- a/yoon/week4/week4_practice/week4_practice/ListFlowView.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// ListFlowView.swift -// week4_practice -// -// Created by 정승윤 on 10/7/25. -// - -import SwiftUI -import Combine - -struct ListFlowView: View { - @StateObject private var vm = ListFlowViewModel() - - var body: some View { - VStack(spacing: 12) { - if vm.isLoading { - ProgressView("불러오는 중…") - .padding(.vertical, 8) - } - - if let err = vm.errorMessage { - HStack(spacing: 8) { - Image(systemName: "exclamationmark.triangle.fill") - Text(err) - .fixedSize(horizontal: false, vertical: true) - } - .foregroundStyle(.red) - .padding(.horizontal) - } - - List(vm.items, id: \.self) { item in - Text(item) - } - .overlay { - if vm.items.isEmpty && !vm.isLoading && vm.errorMessage == nil { - ContentUnavailableView( - "항목이 없습니다", - systemImage: "tray", - description: Text( - "아래 버튼으로 데이터를 불러와 보세요.")) - } - } - - HStack { - Button { - vm.onReloadTap() - } label: { - Label("다시 불러오기", systemImage: "arrow.clockwise") - .frame(maxWidth: .infinity) - } - .buttonStyle(.borderedProminent) - .disabled(vm.isLoading) - - Button(role: .destructive) { - vm.errorMessage = nil - vm.items = [] - } label: { - Label("초기화", systemImage: "xmark.circle") - .frame(maxWidth: .infinity) - } - .buttonStyle(.bordered) - .disabled(vm.isLoading) - } - .padding(.horizontal) - .padding(.bottom, 12) - } - } -} - -#Preview { - ListFlowView() -} diff --git a/yoon/week4/week4_practice/week4_practice/ListFlowViewModel.swift b/yoon/week4/week4_practice/week4_practice/ListFlowViewModel.swift deleted file mode 100644 index c35c80c..0000000 --- a/yoon/week4/week4_practice/week4_practice/ListFlowViewModel.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// ListFlowViewModel.swift -// week4_practice -// -// Created by 정승윤 on 10/7/25. -// - -import Combine -import SwiftUI - -final class ListFlowViewModel: ObservableObject { - @Published var items: [String] = [] - @Published var isLoading: Bool = false - @Published var errorMessage: String? - - @Published private var reloadTick: Int = 0 - private var bag = Set() - - init() { - $reloadTick - .map { _ in - Self.mockLoad() - .handleEvents( - receiveSubscription: { _ in self.isLoading = true }, - receiveCompletion: { _ in self.isLoading = false }, - receiveCancel: { self.isLoading = false } - ) - } - .switchToLatest() - .receive(on: DispatchQueue.main) - .sink { [weak self] completion in - if case .failure(let e) = completion { - self?.errorMessage = e.localizedDescription - } - } receiveValue: { [weak self] values in - self?.errorMessage = nil - self?.items = values - } - .store(in: &bag) - } - - func onReloadTap() { reloadTick &+= 1 } - - private static func mockLoad() -> AnyPublisher<[String], Error> { - Deferred { - Future { promise in - DispatchQueue.global().asyncAfter(deadline: .now() + 0.5) { - promise(.success(["A", "B", "C"])) - } - } - } - .eraseToAnyPublisher() - } -} diff --git a/yoon/week4/week4_practice/week4_practice/MovieModel.swift b/yoon/week4/week4_practice/week4_practice/MovieModel.swift deleted file mode 100644 index 6afca85..0000000 --- a/yoon/week4/week4_practice/week4_practice/MovieModel.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// MovieModel.swift -// week4_practice -// -// Created by 정승윤 on 10/7/25. -// - -import Foundation -import SwiftUI - -struct MovieModel: Identifiable { - let id: UUID = .init() - let movieImage: Image - let title: String - let rate: Double -} diff --git a/yoon/week4/week4_practice/week4_practice/MovieSearchView.swift b/yoon/week4/week4_practice/week4_practice/MovieSearchView.swift deleted file mode 100644 index bbe17d3..0000000 --- a/yoon/week4/week4_practice/week4_practice/MovieSearchView.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// MovieSearchView.swift -// week4_practice -// -// Created by 정승윤 on 10/7/25. -// - -import Foundation -import SwiftUI -import Combine - -struct MovieSearchView: View { - @StateObject private var vm = MovieSearchViewModel() - - var body: some View { - NavigationStack { - VStack(spacing: 12) { - TextField("영화명을 입력하세요", text: $vm.query) - .textFieldStyle(RoundedBorderTextFieldStyle()) - .padding(.horizontal) - - if vm.isloading { - ProgressView("검색중...") - } - - if let error = vm.errorMessage { - Text(error).foregroundStyle(.red) - } - - List(vm.results, id: \.id) { movie in - HStack { - movie.movieImage - .resizable() - .frame(width: 40, height: 56) - - VStack(alignment: .leading) { - Text(movie.title).font(.headline) - - Spacer() - - Text(String(format:"%.1f", movie.rate)).font(.subheadline).bold() - } - .padding(.horizontal,10) - } - } - } - .navigationTitle("영화 검색") - } - } -} -#Preview { - MovieSearchView() -} diff --git a/yoon/week4/week4_practice/week4_practice/MovieSearchViewModel.swift b/yoon/week4/week4_practice/week4_practice/MovieSearchViewModel.swift deleted file mode 100644 index 02c9114..0000000 --- a/yoon/week4/week4_practice/week4_practice/MovieSearchViewModel.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// MovieSearchViewModel.swift -// week4_practice -// -// Created by 정승윤 on 10/7/25. -// - -import Foundation -import SwiftUI -import Combine - -final class MovieSearchViewModel: ObservableObject { - private let model: [MovieModel] = [ - .init(movieImage: .init(.mickey), title: "미키", rate: 9.1), - .init(movieImage: .init(.toystory), title: "토이스토리", rate: 8.2), - .init(movieImage: .init(.brutalist), title: "브루탈리스트", rate: 8.2), - .init(movieImage: .init(.snowWhite), title: "백설공주", rate: 8.2), - .init(movieImage: .init(.whiplash), title: "위플래시", rate: 8.2), - .init(movieImage: .init(.conclave), title: "콘클라베", rate: 8.2), - .init(movieImage: .init(.theFall), title: "더폴", rate: 8.2) - ] - - @Published var query: String = "" - @Published var results: [MovieModel] = [] - @Published var isloading = false - @Published var errorMessage: String? - - private var bag = Set() - - init() { - $query - .debounce(for: .milliseconds(300), scheduler: DispatchQueue.main) - .removeDuplicates() - .handleEvents(receiveOutput: { [weak self] _ in self?.errorMessage = nil - }) - .flatMap { query in - self.search(query: query) - } - .receive(on: DispatchQueue.main) - .sink { [weak self] completion in - if case .failure(let err) = completion { - self?.errorMessage = "검색 실패: \(err.localizedDescription)" - self?.results = [] - } - } receiveValue: { [weak self] items in - self?.results = items - } - .store(in: &bag) - } - - private func search(query: String) -> AnyPublisher<[MovieModel], Error> { - return Future<[MovieModel], Error> { [weak self] promise in - let delay = Double(Int.random(in: 300...700)) / 1000.0 - guard let self else { return } - - DispatchQueue.global().asyncAfter(deadline: .now()+delay){ - let filtered = self.model.filter { $0.title.lowercased().contains(query)} - promise(.success(filtered)) - - } - } - .handleEvents( - receiveSubscription: {_ in DispatchQueue.main.async { self.isloading = true }} - ).eraseToAnyPublisher() - } -} diff --git a/yoon/week4/week4_practice/week4_practice/week4_practiceApp.swift b/yoon/week4/week4_practice/week4_practice/week4_practiceApp.swift deleted file mode 100644 index c03ccd1..0000000 --- a/yoon/week4/week4_practice/week4_practice/week4_practiceApp.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// week4_practiceApp.swift -// week4_practice -// -// Created by 정승윤 on 10/7/25. -// - -import SwiftUI - -@main -struct week4_practiceApp: App { - var body: some Scene { - WindowGroup { - ListFlowView() - } - } -} diff --git a/yoon/week5/week5_practice/week5_practice.xcodeproj/project.pbxproj b/yoon/week5/week5_practice/week5_practice.xcodeproj/project.pbxproj deleted file mode 100644 index 9b24a7d..0000000 --- a/yoon/week5/week5_practice/week5_practice.xcodeproj/project.pbxproj +++ /dev/null @@ -1,337 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXFileReference section */ - 340436542EA8DD5D00C58AA6 /* week5_practice.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = week5_practice.app; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 340436562EA8DD5D00C58AA6 /* week5_practice */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = week5_practice; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 340436512EA8DD5D00C58AA6 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 3404364B2EA8DD5D00C58AA6 = { - isa = PBXGroup; - children = ( - 340436562EA8DD5D00C58AA6 /* week5_practice */, - 340436552EA8DD5D00C58AA6 /* Products */, - ); - sourceTree = ""; - }; - 340436552EA8DD5D00C58AA6 /* Products */ = { - isa = PBXGroup; - children = ( - 340436542EA8DD5D00C58AA6 /* week5_practice.app */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 340436532EA8DD5D00C58AA6 /* week5_practice */ = { - isa = PBXNativeTarget; - buildConfigurationList = 3404365F2EA8DD5E00C58AA6 /* Build configuration list for PBXNativeTarget "week5_practice" */; - buildPhases = ( - 340436502EA8DD5D00C58AA6 /* Sources */, - 340436512EA8DD5D00C58AA6 /* Frameworks */, - 340436522EA8DD5D00C58AA6 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 340436562EA8DD5D00C58AA6 /* week5_practice */, - ); - name = week5_practice; - packageProductDependencies = ( - ); - productName = week5_practice; - productReference = 340436542EA8DD5D00C58AA6 /* week5_practice.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 3404364C2EA8DD5D00C58AA6 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 2600; - LastUpgradeCheck = 2600; - TargetAttributes = { - 340436532EA8DD5D00C58AA6 = { - CreatedOnToolsVersion = 26.0.1; - }; - }; - }; - buildConfigurationList = 3404364F2EA8DD5D00C58AA6 /* Build configuration list for PBXProject "week5_practice" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 3404364B2EA8DD5D00C58AA6; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - productRefGroup = 340436552EA8DD5D00C58AA6 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 340436532EA8DD5D00C58AA6 /* week5_practice */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 340436522EA8DD5D00C58AA6 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 340436502EA8DD5D00C58AA6 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 3404365D2EA8DD5E00C58AA6 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 26.0; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 3404365E2EA8DD5E00C58AA6 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 26.0; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 340436602EA8DD5E00C58AA6 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "UMC.week5-practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 340436612EA8DD5E00C58AA6 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = "UMC.week5-practice"; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 3404364F2EA8DD5D00C58AA6 /* Build configuration list for PBXProject "week5_practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3404365D2EA8DD5E00C58AA6 /* Debug */, - 3404365E2EA8DD5E00C58AA6 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 3404365F2EA8DD5E00C58AA6 /* Build configuration list for PBXNativeTarget "week5_practice" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 340436602EA8DD5E00C58AA6 /* Debug */, - 340436612EA8DD5E00C58AA6 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 3404364C2EA8DD5D00C58AA6 /* Project object */; -} diff --git a/yoon/week5/week5_practice/week5_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/yoon/week5/week5_practice/week5_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/yoon/week5/week5_practice/week5_practice.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/yoon/week5/week5_practice/week5_practice/Assets.xcassets/AccentColor.colorset/Contents.json b/yoon/week5/week5_practice/week5_practice/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/yoon/week5/week5_practice/week5_practice/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week5/week5_practice/week5_practice/Assets.xcassets/AppIcon.appiconset/Contents.json b/yoon/week5/week5_practice/week5_practice/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/yoon/week5/week5_practice/week5_practice/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week5/week5_practice/week5_practice/Assets.xcassets/Contents.json b/yoon/week5/week5_practice/week5_practice/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/yoon/week5/week5_practice/week5_practice/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week5/week5_practice/week5_practice/ContentView.swift b/yoon/week5/week5_practice/week5_practice/ContentView.swift deleted file mode 100644 index 7debca2..0000000 --- a/yoon/week5/week5_practice/week5_practice/ContentView.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// ContentView.swift -// week5_practice -// -// Created by 정승윤 on 10/22/25. -// - -import SwiftUI - -struct ContentView: View { - var body: some View { - VStack { - Image(systemName: "globe") - .imageScale(.large) - .foregroundStyle(.tint) - Text("Hello, world!") - } - .padding() - } -} - -#Preview { - ContentView() -} diff --git a/yoon/week5/week5_practice/week5_practice/DTO/APIResponse.swift b/yoon/week5/week5_practice/week5_practice/DTO/APIResponse.swift deleted file mode 100644 index a839a95..0000000 --- a/yoon/week5/week5_practice/week5_practice/DTO/APIResponse.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// APIResponse.swift -// week5_practice -// -// Created by 정승윤 on 10/22/25. -// - -import Foundation - -struct APIResponse: Codable { - let status: String - let message: String - let data: UserData -} - -struct UserData: Codable { - let users: [UserDTO] -} diff --git a/yoon/week5/week5_practice/week5_practice/DTO/CommentDTO.swift b/yoon/week5/week5_practice/week5_practice/DTO/CommentDTO.swift deleted file mode 100644 index 1ebd40b..0000000 --- a/yoon/week5/week5_practice/week5_practice/DTO/CommentDTO.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// CommentDTO.swift -// week5_practice -// -// Created by 정승윤 on 10/22/25. -// - -import Foundation - -// CommentDTO -struct CommentDTO: Codable { - let comment_id: String - let text: String - let user: UserDTO - let timestamp: String -} - -struct CommentMapper { - static func toDomain(from dto: CommentDTO) -> CommentModel { - let dateFormatter = ISO8601DateFormatter() - let createdAt = dateFormatter.date(from: dto.timestamp) ?? Date() - - return CommentModel( - id: dto.comment_id, - content: dto.text, - author: dto.user.toDomain(), - createdAt: createdAt - ) - } -} diff --git a/yoon/week5/week5_practice/week5_practice/DTO/PostDTO.swift b/yoon/week5/week5_practice/week5_practice/DTO/PostDTO.swift deleted file mode 100644 index ca99a65..0000000 --- a/yoon/week5/week5_practice/week5_practice/DTO/PostDTO.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// PostDTO.swift -// week5_practice -// -// Created by 정승윤 on 10/22/25. -// - -import Foundation - -// PostDTO -struct PostDTO: Codable { - let post_id: String - let content: String - let author: UserDTO - let created_timestamp: String - let like_count: Int -} - -struct PostMapper { - static func toDomain(from dto: PostDTO) -> PostModel { - // 날짜 변환 - let dateFormatter = ISO8601DateFormatter() - let createdAt = dateFormatter.date(from: dto.created_timestamp) ?? Date() - - return PostModel( - id: dto.post_id, - content: dto.content, - author: dto.author.toDomain(), - createdAt: createdAt, - likes: dto.like_count - ) - } -} - - diff --git a/yoon/week5/week5_practice/week5_practice/DTO/UserDTO.swift b/yoon/week5/week5_practice/week5_practice/DTO/UserDTO.swift deleted file mode 100644 index be801ca..0000000 --- a/yoon/week5/week5_practice/week5_practice/DTO/UserDTO.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// UserDTO.swift -// week5_practice -// -// Created by 정승윤 on 10/22/25. -// - -import Foundation - -// API 응답을 받을 DTO -struct UserDTO: Codable { - let userId: String - let name: String - let profileImage: String? - let userBio: String - let createdAt: String - - // Codable을 위한 CodingKeys - enum CodingKeys: String, CodingKey { - case userId = "user_id" - case name = "user_name" - case profileImage = "profile_image" - case userBio = "user_bio" - case createdAt = "created_at" - } -} - -extension UserDTO { - // DTO를 도메인 모델로 변환 - func toDomain() -> UserModel { - return UserModel( - id: userId, - name: name, - profileImageURL: profileImage, - bio: userBio - ) - } -} diff --git a/yoon/week5/week5_practice/week5_practice/MockData.geojson b/yoon/week5/week5_practice/week5_practice/MockData.geojson deleted file mode 100644 index e5667a4..0000000 --- a/yoon/week5/week5_practice/week5_practice/MockData.geojson +++ /dev/null @@ -1,22 +0,0 @@ -{ - "status": "success", - "message": "User list fetched successfully", - "data": { - "users": [ - { - "user_id": "1", - "user_name": "River", - "profile_image": "https://example.com/river.jpg", - "user_bio": "iOS Developer", - "created_at": "2025-01-01T10:00:00Z" - }, - { - "user_id": "2", - "user_name": "David", - "profile_image": null, - "user_bio": "Backend Developer", - "created_at": "2025-01-02T10:00:00Z" - } - ] - } -} diff --git a/yoon/week5/week5_practice/week5_practice/Model/CommentModel.swift b/yoon/week5/week5_practice/week5_practice/Model/CommentModel.swift deleted file mode 100644 index bc4f329..0000000 --- a/yoon/week5/week5_practice/week5_practice/Model/CommentModel.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// CommentModel.swift -// week5_practice -// -// Created by 정승윤 on 10/22/25. -// - -import Foundation - -struct CommentModel { - let id: String - let content: String - let author: UserModel - let createdAt: Date - - // 도메인 로직: 댓글이 수정 가능한지 확인 (작성 후 5분 이내) - var isEditable: Bool { - let fiveMinutesAgo = Date().addingTimeInterval(-300) - return createdAt > fiveMinutesAgo - } -} diff --git a/yoon/week5/week5_practice/week5_practice/Model/PostModel.swift b/yoon/week5/week5_practice/week5_practice/Model/PostModel.swift deleted file mode 100644 index 7bf8a97..0000000 --- a/yoon/week5/week5_practice/week5_practice/Model/PostModel.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// PostModel.swift -// week5_practice -// -// Created by 정승윤 on 10/22/25. -// - -import Foundation - -struct PostModel { - let id: String - let content: String - let author: UserModel - let createdAt: Date - let likes: Int - - // 도메인 로직: 게시물이 최근 게시물인지 확인 (24시간 이내) - var isRecent: Bool { - let dayAgo = Date().addingTimeInterval(-86400) - return createdAt > dayAgo - } - - // 도메인 로직: 표시용 시간 문자열 - var formattedDate: String { - let formatter = RelativeDateTimeFormatter() - formatter.unitsStyle = .abbreviated - return formatter.localizedString(for: createdAt, relativeTo: Date()) - } -} diff --git a/yoon/week5/week5_practice/week5_practice/Model/UserModel.swift b/yoon/week5/week5_practice/week5_practice/Model/UserModel.swift deleted file mode 100644 index de29109..0000000 --- a/yoon/week5/week5_practice/week5_practice/Model/UserModel.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// UserModel.swift -// week5_practice -// -// Created by 정승윤 on 10/22/25. -// - -import Foundation - -struct UserModel { - let id: String - let name: String - let profileImageURL: String? - let bio: String - - // 도메인 로직: 프로필이 완성되었는지 확인 - var isProfileComplete: Bool { - !name.isEmpty && !bio.isEmpty - } - - // 도메인 로직: 표시용 이름 생성 - var displayName: String { - name.isEmpty ? "익명 사용자" : name - } -} diff --git a/yoon/week5/week5_practice/week5_practice/View/UserListView.swift b/yoon/week5/week5_practice/week5_practice/View/UserListView.swift deleted file mode 100644 index 5c47358..0000000 --- a/yoon/week5/week5_practice/week5_practice/View/UserListView.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// UserListView.swift -// week5_practice -// -// Created by 정승윤 on 10/22/25. -// - -import SwiftUI - -struct UserListView: View { - @StateObject private var viewModel = UserListViewModel() - @State private var showAddUser = false - - var body: some View { - NavigationStack { - ZStack { - if viewModel.isLoading { - ProgressView("로딩 중...") - } else { - List { - ForEach(viewModel.users, id: \.id) { user in - UserRowView(user: user) - } - .onDelete { indexSet in - indexSet.forEach { index in - viewModel.deleteUser(id: viewModel.users[index].id) - } - } - } - } - } - .navigationTitle("사용자 목록") - .toolbar { - Button { - showAddUser = true - } label: { - Image(systemName: "plus") - } - } - // 실제 API 연결시 task 사용해야 함. - .task { - await viewModel.fetchUsers() - } - } - } -} - -struct UserRowView: View { - let user: UserModel - - var body: some View { - VStack(alignment: .leading, spacing: 4) { - Text(user.displayName) - .font(.headline) - Text(user.bio) - .font(.subheadline) - .foregroundStyle(.gray) - - if user.isProfileComplete { - Label("프로필 완성", systemImage: "checkmark.circle.fill") - .font(.caption) - .foregroundStyle(.green) - } - } - .padding(.vertical, 4) - } -} - -#Preview { - UserListView() -} - diff --git a/yoon/week5/week5_practice/week5_practice/ViewModel/UserListViewModel.swift b/yoon/week5/week5_practice/week5_practice/ViewModel/UserListViewModel.swift deleted file mode 100644 index 1b7f65f..0000000 --- a/yoon/week5/week5_practice/week5_practice/ViewModel/UserListViewModel.swift +++ /dev/null @@ -1,71 +0,0 @@ -// -// UserViewModel.swift -// week5_practice -// -// Created by 정승윤 on 10/22/25. -// - -import Foundation -import Combine - -class UserListViewModel: ObservableObject { - @Published var users: [UserModel] = [] - @Published var isLoading: Bool = false - @Published var errorMessage: String? - - // 임시 데이터 - private var userStore: [UserModel] = [ - UserModel(id: "1", name: "River", profileImageURL: nil, bio: "iOS Developer"), - UserModel(id: "2", name: "David", profileImageURL: nil, bio: "Backend Developer"), - UserModel(id: "3", name: "Sarah", profileImageURL: nil, bio: "Designer") - ] - - func addUser(name: String, bio: String) { - let newUser = UserModel( - id: UUID().uuidString, - name: name, - profileImageURL: nil, - bio: bio - ) - userStore.append(newUser) - users = userStore - } - - func fetchUsers() async { - isLoading = true - - // Bundle에서 JSON 파일 읽기 - guard let url = Bundle.main.url( - forResource: "MockData", withExtension: "json"), - let data = try? Data(contentsOf: url) else { return } - - do { - let response = try JSONDecoder().decode(APIResponse.self, from: data) - - await MainActor.run { - // users 프로퍼티에 저장(View에 자동으로 데이터 반영) - self.users = response.data.users.map { $0.toDomain() } - self.isLoading = false - } - } catch { - print("Decoding error:", error) - } - } - - func updateUser(id: String, name: String, bio: String) { - if let index = userStore.firstIndex(where: { $0.id == id }) { - userStore[index] = UserModel( - id: id, - name: name, - profileImageURL: userStore[index].profileImageURL, - bio: bio - ) - users = userStore - } - } - - func deleteUser(id: String) { - userStore.removeAll { $0.id == id } - users = userStore - } -} diff --git a/yoon/week5/week5_practice/week5_practice/week5_practiceApp.swift b/yoon/week5/week5_practice/week5_practice/week5_practiceApp.swift deleted file mode 100644 index 7501905..0000000 --- a/yoon/week5/week5_practice/week5_practice/week5_practiceApp.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// week5_practiceApp.swift -// week5_practice -// -// Created by 정승윤 on 10/22/25. -// - -import SwiftUI - -@main -struct week5_practiceApp: App { - var body: some Scene { - WindowGroup { - ContentView() - } - } -} diff --git a/yoon/week6/TestAlamofire/TestAlamofire.xcodeproj/project.pbxproj b/yoon/week6/TestAlamofire/TestAlamofire.xcodeproj/project.pbxproj deleted file mode 100644 index cf4b825..0000000 --- a/yoon/week6/TestAlamofire/TestAlamofire.xcodeproj/project.pbxproj +++ /dev/null @@ -1,373 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXBuildFile section */ - 347BF38E2EBB6926009B3588 /* Alamofire in Frameworks */ = {isa = PBXBuildFile; productRef = 347BF38D2EBB6926009B3588 /* Alamofire */; }; - 347BF3902EBB6926009B3588 /* AlamofireDynamic in Frameworks */ = {isa = PBXBuildFile; productRef = 347BF38F2EBB6926009B3588 /* AlamofireDynamic */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 347BF37A2EBB67F9009B3588 /* TestAlamofire.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TestAlamofire.app; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 347BF37C2EBB67F9009B3588 /* TestAlamofire */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = TestAlamofire; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 347BF3772EBB67F9009B3588 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 347BF38E2EBB6926009B3588 /* Alamofire in Frameworks */, - 347BF3902EBB6926009B3588 /* AlamofireDynamic in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 347BF3712EBB67F9009B3588 = { - isa = PBXGroup; - children = ( - 347BF37C2EBB67F9009B3588 /* TestAlamofire */, - 347BF37B2EBB67F9009B3588 /* Products */, - ); - sourceTree = ""; - }; - 347BF37B2EBB67F9009B3588 /* Products */ = { - isa = PBXGroup; - children = ( - 347BF37A2EBB67F9009B3588 /* TestAlamofire.app */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 347BF3792EBB67F9009B3588 /* TestAlamofire */ = { - isa = PBXNativeTarget; - buildConfigurationList = 347BF3852EBB67FB009B3588 /* Build configuration list for PBXNativeTarget "TestAlamofire" */; - buildPhases = ( - 347BF3762EBB67F9009B3588 /* Sources */, - 347BF3772EBB67F9009B3588 /* Frameworks */, - 347BF3782EBB67F9009B3588 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 347BF37C2EBB67F9009B3588 /* TestAlamofire */, - ); - name = TestAlamofire; - packageProductDependencies = ( - 347BF38D2EBB6926009B3588 /* Alamofire */, - 347BF38F2EBB6926009B3588 /* AlamofireDynamic */, - ); - productName = TestAlamofire; - productReference = 347BF37A2EBB67F9009B3588 /* TestAlamofire.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 347BF3722EBB67F9009B3588 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 2600; - LastUpgradeCheck = 2600; - TargetAttributes = { - 347BF3792EBB67F9009B3588 = { - CreatedOnToolsVersion = 26.0.1; - }; - }; - }; - buildConfigurationList = 347BF3752EBB67F9009B3588 /* Build configuration list for PBXProject "TestAlamofire" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 347BF3712EBB67F9009B3588; - minimizedProjectReferenceProxies = 1; - packageReferences = ( - 347BF38C2EBB6926009B3588 /* XCRemoteSwiftPackageReference "Alamofire" */, - ); - preferredProjectObjectVersion = 77; - productRefGroup = 347BF37B2EBB67F9009B3588 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 347BF3792EBB67F9009B3588 /* TestAlamofire */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 347BF3782EBB67F9009B3588 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 347BF3762EBB67F9009B3588 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 347BF3832EBB67FB009B3588 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 26.0; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 347BF3842EBB67FB009B3588 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 26.0; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 347BF3862EBB67FB009B3588 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = UMC.TestAlamofire; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 347BF3872EBB67FB009B3588 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = UMC.TestAlamofire; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 347BF3752EBB67F9009B3588 /* Build configuration list for PBXProject "TestAlamofire" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 347BF3832EBB67FB009B3588 /* Debug */, - 347BF3842EBB67FB009B3588 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 347BF3852EBB67FB009B3588 /* Build configuration list for PBXNativeTarget "TestAlamofire" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 347BF3862EBB67FB009B3588 /* Debug */, - 347BF3872EBB67FB009B3588 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCRemoteSwiftPackageReference section */ - 347BF38C2EBB6926009B3588 /* XCRemoteSwiftPackageReference "Alamofire" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/Alamofire/Alamofire.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 5.10.2; - }; - }; -/* End XCRemoteSwiftPackageReference section */ - -/* Begin XCSwiftPackageProductDependency section */ - 347BF38D2EBB6926009B3588 /* Alamofire */ = { - isa = XCSwiftPackageProductDependency; - package = 347BF38C2EBB6926009B3588 /* XCRemoteSwiftPackageReference "Alamofire" */; - productName = Alamofire; - }; - 347BF38F2EBB6926009B3588 /* AlamofireDynamic */ = { - isa = XCSwiftPackageProductDependency; - package = 347BF38C2EBB6926009B3588 /* XCRemoteSwiftPackageReference "Alamofire" */; - productName = AlamofireDynamic; - }; -/* End XCSwiftPackageProductDependency section */ - }; - rootObject = 347BF3722EBB67F9009B3588 /* Project object */; -} diff --git a/yoon/week6/TestAlamofire/TestAlamofire.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/yoon/week6/TestAlamofire/TestAlamofire.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/yoon/week6/TestAlamofire/TestAlamofire.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/yoon/week6/TestAlamofire/TestAlamofire.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/yoon/week6/TestAlamofire/TestAlamofire.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved deleted file mode 100644 index 8c6ea58..0000000 --- a/yoon/week6/TestAlamofire/TestAlamofire.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ /dev/null @@ -1,15 +0,0 @@ -{ - "originHash" : "e8f130fe30ac6cdc940ef06ee1e8535e9f46ffee6aeead1722b9525562f6ce08", - "pins" : [ - { - "identity" : "alamofire", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Alamofire/Alamofire.git", - "state" : { - "revision" : "513364f870f6bfc468f9d2ff0a95caccc10044c5", - "version" : "5.10.2" - } - } - ], - "version" : 3 -} diff --git a/yoon/week6/TestAlamofire/TestAlamofire/Assets.xcassets/AccentColor.colorset/Contents.json b/yoon/week6/TestAlamofire/TestAlamofire/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/yoon/week6/TestAlamofire/TestAlamofire/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week6/TestAlamofire/TestAlamofire/Assets.xcassets/AppIcon.appiconset/Contents.json b/yoon/week6/TestAlamofire/TestAlamofire/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/yoon/week6/TestAlamofire/TestAlamofire/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week6/TestAlamofire/TestAlamofire/Assets.xcassets/Contents.json b/yoon/week6/TestAlamofire/TestAlamofire/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/yoon/week6/TestAlamofire/TestAlamofire/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week6/TestAlamofire/TestAlamofire/ContentView.swift b/yoon/week6/TestAlamofire/TestAlamofire/ContentView.swift deleted file mode 100644 index af00244..0000000 --- a/yoon/week6/TestAlamofire/TestAlamofire/ContentView.swift +++ /dev/null @@ -1,68 +0,0 @@ -// -// ContentView.swift -// TestAlamofire -// -// Created by 정승윤 on 11/5/25. -// - -import SwiftUI - -struct ContentView: View { - - var body: some View { - VStack(spacing: 15) { - ForEach(ButtonInfoList.buttonList, id: \.id) { button in - Button(action: { - button.action() - }, label: { - Text(button.title) - }) - } - } - .padding() - } -} - -struct ButtonInfo: Identifiable { - var id: UUID = .init() - var title: String - var action: () -> Void -} - -final class ButtonInfoList { - - static let serviceManager: ServiceManager = .init() - - static let buttonList: [ButtonInfo] = [ - .init(title: "GET", action: { - Task { - await serviceManager.getUser(name: "리버") - } - }), - .init(title: "POST", action: { - Task { - await serviceManager.postUser(user: .init(name: "리버", age: 25, address: "서울특별시 성북구", height: 173)) - - } - }), - .init(title: "PATCH", action: { - Task { - await serviceManager.patchUser(name: "River") - } - }), - .init(title: "PUT", action: { - Task { - await serviceManager.putUser(user: .init(name: "리버", age: 21, address: "서울특별시 성북구", height: 180)) - } - }), - .init(title: "DELETE", action: { - Task { - await serviceManager.deleteUser(name: "리버") - } - }), - ] -} - -#Preview { - ContentView() -} diff --git a/yoon/week6/TestAlamofire/TestAlamofire/ServiceManager.swift b/yoon/week6/TestAlamofire/TestAlamofire/ServiceManager.swift deleted file mode 100644 index 2dc7449..0000000 --- a/yoon/week6/TestAlamofire/TestAlamofire/ServiceManager.swift +++ /dev/null @@ -1,89 +0,0 @@ -import Foundation -import Alamofire - -final class ServiceManager { - - static let shared = ServiceManager() - - private let session: Session - private let urlString: String = "http://localhost:8080/person" - - init() { - let configuration = URLSessionConfiguration.default - configuration.timeoutIntervalForRequest = 10 - - self.session = Session(configuration: configuration) - } - - // MARK: - GET 요청 - func getUser(name: String) async { - let parameters: [String: String] = [ - "name": name - ] - - do { - let user = try await session.request(urlString, method: .get, parameters: parameters, encoding: URLEncoding.default) - .serializingDecodable(UserDTO.self) - .value - print("GET 성공:", user) - } catch { - print("GET 실패:", error.localizedDescription) - } - } - - // MARK: - POST 요청 - func postUser(user: UserDTO) async { - do { - let response = try await session.request(urlString, method: .post, parameters: user, encoder: JSONParameterEncoder.default) - .serializingString() - .value - print("POST 성공:", response) - } catch { - print("POST 실패:", error.localizedDescription) - } - } - - // MARK: - PUT 요청 - func putUser(user: UserDTO) async { - do { - let response = try await session.request(urlString, method: .put, parameters: user, encoder: JSONParameterEncoder.default) - .serializingString() - .value - print("PUT 성공:", response) - } catch { - print("PUT 실패:", error.localizedDescription) - } - } - - // MARK: - PATCH 요청 - func patchUser(name: String) async { - let parameters: [String: String] = [ - "name": name - ] - - do { - let response = try await session.request(urlString, method: .patch, parameters: parameters, encoding: JSONEncoding.default) - .serializingString() - .value - print("PATCH 성공:", response) - } catch { - print("PATCH 실패:", error.localizedDescription) - } - } - - // MARK: - DELETE 요청 - func deleteUser(name: String) async { - let parameters: [String: String] = [ - "name": name - ] - - do { - let response = try await session.request(urlString, method: .delete, parameters: parameters, encoding: URLEncoding.default) - .serializingString() - .value - print("DELETE 성공:", response) - } catch { - print("DELETE 실패:", error.localizedDescription) - } - } -} diff --git a/yoon/week6/TestAlamofire/TestAlamofire/TestAlamofireApp.swift b/yoon/week6/TestAlamofire/TestAlamofire/TestAlamofireApp.swift deleted file mode 100644 index b0be809..0000000 --- a/yoon/week6/TestAlamofire/TestAlamofire/TestAlamofireApp.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// TestAlamofireApp.swift -// TestAlamofire -// -// Created by 정승윤 on 11/5/25. -// - -import SwiftUI - -@main -struct TestAlamofireApp: App { - var body: some Scene { - WindowGroup { - ContentView() - } - } -} diff --git a/yoon/week6/TestAlamofire/TestAlamofire/UserDTO.swift b/yoon/week6/TestAlamofire/TestAlamofire/UserDTO.swift deleted file mode 100644 index 8f0827a..0000000 --- a/yoon/week6/TestAlamofire/TestAlamofire/UserDTO.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// UserDTO.swift -// TestAlamofire -// -// Created by 정승윤 on 11/5/25. -// - -import Foundation - -nonisolated struct UserDTO: Codable { - let name: String - let age: Int - let address: String - let height: Double -} diff --git a/yoon/week7/TestMoya/TestMoya.xcodeproj/project.pbxproj b/yoon/week7/TestMoya/TestMoya.xcodeproj/project.pbxproj deleted file mode 100644 index 5df337c..0000000 --- a/yoon/week7/TestMoya/TestMoya.xcodeproj/project.pbxproj +++ /dev/null @@ -1,382 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXBuildFile section */ - 347DBA472EC39218008916E4 /* Alamofire in Frameworks */ = {isa = PBXBuildFile; productRef = 347DBA462EC39218008916E4 /* Alamofire */; }; - 347DBA492EC39218008916E4 /* AlamofireDynamic in Frameworks */ = {isa = PBXBuildFile; productRef = 347DBA482EC39218008916E4 /* AlamofireDynamic */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 347DBA352EC3912F008916E4 /* TestMoya.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TestMoya.app; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - 347DBA372EC3912F008916E4 /* TestMoya */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = TestMoya; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - 347DBA322EC3912F008916E4 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 347DBA472EC39218008916E4 /* Alamofire in Frameworks */, - 347DBA492EC39218008916E4 /* AlamofireDynamic in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 347DBA2C2EC3912F008916E4 = { - isa = PBXGroup; - children = ( - 347DBA372EC3912F008916E4 /* TestMoya */, - 347DBA362EC3912F008916E4 /* Products */, - ); - sourceTree = ""; - }; - 347DBA362EC3912F008916E4 /* Products */ = { - isa = PBXGroup; - children = ( - 347DBA352EC3912F008916E4 /* TestMoya.app */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 347DBA342EC3912F008916E4 /* TestMoya */ = { - isa = PBXNativeTarget; - buildConfigurationList = 347DBA402EC39131008916E4 /* Build configuration list for PBXNativeTarget "TestMoya" */; - buildPhases = ( - 347DBA312EC3912F008916E4 /* Sources */, - 347DBA322EC3912F008916E4 /* Frameworks */, - 347DBA332EC3912F008916E4 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - 347DBA372EC3912F008916E4 /* TestMoya */, - ); - name = TestMoya; - packageProductDependencies = ( - 347DBA462EC39218008916E4 /* Alamofire */, - 347DBA482EC39218008916E4 /* AlamofireDynamic */, - ); - productName = TestMoya; - productReference = 347DBA352EC3912F008916E4 /* TestMoya.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 347DBA2D2EC3912F008916E4 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 2600; - LastUpgradeCheck = 2600; - TargetAttributes = { - 347DBA342EC3912F008916E4 = { - CreatedOnToolsVersion = 26.0.1; - }; - }; - }; - buildConfigurationList = 347DBA302EC3912F008916E4 /* Build configuration list for PBXProject "TestMoya" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 347DBA2C2EC3912F008916E4; - minimizedProjectReferenceProxies = 1; - packageReferences = ( - 347DBA452EC39218008916E4 /* XCRemoteSwiftPackageReference "Alamofire" */, - 347DBA4A2EC39275008916E4 /* XCRemoteSwiftPackageReference "Moya" */, - ); - preferredProjectObjectVersion = 77; - productRefGroup = 347DBA362EC3912F008916E4 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 347DBA342EC3912F008916E4 /* TestMoya */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 347DBA332EC3912F008916E4 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 347DBA312EC3912F008916E4 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 347DBA3E2EC39131008916E4 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 26.0; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 347DBA3F2EC39131008916E4 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 26.0; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 347DBA412EC39131008916E4 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = UMC.TestMoya; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 347DBA422EC39131008916E4 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 4HP2RU9G92; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = UMC.TestMoya; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRING_CATALOG_GENERATE_SYMBOLS = YES; - SWIFT_APPROACHABLE_CONCURRENCY = YES; - SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 347DBA302EC3912F008916E4 /* Build configuration list for PBXProject "TestMoya" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 347DBA3E2EC39131008916E4 /* Debug */, - 347DBA3F2EC39131008916E4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 347DBA402EC39131008916E4 /* Build configuration list for PBXNativeTarget "TestMoya" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 347DBA412EC39131008916E4 /* Debug */, - 347DBA422EC39131008916E4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCRemoteSwiftPackageReference section */ - 347DBA452EC39218008916E4 /* XCRemoteSwiftPackageReference "Alamofire" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/Alamofire/Alamofire.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 5.10.2; - }; - }; - 347DBA4A2EC39275008916E4 /* XCRemoteSwiftPackageReference "Moya" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/Moya/Moya"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 15.0.3; - }; - }; -/* End XCRemoteSwiftPackageReference section */ - -/* Begin XCSwiftPackageProductDependency section */ - 347DBA462EC39218008916E4 /* Alamofire */ = { - isa = XCSwiftPackageProductDependency; - package = 347DBA452EC39218008916E4 /* XCRemoteSwiftPackageReference "Alamofire" */; - productName = Alamofire; - }; - 347DBA482EC39218008916E4 /* AlamofireDynamic */ = { - isa = XCSwiftPackageProductDependency; - package = 347DBA452EC39218008916E4 /* XCRemoteSwiftPackageReference "Alamofire" */; - productName = AlamofireDynamic; - }; -/* End XCSwiftPackageProductDependency section */ - }; - rootObject = 347DBA2D2EC3912F008916E4 /* Project object */; -} diff --git a/yoon/week7/TestMoya/TestMoya.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/yoon/week7/TestMoya/TestMoya.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/yoon/week7/TestMoya/TestMoya.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/yoon/week7/TestMoya/TestMoya.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/yoon/week7/TestMoya/TestMoya.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved deleted file mode 100644 index 6f65007..0000000 --- a/yoon/week7/TestMoya/TestMoya.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ /dev/null @@ -1,42 +0,0 @@ -{ - "originHash" : "0d6d1bf5c9258f85bdbf8268315a4b7d1f73324196befa32ec961942e09f132d", - "pins" : [ - { - "identity" : "alamofire", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Alamofire/Alamofire.git", - "state" : { - "revision" : "513364f870f6bfc468f9d2ff0a95caccc10044c5", - "version" : "5.10.2" - } - }, - { - "identity" : "moya", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Moya/Moya", - "state" : { - "revision" : "c263811c1f3dbf002be9bd83107f7cdc38992b26", - "version" : "15.0.3" - } - }, - { - "identity" : "reactiveswift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/ReactiveCocoa/ReactiveSwift.git", - "state" : { - "revision" : "c43bae3dac73fdd3cb906bd5a1914686ca71ed3c", - "version" : "6.7.0" - } - }, - { - "identity" : "rxswift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/ReactiveX/RxSwift.git", - "state" : { - "revision" : "5004a18539bd68905c5939aa893075f578f4f03d", - "version" : "6.9.1" - } - } - ], - "version" : 3 -} diff --git a/yoon/week7/TestMoya/TestMoya.xcodeproj/project.xcworkspace/xcuserdata/jeongseung-yun.xcuserdatad/UserInterfaceState.xcuserstate b/yoon/week7/TestMoya/TestMoya.xcodeproj/project.xcworkspace/xcuserdata/jeongseung-yun.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 6628ee1..0000000 Binary files a/yoon/week7/TestMoya/TestMoya.xcodeproj/project.xcworkspace/xcuserdata/jeongseung-yun.xcuserdatad/UserInterfaceState.xcuserstate and /dev/null differ diff --git a/yoon/week7/TestMoya/TestMoya/APITargetType.swift b/yoon/week7/TestMoya/TestMoya/APITargetType.swift deleted file mode 100644 index b3f79d2..0000000 --- a/yoon/week7/TestMoya/TestMoya/APITargetType.swift +++ /dev/null @@ -1,19 +0,0 @@ -// -// APITargetType.swift -// TestMoya -// -// Created by 정승윤 on 11/12/25. -// - -import Foundation -import Moya - -protocol APITargetType: TargetType {} - -extension APITargetType { - var baseURL: URL { - return URL(string: "http://localhost:8080")! - } -} - - diff --git a/yoon/week7/TestMoya/TestMoya/Assets.xcassets/AccentColor.colorset/Contents.json b/yoon/week7/TestMoya/TestMoya/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/yoon/week7/TestMoya/TestMoya/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week7/TestMoya/TestMoya/Assets.xcassets/AppIcon.appiconset/Contents.json b/yoon/week7/TestMoya/TestMoya/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2305880..0000000 --- a/yoon/week7/TestMoya/TestMoya/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "tinted" - } - ], - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week7/TestMoya/TestMoya/Assets.xcassets/Contents.json b/yoon/week7/TestMoya/TestMoya/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/yoon/week7/TestMoya/TestMoya/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/yoon/week7/TestMoya/TestMoya/ContentView.swift b/yoon/week7/TestMoya/TestMoya/ContentView.swift deleted file mode 100644 index 8361c21..0000000 --- a/yoon/week7/TestMoya/TestMoya/ContentView.swift +++ /dev/null @@ -1,60 +0,0 @@ -// -// ContentView.swift -// TestMoya -// -// Created by 정승윤 on 11/12/25. -// - -import SwiftUI - - -struct ContentView: View { - - var body: some View { - VStack(spacing: 15) { - ForEach(ButtonInfoList.buttonList, id: \.id) { button in - Button(action: { - button.action() - }, label: { - Text(button.title) - }) - } - } - .padding() - } -} - -struct ButtonInfo: Identifiable { - var id: UUID = .init() - var title: String - var action: () -> Void -} - -final class ButtonInfoList { - - static let serviceManager: ContentsViewModel = .init() - - static let buttonList: [ButtonInfo] = [ - .init(title: "GET", action: { - - serviceManager.getUserData(name: "리버") - }), - .init(title: "POST", action: { - serviceManager.createUser(.init(name: "리버", age: 29, address: "서울시 성북구", height: 173)) - }), - .init(title: "PATCH", action: { - serviceManager.updateUserPatch(.init(name: nil, age: 18, address: nil, height: nil)) - }), - .init(title: "PUT", action: { - serviceManager.updateUserPut(.init(name: "River", age: 29, address: "서울시 강북구", height: 183)) - }), - .init(title: "DELETE", action: { - serviceManager.deleteUser(name: "River") - }), - ] -} - -#Preview { - ContentView() -} - diff --git a/yoon/week7/TestMoya/TestMoya/ContentsViewModel.swift b/yoon/week7/TestMoya/TestMoya/ContentsViewModel.swift deleted file mode 100644 index 624aeca..0000000 --- a/yoon/week7/TestMoya/TestMoya/ContentsViewModel.swift +++ /dev/null @@ -1,80 +0,0 @@ -// -// ContentsViewModel.swift -// TestMoya -// -// Created by 정승윤 on 11/12/25. -// - -import Foundation -import Moya - -@Observable -class ContentsViewModel { - var userData: UserData? - let provider: MoyaProvider - - init() { - let logger = NetworkLoggerPlugin(configuration: .init(logOptions: [.verbose])) - self.provider = MoyaProvider(plugins: [logger]) - } - - func getUserData(name: String) { - provider.request(.getPerson(name: name), completion: { [weak self] result in - switch result { - case .success(let response): - do { - let decodedData = try JSONDecoder().decode(UserData.self, from: response.data) - self?.userData = decodedData - } catch { - print("유저 데이터 디코더 오류", error) - } - case .failure(let error): - print("error", error) - } - }) - } - - func createUser(_ userData: UserData) { - provider.request(.postPerson(userData: userData)) { result in - switch result { - case .success(let response): - print("POST 성공: \(response.statusCode)") - case .failure(let error): - print("error", error) - } - } - } - - func updateUserPatch(_ patchData: UserPatchRequest) { - provider.request(.patchPerson(patchData: patchData)) { result in - switch result { - case .success(let response): - print("PATCH 성공: \(response.statusCode)") - case .failure(let error): - print("error", error) - } - } - } - - func updateUserPut(_ userData: UserData) { - provider.request(.putPerson(userData: userData)) { result in - switch result { - case .success(let response): - print("PUT 성공: \(response.statusCode)") - case .failure(let error): - print("error", error) - } - } - } - - func deleteUser(name: String) { - provider.request(.deletePerson(name: name)) { result in - switch result { - case .success(let response): - print("DELETE 성공: \(response.statusCode)") - case .failure(let error): - print("error", error) - } - } - } -} diff --git a/yoon/week7/TestMoya/TestMoya/MoyaModel.swift b/yoon/week7/TestMoya/TestMoya/MoyaModel.swift deleted file mode 100644 index ed028f5..0000000 --- a/yoon/week7/TestMoya/TestMoya/MoyaModel.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// MoyaModel.swift -// TestMoya -// -// Created by 정승윤 on 11/12/25. -// - -import Foundation - -struct UserData: Codable { - let name: String - let age: Int - let address: String - let height: Double -} - -struct UserPatchRequest: Codable { - let name: String? - let age: Int? - let address: String? - let height: Double? -} - - diff --git a/yoon/week7/TestMoya/TestMoya/TestMoyaApp.swift b/yoon/week7/TestMoya/TestMoya/TestMoyaApp.swift deleted file mode 100644 index 894d773..0000000 --- a/yoon/week7/TestMoya/TestMoya/TestMoyaApp.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// TestMoyaApp.swift -// TestMoya -// -// Created by 정승윤 on 11/12/25. -// - -import SwiftUI - -@main -struct TestMoyaApp: App { - var body: some Scene { - WindowGroup { - ContentView() - } - } -} diff --git a/yoon/week7/TestMoya/TestMoya/UserRouter.swift b/yoon/week7/TestMoya/TestMoya/UserRouter.swift deleted file mode 100644 index f933c8b..0000000 --- a/yoon/week7/TestMoya/TestMoya/UserRouter.swift +++ /dev/null @@ -1,67 +0,0 @@ -// -// UserRouter.swift -// TestMoya -// -// Created by 정승윤 on 11/12/25. -// - -import Foundation - -import Foundation -import Moya -import Alamofire - -enum UserRotuer { - case getPerson(name: String) - case postPerson(userData: UserData) - case patchPerson(patchData: UserPatchRequest) - case putPerson(userData: UserData) - case deletePerson(name: String) -} - -extension UserRotuer: APITargetType { - var baseURL: URL { - return URL(string: "http://localhost:8080")! - } - - var headers: [String: String]? { - switch task { - case .requestJSONEncodable, .requestParameters: - return ["Content-Type": "application/json"] - case .uploadMultipart: - return ["Content-Type": "multipart/form-data"] - default: - return nil - } - } - - var path: String { - return "/person" - } - - var method: Moya.Method { - switch self { - case .getPerson: - return .get - case .postPerson: - return .post - case .patchPerson: - return .patch - case .putPerson: - return .put - case .deletePerson: - return .delete - } - } - - var task: Task { - switch self { - case .getPerson(let name), .deletePerson(let name): - return .requestParameters(parameters: ["name": name], encoding: URLEncoding.queryString) - case .postPerson(let userData), .putPerson(let userData): - return .requestJSONEncodable(userData) - case .patchPerson(let patchData): - return .requestJSONEncodable(patchData) - } - } -}