diff --git a/.github/workflows/Xcode_build_test.yml b/.github/workflows/Xcode_build_test.yml index d61884a..116eb3d 100644 --- a/.github/workflows/Xcode_build_test.yml +++ b/.github/workflows/Xcode_build_test.yml @@ -1,7 +1,7 @@ name: Xcode_build_test env: - PACKAGES_JSON: '["MSCoreKit", "MSFoundation", "MSUIKit"]' + WORKSPACE: iOS/MusicSpot.xcworkspace on: pull_request: @@ -14,7 +14,7 @@ jobs: prepare-matrix: runs-on: macos-13 outputs: - matrix: ${{ steps.set-matrix.outputs.matrix }} + matrix: ${{ steps.generate-matrix.outputs.matrix }} steps: - uses: actions/checkout@v4 @@ -24,45 +24,21 @@ jobs: with: xcode-version: '15.0.1' - - name: Install jq - run: brew install jq - - name: Generate matrix - id: set-matrix + id: generate-matrix run: | - cd iOS matrix="{\"include\":[" - packages=$(echo $PACKAGES_JSON | jq -r '.[]') first_entry=true - for package in $packages; do - cd $package - for scheme in $(xcodebuild -list | grep -E '^[[:space:]]*Schemes:' -A 10 | tail -n +2 | grep -v '^$'); do - if [[ $scheme != *"-Package" ]] && [[ $scheme != *"Tests" ]]; then - if [ "$first_entry" = true ]; then - first_entry=false - else - matrix+="," - fi - matrix+="{\"package\":\"$package\", \"scheme\":\"$scheme\"}" + for scheme in $(xcodebuild -workspace ${{ env.WORKSPACE }} -list | grep -A 100 "Schemes:" | grep -v "Schemes:" | sed '/^$/d' | sed 's/^[ \t]*//'); do + if [[ $scheme != *"-Package" ]] && [[ $scheme != *"Tests" ]]; then + if [ "$first_entry" = true ]; then + first_entry=false + else + matrix+="," fi - done - cd .. + matrix+="{\"scheme\":\"$scheme\"}" + fi done - # cd Features - # for package in JourneyList SaveJourney; do - # cd $package - # for scheme in $(xcodebuild -list | grep -E '^[[:space:]]*Schemes:' -A 10 | tail -n +2 | grep -v '^$'); do - # if [[ $scheme != *"-Package" ]]; then - # if [ "$first_entry" = true ]; then - # first_entry=false - # else - # matrix+="," - # fi - # matrix+="{\"package\":\"$package\", \"scheme\":\"$scheme\"}" - # fi - # done - # cd .. - # done matrix+="]}" echo "matrix=$matrix" >> $GITHUB_OUTPUT @@ -82,11 +58,10 @@ jobs: xcode-version: '15.0.1' - name: 🛠️ Build ${{ matrix.scheme }} - if: ${{ !contains(matrix.scheme, 'Tests') }} run: | - echo "🛠️ Building ${{ matrix.package }} - Scheme: ${{ matrix.scheme }}" - cd iOS/${{ matrix.package }} + echo "🛠️ Building ${{ matrix.scheme }}" xcodebuild \ + -workspace ${{ env.WORKSPACE }} \ -scheme ${{ matrix.scheme }} \ -sdk 'iphonesimulator' \ -destination 'platform=iOS Simulator,OS=17.0.1,name=iPhone 15 Pro' \ @@ -95,12 +70,33 @@ jobs: prepare-test-matrix: runs-on: macos-13 outputs: - matrix: ${{ steps.set-matrix.outputs.matrix }} + matrix: ${{ steps.generate-test-matrix.outputs.matrix }} steps: - - id: set-matrix - run: | - matrix="{\"package\": $PACKAGES_JSON}" - echo "matrix=$matrix" >> $GITHUB_OUTPUT + - uses: actions/checkout@v4 + + - name: Setup Xcode + if: ${{ !env.ACT }} + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: '15.0.1' + + - name: Generate test matrix + id: generate-test-matrix + run: | + matrix="{\"include\":[" + first_entry=true + for scheme in $(xcodebuild -workspace ${{ env.WORKSPACE }} -list | grep -A 100 "Schemes:" | grep -v "Schemes:" | sed '/^$/d' | sed 's/^[ \t]*//'); do + if [[ $scheme == *"Tests" ]]; then + if [ "$first_entry" = true ]; then + first_entry=false + else + matrix+="," + fi + matrix+="{\"scheme\":\"$scheme\"}" + fi + done + matrix+="]}" + echo "matrix=$matrix" >> $GITHUB_OUTPUT xcode-test: needs: prepare-test-matrix @@ -117,12 +113,12 @@ jobs: with: xcode-version: '15.0.1' - - name: 🧪 Test ${{ matrix.package }} + - name: 🧪 Test ${{ matrix.scheme }} run: | - echo "🧪 Testing ${{ matrix.package }}" - cd iOS/${{ matrix.package }} + echo "🧪 Testing ${{ matrix.scheme }}" xcodebuild \ - -scheme ${{ matrix.package }}-Package \ + -workspace ${{ env.WORKSPACE }} \ + -scheme ${{ matrix.scheme }} \ -sdk 'iphonesimulator' \ -destination 'platform=iOS Simulator,OS=17.0.1,name=iPhone 15 Pro' \ - clean test + test diff --git a/iOS/Features/Home/.gitignore b/iOS/Features/Home/.gitignore new file mode 100644 index 0000000..0023a53 --- /dev/null +++ b/iOS/Features/Home/.gitignore @@ -0,0 +1,8 @@ +.DS_Store +/.build +/Packages +xcuserdata/ +DerivedData/ +.swiftpm/configuration/registries.json +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +.netrc diff --git a/iOS/Features/Home/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/iOS/Features/Home/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/iOS/Features/Home/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/iOS/Features/Home/.swiftpm/xcode/xcshareddata/xcschemes/NavigateMap.xcscheme b/iOS/Features/Home/.swiftpm/xcode/xcshareddata/xcschemes/NavigateMap.xcscheme new file mode 100644 index 0000000..f4a8537 --- /dev/null +++ b/iOS/Features/Home/.swiftpm/xcode/xcshareddata/xcschemes/NavigateMap.xcscheme @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/Features/Home/.swiftpm/xcode/xcshareddata/xcschemes/RecordJourney.xcscheme b/iOS/Features/Home/.swiftpm/xcode/xcshareddata/xcschemes/RecordJourney.xcscheme new file mode 100644 index 0000000..c01b3e3 --- /dev/null +++ b/iOS/Features/Home/.swiftpm/xcode/xcshareddata/xcschemes/RecordJourney.xcscheme @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/Features/Home/HomeDemo/HomeDemo.xcodeproj/project.pbxproj b/iOS/Features/Home/HomeDemo/HomeDemo.xcodeproj/project.pbxproj new file mode 100644 index 0000000..50ce04a --- /dev/null +++ b/iOS/Features/Home/HomeDemo/HomeDemo.xcodeproj/project.pbxproj @@ -0,0 +1,403 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 60; + objects = { + +/* Begin PBXBuildFile section */ + DDAA4D5E2B17349A002F0748 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAA4D5D2B17349A002F0748 /* AppDelegate.swift */; }; + DDAA4D602B17349A002F0748 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAA4D5F2B17349A002F0748 /* SceneDelegate.swift */; }; + DDAA4D622B17349A002F0748 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAA4D612B17349A002F0748 /* ViewController.swift */; }; + DDAA4D652B17349A002F0748 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DDAA4D632B17349A002F0748 /* Main.storyboard */; }; + DDAA4D672B17349C002F0748 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DDAA4D662B17349C002F0748 /* Assets.xcassets */; }; + DDAA4D6A2B17349C002F0748 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DDAA4D682B17349C002F0748 /* LaunchScreen.storyboard */; }; + DDAA4D732B1734C3002F0748 /* NavigateMap in Frameworks */ = {isa = PBXBuildFile; productRef = DDAA4D722B1734C3002F0748 /* NavigateMap */; }; + DDAA4D752B1734C3002F0748 /* RecordJourney in Frameworks */ = {isa = PBXBuildFile; productRef = DDAA4D742B1734C3002F0748 /* RecordJourney */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + DDAA4D5A2B17349A002F0748 /* HomeDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HomeDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DDAA4D5D2B17349A002F0748 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + DDAA4D5F2B17349A002F0748 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + DDAA4D612B17349A002F0748 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + DDAA4D642B17349A002F0748 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + DDAA4D662B17349C002F0748 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + DDAA4D692B17349C002F0748 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + DDAA4D6B2B17349C002F0748 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + DDAA4D572B17349A002F0748 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + DDAA4D752B1734C3002F0748 /* RecordJourney in Frameworks */, + DDAA4D732B1734C3002F0748 /* NavigateMap in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + DDAA4D512B17349A002F0748 = { + isa = PBXGroup; + children = ( + DDAA4D5C2B17349A002F0748 /* HomeDemo */, + DDAA4D5B2B17349A002F0748 /* Products */, + ); + sourceTree = ""; + }; + DDAA4D5B2B17349A002F0748 /* Products */ = { + isa = PBXGroup; + children = ( + DDAA4D5A2B17349A002F0748 /* HomeDemo.app */, + ); + name = Products; + sourceTree = ""; + }; + DDAA4D5C2B17349A002F0748 /* HomeDemo */ = { + isa = PBXGroup; + children = ( + DDAA4D5D2B17349A002F0748 /* AppDelegate.swift */, + DDAA4D5F2B17349A002F0748 /* SceneDelegate.swift */, + DDAA4D612B17349A002F0748 /* ViewController.swift */, + DDAA4D632B17349A002F0748 /* Main.storyboard */, + DDAA4D662B17349C002F0748 /* Assets.xcassets */, + DDAA4D682B17349C002F0748 /* LaunchScreen.storyboard */, + DDAA4D6B2B17349C002F0748 /* Info.plist */, + ); + path = HomeDemo; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + DDAA4D592B17349A002F0748 /* HomeDemo */ = { + isa = PBXNativeTarget; + buildConfigurationList = DDAA4D6E2B17349C002F0748 /* Build configuration list for PBXNativeTarget "HomeDemo" */; + buildPhases = ( + DDAA4D562B17349A002F0748 /* Sources */, + DDAA4D572B17349A002F0748 /* Frameworks */, + DDAA4D582B17349A002F0748 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = HomeDemo; + packageProductDependencies = ( + DDAA4D722B1734C3002F0748 /* NavigateMap */, + DDAA4D742B1734C3002F0748 /* RecordJourney */, + ); + productName = HomeDemo; + productReference = DDAA4D5A2B17349A002F0748 /* HomeDemo.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + DDAA4D522B17349A002F0748 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1500; + LastUpgradeCheck = 1500; + TargetAttributes = { + DDAA4D592B17349A002F0748 = { + CreatedOnToolsVersion = 15.0.1; + }; + }; + }; + buildConfigurationList = DDAA4D552B17349A002F0748 /* Build configuration list for PBXProject "HomeDemo" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = DDAA4D512B17349A002F0748; + packageReferences = ( + DDAA4D712B1734C3002F0748 /* XCLocalSwiftPackageReference ".." */, + ); + productRefGroup = DDAA4D5B2B17349A002F0748 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + DDAA4D592B17349A002F0748 /* HomeDemo */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + DDAA4D582B17349A002F0748 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DDAA4D6A2B17349C002F0748 /* LaunchScreen.storyboard in Resources */, + DDAA4D672B17349C002F0748 /* Assets.xcassets in Resources */, + DDAA4D652B17349A002F0748 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + DDAA4D562B17349A002F0748 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DDAA4D622B17349A002F0748 /* ViewController.swift in Sources */, + DDAA4D5E2B17349A002F0748 /* AppDelegate.swift in Sources */, + DDAA4D602B17349A002F0748 /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + DDAA4D632B17349A002F0748 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + DDAA4D642B17349A002F0748 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + DDAA4D682B17349C002F0748 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + DDAA4D692B17349C002F0748 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + DDAA4D6C2B17349C002F0748 /* 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 = 15.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; + }; + DDAA4D6D2B17349C002F0748 /* 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 = 15.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; + }; + DDAA4D6F2B17349C002F0748 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = HomeDemo/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = kr.codesquad.boostcamp8.HomeDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Debug; + }; + DDAA4D702B17349C002F0748 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = HomeDemo/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = kr.codesquad.boostcamp8.HomeDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + DDAA4D552B17349A002F0748 /* Build configuration list for PBXProject "HomeDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DDAA4D6C2B17349C002F0748 /* Debug */, + DDAA4D6D2B17349C002F0748 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + DDAA4D6E2B17349C002F0748 /* Build configuration list for PBXNativeTarget "HomeDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DDAA4D6F2B17349C002F0748 /* Debug */, + DDAA4D702B17349C002F0748 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + DDAA4D712B1734C3002F0748 /* XCLocalSwiftPackageReference ".." */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ..; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + DDAA4D722B1734C3002F0748 /* NavigateMap */ = { + isa = XCSwiftPackageProductDependency; + productName = NavigateMap; + }; + DDAA4D742B1734C3002F0748 /* RecordJourney */ = { + isa = XCSwiftPackageProductDependency; + productName = RecordJourney; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = DDAA4D522B17349A002F0748 /* Project object */; +} diff --git a/iOS/Features/JourneyList/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/iOS/Features/Home/HomeDemo/HomeDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from iOS/Features/JourneyList/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata rename to iOS/Features/Home/HomeDemo/HomeDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/iOS/Features/Home/HomeDemo/HomeDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/iOS/Features/Home/HomeDemo/HomeDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/iOS/Features/Home/HomeDemo/HomeDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/iOS/Features/Home/HomeDemo/HomeDemo/AppDelegate.swift b/iOS/Features/Home/HomeDemo/HomeDemo/AppDelegate.swift new file mode 100644 index 0000000..014d7a2 --- /dev/null +++ b/iOS/Features/Home/HomeDemo/HomeDemo/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// HomeDemo +// +// Created by 이창준 on 2023.11.29. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } + + +} + diff --git a/iOS/Features/Home/HomeDemo/HomeDemo/Assets.xcassets/AccentColor.colorset/Contents.json b/iOS/Features/Home/HomeDemo/HomeDemo/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/iOS/Features/Home/HomeDemo/HomeDemo/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/Features/Home/HomeDemo/HomeDemo/Assets.xcassets/AppIcon.appiconset/Contents.json b/iOS/Features/Home/HomeDemo/HomeDemo/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..13613e3 --- /dev/null +++ b/iOS/Features/Home/HomeDemo/HomeDemo/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/Features/Home/HomeDemo/HomeDemo/Assets.xcassets/Contents.json b/iOS/Features/Home/HomeDemo/HomeDemo/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/iOS/Features/Home/HomeDemo/HomeDemo/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/Features/Home/HomeDemo/HomeDemo/Base.lproj/LaunchScreen.storyboard b/iOS/Features/Home/HomeDemo/HomeDemo/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/iOS/Features/Home/HomeDemo/HomeDemo/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/Features/Home/HomeDemo/HomeDemo/Base.lproj/Main.storyboard b/iOS/Features/Home/HomeDemo/HomeDemo/Base.lproj/Main.storyboard new file mode 100644 index 0000000..25a7638 --- /dev/null +++ b/iOS/Features/Home/HomeDemo/HomeDemo/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/Features/Home/HomeDemo/HomeDemo/Info.plist b/iOS/Features/Home/HomeDemo/HomeDemo/Info.plist new file mode 100644 index 0000000..dd3c9af --- /dev/null +++ b/iOS/Features/Home/HomeDemo/HomeDemo/Info.plist @@ -0,0 +1,25 @@ + + + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + + diff --git a/iOS/Features/Home/HomeDemo/HomeDemo/SceneDelegate.swift b/iOS/Features/Home/HomeDemo/HomeDemo/SceneDelegate.swift new file mode 100644 index 0000000..0144605 --- /dev/null +++ b/iOS/Features/Home/HomeDemo/HomeDemo/SceneDelegate.swift @@ -0,0 +1,52 @@ +// +// SceneDelegate.swift +// HomeDemo +// +// Created by 이창준 on 2023.11.29. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} + diff --git a/iOS/Features/Home/HomeDemo/HomeDemo/ViewController.swift b/iOS/Features/Home/HomeDemo/HomeDemo/ViewController.swift new file mode 100644 index 0000000..2ee0cf6 --- /dev/null +++ b/iOS/Features/Home/HomeDemo/HomeDemo/ViewController.swift @@ -0,0 +1,19 @@ +// +// ViewController.swift +// HomeDemo +// +// Created by 이창준 on 2023.11.29. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + } + + +} + diff --git a/iOS/Features/Home/Package.swift b/iOS/Features/Home/Package.swift new file mode 100644 index 0000000..237d1a7 --- /dev/null +++ b/iOS/Features/Home/Package.swift @@ -0,0 +1,38 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +// MARK: - Constants + +private extension String { + + static let package = "FeatureHome" + +} + +private enum Target { + + static let navigateMap = "NavigateMap" + static let recordJourney = "RecordJourney" + +} + +// MARK: - Package + +let package = Package( + name: .package, + platforms: [ + .iOS(.v15) + ], + products: [ + .library(name: Target.navigateMap, + targets: [Target.navigateMap]), + .library(name: Target.recordJourney, + targets: [Target.recordJourney]) + ], + targets: [ + .target(name: Target.navigateMap), + .target(name: Target.recordJourney) + ] +) diff --git a/iOS/Features/Home/Sources/NavigateMap/NavigateMap.swift b/iOS/Features/Home/Sources/NavigateMap/NavigateMap.swift new file mode 100644 index 0000000..57f01ed --- /dev/null +++ b/iOS/Features/Home/Sources/NavigateMap/NavigateMap.swift @@ -0,0 +1,8 @@ +// +// NavigateMap.swift +// Home +// +// Created by 이창준 on 2023.11.29. +// + +import Foundation diff --git a/iOS/Features/Home/Sources/RecordJourney/RecordJourney.swift b/iOS/Features/Home/Sources/RecordJourney/RecordJourney.swift new file mode 100644 index 0000000..17512ba --- /dev/null +++ b/iOS/Features/Home/Sources/RecordJourney/RecordJourney.swift @@ -0,0 +1,8 @@ +// +// RecordJourney.swift +// Home +// +// Created by 이창준 on 2023.11.29. +// + +import Foundation diff --git a/iOS/Features/JourneyList/.gitignore b/iOS/Features/JourneyList/.gitignore new file mode 100644 index 0000000..0023a53 --- /dev/null +++ b/iOS/Features/JourneyList/.gitignore @@ -0,0 +1,8 @@ +.DS_Store +/.build +/Packages +xcuserdata/ +DerivedData/ +.swiftpm/configuration/registries.json +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +.netrc diff --git a/iOS/Features/JourneyList/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/iOS/Features/JourneyList/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/iOS/Features/JourneyList/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/iOS/Features/JourneyList/.swiftpm/xcode/xcshareddata/xcschemes/JourneyList.xcscheme b/iOS/Features/JourneyList/.swiftpm/xcode/xcshareddata/xcschemes/JourneyList.xcscheme new file mode 100644 index 0000000..e56683b --- /dev/null +++ b/iOS/Features/JourneyList/.swiftpm/xcode/xcshareddata/xcschemes/JourneyList.xcscheme @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo.xcodeproj/project.pbxproj b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo.xcodeproj/project.pbxproj new file mode 100644 index 0000000..8c8f3ff --- /dev/null +++ b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo.xcodeproj/project.pbxproj @@ -0,0 +1,396 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 60; + objects = { + +/* Begin PBXBuildFile section */ + DDAA4D832B1734F9002F0748 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAA4D822B1734F9002F0748 /* AppDelegate.swift */; }; + DDAA4D852B1734F9002F0748 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAA4D842B1734F9002F0748 /* SceneDelegate.swift */; }; + DDAA4D872B1734F9002F0748 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAA4D862B1734F9002F0748 /* ViewController.swift */; }; + DDAA4D8A2B1734F9002F0748 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DDAA4D882B1734F9002F0748 /* Main.storyboard */; }; + DDAA4D8C2B1734FB002F0748 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DDAA4D8B2B1734FB002F0748 /* Assets.xcassets */; }; + DDAA4D8F2B1734FB002F0748 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DDAA4D8D2B1734FB002F0748 /* LaunchScreen.storyboard */; }; + DDAA4D982B173512002F0748 /* JourneyList in Frameworks */ = {isa = PBXBuildFile; productRef = DDAA4D972B173512002F0748 /* JourneyList */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + DDAA4D7F2B1734F9002F0748 /* JourneyListDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JourneyListDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DDAA4D822B1734F9002F0748 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + DDAA4D842B1734F9002F0748 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + DDAA4D862B1734F9002F0748 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + DDAA4D892B1734F9002F0748 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + DDAA4D8B2B1734FB002F0748 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + DDAA4D8E2B1734FB002F0748 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + DDAA4D902B1734FB002F0748 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + DDAA4D7C2B1734F9002F0748 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + DDAA4D982B173512002F0748 /* JourneyList in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + DDAA4D762B1734F9002F0748 = { + isa = PBXGroup; + children = ( + DDAA4D812B1734F9002F0748 /* JourneyListDemo */, + DDAA4D802B1734F9002F0748 /* Products */, + ); + sourceTree = ""; + }; + DDAA4D802B1734F9002F0748 /* Products */ = { + isa = PBXGroup; + children = ( + DDAA4D7F2B1734F9002F0748 /* JourneyListDemo.app */, + ); + name = Products; + sourceTree = ""; + }; + DDAA4D812B1734F9002F0748 /* JourneyListDemo */ = { + isa = PBXGroup; + children = ( + DDAA4D822B1734F9002F0748 /* AppDelegate.swift */, + DDAA4D842B1734F9002F0748 /* SceneDelegate.swift */, + DDAA4D862B1734F9002F0748 /* ViewController.swift */, + DDAA4D882B1734F9002F0748 /* Main.storyboard */, + DDAA4D8B2B1734FB002F0748 /* Assets.xcassets */, + DDAA4D8D2B1734FB002F0748 /* LaunchScreen.storyboard */, + DDAA4D902B1734FB002F0748 /* Info.plist */, + ); + path = JourneyListDemo; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + DDAA4D7E2B1734F9002F0748 /* JourneyListDemo */ = { + isa = PBXNativeTarget; + buildConfigurationList = DDAA4D932B1734FB002F0748 /* Build configuration list for PBXNativeTarget "JourneyListDemo" */; + buildPhases = ( + DDAA4D7B2B1734F9002F0748 /* Sources */, + DDAA4D7C2B1734F9002F0748 /* Frameworks */, + DDAA4D7D2B1734F9002F0748 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = JourneyListDemo; + packageProductDependencies = ( + DDAA4D972B173512002F0748 /* JourneyList */, + ); + productName = JourneyListDemo; + productReference = DDAA4D7F2B1734F9002F0748 /* JourneyListDemo.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + DDAA4D772B1734F9002F0748 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1500; + LastUpgradeCheck = 1500; + TargetAttributes = { + DDAA4D7E2B1734F9002F0748 = { + CreatedOnToolsVersion = 15.0.1; + }; + }; + }; + buildConfigurationList = DDAA4D7A2B1734F9002F0748 /* Build configuration list for PBXProject "JourneyListDemo" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = DDAA4D762B1734F9002F0748; + packageReferences = ( + DDAA4D962B173512002F0748 /* XCLocalSwiftPackageReference ".." */, + ); + productRefGroup = DDAA4D802B1734F9002F0748 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + DDAA4D7E2B1734F9002F0748 /* JourneyListDemo */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + DDAA4D7D2B1734F9002F0748 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DDAA4D8F2B1734FB002F0748 /* LaunchScreen.storyboard in Resources */, + DDAA4D8C2B1734FB002F0748 /* Assets.xcassets in Resources */, + DDAA4D8A2B1734F9002F0748 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + DDAA4D7B2B1734F9002F0748 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DDAA4D872B1734F9002F0748 /* ViewController.swift in Sources */, + DDAA4D832B1734F9002F0748 /* AppDelegate.swift in Sources */, + DDAA4D852B1734F9002F0748 /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + DDAA4D882B1734F9002F0748 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + DDAA4D892B1734F9002F0748 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + DDAA4D8D2B1734FB002F0748 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + DDAA4D8E2B1734FB002F0748 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + DDAA4D912B1734FB002F0748 /* 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 = 15.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; + }; + DDAA4D922B1734FB002F0748 /* 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 = 15.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; + }; + DDAA4D942B1734FB002F0748 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = JourneyListDemo/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = kr.codesquad.boostcamp8.JourneyListDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Debug; + }; + DDAA4D952B1734FB002F0748 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = JourneyListDemo/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = kr.codesquad.boostcamp8.JourneyListDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + DDAA4D7A2B1734F9002F0748 /* Build configuration list for PBXProject "JourneyListDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DDAA4D912B1734FB002F0748 /* Debug */, + DDAA4D922B1734FB002F0748 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + DDAA4D932B1734FB002F0748 /* Build configuration list for PBXNativeTarget "JourneyListDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DDAA4D942B1734FB002F0748 /* Debug */, + DDAA4D952B1734FB002F0748 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + DDAA4D962B173512002F0748 /* XCLocalSwiftPackageReference ".." */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ..; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + DDAA4D972B173512002F0748 /* JourneyList */ = { + isa = XCSwiftPackageProductDependency; + productName = JourneyList; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = DDAA4D772B1734F9002F0748 /* Project object */; +} diff --git a/iOS/Features/SaveJourney/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from iOS/Features/SaveJourney/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata rename to iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/AppDelegate.swift b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/AppDelegate.swift new file mode 100644 index 0000000..a1148cd --- /dev/null +++ b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// JourneyListDemo +// +// Created by 이창준 on 2023.11.29. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } + + +} + diff --git a/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/Assets.xcassets/AccentColor.colorset/Contents.json b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/Assets.xcassets/AppIcon.appiconset/Contents.json b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..13613e3 --- /dev/null +++ b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/Assets.xcassets/Contents.json b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/Base.lproj/LaunchScreen.storyboard b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/Base.lproj/Main.storyboard b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/Base.lproj/Main.storyboard new file mode 100644 index 0000000..25a7638 --- /dev/null +++ b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/Info.plist b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/Info.plist new file mode 100644 index 0000000..dd3c9af --- /dev/null +++ b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/Info.plist @@ -0,0 +1,25 @@ + + + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + + diff --git a/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/SceneDelegate.swift b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/SceneDelegate.swift new file mode 100644 index 0000000..1a1942a --- /dev/null +++ b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/SceneDelegate.swift @@ -0,0 +1,52 @@ +// +// SceneDelegate.swift +// JourneyListDemo +// +// Created by 이창준 on 2023.11.29. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} + diff --git a/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/ViewController.swift b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/ViewController.swift new file mode 100644 index 0000000..26aa375 --- /dev/null +++ b/iOS/Features/JourneyList/JourneyListDemo/JourneyListDemo/ViewController.swift @@ -0,0 +1,19 @@ +// +// ViewController.swift +// JourneyListDemo +// +// Created by 이창준 on 2023.11.29. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + } + + +} + diff --git a/iOS/Features/JourneyList/Package.swift b/iOS/Features/JourneyList/Package.swift new file mode 100644 index 0000000..0b44822 --- /dev/null +++ b/iOS/Features/JourneyList/Package.swift @@ -0,0 +1,34 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +// MARK: - Constants + +private extension String { + + static let package = "FeatureJourneyList" + +} + +private enum Target { + + static let journeyList = "JourneyList" + +} + +// MARK: - Package + +let package = Package( + name: .package, + platforms: [ + .iOS(.v15) + ], + products: [ + .library(name: Target.journeyList, + targets: [Target.journeyList]) + ], + targets: [ + .target(name: Target.journeyList) + ] +) diff --git a/iOS/Features/JourneyList/Sources/JourneyList/JourneyList.swift b/iOS/Features/JourneyList/Sources/JourneyList/JourneyList.swift new file mode 100644 index 0000000..fa1180d --- /dev/null +++ b/iOS/Features/JourneyList/Sources/JourneyList/JourneyList.swift @@ -0,0 +1,8 @@ +// +// JourneyList.swift +// JourneyList +// +// Created by 이창준 on 2023.11.29. +// + +import Foundation diff --git a/iOS/Features/RewindJourney/.gitignore b/iOS/Features/RewindJourney/.gitignore new file mode 100644 index 0000000..0023a53 --- /dev/null +++ b/iOS/Features/RewindJourney/.gitignore @@ -0,0 +1,8 @@ +.DS_Store +/.build +/Packages +xcuserdata/ +DerivedData/ +.swiftpm/configuration/registries.json +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +.netrc diff --git a/iOS/Features/RewindJourney/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/iOS/Features/RewindJourney/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/iOS/Features/RewindJourney/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/iOS/Features/RewindJourney/.swiftpm/xcode/xcshareddata/xcschemes/RewindJourney.xcscheme b/iOS/Features/RewindJourney/.swiftpm/xcode/xcshareddata/xcschemes/RewindJourney.xcscheme new file mode 100644 index 0000000..b502766 --- /dev/null +++ b/iOS/Features/RewindJourney/.swiftpm/xcode/xcshareddata/xcschemes/RewindJourney.xcscheme @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/Features/RewindJourney/Package.swift b/iOS/Features/RewindJourney/Package.swift new file mode 100644 index 0000000..6fb271e --- /dev/null +++ b/iOS/Features/RewindJourney/Package.swift @@ -0,0 +1,65 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +// MARK: - Constants + +private extension String { + + static let package = "FeatureRewindJourney" + + var testTarget: String { + return self + "Tests" + } + + var fromRootPath: String { + return "../../" + self + } + +} + +private enum Target { + + static let rewindJourney = "RewindJourney" + +} + +private enum Dependency { + + static let msUIKit = "MSUIKit" + static let msFoundation = "MSFoundation" + static let msDesignsystem = "MSDesignSystem" + static let msLogger = "MSLogger" + +} + +// MARK: - Package + +let package = Package( + name: .package, + platforms: [ + .iOS(.v15) + ], + products: [ + .library(name: Target.rewindJourney, + targets: [Target.rewindJourney]) + ], + dependencies: [ + .package(name: Dependency.msUIKit, + path: Dependency.msUIKit.fromRootPath), + .package(name: Dependency.msFoundation, + path: Dependency.msFoundation.fromRootPath) + ], + targets: [ + .target(name: Target.rewindJourney, + dependencies: [ + .product(name: Dependency.msUIKit, + package: Dependency.msUIKit), + .product(name: Dependency.msDesignsystem, + package: Dependency.msUIKit), + .product(name: Dependency.msLogger, + package: Dependency.msFoundation) + ]) + ] +) diff --git a/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo.xcodeproj/project.pbxproj b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo.xcodeproj/project.pbxproj new file mode 100644 index 0000000..fd6b2b8 --- /dev/null +++ b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo.xcodeproj/project.pbxproj @@ -0,0 +1,396 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 60; + objects = { + +/* Begin PBXBuildFile section */ + DDAA4DA62B173530002F0748 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAA4DA52B173530002F0748 /* AppDelegate.swift */; }; + DDAA4DA82B173530002F0748 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAA4DA72B173530002F0748 /* SceneDelegate.swift */; }; + DDAA4DAA2B173530002F0748 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAA4DA92B173530002F0748 /* ViewController.swift */; }; + DDAA4DAD2B173530002F0748 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DDAA4DAB2B173530002F0748 /* Main.storyboard */; }; + DDAA4DAF2B173532002F0748 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DDAA4DAE2B173532002F0748 /* Assets.xcassets */; }; + DDAA4DB22B173532002F0748 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DDAA4DB02B173532002F0748 /* LaunchScreen.storyboard */; }; + DDAA4DBB2B173551002F0748 /* RewindJourney in Frameworks */ = {isa = PBXBuildFile; productRef = DDAA4DBA2B173551002F0748 /* RewindJourney */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + DDAA4DA22B173530002F0748 /* RewindJourneyDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RewindJourneyDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DDAA4DA52B173530002F0748 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + DDAA4DA72B173530002F0748 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + DDAA4DA92B173530002F0748 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + DDAA4DAC2B173530002F0748 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + DDAA4DAE2B173532002F0748 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + DDAA4DB12B173532002F0748 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + DDAA4DB32B173532002F0748 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + DDAA4D9F2B173530002F0748 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + DDAA4DBB2B173551002F0748 /* RewindJourney in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + DDAA4D992B173530002F0748 = { + isa = PBXGroup; + children = ( + DDAA4DA42B173530002F0748 /* RewindJourneyDemo */, + DDAA4DA32B173530002F0748 /* Products */, + ); + sourceTree = ""; + }; + DDAA4DA32B173530002F0748 /* Products */ = { + isa = PBXGroup; + children = ( + DDAA4DA22B173530002F0748 /* RewindJourneyDemo.app */, + ); + name = Products; + sourceTree = ""; + }; + DDAA4DA42B173530002F0748 /* RewindJourneyDemo */ = { + isa = PBXGroup; + children = ( + DDAA4DA52B173530002F0748 /* AppDelegate.swift */, + DDAA4DA72B173530002F0748 /* SceneDelegate.swift */, + DDAA4DA92B173530002F0748 /* ViewController.swift */, + DDAA4DAB2B173530002F0748 /* Main.storyboard */, + DDAA4DAE2B173532002F0748 /* Assets.xcassets */, + DDAA4DB02B173532002F0748 /* LaunchScreen.storyboard */, + DDAA4DB32B173532002F0748 /* Info.plist */, + ); + path = RewindJourneyDemo; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + DDAA4DA12B173530002F0748 /* RewindJourneyDemo */ = { + isa = PBXNativeTarget; + buildConfigurationList = DDAA4DB62B173532002F0748 /* Build configuration list for PBXNativeTarget "RewindJourneyDemo" */; + buildPhases = ( + DDAA4D9E2B173530002F0748 /* Sources */, + DDAA4D9F2B173530002F0748 /* Frameworks */, + DDAA4DA02B173530002F0748 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = RewindJourneyDemo; + packageProductDependencies = ( + DDAA4DBA2B173551002F0748 /* RewindJourney */, + ); + productName = RewindJourneyDemo; + productReference = DDAA4DA22B173530002F0748 /* RewindJourneyDemo.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + DDAA4D9A2B173530002F0748 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1500; + LastUpgradeCheck = 1500; + TargetAttributes = { + DDAA4DA12B173530002F0748 = { + CreatedOnToolsVersion = 15.0.1; + }; + }; + }; + buildConfigurationList = DDAA4D9D2B173530002F0748 /* Build configuration list for PBXProject "RewindJourneyDemo" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = DDAA4D992B173530002F0748; + packageReferences = ( + DDAA4DB92B173551002F0748 /* XCLocalSwiftPackageReference ".." */, + ); + productRefGroup = DDAA4DA32B173530002F0748 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + DDAA4DA12B173530002F0748 /* RewindJourneyDemo */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + DDAA4DA02B173530002F0748 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DDAA4DB22B173532002F0748 /* LaunchScreen.storyboard in Resources */, + DDAA4DAF2B173532002F0748 /* Assets.xcassets in Resources */, + DDAA4DAD2B173530002F0748 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + DDAA4D9E2B173530002F0748 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DDAA4DAA2B173530002F0748 /* ViewController.swift in Sources */, + DDAA4DA62B173530002F0748 /* AppDelegate.swift in Sources */, + DDAA4DA82B173530002F0748 /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + DDAA4DAB2B173530002F0748 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + DDAA4DAC2B173530002F0748 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + DDAA4DB02B173532002F0748 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + DDAA4DB12B173532002F0748 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + DDAA4DB42B173532002F0748 /* 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 = 15.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; + }; + DDAA4DB52B173532002F0748 /* 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 = 15.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; + }; + DDAA4DB72B173532002F0748 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = RewindJourneyDemo/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = kr.codesquad.boostcamp8.RewindJourneyDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Debug; + }; + DDAA4DB82B173532002F0748 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = RewindJourneyDemo/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = kr.codesquad.boostcamp8.RewindJourneyDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + DDAA4D9D2B173530002F0748 /* Build configuration list for PBXProject "RewindJourneyDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DDAA4DB42B173532002F0748 /* Debug */, + DDAA4DB52B173532002F0748 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + DDAA4DB62B173532002F0748 /* Build configuration list for PBXNativeTarget "RewindJourneyDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DDAA4DB72B173532002F0748 /* Debug */, + DDAA4DB82B173532002F0748 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + DDAA4DB92B173551002F0748 /* XCLocalSwiftPackageReference ".." */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ..; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + DDAA4DBA2B173551002F0748 /* RewindJourney */ = { + isa = XCSwiftPackageProductDependency; + productName = RewindJourney; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = DDAA4D9A2B173530002F0748 /* Project object */; +} diff --git a/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/AppDelegate.swift b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/AppDelegate.swift new file mode 100644 index 0000000..1248a15 --- /dev/null +++ b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// RewindJourneyDemo +// +// Created by 이창준 on 2023.11.29. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } + + +} + diff --git a/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/Assets.xcassets/AccentColor.colorset/Contents.json b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/Assets.xcassets/AppIcon.appiconset/Contents.json b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..13613e3 --- /dev/null +++ b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/Assets.xcassets/Contents.json b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/Base.lproj/LaunchScreen.storyboard b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/Base.lproj/Main.storyboard b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/Base.lproj/Main.storyboard new file mode 100644 index 0000000..25a7638 --- /dev/null +++ b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/Info.plist b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/Info.plist new file mode 100644 index 0000000..dd3c9af --- /dev/null +++ b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/Info.plist @@ -0,0 +1,25 @@ + + + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + + diff --git a/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/SceneDelegate.swift b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/SceneDelegate.swift new file mode 100644 index 0000000..784866e --- /dev/null +++ b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/SceneDelegate.swift @@ -0,0 +1,52 @@ +// +// SceneDelegate.swift +// RewindJourneyDemo +// +// Created by 이창준 on 2023.11.29. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} + diff --git a/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/ViewController.swift b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/ViewController.swift new file mode 100644 index 0000000..5626537 --- /dev/null +++ b/iOS/Features/RewindJourney/RewindJourneyDemo/RewindJourneyDemo/ViewController.swift @@ -0,0 +1,19 @@ +// +// ViewController.swift +// RewindJourneyDemo +// +// Created by 이창준 on 2023.11.29. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + } + + +} + diff --git a/iOS/Features/RewindJourney/Sources/RewindJourney/RewindJourney.swift b/iOS/Features/RewindJourney/Sources/RewindJourney/RewindJourney.swift new file mode 100644 index 0000000..08b22b8 --- /dev/null +++ b/iOS/Features/RewindJourney/Sources/RewindJourney/RewindJourney.swift @@ -0,0 +1,2 @@ +// The Swift Programming Language +// https://docs.swift.org/swift-book diff --git a/iOS/Features/SaveJourney/.gitignore b/iOS/Features/SaveJourney/.gitignore new file mode 100644 index 0000000..0023a53 --- /dev/null +++ b/iOS/Features/SaveJourney/.gitignore @@ -0,0 +1,8 @@ +.DS_Store +/.build +/Packages +xcuserdata/ +DerivedData/ +.swiftpm/configuration/registries.json +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +.netrc diff --git a/iOS/Features/SaveJourney/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/iOS/Features/SaveJourney/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/iOS/Features/SaveJourney/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/iOS/Features/SaveJourney/.swiftpm/xcode/xcshareddata/xcschemes/SaveJourney.xcscheme b/iOS/Features/SaveJourney/.swiftpm/xcode/xcshareddata/xcschemes/SaveJourney.xcscheme new file mode 100644 index 0000000..3b465cc --- /dev/null +++ b/iOS/Features/SaveJourney/.swiftpm/xcode/xcshareddata/xcschemes/SaveJourney.xcscheme @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/Features/SaveJourney/Package.swift b/iOS/Features/SaveJourney/Package.swift new file mode 100644 index 0000000..f9dec09 --- /dev/null +++ b/iOS/Features/SaveJourney/Package.swift @@ -0,0 +1,59 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +// MARK: - Constants + +private extension String { + + static let package = "FeatureSaveJourney" + + var testTarget: String { + return self + "Tests" + } + + var fromRootPath: String { + return "../../" + self + } + +} + +private enum Target { + + static let saveJourney = "SaveJourney" + +} + +private enum Dependency { + + static let msUIKit = "MSUIKit" + static let msFoundation = "MSFoundation" + static let msDesignsystem = "MSDesignSystem" + static let msLogger = "MSLogger" + +} + +// MARK: - Package + +let package = Package( + name: .package, + platforms: [ + .iOS(.v15) + ], + products: [ + .library(name: Target.saveJourney, + targets: [Target.saveJourney]) + ], + dependencies: [ + .package(name: Dependency.msUIKit, + path: Dependency.msUIKit.fromRootPath) + ], + targets: [ + .target(name: Target.saveJourney, + dependencies: [ + .product(name: Dependency.msUIKit, + package: Dependency.msUIKit) + ]) + ] +) diff --git a/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo.xcodeproj/project.pbxproj b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo.xcodeproj/project.pbxproj new file mode 100644 index 0000000..163320f --- /dev/null +++ b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo.xcodeproj/project.pbxproj @@ -0,0 +1,396 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 60; + objects = { + +/* Begin PBXBuildFile section */ + DDAA4DC92B17356D002F0748 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAA4DC82B17356D002F0748 /* AppDelegate.swift */; }; + DDAA4DCB2B17356D002F0748 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAA4DCA2B17356D002F0748 /* SceneDelegate.swift */; }; + DDAA4DCD2B17356D002F0748 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAA4DCC2B17356D002F0748 /* ViewController.swift */; }; + DDAA4DD02B17356D002F0748 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DDAA4DCE2B17356D002F0748 /* Main.storyboard */; }; + DDAA4DD22B17356E002F0748 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DDAA4DD12B17356E002F0748 /* Assets.xcassets */; }; + DDAA4DD52B17356E002F0748 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DDAA4DD32B17356E002F0748 /* LaunchScreen.storyboard */; }; + DDAA4DDE2B17357F002F0748 /* SaveJourney in Frameworks */ = {isa = PBXBuildFile; productRef = DDAA4DDD2B17357F002F0748 /* SaveJourney */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + DDAA4DC52B17356D002F0748 /* SaveJourneyDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SaveJourneyDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DDAA4DC82B17356D002F0748 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + DDAA4DCA2B17356D002F0748 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + DDAA4DCC2B17356D002F0748 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + DDAA4DCF2B17356D002F0748 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + DDAA4DD12B17356E002F0748 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + DDAA4DD42B17356E002F0748 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + DDAA4DD62B17356E002F0748 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + DDAA4DC22B17356D002F0748 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + DDAA4DDE2B17357F002F0748 /* SaveJourney in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + DDAA4DBC2B17356D002F0748 = { + isa = PBXGroup; + children = ( + DDAA4DC72B17356D002F0748 /* SaveJourneyDemo */, + DDAA4DC62B17356D002F0748 /* Products */, + ); + sourceTree = ""; + }; + DDAA4DC62B17356D002F0748 /* Products */ = { + isa = PBXGroup; + children = ( + DDAA4DC52B17356D002F0748 /* SaveJourneyDemo.app */, + ); + name = Products; + sourceTree = ""; + }; + DDAA4DC72B17356D002F0748 /* SaveJourneyDemo */ = { + isa = PBXGroup; + children = ( + DDAA4DC82B17356D002F0748 /* AppDelegate.swift */, + DDAA4DCA2B17356D002F0748 /* SceneDelegate.swift */, + DDAA4DCC2B17356D002F0748 /* ViewController.swift */, + DDAA4DCE2B17356D002F0748 /* Main.storyboard */, + DDAA4DD12B17356E002F0748 /* Assets.xcassets */, + DDAA4DD32B17356E002F0748 /* LaunchScreen.storyboard */, + DDAA4DD62B17356E002F0748 /* Info.plist */, + ); + path = SaveJourneyDemo; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + DDAA4DC42B17356D002F0748 /* SaveJourneyDemo */ = { + isa = PBXNativeTarget; + buildConfigurationList = DDAA4DD92B17356E002F0748 /* Build configuration list for PBXNativeTarget "SaveJourneyDemo" */; + buildPhases = ( + DDAA4DC12B17356D002F0748 /* Sources */, + DDAA4DC22B17356D002F0748 /* Frameworks */, + DDAA4DC32B17356D002F0748 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SaveJourneyDemo; + packageProductDependencies = ( + DDAA4DDD2B17357F002F0748 /* SaveJourney */, + ); + productName = SaveJourneyDemo; + productReference = DDAA4DC52B17356D002F0748 /* SaveJourneyDemo.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + DDAA4DBD2B17356D002F0748 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1500; + LastUpgradeCheck = 1500; + TargetAttributes = { + DDAA4DC42B17356D002F0748 = { + CreatedOnToolsVersion = 15.0.1; + }; + }; + }; + buildConfigurationList = DDAA4DC02B17356D002F0748 /* Build configuration list for PBXProject "SaveJourneyDemo" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = DDAA4DBC2B17356D002F0748; + packageReferences = ( + DDAA4DDC2B17357F002F0748 /* XCLocalSwiftPackageReference ".." */, + ); + productRefGroup = DDAA4DC62B17356D002F0748 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + DDAA4DC42B17356D002F0748 /* SaveJourneyDemo */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + DDAA4DC32B17356D002F0748 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DDAA4DD52B17356E002F0748 /* LaunchScreen.storyboard in Resources */, + DDAA4DD22B17356E002F0748 /* Assets.xcassets in Resources */, + DDAA4DD02B17356D002F0748 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + DDAA4DC12B17356D002F0748 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DDAA4DCD2B17356D002F0748 /* ViewController.swift in Sources */, + DDAA4DC92B17356D002F0748 /* AppDelegate.swift in Sources */, + DDAA4DCB2B17356D002F0748 /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + DDAA4DCE2B17356D002F0748 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + DDAA4DCF2B17356D002F0748 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + DDAA4DD32B17356E002F0748 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + DDAA4DD42B17356E002F0748 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + DDAA4DD72B17356E002F0748 /* 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 = 15.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; + }; + DDAA4DD82B17356E002F0748 /* 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 = 15.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; + }; + DDAA4DDA2B17356E002F0748 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = SaveJourneyDemo/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = kr.codesquad.boostcamp8.SaveJourneyDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Debug; + }; + DDAA4DDB2B17356E002F0748 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = SaveJourneyDemo/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = kr.codesquad.boostcamp8.SaveJourneyDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + DDAA4DC02B17356D002F0748 /* Build configuration list for PBXProject "SaveJourneyDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DDAA4DD72B17356E002F0748 /* Debug */, + DDAA4DD82B17356E002F0748 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + DDAA4DD92B17356E002F0748 /* Build configuration list for PBXNativeTarget "SaveJourneyDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DDAA4DDA2B17356E002F0748 /* Debug */, + DDAA4DDB2B17356E002F0748 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + DDAA4DDC2B17357F002F0748 /* XCLocalSwiftPackageReference ".." */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ..; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + DDAA4DDD2B17357F002F0748 /* SaveJourney */ = { + isa = XCSwiftPackageProductDependency; + productName = SaveJourney; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = DDAA4DBD2B17356D002F0748 /* Project object */; +} diff --git a/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/AppDelegate.swift b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/AppDelegate.swift new file mode 100644 index 0000000..3332466 --- /dev/null +++ b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// SaveJourneyDemo +// +// Created by 이창준 on 2023.11.29. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } + + +} + diff --git a/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/Assets.xcassets/AccentColor.colorset/Contents.json b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/Assets.xcassets/AppIcon.appiconset/Contents.json b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..13613e3 --- /dev/null +++ b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/Assets.xcassets/Contents.json b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/Base.lproj/LaunchScreen.storyboard b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/Base.lproj/Main.storyboard b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/Base.lproj/Main.storyboard new file mode 100644 index 0000000..25a7638 --- /dev/null +++ b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/Info.plist b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/Info.plist new file mode 100644 index 0000000..dd3c9af --- /dev/null +++ b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/Info.plist @@ -0,0 +1,25 @@ + + + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + + diff --git a/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/SceneDelegate.swift b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/SceneDelegate.swift new file mode 100644 index 0000000..defe329 --- /dev/null +++ b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/SceneDelegate.swift @@ -0,0 +1,52 @@ +// +// SceneDelegate.swift +// SaveJourneyDemo +// +// Created by 이창준 on 2023.11.29. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} + diff --git a/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/ViewController.swift b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/ViewController.swift new file mode 100644 index 0000000..aa71b3c --- /dev/null +++ b/iOS/Features/SaveJourney/SaveJourneyDemo/SaveJourneyDemo/ViewController.swift @@ -0,0 +1,19 @@ +// +// ViewController.swift +// SaveJourneyDemo +// +// Created by 이창준 on 2023.11.29. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + } + + +} + diff --git a/iOS/Features/SaveJourney/Sources/SaveJourney/SaveJourney.swift b/iOS/Features/SaveJourney/Sources/SaveJourney/SaveJourney.swift new file mode 100644 index 0000000..08b22b8 --- /dev/null +++ b/iOS/Features/SaveJourney/Sources/SaveJourney/SaveJourney.swift @@ -0,0 +1,2 @@ +// The Swift Programming Language +// https://docs.swift.org/swift-book diff --git a/iOS/Features/SelectSong/.gitignore b/iOS/Features/SelectSong/.gitignore new file mode 100644 index 0000000..0023a53 --- /dev/null +++ b/iOS/Features/SelectSong/.gitignore @@ -0,0 +1,8 @@ +.DS_Store +/.build +/Packages +xcuserdata/ +DerivedData/ +.swiftpm/configuration/registries.json +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +.netrc diff --git a/iOS/Features/SelectSong/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/iOS/Features/SelectSong/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/iOS/Features/SelectSong/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/iOS/Features/SelectSong/Package.swift b/iOS/Features/SelectSong/Package.swift new file mode 100644 index 0000000..910e61f --- /dev/null +++ b/iOS/Features/SelectSong/Package.swift @@ -0,0 +1,51 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +// MARK: - Constants + +private extension String { + + static let package = "FeatureSelectSong" + + var testTarget: String { + return self + "Tests" + } + + var fromRootPath: String { + return "../../" + self + } + +} + +private enum Target { + + static let selectSong = "SelectSong" + +} + +private enum Dependency { + + static let msUIKit = "MSUIKit" + static let msFoundation = "MSFoundation" + static let msDesignsystem = "MSDesignSystem" + static let msLogger = "MSLogger" + +} + +// MARK: - Package + +let package = Package( + name: .package, + platforms: [ + .iOS(.v15) + ], + products: [ + .library(name: Target.selectSong, + targets: [Target.selectSong]) + ], + targets: [ + .target(name:Target.selectSong) + ] +) diff --git a/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo.xcodeproj/project.pbxproj b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo.xcodeproj/project.pbxproj new file mode 100644 index 0000000..1c39d31 --- /dev/null +++ b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo.xcodeproj/project.pbxproj @@ -0,0 +1,396 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 60; + objects = { + +/* Begin PBXBuildFile section */ + DDAA4DEC2B17359E002F0748 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAA4DEB2B17359E002F0748 /* AppDelegate.swift */; }; + DDAA4DEE2B17359E002F0748 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAA4DED2B17359E002F0748 /* SceneDelegate.swift */; }; + DDAA4DF02B17359E002F0748 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAA4DEF2B17359E002F0748 /* ViewController.swift */; }; + DDAA4DF32B17359E002F0748 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DDAA4DF12B17359E002F0748 /* Main.storyboard */; }; + DDAA4DF52B1735A0002F0748 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DDAA4DF42B1735A0002F0748 /* Assets.xcassets */; }; + DDAA4DF82B1735A0002F0748 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DDAA4DF62B1735A0002F0748 /* LaunchScreen.storyboard */; }; + DDAA4E012B1735B6002F0748 /* SelectSong in Frameworks */ = {isa = PBXBuildFile; productRef = DDAA4E002B1735B6002F0748 /* SelectSong */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + DDAA4DE82B17359E002F0748 /* SelectSongDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SelectSongDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DDAA4DEB2B17359E002F0748 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + DDAA4DED2B17359E002F0748 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + DDAA4DEF2B17359E002F0748 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + DDAA4DF22B17359E002F0748 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + DDAA4DF42B1735A0002F0748 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + DDAA4DF72B1735A0002F0748 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + DDAA4DF92B1735A0002F0748 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + DDAA4DE52B17359E002F0748 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + DDAA4E012B1735B6002F0748 /* SelectSong in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + DDAA4DDF2B17359E002F0748 = { + isa = PBXGroup; + children = ( + DDAA4DEA2B17359E002F0748 /* SelectSongDemo */, + DDAA4DE92B17359E002F0748 /* Products */, + ); + sourceTree = ""; + }; + DDAA4DE92B17359E002F0748 /* Products */ = { + isa = PBXGroup; + children = ( + DDAA4DE82B17359E002F0748 /* SelectSongDemo.app */, + ); + name = Products; + sourceTree = ""; + }; + DDAA4DEA2B17359E002F0748 /* SelectSongDemo */ = { + isa = PBXGroup; + children = ( + DDAA4DEB2B17359E002F0748 /* AppDelegate.swift */, + DDAA4DED2B17359E002F0748 /* SceneDelegate.swift */, + DDAA4DEF2B17359E002F0748 /* ViewController.swift */, + DDAA4DF12B17359E002F0748 /* Main.storyboard */, + DDAA4DF42B1735A0002F0748 /* Assets.xcassets */, + DDAA4DF62B1735A0002F0748 /* LaunchScreen.storyboard */, + DDAA4DF92B1735A0002F0748 /* Info.plist */, + ); + path = SelectSongDemo; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + DDAA4DE72B17359E002F0748 /* SelectSongDemo */ = { + isa = PBXNativeTarget; + buildConfigurationList = DDAA4DFC2B1735A0002F0748 /* Build configuration list for PBXNativeTarget "SelectSongDemo" */; + buildPhases = ( + DDAA4DE42B17359E002F0748 /* Sources */, + DDAA4DE52B17359E002F0748 /* Frameworks */, + DDAA4DE62B17359E002F0748 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SelectSongDemo; + packageProductDependencies = ( + DDAA4E002B1735B6002F0748 /* SelectSong */, + ); + productName = SelectSongDemo; + productReference = DDAA4DE82B17359E002F0748 /* SelectSongDemo.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + DDAA4DE02B17359E002F0748 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1500; + LastUpgradeCheck = 1500; + TargetAttributes = { + DDAA4DE72B17359E002F0748 = { + CreatedOnToolsVersion = 15.0.1; + }; + }; + }; + buildConfigurationList = DDAA4DE32B17359E002F0748 /* Build configuration list for PBXProject "SelectSongDemo" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = DDAA4DDF2B17359E002F0748; + packageReferences = ( + DDAA4DFF2B1735B6002F0748 /* XCLocalSwiftPackageReference ".." */, + ); + productRefGroup = DDAA4DE92B17359E002F0748 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + DDAA4DE72B17359E002F0748 /* SelectSongDemo */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + DDAA4DE62B17359E002F0748 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DDAA4DF82B1735A0002F0748 /* LaunchScreen.storyboard in Resources */, + DDAA4DF52B1735A0002F0748 /* Assets.xcassets in Resources */, + DDAA4DF32B17359E002F0748 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + DDAA4DE42B17359E002F0748 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DDAA4DF02B17359E002F0748 /* ViewController.swift in Sources */, + DDAA4DEC2B17359E002F0748 /* AppDelegate.swift in Sources */, + DDAA4DEE2B17359E002F0748 /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + DDAA4DF12B17359E002F0748 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + DDAA4DF22B17359E002F0748 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + DDAA4DF62B1735A0002F0748 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + DDAA4DF72B1735A0002F0748 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + DDAA4DFA2B1735A0002F0748 /* 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 = 15.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; + }; + DDAA4DFB2B1735A0002F0748 /* 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 = 15.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; + }; + DDAA4DFD2B1735A0002F0748 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = SelectSongDemo/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = kr.codesquad.boostcamp8.SelectSongDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Debug; + }; + DDAA4DFE2B1735A0002F0748 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = SelectSongDemo/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = kr.codesquad.boostcamp8.SelectSongDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + DDAA4DE32B17359E002F0748 /* Build configuration list for PBXProject "SelectSongDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DDAA4DFA2B1735A0002F0748 /* Debug */, + DDAA4DFB2B1735A0002F0748 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + DDAA4DFC2B1735A0002F0748 /* Build configuration list for PBXNativeTarget "SelectSongDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DDAA4DFD2B1735A0002F0748 /* Debug */, + DDAA4DFE2B1735A0002F0748 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + DDAA4DFF2B1735B6002F0748 /* XCLocalSwiftPackageReference ".." */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ..; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + DDAA4E002B1735B6002F0748 /* SelectSong */ = { + isa = XCSwiftPackageProductDependency; + productName = SelectSong; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = DDAA4DE02B17359E002F0748 /* Project object */; +} diff --git a/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/AppDelegate.swift b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/AppDelegate.swift new file mode 100644 index 0000000..125bc24 --- /dev/null +++ b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// SelectSongDemo +// +// Created by 이창준 on 2023.11.29. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } + + +} + diff --git a/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/Assets.xcassets/AccentColor.colorset/Contents.json b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/Assets.xcassets/AppIcon.appiconset/Contents.json b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..13613e3 --- /dev/null +++ b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/Assets.xcassets/Contents.json b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/Base.lproj/LaunchScreen.storyboard b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/Base.lproj/Main.storyboard b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/Base.lproj/Main.storyboard new file mode 100644 index 0000000..25a7638 --- /dev/null +++ b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/Info.plist b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/Info.plist new file mode 100644 index 0000000..dd3c9af --- /dev/null +++ b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/Info.plist @@ -0,0 +1,25 @@ + + + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + + diff --git a/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/SceneDelegate.swift b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/SceneDelegate.swift new file mode 100644 index 0000000..4ad36dd --- /dev/null +++ b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/SceneDelegate.swift @@ -0,0 +1,52 @@ +// +// SceneDelegate.swift +// SelectSongDemo +// +// Created by 이창준 on 2023.11.29. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} + diff --git a/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/ViewController.swift b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/ViewController.swift new file mode 100644 index 0000000..7d1b05b --- /dev/null +++ b/iOS/Features/SelectSong/SelectSongDemo/SelectSongDemo/ViewController.swift @@ -0,0 +1,19 @@ +// +// ViewController.swift +// SelectSongDemo +// +// Created by 이창준 on 2023.11.29. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + } + + +} + diff --git a/iOS/Features/SelectSong/Sources/SelectSong/SelectSong.swift b/iOS/Features/SelectSong/Sources/SelectSong/SelectSong.swift new file mode 100644 index 0000000..08b22b8 --- /dev/null +++ b/iOS/Features/SelectSong/Sources/SelectSong/SelectSong.swift @@ -0,0 +1,2 @@ +// The Swift Programming Language +// https://docs.swift.org/swift-book diff --git a/iOS/Features/Spot/.gitignore b/iOS/Features/Spot/.gitignore new file mode 100644 index 0000000..0023a53 --- /dev/null +++ b/iOS/Features/Spot/.gitignore @@ -0,0 +1,8 @@ +.DS_Store +/.build +/Packages +xcuserdata/ +DerivedData/ +.swiftpm/configuration/registries.json +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +.netrc diff --git a/iOS/Features/Spot/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/iOS/Features/Spot/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/iOS/Features/Spot/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/iOS/Features/Spot/.swiftpm/xcode/xcshareddata/xcschemes/Spot.xcscheme b/iOS/Features/Spot/.swiftpm/xcode/xcshareddata/xcschemes/Spot.xcscheme new file mode 100644 index 0000000..bfdca86 --- /dev/null +++ b/iOS/Features/Spot/.swiftpm/xcode/xcshareddata/xcschemes/Spot.xcscheme @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/Features/Spot/Package.swift b/iOS/Features/Spot/Package.swift new file mode 100644 index 0000000..0bc07b7 --- /dev/null +++ b/iOS/Features/Spot/Package.swift @@ -0,0 +1,65 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +// MARK: - Constants + +private extension String { + + static let package = "FeatureSpot" + + var testTarget: String { + return self + "Tests" + } + + var fromRootPath: String { + return "../../" + self + } + +} + +private enum Target { + + static let spot = "Spot" + +} + +private enum Dependency { + + static let msUIKit = "MSUIKit" + static let msFoundation = "MSFoundation" + static let msDesignsystem = "MSDesignSystem" + static let msLogger = "MSLogger" + +} + +// MARK: - Package + +let package = Package( + name: .package, + platforms: [ + .iOS(.v15) + ], + products: [ + .library(name: Target.spot, + targets: [Target.spot]) + ], + dependencies: [ + .package(name: Dependency.msUIKit, + path: Dependency.msUIKit.fromRootPath), + .package(name: Dependency.msFoundation, + path: Dependency.msFoundation.fromRootPath) + ], + targets: [ + .target(name: Target.spot, + dependencies: [ + .product(name: Dependency.msUIKit, + package: Dependency.msUIKit), + .product(name: Dependency.msDesignsystem, + package: Dependency.msUIKit), + .product(name: Dependency.msLogger, + package: Dependency.msFoundation) + ]) + ] +) diff --git a/iOS/Features/Spot/Sources/Spot/Spot.swift b/iOS/Features/Spot/Sources/Spot/Spot.swift new file mode 100644 index 0000000..08b22b8 --- /dev/null +++ b/iOS/Features/Spot/Sources/Spot/Spot.swift @@ -0,0 +1,2 @@ +// The Swift Programming Language +// https://docs.swift.org/swift-book diff --git a/iOS/Features/Spot/SpotDemo/SpotDemo.xcodeproj/project.pbxproj b/iOS/Features/Spot/SpotDemo/SpotDemo.xcodeproj/project.pbxproj new file mode 100644 index 0000000..d7a2250 --- /dev/null +++ b/iOS/Features/Spot/SpotDemo/SpotDemo.xcodeproj/project.pbxproj @@ -0,0 +1,396 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 60; + objects = { + +/* Begin PBXBuildFile section */ + DDAA4E0F2B1735CF002F0748 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAA4E0E2B1735CF002F0748 /* AppDelegate.swift */; }; + DDAA4E112B1735CF002F0748 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAA4E102B1735CF002F0748 /* SceneDelegate.swift */; }; + DDAA4E132B1735CF002F0748 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAA4E122B1735CF002F0748 /* ViewController.swift */; }; + DDAA4E162B1735CF002F0748 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DDAA4E142B1735CF002F0748 /* Main.storyboard */; }; + DDAA4E182B1735D0002F0748 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DDAA4E172B1735D0002F0748 /* Assets.xcassets */; }; + DDAA4E1B2B1735D0002F0748 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DDAA4E192B1735D0002F0748 /* LaunchScreen.storyboard */; }; + DDAA4E242B1735E4002F0748 /* Spot in Frameworks */ = {isa = PBXBuildFile; productRef = DDAA4E232B1735E4002F0748 /* Spot */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + DDAA4E0B2B1735CF002F0748 /* SpotDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SpotDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DDAA4E0E2B1735CF002F0748 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + DDAA4E102B1735CF002F0748 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + DDAA4E122B1735CF002F0748 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + DDAA4E152B1735CF002F0748 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + DDAA4E172B1735D0002F0748 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + DDAA4E1A2B1735D0002F0748 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + DDAA4E1C2B1735D0002F0748 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + DDAA4E082B1735CF002F0748 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + DDAA4E242B1735E4002F0748 /* Spot in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + DDAA4E022B1735CF002F0748 = { + isa = PBXGroup; + children = ( + DDAA4E0D2B1735CF002F0748 /* SpotDemo */, + DDAA4E0C2B1735CF002F0748 /* Products */, + ); + sourceTree = ""; + }; + DDAA4E0C2B1735CF002F0748 /* Products */ = { + isa = PBXGroup; + children = ( + DDAA4E0B2B1735CF002F0748 /* SpotDemo.app */, + ); + name = Products; + sourceTree = ""; + }; + DDAA4E0D2B1735CF002F0748 /* SpotDemo */ = { + isa = PBXGroup; + children = ( + DDAA4E0E2B1735CF002F0748 /* AppDelegate.swift */, + DDAA4E102B1735CF002F0748 /* SceneDelegate.swift */, + DDAA4E122B1735CF002F0748 /* ViewController.swift */, + DDAA4E142B1735CF002F0748 /* Main.storyboard */, + DDAA4E172B1735D0002F0748 /* Assets.xcassets */, + DDAA4E192B1735D0002F0748 /* LaunchScreen.storyboard */, + DDAA4E1C2B1735D0002F0748 /* Info.plist */, + ); + path = SpotDemo; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + DDAA4E0A2B1735CF002F0748 /* SpotDemo */ = { + isa = PBXNativeTarget; + buildConfigurationList = DDAA4E1F2B1735D0002F0748 /* Build configuration list for PBXNativeTarget "SpotDemo" */; + buildPhases = ( + DDAA4E072B1735CF002F0748 /* Sources */, + DDAA4E082B1735CF002F0748 /* Frameworks */, + DDAA4E092B1735CF002F0748 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SpotDemo; + packageProductDependencies = ( + DDAA4E232B1735E4002F0748 /* Spot */, + ); + productName = SpotDemo; + productReference = DDAA4E0B2B1735CF002F0748 /* SpotDemo.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + DDAA4E032B1735CF002F0748 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1500; + LastUpgradeCheck = 1500; + TargetAttributes = { + DDAA4E0A2B1735CF002F0748 = { + CreatedOnToolsVersion = 15.0.1; + }; + }; + }; + buildConfigurationList = DDAA4E062B1735CF002F0748 /* Build configuration list for PBXProject "SpotDemo" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = DDAA4E022B1735CF002F0748; + packageReferences = ( + DDAA4E222B1735E4002F0748 /* XCLocalSwiftPackageReference ".." */, + ); + productRefGroup = DDAA4E0C2B1735CF002F0748 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + DDAA4E0A2B1735CF002F0748 /* SpotDemo */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + DDAA4E092B1735CF002F0748 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DDAA4E1B2B1735D0002F0748 /* LaunchScreen.storyboard in Resources */, + DDAA4E182B1735D0002F0748 /* Assets.xcassets in Resources */, + DDAA4E162B1735CF002F0748 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + DDAA4E072B1735CF002F0748 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DDAA4E132B1735CF002F0748 /* ViewController.swift in Sources */, + DDAA4E0F2B1735CF002F0748 /* AppDelegate.swift in Sources */, + DDAA4E112B1735CF002F0748 /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + DDAA4E142B1735CF002F0748 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + DDAA4E152B1735CF002F0748 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + DDAA4E192B1735D0002F0748 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + DDAA4E1A2B1735D0002F0748 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + DDAA4E1D2B1735D0002F0748 /* 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 = 15.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; + }; + DDAA4E1E2B1735D0002F0748 /* 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 = 15.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; + }; + DDAA4E202B1735D0002F0748 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = SpotDemo/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = kr.codesquad.boostcamp8.SpotDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Debug; + }; + DDAA4E212B1735D0002F0748 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = SpotDemo/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = kr.codesquad.boostcamp8.SpotDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + DDAA4E062B1735CF002F0748 /* Build configuration list for PBXProject "SpotDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DDAA4E1D2B1735D0002F0748 /* Debug */, + DDAA4E1E2B1735D0002F0748 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + DDAA4E1F2B1735D0002F0748 /* Build configuration list for PBXNativeTarget "SpotDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DDAA4E202B1735D0002F0748 /* Debug */, + DDAA4E212B1735D0002F0748 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + DDAA4E222B1735E4002F0748 /* XCLocalSwiftPackageReference ".." */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ..; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + DDAA4E232B1735E4002F0748 /* Spot */ = { + isa = XCSwiftPackageProductDependency; + productName = Spot; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = DDAA4E032B1735CF002F0748 /* Project object */; +} diff --git a/iOS/Features/Spot/SpotDemo/SpotDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/iOS/Features/Spot/SpotDemo/SpotDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/iOS/Features/Spot/SpotDemo/SpotDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/iOS/Features/Spot/SpotDemo/SpotDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/iOS/Features/Spot/SpotDemo/SpotDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/iOS/Features/Spot/SpotDemo/SpotDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/iOS/Features/Spot/SpotDemo/SpotDemo/AppDelegate.swift b/iOS/Features/Spot/SpotDemo/SpotDemo/AppDelegate.swift new file mode 100644 index 0000000..b2afe12 --- /dev/null +++ b/iOS/Features/Spot/SpotDemo/SpotDemo/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// SpotDemo +// +// Created by 이창준 on 2023.11.29. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } + + +} + diff --git a/iOS/Features/Spot/SpotDemo/SpotDemo/Assets.xcassets/AccentColor.colorset/Contents.json b/iOS/Features/Spot/SpotDemo/SpotDemo/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/iOS/Features/Spot/SpotDemo/SpotDemo/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/Features/Spot/SpotDemo/SpotDemo/Assets.xcassets/AppIcon.appiconset/Contents.json b/iOS/Features/Spot/SpotDemo/SpotDemo/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..13613e3 --- /dev/null +++ b/iOS/Features/Spot/SpotDemo/SpotDemo/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/Features/Spot/SpotDemo/SpotDemo/Assets.xcassets/Contents.json b/iOS/Features/Spot/SpotDemo/SpotDemo/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/iOS/Features/Spot/SpotDemo/SpotDemo/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/iOS/Features/Spot/SpotDemo/SpotDemo/Base.lproj/LaunchScreen.storyboard b/iOS/Features/Spot/SpotDemo/SpotDemo/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/iOS/Features/Spot/SpotDemo/SpotDemo/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/Features/Spot/SpotDemo/SpotDemo/Base.lproj/Main.storyboard b/iOS/Features/Spot/SpotDemo/SpotDemo/Base.lproj/Main.storyboard new file mode 100644 index 0000000..25a7638 --- /dev/null +++ b/iOS/Features/Spot/SpotDemo/SpotDemo/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/Features/Spot/SpotDemo/SpotDemo/Info.plist b/iOS/Features/Spot/SpotDemo/SpotDemo/Info.plist new file mode 100644 index 0000000..dd3c9af --- /dev/null +++ b/iOS/Features/Spot/SpotDemo/SpotDemo/Info.plist @@ -0,0 +1,25 @@ + + + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + + diff --git a/iOS/Features/Spot/SpotDemo/SpotDemo/SceneDelegate.swift b/iOS/Features/Spot/SpotDemo/SpotDemo/SceneDelegate.swift new file mode 100644 index 0000000..0a7c806 --- /dev/null +++ b/iOS/Features/Spot/SpotDemo/SpotDemo/SceneDelegate.swift @@ -0,0 +1,52 @@ +// +// SceneDelegate.swift +// SpotDemo +// +// Created by 이창준 on 2023.11.29. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} + diff --git a/iOS/Features/Spot/SpotDemo/SpotDemo/ViewController.swift b/iOS/Features/Spot/SpotDemo/SpotDemo/ViewController.swift new file mode 100644 index 0000000..2edaf0c --- /dev/null +++ b/iOS/Features/Spot/SpotDemo/SpotDemo/ViewController.swift @@ -0,0 +1,19 @@ +// +// ViewController.swift +// SpotDemo +// +// Created by 이창준 on 2023.11.29. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + } + + +} + diff --git a/iOS/MSCoreKit/.swiftpm/xcode/xcshareddata/xcschemes/MSCacheStorage.xcscheme b/iOS/MSCoreKit/.swiftpm/xcode/xcshareddata/xcschemes/MSCacheStorage.xcscheme index 1113d29..a20692e 100644 --- a/iOS/MSCoreKit/.swiftpm/xcode/xcshareddata/xcschemes/MSCacheStorage.xcscheme +++ b/iOS/MSCoreKit/.swiftpm/xcode/xcshareddata/xcschemes/MSCacheStorage.xcscheme @@ -28,6 +28,18 @@ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES" shouldAutocreateTestPlan = "YES"> + + + + + + + + + + + + + + + + + + + + + + + + Value? - func cleanDisk() throws -} - -public final class MSCacheStorage: KeyValueStorage { - - public typealias Key = NSString - public typealias Cache = NSCache - - // MARK: - Properties - - private let memory: Cache - private let disk: FileManager - - // MARK: - Initializer - - public init(cache: Cache = Cache(), - fileManager: FileManager = .default) { - self.memory = cache - self.disk = fileManager - } - - // MARK: - Functions - - /// 캐싱된 데이터를 불러옵니다. - public func data(forKey key: String, etag: String? = nil) async -> MSCacheableData? { - // Memory Cache - if let memoryData = memory.object(forKey: key as NSString) { // memory hit - // TODO: 서버와 데이터 검증 필요 (etag 활용) - return memoryData - } - - // Disk Cache - if let cacheURL = cacheURL(forCache: "\(key).cache"), - let diskData = disk.contents(atPath: cacheURL.path) { // disk hit - // TODO: 서버와 데이터 검증 필요 (etag 활용) - let decoder = JSONDecoder() - return try? decoder.decode(MSCacheableData.self, from: diskData) - } - - // Request - // TODO: 서버로부터 데이터 수신 및 캐싱 + return 값 변경 - return nil - } - - public func cleanDisk() throws { - if let path = cacheDirectoryURL?.path { - try disk.removeItem(atPath: path) - } - } - -} - -// MARK: - URLs - -private extension MSCacheStorage { - - var cacheDirectoryURL: URL? { - if #available(iOS 16.0, *) { - return try? disk.url(for: .cachesDirectory, - in: .userDomainMask, - appropriateFor: .cachesDirectory, - create: true) - } else { - return disk - .urls(for: .cachesDirectory, in: .userDomainMask) - .first - } - } - - func cacheURL(forCache cache: String) -> URL? { - if #available(iOS 16.0, *) { - return cacheDirectoryURL? - .appending(path: "MusicSpot", directoryHint: .isDirectory) - .appending(component: cache, directoryHint: .notDirectory) - } else { - return cacheDirectoryURL? - .appendingPathExtension("MusicSpot") - .appendingPathComponent(cache) - } - } - -} diff --git a/iOS/MSCoreKit/Sources/MSCacheStorage/MSCacheableData.swift b/iOS/MSCoreKit/Sources/MSCacheStorage/MSCacheableData.swift deleted file mode 100644 index 4bdf3c8..0000000 --- a/iOS/MSCoreKit/Sources/MSCacheStorage/MSCacheableData.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// MSCacheableData.swift -// MSCoreKit -// -// Created by 이창준 on 11/15/23. -// - -import Foundation - -public final class MSCacheableData: Codable { - - struct Metadata: Hashable, Codable { - let etag: String - let lastUsed: Date - } - - // MARK: - Properties - - let data: Data - let metadata: Metadata - - // MARK: - Initializer - - public init(data: Data, etag: String) { - self.data = data - self.metadata = Metadata(etag: etag, lastUsed: .now) - } - -} diff --git a/iOS/MSCoreKit/Sources/MSCacheStorage/MSImageCacheStorage.swift b/iOS/MSCoreKit/Sources/MSCacheStorage/MSImageCacheStorage.swift new file mode 100644 index 0000000..af47f8e --- /dev/null +++ b/iOS/MSCoreKit/Sources/MSCacheStorage/MSImageCacheStorage.swift @@ -0,0 +1,84 @@ +// +// MSImageCacheStorage.swift +// MSCoreKit +// +// Created by 이창준 on 11/14/23. +// + +import Foundation + +public final class MSImageCacheStorage: CacheStorage { + + public typealias Cache = NSCache + + // MARK: - Properties + + private let memory: Cache + private let disk: FileManager + + private let decoder = JSONDecoder() + + // MARK: - Initializer + + public init(cache: Cache = Cache(), + fileManager: FileManager = .default) { + self.memory = cache + self.disk = fileManager + } + + // MARK: - Functions + + /// 캐싱된 데이터를 불러옵니다. + public func data(forKey key: NSString) async -> NSData? { + // Memory Cache + if let memoryData = self.memory.object(forKey: key as NSString) { // memory hit + return memoryData + } + + // Disk Cache + if let cacheURL = self.cacheURL(forCache: "\(key).cache"), + let diskData = self.disk.contents(atPath: cacheURL.path) { // disk hit + + } + + return nil + } + + public func cleanDisk() throws { + if let path = self.cacheDirectoryURL?.path { + try self.disk.removeItem(atPath: path) + } + } + +} + +// MARK: - URLs + +private extension MSImageCacheStorage { + + var cacheDirectoryURL: URL? { + if #available(iOS 16.0, *) { + return try? self.disk.url(for: .cachesDirectory, + in: .userDomainMask, + appropriateFor: .cachesDirectory, + create: true) + } else { + return self.disk + .urls(for: .cachesDirectory, in: .userDomainMask) + .first + } + } + + func cacheURL(forCache cache: String) -> URL? { + if #available(iOS 16.0, *) { + return self.cacheDirectoryURL? + .appending(path: "MusicSpot", directoryHint: .isDirectory) + .appending(component: cache, directoryHint: .notDirectory) + } else { + return self.cacheDirectoryURL? + .appendingPathExtension("MusicSpot") + .appendingPathComponent(cache) + } + } + +} diff --git a/iOS/MSCoreKit/Sources/MSCacheStorage/Protocol/CacheStorage.swift b/iOS/MSCoreKit/Sources/MSCacheStorage/Protocol/CacheStorage.swift new file mode 100644 index 0000000..0cf1970 --- /dev/null +++ b/iOS/MSCoreKit/Sources/MSCacheStorage/Protocol/CacheStorage.swift @@ -0,0 +1,22 @@ +// +// CacheStorage.swift +// MSCoreKit +// +// Created by 이창준 on 2023.11.28. +// + +import Foundation + +public protocol CacheStorage { + + associatedtype Key: AnyObject = NSString + associatedtype Value: AnyObject + + typealias Cache = NSCache + + // MARK: - Functions + + func data(forKey key: Key) async -> Value? + func cleanDisk() throws + +} diff --git a/iOS/MSCoreKit/Sources/MSNetworking/MSRouter.swift b/iOS/MSCoreKit/Sources/MSNetworking/MSRouter.swift deleted file mode 100644 index 62158bc..0000000 --- a/iOS/MSCoreKit/Sources/MSNetworking/MSRouter.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// MSRouter.swift -// MSCoreKit -// -// Created by 전민건 on 11/16/23. -// - -import Foundation - -public struct RouterType { - - private var encodable: Encodable? - - //기능별 MSRouter - public var getJourney: MSRouter { - MSRouter(baseURL: .none, pathURL: .none, method: .get, body: HTTPBody(content: encodable)) - } - public var getPerson: MSRouter { - MSRouter(baseURL: .none, pathURL: .none, method: .get, body: HTTPBody(content: encodable)) - } - -} - -public struct MSRouter: Router { - - let baseURL: APIbaseURL - let pathURL: APIpathURL - let method: HTTPMethod - var body: HTTPBody - - func asURLRequest() -> URLRequest? { - guard let url = URL(string: baseURL.rawValue + pathURL.rawValue) else { - return nil - } - var request = URLRequest(url: url) - request.httpMethod = method.rawValue - request.httpBody = body.contentToData() - - return request - } - -} diff --git a/iOS/MSData/.gitignore b/iOS/MSData/.gitignore new file mode 100644 index 0000000..0023a53 --- /dev/null +++ b/iOS/MSData/.gitignore @@ -0,0 +1,8 @@ +.DS_Store +/.build +/Packages +xcuserdata/ +DerivedData/ +.swiftpm/configuration/registries.json +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +.netrc diff --git a/iOS/MSData/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/iOS/MSData/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/iOS/MSData/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/iOS/MSData/.swiftpm/xcode/xcshareddata/xcschemes/MSData.xcscheme b/iOS/MSData/.swiftpm/xcode/xcshareddata/xcschemes/MSData.xcscheme new file mode 100644 index 0000000..fdac714 --- /dev/null +++ b/iOS/MSData/.swiftpm/xcode/xcshareddata/xcschemes/MSData.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/MSData/.swiftpm/xcode/xcshareddata/xcschemes/MSDataTests.xcscheme b/iOS/MSData/.swiftpm/xcode/xcshareddata/xcschemes/MSDataTests.xcscheme new file mode 100644 index 0000000..c0fb639 --- /dev/null +++ b/iOS/MSData/.swiftpm/xcode/xcshareddata/xcschemes/MSDataTests.xcscheme @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/MSData/Package.swift b/iOS/MSData/Package.swift new file mode 100644 index 0000000..bffa772 --- /dev/null +++ b/iOS/MSData/Package.swift @@ -0,0 +1,25 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. +import PackageDescription + +let package = Package( + name: "MSData", + platforms: [ + .iOS(.v15) + ], + products: [ + .library(name: "MSData", + targets: ["MSData"]) + ], + dependencies: [ + .package(name: "MSNetworking", + path: "../MSCoreKit") + ], + targets: [ + .target(name: "MSData", + dependencies: ["MSNetworking"], + resources: [.process("Resources")]), + .testTarget(name: "MSDataTests", + dependencies: ["MSData"]) + ] +) diff --git a/iOS/MSData/Sources/MSData/MSData.swift b/iOS/MSData/Sources/MSData/MSData.swift new file mode 100644 index 0000000..08b22b8 --- /dev/null +++ b/iOS/MSData/Sources/MSData/MSData.swift @@ -0,0 +1,2 @@ +// The Swift Programming Language +// https://docs.swift.org/swift-book diff --git a/iOS/MSData/Tests/MSDataTests/MSDataTests.swift b/iOS/MSData/Tests/MSDataTests/MSDataTests.swift new file mode 100644 index 0000000..18cf9e1 --- /dev/null +++ b/iOS/MSData/Tests/MSDataTests/MSDataTests.swift @@ -0,0 +1,12 @@ +import XCTest +@testable import MSData + +final class MSDataTests: XCTestCase { + func testExample() throws { + // XCTest Documentation + // https://developer.apple.com/documentation/xctest + + // Defining Test Cases and Test Methods + // https://developer.apple.com/documentation/xctest/defining_test_cases_and_test_methods + } +} diff --git a/iOS/MSFoundation/.swiftpm/xcode/xcshareddata/xcschemes/MSLogger.xcscheme b/iOS/MSFoundation/.swiftpm/xcode/xcshareddata/xcschemes/MSLogger.xcscheme index c44d62d..04b9652 100644 --- a/iOS/MSFoundation/.swiftpm/xcode/xcshareddata/xcschemes/MSLogger.xcscheme +++ b/iOS/MSFoundation/.swiftpm/xcode/xcshareddata/xcschemes/MSLogger.xcscheme @@ -28,6 +28,18 @@ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES" shouldAutocreateTestPlan = "YES"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/MSUIKit/.swiftpm/xcode/xcshareddata/xcschemes/MSDesignSystem.xcscheme b/iOS/MSUIKit/.swiftpm/xcode/xcshareddata/xcschemes/MSDesignSystem.xcscheme new file mode 100644 index 0000000..e15b2aa --- /dev/null +++ b/iOS/MSUIKit/.swiftpm/xcode/xcshareddata/xcschemes/MSDesignSystem.xcscheme @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/MSUIKit/Package.swift b/iOS/MSUIKit/Package.swift index 0e5acca..f100a0e 100644 --- a/iOS/MSUIKit/Package.swift +++ b/iOS/MSUIKit/Package.swift @@ -36,11 +36,7 @@ let package = Package( .process("../MSDesignSystem/Resources") ]), .target(name: .uiKit, - dependencies: ["MSDesignSystem"]), - - // Tests - .testTarget(name: .designSystem.testTarget, - dependencies: ["MSDesignSystem"]) + dependencies: ["MSDesignSystem"]) ], swiftLanguageVersions: [.v5] ) diff --git a/iOS/MSUIKit/Sources/MSDesignSystem/Resources/MSIcon.xcassets/Calender.imageset/Calender.pdf b/iOS/MSUIKit/Sources/MSDesignSystem/Resources/MSIcon.xcassets/Calendar.imageset/Calender.pdf similarity index 100% rename from iOS/MSUIKit/Sources/MSDesignSystem/Resources/MSIcon.xcassets/Calender.imageset/Calender.pdf rename to iOS/MSUIKit/Sources/MSDesignSystem/Resources/MSIcon.xcassets/Calendar.imageset/Calender.pdf diff --git a/iOS/MSUIKit/Sources/MSDesignSystem/Resources/MSIcon.xcassets/Calender.imageset/Contents.json b/iOS/MSUIKit/Sources/MSDesignSystem/Resources/MSIcon.xcassets/Calendar.imageset/Contents.json similarity index 100% rename from iOS/MSUIKit/Sources/MSDesignSystem/Resources/MSIcon.xcassets/Calender.imageset/Contents.json rename to iOS/MSUIKit/Sources/MSDesignSystem/Resources/MSIcon.xcassets/Calendar.imageset/Contents.json diff --git a/iOS/MSUIKit/Sources/MSDesignSystem/Resources/MSIcon.xcassets/Calender.imageset/Calender 1.pdf b/iOS/MSUIKit/Sources/MSDesignSystem/Resources/MSIcon.xcassets/Calender.imageset/Calender 1.pdf deleted file mode 100644 index 8830486..0000000 Binary files a/iOS/MSUIKit/Sources/MSDesignSystem/Resources/MSIcon.xcassets/Calender.imageset/Calender 1.pdf and /dev/null differ diff --git a/iOS/MSUIKit/Tests/MSDesignSystemTests/MSDesignSystemTests.swift b/iOS/MSUIKit/Tests/MSDesignSystemTests/MSDesignSystemTests.swift deleted file mode 100644 index 7eebb79..0000000 --- a/iOS/MSUIKit/Tests/MSDesignSystemTests/MSDesignSystemTests.swift +++ /dev/null @@ -1,10 +0,0 @@ -// -// MSDesignSystemTests.swift -// MSUIKit -// -// Created by 이창준 on 11/26/23. -// - -import XCTest - -final class MSDesignSystemTests: XCTestCase { } diff --git a/iOS/MusicSpot.xcworkspace/contents.xcworkspacedata b/iOS/MusicSpot.xcworkspace/contents.xcworkspacedata index 8cad135..17b1b2b 100644 --- a/iOS/MusicSpot.xcworkspace/contents.xcworkspacedata +++ b/iOS/MusicSpot.xcworkspace/contents.xcworkspacedata @@ -2,21 +2,40 @@ + location = "group:MusicSpot/MusicSpot.xcodeproj"> + + + + + + + + + + + + + + + location = "group:MSData"> + location = "group:MSUIKit"> - - + location = "group:MusicSpot/../MSFoundation"> diff --git a/iOS/MusicSpot/MusicSpot.xcodeproj/project.pbxproj b/iOS/MusicSpot/MusicSpot.xcodeproj/project.pbxproj index 2a1c470..650685c 100644 --- a/iOS/MusicSpot/MusicSpot.xcodeproj/project.pbxproj +++ b/iOS/MusicSpot/MusicSpot.xcodeproj/project.pbxproj @@ -7,10 +7,13 @@ objects = { /* Begin PBXBuildFile section */ - 21B1B63D2B04C7CF00A63287 /* FoundationExt in Frameworks */ = {isa = PBXBuildFile; productRef = 21B1B63C2B04C7CF00A63287 /* FoundationExt */; }; - 21B1B63F2B04C7CF00A63287 /* MSLogger in Frameworks */ = {isa = PBXBuildFile; productRef = 21B1B63E2B04C7CF00A63287 /* MSLogger */; }; - 21B1B6412B04C7CF00A63287 /* MSUserDefaults in Frameworks */ = {isa = PBXBuildFile; productRef = 21B1B6402B04C7CF00A63287 /* MSUserDefaults */; }; - 21B1B6442B04D64A00A63287 /* MSNetwork in Frameworks */ = {isa = PBXBuildFile; productRef = 21B1B6432B04D64A00A63287 /* MSNetwork */; }; + DD5EA2552B16EC920080AEC1 /* JourneyList in Frameworks */ = {isa = PBXBuildFile; productRef = DD5EA2542B16EC920080AEC1 /* JourneyList */; }; + DD5EA2572B16EC960080AEC1 /* NavigateMap in Frameworks */ = {isa = PBXBuildFile; productRef = DD5EA2562B16EC960080AEC1 /* NavigateMap */; }; + DD5EA2592B16EC9B0080AEC1 /* RecordJourney in Frameworks */ = {isa = PBXBuildFile; productRef = DD5EA2582B16EC9B0080AEC1 /* RecordJourney */; }; + DD5EA25B2B16ECA10080AEC1 /* SaveJourney in Frameworks */ = {isa = PBXBuildFile; productRef = DD5EA25A2B16ECA10080AEC1 /* SaveJourney */; }; + DD5EA25D2B16ECA60080AEC1 /* SelectSong in Frameworks */ = {isa = PBXBuildFile; productRef = DD5EA25C2B16ECA60080AEC1 /* SelectSong */; }; + DD5EA25F2B16ECAB0080AEC1 /* Spot in Frameworks */ = {isa = PBXBuildFile; productRef = DD5EA25E2B16ECAB0080AEC1 /* Spot */; }; + DD5EA2612B16ECAF0080AEC1 /* RewindJourney in Frameworks */ = {isa = PBXBuildFile; productRef = DD5EA2602B16ECAF0080AEC1 /* RewindJourney */; }; DD73F8592B024C4900EE9BF2 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD73F8582B024C4900EE9BF2 /* AppDelegate.swift */; }; DD73F85B2B024C4900EE9BF2 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD73F85A2B024C4900EE9BF2 /* SceneDelegate.swift */; }; DD73F8622B024C4B00EE9BF2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DD73F8612B024C4B00EE9BF2 /* Assets.xcassets */; }; @@ -32,17 +35,20 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 21B1B63F2B04C7CF00A63287 /* MSLogger in Frameworks */, - 21B1B6412B04C7CF00A63287 /* MSUserDefaults in Frameworks */, - 21B1B63D2B04C7CF00A63287 /* FoundationExt in Frameworks */, - 21B1B6442B04D64A00A63287 /* MSNetwork in Frameworks */, + DD5EA2572B16EC960080AEC1 /* NavigateMap in Frameworks */, + DD5EA25D2B16ECA60080AEC1 /* SelectSong in Frameworks */, + DD5EA2552B16EC920080AEC1 /* JourneyList in Frameworks */, + DD5EA2612B16ECAF0080AEC1 /* RewindJourney in Frameworks */, + DD5EA25B2B16ECA10080AEC1 /* SaveJourney in Frameworks */, + DD5EA25F2B16ECAB0080AEC1 /* Spot in Frameworks */, + DD5EA2592B16EC9B0080AEC1 /* RecordJourney in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2137DBFD2B063A1500395C06 /* Frameworks */ = { + DD5EA23F2B16EC690080AEC1 /* Frameworks */ = { isa = PBXGroup; children = ( ); @@ -54,6 +60,7 @@ children = ( DD73F8572B024C4900EE9BF2 /* MusicSpot */, DD73F8562B024C4900EE9BF2 /* Products */, + DD5EA23F2B16EC690080AEC1 /* Frameworks */, ); sourceTree = ""; }; @@ -94,10 +101,13 @@ ); name = MusicSpot; packageProductDependencies = ( - 21B1B63C2B04C7CF00A63287 /* FoundationExt */, - 21B1B63E2B04C7CF00A63287 /* MSLogger */, - 21B1B6402B04C7CF00A63287 /* MSUserDefaults */, - 21B1B6432B04D64A00A63287 /* MSNetwork */, + DD5EA2542B16EC920080AEC1 /* JourneyList */, + DD5EA2562B16EC960080AEC1 /* NavigateMap */, + DD5EA2582B16EC9B0080AEC1 /* RecordJourney */, + DD5EA25A2B16ECA10080AEC1 /* SaveJourney */, + DD5EA25C2B16ECA60080AEC1 /* SelectSong */, + DD5EA25E2B16ECAB0080AEC1 /* Spot */, + DD5EA2602B16ECAF0080AEC1 /* RewindJourney */, ); productName = MusicSpot; productReference = DD73F8552B024C4900EE9BF2 /* MusicSpot.app */; @@ -128,8 +138,12 @@ ); mainGroup = DD73F84C2B024C4900EE9BF2; packageReferences = ( - 21B1B63B2B04C7CF00A63287 /* XCLocalSwiftPackageReference "../MSFoundation" */, - 21B1B6422B04D64A00A63287 /* XCLocalSwiftPackageReference "../MSNetwork" */, + DD734C432B16EAFC00944E71 /* XCLocalSwiftPackageReference "../Features/JourneyList" */, + DD734C462B16EB0700944E71 /* XCLocalSwiftPackageReference "../Features/Home" */, + DD734C4E2B16EB2D00944E71 /* XCLocalSwiftPackageReference "../Features/SaveJourney" */, + DD734C512B16EB3400944E71 /* XCLocalSwiftPackageReference "../Features/SelectSong" */, + DD734C572B16EB5500944E71 /* XCLocalSwiftPackageReference "../Features/Spot" */, + DD734C5A2B16EBB800944E71 /* XCLocalSwiftPackageReference "../Features/RewindJourney" */, ); productRefGroup = DD73F8562B024C4900EE9BF2 /* Products */; projectDirPath = ""; @@ -388,32 +402,67 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 21B1B63B2B04C7CF00A63287 /* XCLocalSwiftPackageReference "../MSFoundation" */ = { + DD734C432B16EAFC00944E71 /* XCLocalSwiftPackageReference "../Features/JourneyList" */ = { isa = XCLocalSwiftPackageReference; - relativePath = ../MSFoundation; + relativePath = ../Features/JourneyList; }; - 21B1B6422B04D64A00A63287 /* XCLocalSwiftPackageReference "../MSNetwork" */ = { + DD734C462B16EB0700944E71 /* XCLocalSwiftPackageReference "../Features/Home" */ = { isa = XCLocalSwiftPackageReference; - relativePath = ../MSNetwork; + relativePath = ../Features/Home; + }; + DD734C4E2B16EB2D00944E71 /* XCLocalSwiftPackageReference "../Features/SaveJourney" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ../Features/SaveJourney; + }; + DD734C512B16EB3400944E71 /* XCLocalSwiftPackageReference "../Features/SelectSong" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ../Features/SelectSong; + }; + DD734C572B16EB5500944E71 /* XCLocalSwiftPackageReference "../Features/Spot" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ../Features/Spot; + }; + DD734C5A2B16EBB800944E71 /* XCLocalSwiftPackageReference "../Features/RewindJourney" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ../Features/RewindJourney; }; /* End XCLocalSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ - 21B1B63C2B04C7CF00A63287 /* FoundationExt */ = { + DD5EA2542B16EC920080AEC1 /* JourneyList */ = { + isa = XCSwiftPackageProductDependency; + package = DD734C432B16EAFC00944E71 /* XCLocalSwiftPackageReference "../Features/JourneyList" */; + productName = JourneyList; + }; + DD5EA2562B16EC960080AEC1 /* NavigateMap */ = { + isa = XCSwiftPackageProductDependency; + package = DD734C462B16EB0700944E71 /* XCLocalSwiftPackageReference "../Features/Home" */; + productName = NavigateMap; + }; + DD5EA2582B16EC9B0080AEC1 /* RecordJourney */ = { + isa = XCSwiftPackageProductDependency; + package = DD734C462B16EB0700944E71 /* XCLocalSwiftPackageReference "../Features/Home" */; + productName = RecordJourney; + }; + DD5EA25A2B16ECA10080AEC1 /* SaveJourney */ = { isa = XCSwiftPackageProductDependency; - productName = FoundationExt; + package = DD734C4E2B16EB2D00944E71 /* XCLocalSwiftPackageReference "../Features/SaveJourney" */; + productName = SaveJourney; }; - 21B1B63E2B04C7CF00A63287 /* MSLogger */ = { + DD5EA25C2B16ECA60080AEC1 /* SelectSong */ = { isa = XCSwiftPackageProductDependency; - productName = MSLogger; + package = DD734C512B16EB3400944E71 /* XCLocalSwiftPackageReference "../Features/SelectSong" */; + productName = SelectSong; }; - 21B1B6402B04C7CF00A63287 /* MSUserDefaults */ = { + DD5EA25E2B16ECAB0080AEC1 /* Spot */ = { isa = XCSwiftPackageProductDependency; - productName = MSUserDefaults; + package = DD734C572B16EB5500944E71 /* XCLocalSwiftPackageReference "../Features/Spot" */; + productName = Spot; }; - 21B1B6432B04D64A00A63287 /* MSNetwork */ = { + DD5EA2602B16ECAF0080AEC1 /* RewindJourney */ = { isa = XCSwiftPackageProductDependency; - productName = MSNetwork; + package = DD734C5A2B16EBB800944E71 /* XCLocalSwiftPackageReference "../Features/RewindJourney" */; + productName = RewindJourney; }; /* End XCSwiftPackageProductDependency section */ }; diff --git a/iOS/MusicSpot/MusicSpot.xcodeproj/xcshareddata/xcschemes/MusicSpot.xcscheme b/iOS/MusicSpot/MusicSpot.xcodeproj/xcshareddata/xcschemes/MusicSpot.xcscheme new file mode 100644 index 0000000..7eb04dc --- /dev/null +++ b/iOS/MusicSpot/MusicSpot.xcodeproj/xcshareddata/xcschemes/MusicSpot.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS/MusicSpot/MusicSpot/SceneDelegate.swift b/iOS/MusicSpot/MusicSpot/SceneDelegate.swift index b01638c..0f347bb 100644 --- a/iOS/MusicSpot/MusicSpot/SceneDelegate.swift +++ b/iOS/MusicSpot/MusicSpot/SceneDelegate.swift @@ -9,7 +9,11 @@ import UIKit class SceneDelegate: UIResponder, UIWindowSceneDelegate { + // MARK: - Properties + var window: UIWindow? + + // MARK: - Functions func scene(_ scene: UIScene, willConnectTo _: UISceneSession, @@ -22,4 +26,5 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { window.rootViewController = testViewController window.makeKeyAndVisible() } + } diff --git a/iOS/commit b/iOS/commit index 144cec4..2355a98 100755 --- a/iOS/commit +++ b/iOS/commit @@ -1,7 +1,7 @@ #!/bin/sh LINTPATH='.swiftlint.yml' -declare -a PATHS=("MSCoreKit" "MSFoundation" "MSUIKit" "MusicSpot") +declare -a PATHS=("MSCoreKit" "MSFoundation" "MSUIKit" "MSData" "MusicSpot" "Features") failures="" for path in "${PATHS[@]}"; do