From 8b07b4d86bbbb94b6db87cc6d83f33d5cdb57179 Mon Sep 17 00:00:00 2001 From: Jun Ho JANG Date: Mon, 5 Apr 2021 17:17:37 +0900 Subject: [PATCH 01/10] =?UTF-8?q?View=EC=99=80=20ViewModel=EC=9D=84=20?= =?UTF-8?q?=EA=B0=96=EB=8F=84=EB=A1=9D=20=ED=96=88=EC=8A=B5=EB=8B=88?= =?UTF-8?q?=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SignUpApp/SignUpApp.xcodeproj/project.pbxproj | 352 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 25532 bytes .../xcschemes/xcschememanagement.plist | 14 + SignUpApp/SignUpApp/AppDelegate.swift | 20 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 98 +++++ .../SignUpApp/Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 ++ .../SignUpApp/Base.lproj/Main.storyboard | 119 ++++++ SignUpApp/SignUpApp/Info.plist | 66 ++++ SignUpApp/SignUpApp/SceneDelegate.swift | 20 + .../Networking/NetworkingForIDCheck.swift | 8 + .../SignUp/Protocol/DelegationProtocol.swift | 8 + .../SignUp/SignUpModel/SignUpInfo.swift | 8 + .../CheckPasswordTextFieldDelegate.swift | 12 + .../IDTextFieldDelegate.swift | 12 + .../PasswordTextFieldDelegate.swift | 12 + .../UserNameTextFieldDelegate.swift | 12 + .../SignUp/SignUpView/StackViewUnit.swift | 20 + .../SignUp/SignUpViewController.swift | 196 ++++++++++ .../CheckMessage/IDCheckMessage.swift | 14 + .../CheckMessage/PasswordCheckMessage.swift | 16 + .../PasswordEqualityMessage.swift | 13 + .../CheckMessage/UserNameCheckMessage.swift | 13 + .../SignUpViewModel/SignUpViewModel.swift | 8 + .../Validation/IDValidation.swift | 60 +++ .../PasswordEqualityValidation.swift | 44 +++ .../Validation/PasswordValidation.swift | 67 ++++ .../Validation/UserNameValidation.swift | 44 +++ temp/temp.xcodeproj/project.pbxproj | 344 +++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 5519 bytes .../xcschemes/xcschememanagement.plist | 14 + temp/temp/AppDelegate.swift | 36 ++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 98 +++++ temp/temp/Assets.xcassets/Contents.json | 6 + temp/temp/Base.lproj/LaunchScreen.storyboard | 25 ++ temp/temp/Base.lproj/Main.storyboard | 24 ++ temp/temp/Info.plist | 66 ++++ temp/temp/SceneDelegate.swift | 52 +++ temp/temp/ViewController.swift | 19 + 45 files changed, 2023 insertions(+) create mode 100644 SignUpApp/SignUpApp.xcodeproj/project.pbxproj create mode 100644 SignUpApp/SignUpApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 SignUpApp/SignUpApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 SignUpApp/SignUpApp.xcodeproj/project.xcworkspace/xcuserdata/junhojang.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 SignUpApp/SignUpApp.xcodeproj/xcuserdata/junhojang.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 SignUpApp/SignUpApp/AppDelegate.swift create mode 100644 SignUpApp/SignUpApp/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 SignUpApp/SignUpApp/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 SignUpApp/SignUpApp/Assets.xcassets/Contents.json create mode 100644 SignUpApp/SignUpApp/Base.lproj/LaunchScreen.storyboard create mode 100644 SignUpApp/SignUpApp/Base.lproj/Main.storyboard create mode 100644 SignUpApp/SignUpApp/Info.plist create mode 100644 SignUpApp/SignUpApp/SceneDelegate.swift create mode 100644 SignUpApp/SignUpApp/SignUp/Networking/NetworkingForIDCheck.swift create mode 100644 SignUpApp/SignUpApp/SignUp/Protocol/DelegationProtocol.swift create mode 100644 SignUpApp/SignUpApp/SignUp/SignUpModel/SignUpInfo.swift create mode 100644 SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/CheckPasswordTextFieldDelegate.swift create mode 100644 SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/IDTextFieldDelegate.swift create mode 100644 SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/PasswordTextFieldDelegate.swift create mode 100644 SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/UserNameTextFieldDelegate.swift create mode 100644 SignUpApp/SignUpApp/SignUp/SignUpView/StackViewUnit.swift create mode 100644 SignUpApp/SignUpApp/SignUp/SignUpViewController.swift create mode 100644 SignUpApp/SignUpApp/SignUp/SignUpViewModel/CheckMessage/IDCheckMessage.swift create mode 100644 SignUpApp/SignUpApp/SignUp/SignUpViewModel/CheckMessage/PasswordCheckMessage.swift create mode 100644 SignUpApp/SignUpApp/SignUp/SignUpViewModel/CheckMessage/PasswordEqualityMessage.swift create mode 100644 SignUpApp/SignUpApp/SignUp/SignUpViewModel/CheckMessage/UserNameCheckMessage.swift create mode 100644 SignUpApp/SignUpApp/SignUp/SignUpViewModel/SignUpViewModel.swift create mode 100644 SignUpApp/SignUpApp/SignUp/SignUpViewModel/Validation/IDValidation.swift create mode 100644 SignUpApp/SignUpApp/SignUp/SignUpViewModel/Validation/PasswordEqualityValidation.swift create mode 100644 SignUpApp/SignUpApp/SignUp/SignUpViewModel/Validation/PasswordValidation.swift create mode 100644 SignUpApp/SignUpApp/SignUp/SignUpViewModel/Validation/UserNameValidation.swift create mode 100644 temp/temp.xcodeproj/project.pbxproj create mode 100644 temp/temp.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 temp/temp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 temp/temp.xcodeproj/project.xcworkspace/xcuserdata/junhojang.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 temp/temp.xcodeproj/xcuserdata/junhojang.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 temp/temp/AppDelegate.swift create mode 100644 temp/temp/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 temp/temp/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 temp/temp/Assets.xcassets/Contents.json create mode 100644 temp/temp/Base.lproj/LaunchScreen.storyboard create mode 100644 temp/temp/Base.lproj/Main.storyboard create mode 100644 temp/temp/Info.plist create mode 100644 temp/temp/SceneDelegate.swift create mode 100644 temp/temp/ViewController.swift diff --git a/SignUpApp/SignUpApp.xcodeproj/project.pbxproj b/SignUpApp/SignUpApp.xcodeproj/project.pbxproj new file mode 100644 index 0000000..3a6e35f --- /dev/null +++ b/SignUpApp/SignUpApp.xcodeproj/project.pbxproj @@ -0,0 +1,352 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + A0A2C2F92612DDB800BBD554 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0A2C2F82612DDB800BBD554 /* AppDelegate.swift */; }; + A0A2C2FB2612DDB800BBD554 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0A2C2FA2612DDB800BBD554 /* SceneDelegate.swift */; }; + A0A2C2FD2612DDB800BBD554 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0A2C2FC2612DDB800BBD554 /* ViewController.swift */; }; + A0A2C3002612DDB800BBD554 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A0A2C2FE2612DDB800BBD554 /* Main.storyboard */; }; + A0A2C3022612DDB900BBD554 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A0A2C3012612DDB900BBD554 /* Assets.xcassets */; }; + A0A2C3052612DDB900BBD554 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A0A2C3032612DDB900BBD554 /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + A0A2C2F52612DDB800BBD554 /* SignUpApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SignUpApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; + A0A2C2F82612DDB800BBD554 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + A0A2C2FA2612DDB800BBD554 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + A0A2C2FC2612DDB800BBD554 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + A0A2C2FF2612DDB800BBD554 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + A0A2C3012612DDB900BBD554 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + A0A2C3042612DDB900BBD554 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + A0A2C3062612DDB900BBD554 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + A0A2C2F22612DDB800BBD554 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + A0A2C2EC2612DDB800BBD554 = { + isa = PBXGroup; + children = ( + A0A2C2F72612DDB800BBD554 /* SignUpApp */, + A0A2C2F62612DDB800BBD554 /* Products */, + ); + sourceTree = ""; + }; + A0A2C2F62612DDB800BBD554 /* Products */ = { + isa = PBXGroup; + children = ( + A0A2C2F52612DDB800BBD554 /* SignUpApp.app */, + ); + name = Products; + sourceTree = ""; + }; + A0A2C2F72612DDB800BBD554 /* SignUpApp */ = { + isa = PBXGroup; + children = ( + A0A2C30D2612DF9800BBD554 /* SignUp */, + A0A2C2F82612DDB800BBD554 /* AppDelegate.swift */, + A0A2C2FA2612DDB800BBD554 /* SceneDelegate.swift */, + A0A2C2FE2612DDB800BBD554 /* Main.storyboard */, + A0A2C3012612DDB900BBD554 /* Assets.xcassets */, + A0A2C3032612DDB900BBD554 /* LaunchScreen.storyboard */, + A0A2C3062612DDB900BBD554 /* Info.plist */, + ); + path = SignUpApp; + sourceTree = ""; + }; + A0A2C30D2612DF9800BBD554 /* SignUp */ = { + isa = PBXGroup; + children = ( + A0A2C2FC2612DDB800BBD554 /* ViewController.swift */, + ); + path = SignUp; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + A0A2C2F42612DDB800BBD554 /* SignUpApp */ = { + isa = PBXNativeTarget; + buildConfigurationList = A0A2C3092612DDB900BBD554 /* Build configuration list for PBXNativeTarget "SignUpApp" */; + buildPhases = ( + A0A2C2F12612DDB800BBD554 /* Sources */, + A0A2C2F22612DDB800BBD554 /* Frameworks */, + A0A2C2F32612DDB800BBD554 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SignUpApp; + productName = SignUpApp; + productReference = A0A2C2F52612DDB800BBD554 /* SignUpApp.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + A0A2C2ED2612DDB800BBD554 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1240; + LastUpgradeCheck = 1240; + TargetAttributes = { + A0A2C2F42612DDB800BBD554 = { + CreatedOnToolsVersion = 12.4; + }; + }; + }; + buildConfigurationList = A0A2C2F02612DDB800BBD554 /* Build configuration list for PBXProject "SignUpApp" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = A0A2C2EC2612DDB800BBD554; + productRefGroup = A0A2C2F62612DDB800BBD554 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + A0A2C2F42612DDB800BBD554 /* SignUpApp */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + A0A2C2F32612DDB800BBD554 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A0A2C3052612DDB900BBD554 /* LaunchScreen.storyboard in Resources */, + A0A2C3022612DDB900BBD554 /* Assets.xcassets in Resources */, + A0A2C3002612DDB800BBD554 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + A0A2C2F12612DDB800BBD554 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A0A2C2FD2612DDB800BBD554 /* ViewController.swift in Sources */, + A0A2C2F92612DDB800BBD554 /* AppDelegate.swift in Sources */, + A0A2C2FB2612DDB800BBD554 /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + A0A2C2FE2612DDB800BBD554 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + A0A2C2FF2612DDB800BBD554 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + A0A2C3032612DDB900BBD554 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + A0A2C3042612DDB900BBD554 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + A0A2C3072612DDB900BBD554 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.4; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + A0A2C3082612DDB900BBD554 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.4; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + A0A2C30A2612DDB900BBD554 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = SignUpApp/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = asd.SignUpApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + A0A2C30B2612DDB900BBD554 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = SignUpApp/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = asd.SignUpApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + A0A2C2F02612DDB800BBD554 /* Build configuration list for PBXProject "SignUpApp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A0A2C3072612DDB900BBD554 /* Debug */, + A0A2C3082612DDB900BBD554 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A0A2C3092612DDB900BBD554 /* Build configuration list for PBXNativeTarget "SignUpApp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A0A2C30A2612DDB900BBD554 /* Debug */, + A0A2C30B2612DDB900BBD554 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = A0A2C2ED2612DDB800BBD554 /* Project object */; +} diff --git a/SignUpApp/SignUpApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SignUpApp/SignUpApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/SignUpApp/SignUpApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/SignUpApp/SignUpApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/SignUpApp/SignUpApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/SignUpApp/SignUpApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/SignUpApp/SignUpApp.xcodeproj/project.xcworkspace/xcuserdata/junhojang.xcuserdatad/UserInterfaceState.xcuserstate b/SignUpApp/SignUpApp.xcodeproj/project.xcworkspace/xcuserdata/junhojang.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..81546c5621da55fcbd6e98ab46d33710fb08485c GIT binary patch literal 25532 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 literal 0 HcmV?d00001 diff --git a/SignUpApp/SignUpApp.xcodeproj/xcuserdata/junhojang.xcuserdatad/xcschemes/xcschememanagement.plist b/SignUpApp/SignUpApp.xcodeproj/xcuserdata/junhojang.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..ec0fa1a --- /dev/null +++ b/SignUpApp/SignUpApp.xcodeproj/xcuserdata/junhojang.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + SignUpApp.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/SignUpApp/SignUpApp/AppDelegate.swift b/SignUpApp/SignUpApp/AppDelegate.swift new file mode 100644 index 0000000..6715b72 --- /dev/null +++ b/SignUpApp/SignUpApp/AppDelegate.swift @@ -0,0 +1,20 @@ +// +// AppDelegate.swift +// SignUpApp +// +// Created by Jun Ho JANG on 2021/03/30. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + return true + } + +} + diff --git a/SignUpApp/SignUpApp/Assets.xcassets/AccentColor.colorset/Contents.json b/SignUpApp/SignUpApp/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/SignUpApp/SignUpApp/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SignUpApp/SignUpApp/Assets.xcassets/AppIcon.appiconset/Contents.json b/SignUpApp/SignUpApp/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/SignUpApp/SignUpApp/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SignUpApp/SignUpApp/Assets.xcassets/Contents.json b/SignUpApp/SignUpApp/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/SignUpApp/SignUpApp/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SignUpApp/SignUpApp/Base.lproj/LaunchScreen.storyboard b/SignUpApp/SignUpApp/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/SignUpApp/SignUpApp/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SignUpApp/SignUpApp/Base.lproj/Main.storyboard b/SignUpApp/SignUpApp/Base.lproj/Main.storyboard new file mode 100644 index 0000000..2ea3773 --- /dev/null +++ b/SignUpApp/SignUpApp/Base.lproj/Main.storyboard @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SignUpApp/SignUpApp/Info.plist b/SignUpApp/SignUpApp/Info.plist new file mode 100644 index 0000000..5b531f7 --- /dev/null +++ b/SignUpApp/SignUpApp/Info.plist @@ -0,0 +1,66 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + UIApplicationSupportsIndirectInputEvents + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/SignUpApp/SignUpApp/SceneDelegate.swift b/SignUpApp/SignUpApp/SceneDelegate.swift new file mode 100644 index 0000000..85e8d17 --- /dev/null +++ b/SignUpApp/SignUpApp/SceneDelegate.swift @@ -0,0 +1,20 @@ +// +// SceneDelegate.swift +// SignUpApp +// +// Created by Jun Ho JANG on 2021/03/30. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + guard let _ = (scene as? UIWindowScene) else { return } + } + +} + diff --git a/SignUpApp/SignUpApp/SignUp/Networking/NetworkingForIDCheck.swift b/SignUpApp/SignUpApp/SignUp/Networking/NetworkingForIDCheck.swift new file mode 100644 index 0000000..1f03b7b --- /dev/null +++ b/SignUpApp/SignUpApp/SignUp/Networking/NetworkingForIDCheck.swift @@ -0,0 +1,8 @@ +// +// NetworkingForIDCheck.swift +// SignUpApp +// +// Created by Jun Ho JANG on 2021/04/05. +// + +import Foundation diff --git a/SignUpApp/SignUpApp/SignUp/Protocol/DelegationProtocol.swift b/SignUpApp/SignUpApp/SignUp/Protocol/DelegationProtocol.swift new file mode 100644 index 0000000..053c622 --- /dev/null +++ b/SignUpApp/SignUpApp/SignUp/Protocol/DelegationProtocol.swift @@ -0,0 +1,8 @@ +// +// DelegationProtocol.swift +// SignUpApp +// +// Created by Jun Ho JANG on 2021/04/02. +// + +import Foundation diff --git a/SignUpApp/SignUpApp/SignUp/SignUpModel/SignUpInfo.swift b/SignUpApp/SignUpApp/SignUp/SignUpModel/SignUpInfo.swift new file mode 100644 index 0000000..513ec8b --- /dev/null +++ b/SignUpApp/SignUpApp/SignUp/SignUpModel/SignUpInfo.swift @@ -0,0 +1,8 @@ +// +// SignUpInfo.swift +// SignUpApp +// +// Created by Jun Ho JANG on 2021/03/30. +// + +import Foundation diff --git a/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/CheckPasswordTextFieldDelegate.swift b/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/CheckPasswordTextFieldDelegate.swift new file mode 100644 index 0000000..e713e34 --- /dev/null +++ b/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/CheckPasswordTextFieldDelegate.swift @@ -0,0 +1,12 @@ +// +// CheckPasswordTextFieldDelegate.swift +// SignUpApp +// +// Created by Jun Ho JANG on 2021/03/31. +// + +import UIKit + +class CheckPasswordTextFieldDelegate: UITextFieldDelegate { + +} diff --git a/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/IDTextFieldDelegate.swift b/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/IDTextFieldDelegate.swift new file mode 100644 index 0000000..a3d27f4 --- /dev/null +++ b/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/IDTextFieldDelegate.swift @@ -0,0 +1,12 @@ +// +// IDTextFieldDelegate.swift +// SignUpApp +// +// Created by Jun Ho JANG on 2021/03/31. +// + +import UIKit + +class IDTextFieldDelegate: UITextFieldDelegate { + +} diff --git a/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/PasswordTextFieldDelegate.swift b/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/PasswordTextFieldDelegate.swift new file mode 100644 index 0000000..354ce9c --- /dev/null +++ b/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/PasswordTextFieldDelegate.swift @@ -0,0 +1,12 @@ +// +// PasswordTextFieldDelegate.swift +// SignUpApp +// +// Created by Jun Ho JANG on 2021/03/31. +// + +import UIKit + +class PasswordTextFieldDelegate: UITextFieldDelegate { + +} diff --git a/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/UserNameTextFieldDelegate.swift b/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/UserNameTextFieldDelegate.swift new file mode 100644 index 0000000..fbcf2f5 --- /dev/null +++ b/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/UserNameTextFieldDelegate.swift @@ -0,0 +1,12 @@ +// +// UserNameTextFieldDelegate.swift +// SignUpApp +// +// Created by Jun Ho JANG on 2021/03/31. +// + +import UIKit + +class UserNameTextFieldDelegate: UITextFieldDelegate { + +} diff --git a/SignUpApp/SignUpApp/SignUp/SignUpView/StackViewUnit.swift b/SignUpApp/SignUpApp/SignUp/SignUpView/StackViewUnit.swift new file mode 100644 index 0000000..0dd6b34 --- /dev/null +++ b/SignUpApp/SignUpApp/SignUp/SignUpView/StackViewUnit.swift @@ -0,0 +1,20 @@ +// +// StackViewUnit.swift +// SignUpApp +// +// Created by Jun Ho JANG on 2021/03/30. +// + +import UIKit + +class StackViewUnit: UIStackView { + + /* + // Only override draw() if you perform custom drawing. + // An empty implementation adversely affects performance during animation. + override func draw(_ rect: CGRect) { + // Drawing code + } + */ + +} diff --git a/SignUpApp/SignUpApp/SignUp/SignUpViewController.swift b/SignUpApp/SignUpApp/SignUp/SignUpViewController.swift new file mode 100644 index 0000000..9323bcd --- /dev/null +++ b/SignUpApp/SignUpApp/SignUp/SignUpViewController.swift @@ -0,0 +1,196 @@ +// +// ViewController.swift +// SignUpApp +// +// Created by Jun Ho JANG on 2021/03/30. +// + +import UIKit + +class SignUpViewController: UIViewController { + + @IBOutlet weak var mainTitle: UILabel! + + @IBOutlet weak var idStackView: StackViewUnit! + @IBOutlet weak var passwordStackView: StackViewUnit! + @IBOutlet weak var checkPasswordStackView: StackViewUnit! + @IBOutlet weak var userNameStackView: StackViewUnit! + + @IBOutlet weak var nextButton: UIButton! + + @IBAction func nextButtonForModal(_ sender: Any) { + if buttonStateCondition() == true { + nextButton.isEnabled = true + } else if buttonStateCondition() == false { + nextButton.isEnabled = false + } + } + + private var signUpViewModel = SignUpViewModel() + + private let idTextFieldDelegate = IDTextFieldDelegate() + private let passwordTextFieldDelegate = PasswordTextFieldDelegate() + private let checkPasswordTextFieldDelegate = CheckPasswordTextFieldDelegate() + private let userNameTextFieldDelegate = UserNameTextFieldDelegate() + + private let idValidation = IDValidation() + private let passwordValidation = PasswordValidation() + private let passwordEqualityValidation = PasswordEqualityValidation() + private let userNameValidation = UserNameValidation() + + override func viewDidLoad() { + super.viewDidLoad() + setUp() + } + + private func setUp() { + setMain() + setButton() + setDelegation() + applyIDStackViewValue() + applyPasswordStackViewValue() + applyCheckPasswordStackViewValue() + applyUserNameStackViewValue() + nextButton.isEnabled = false + } + + private func setDelegation() { + idTextFieldDelegate.delegatedObject = self + passwordTextFieldDelegate.delegatedObject = self + checkPasswordTextFieldDelegate.delegatedObject = self + userNameTextFieldDelegate.delegatedObject = self + } + + internal func buttonStateCondition() -> Bool { + if idStackView.subLabel.textColor == .systemGreen && passwordStackView.subLabel.textColor == .systemGreen && checkPasswordStackView.subLabel.textColor == .systemGreen && userNameStackView.subLabel.textColor == .systemGreen { + return true + } else { + return false + } + } + +} + +extension SignUpViewController: CheckDelegation { + + internal func checkID() { + if let userInput = idStackView.textField.text { + let message = idValidation.checkIDResult(input: userInput) + let isValid = idValidation.returnValidationResult(input: userInput) + if isValid == true { + idStackView.subLabel.textColor = .systemGreen + } else { + idStackView.textField.layer.borderColor = UIColor.systemRed.cgColor + idStackView.subLabel.textColor = .systemRed + } + idStackView.subLabel.text = message + } + } + + internal func checkPassword() { + checkPasswordEquality() + if let userInput = passwordStackView.textField.text { + let message = passwordValidation.checkPasswordResult(input: userInput) + let isValid = passwordValidation.returnValidationResult(input: userInput) + if isValid == true { + passwordStackView.subLabel.textColor = .systemGreen + } else { + passwordStackView.textField.layer.borderColor = UIColor.systemRed.cgColor + passwordStackView.subLabel.textColor = .systemRed + } + passwordStackView.subLabel.text = message + } + } + + internal func checkPasswordEquality() { + if let userInput = passwordStackView.textField.text, let userSecondInput = checkPasswordStackView.textField.text { + let message = passwordEqualityValidation.checkEqualityResult(input: userInput, secondInput: userSecondInput) + let isValid = passwordEqualityValidation.returnValidationResult(input: userInput, secondInput: userSecondInput) + if isValid == true { + checkPasswordStackView.subLabel.textColor = .systemGreen + } else { + checkPasswordStackView.textField.layer.borderColor = UIColor.systemRed.cgColor + checkPasswordStackView.subLabel.textColor = .systemRed + } + checkPasswordStackView.subLabel.text = message + } + } + + internal func checkUserNameInput() { + if let userInput = userNameStackView.textField.text { + let message = userNameValidation.checkUserNameResult(input: userInput) + let isValid = userNameValidation.returnValidationResult(input: userInput) + if isValid == true { + userNameStackView.subLabel.textColor = .systemGreen + } else { + userNameStackView.textField.layer.borderColor = UIColor.systemRed.cgColor + userNameStackView.subLabel.textColor = .systemRed + } + userNameStackView.subLabel.text = message + } + } + +} + +extension SignUpViewController { + + private func setMain() { + self.view.backgroundColor = UIColor(red: 245, green: 246, blue: 247, alpha: 1) + mainTitle.textAlignment = .center + mainTitle.text = signUpViewModel.mainTitle + mainTitle.textColor = .systemGreen + mainTitle.font = UIFont(name: "HelveticaNeue-Bold", size: 30) + } + + private func setButton() { + let buttonImage = UIImage(systemName: "chevron.forward.circle.fill") + nextButton.layer.borderColor = UIColor.black.cgColor + nextButton.layer.borderWidth = 1 + nextButton.setImage(buttonImage, for: .normal) + nextButton.setTitle("다음", for: .normal) + nextButton.tintColor = UIColor.systemGreen + } + + private func applyIDStackViewValue() { + let signUpIDContent = signUpViewModel.idContent + idStackView.title.text = signUpIDContent.title + idStackView.textField.delegate = idTextFieldDelegate + idStackView.textField.placeholder = signUpIDContent.placeholder + idStackView.textField.font = UIFont.init(name: ("HelveticaNeue"), size: 14) + idStackView.subLabel.text = signUpViewModel.emptyString + self.view.addSubview(idStackView) + } + + private func applyPasswordStackViewValue() { + let signUpPasswordContent = signUpViewModel.passwordContent + passwordStackView.title.text = signUpPasswordContent.title + passwordStackView.textField.delegate = passwordTextFieldDelegate + passwordStackView.textField.isSecureTextEntry = true + passwordStackView.textField.placeholder = signUpPasswordContent.placeholder + passwordStackView.textField.font = UIFont.init(name: ("HelveticaNeue"), size: 14) + passwordStackView.subLabel.text = signUpViewModel.emptyString + self.view.addSubview(passwordStackView) + } + + private func applyCheckPasswordStackViewValue() { + let signUpCheckPasswordContent = signUpViewModel.checkPasswordContent + checkPasswordStackView.title.text = signUpCheckPasswordContent.title + checkPasswordStackView.textField.delegate = checkPasswordTextFieldDelegate + checkPasswordStackView.textField.isSecureTextEntry = true + checkPasswordStackView.textField.placeholder = signUpCheckPasswordContent.placeholder + checkPasswordStackView.textField.font = UIFont.init(name: ("HelveticaNeue"), size: 14) + checkPasswordStackView.subLabel.text = signUpViewModel.emptyString + self.view.addSubview(checkPasswordStackView) + } + + private func applyUserNameStackViewValue() { + let signUpUserNameContent = signUpViewModel.userNameContent + userNameStackView.title.text = signUpUserNameContent.title + userNameStackView.textField.delegate = userNameTextFieldDelegate + userNameStackView.textField.placeholder = signUpUserNameContent.placeholder + userNameStackView.textField.font = UIFont.init(name: ("HelveticaNeue"), size: 14) + userNameStackView.subLabel.text = signUpViewModel.emptyString + self.view.addSubview(userNameStackView) + } + +} diff --git a/SignUpApp/SignUpApp/SignUp/SignUpViewModel/CheckMessage/IDCheckMessage.swift b/SignUpApp/SignUpApp/SignUp/SignUpViewModel/CheckMessage/IDCheckMessage.swift new file mode 100644 index 0000000..aeef6e1 --- /dev/null +++ b/SignUpApp/SignUpApp/SignUp/SignUpViewModel/CheckMessage/IDCheckMessage.swift @@ -0,0 +1,14 @@ +// +// IDCheckMessage.swift +// SignUpApp +// +// Created by Jun Ho JANG on 2021/04/04. +// + +import Foundation + +enum IDCheckMessage: String { + case usedIDWarning = "이미 사용중인 아이디입니다." + case charcterWarning = "5~20자의 영문 소문자, 숫자와 특수기호(_)(-)만 사용 가능합니다." + case validatedCaseMessage = "사용 가능한 아이디입니다." +} diff --git a/SignUpApp/SignUpApp/SignUp/SignUpViewModel/CheckMessage/PasswordCheckMessage.swift b/SignUpApp/SignUpApp/SignUp/SignUpViewModel/CheckMessage/PasswordCheckMessage.swift new file mode 100644 index 0000000..a4e48cf --- /dev/null +++ b/SignUpApp/SignUpApp/SignUp/SignUpViewModel/CheckMessage/PasswordCheckMessage.swift @@ -0,0 +1,16 @@ +// +// PasswordCheckMessage.swift +// SignUpApp +// +// Created by Jun Ho JANG on 2021/04/03. +// + +import Foundation + +enum PasswordCheckMessage: String { + case characterNumberWarning = "8자 이상 16자 이하로 입력해주세요." + case charcterUpperWarning = "영문 대문자를 최소 1자 이상 포함해주세요." + case numberIncludedWarning = "숫자를 최소 1자 이상 포함해주세요." + case specialCharacterWarning = "특수문자를 최소 1자 이상 포함해주세요." + case validatedCaseMessage = "안전한 비밀번호입니다." +} diff --git a/SignUpApp/SignUpApp/SignUp/SignUpViewModel/CheckMessage/PasswordEqualityMessage.swift b/SignUpApp/SignUpApp/SignUp/SignUpViewModel/CheckMessage/PasswordEqualityMessage.swift new file mode 100644 index 0000000..94cd600 --- /dev/null +++ b/SignUpApp/SignUpApp/SignUp/SignUpViewModel/CheckMessage/PasswordEqualityMessage.swift @@ -0,0 +1,13 @@ +// +// PasswordEqualityMessage.swift +// SignUpApp +// +// Created by Jun Ho JANG on 2021/04/04. +// + +import Foundation + +enum PasswordEqualityMessage: String { + case notEqualPasswordWarning = "비밀번호가 일치하지 않습니다." + case validatedCaseMessage = "비밀번호가 일치합니다." +} diff --git a/SignUpApp/SignUpApp/SignUp/SignUpViewModel/CheckMessage/UserNameCheckMessage.swift b/SignUpApp/SignUpApp/SignUp/SignUpViewModel/CheckMessage/UserNameCheckMessage.swift new file mode 100644 index 0000000..448144e --- /dev/null +++ b/SignUpApp/SignUpApp/SignUp/SignUpViewModel/CheckMessage/UserNameCheckMessage.swift @@ -0,0 +1,13 @@ +// +// UserNameCheckMessage.swift +// SignUpApp +// +// Created by Jun Ho JANG on 2021/04/04. +// + +import Foundation + +enum UserNameCheckMessage: String { + case notInputWarning = "이름은 필수 입력 항목입니다." + case validatedCaseMessage = " " +} diff --git a/SignUpApp/SignUpApp/SignUp/SignUpViewModel/SignUpViewModel.swift b/SignUpApp/SignUpApp/SignUp/SignUpViewModel/SignUpViewModel.swift new file mode 100644 index 0000000..352efb0 --- /dev/null +++ b/SignUpApp/SignUpApp/SignUp/SignUpViewModel/SignUpViewModel.swift @@ -0,0 +1,8 @@ +// +// SignUpViewModel.swift +// SignUpApp +// +// Created by Jun Ho JANG on 2021/03/30. +// + +import Foundation diff --git a/SignUpApp/SignUpApp/SignUp/SignUpViewModel/Validation/IDValidation.swift b/SignUpApp/SignUpApp/SignUp/SignUpViewModel/Validation/IDValidation.swift new file mode 100644 index 0000000..8c9dc0b --- /dev/null +++ b/SignUpApp/SignUpApp/SignUp/SignUpViewModel/Validation/IDValidation.swift @@ -0,0 +1,60 @@ +// +// IDValidation.swift +// SignUpApp +// +// Created by Jun Ho JANG on 2021/04/05. +// + +import Foundation + +class IDValidation { + + private var idList = [String]() + + init() { + NetworkingForIDCheck.getData { serverIdList in + self.idList = serverIdList + } + } + + private func returnValidation(input: String) -> Bool { + if isValidCharacterID(input: input) == true && isUnique(input: input) == true { + return true + } else { + return false + } + } + + private func checkID(input: String) -> String { + if isUnique(input: input) == false { + return IDCheckMessage.usedIDWarning.rawValue + } else if isValidCharacterID(input: input) == false { + return IDCheckMessage.charcterWarning.rawValue + } else { + return IDCheckMessage.validatedCaseMessage.rawValue + } + } + + private func isValidCharacterID(input: String) -> Bool { + let passwordRegEx = "^(?=.*[a-z0-9_-]).{5,20}" + let passwordTest = NSPredicate(format: "SELF MATCHES %@", passwordRegEx) + return passwordTest.evaluate(with: input) + } + + private func isUnique(input: String) -> Bool { + if idList.contains(input) { + return false + } else { + return true + } + } + + func returnValidationResult(input: String) -> Bool { + return returnValidation(input: input) + } + + func checkIDResult(input: String) -> String { + return checkID(input: input) + } + +} diff --git a/SignUpApp/SignUpApp/SignUp/SignUpViewModel/Validation/PasswordEqualityValidation.swift b/SignUpApp/SignUpApp/SignUp/SignUpViewModel/Validation/PasswordEqualityValidation.swift new file mode 100644 index 0000000..060e3e7 --- /dev/null +++ b/SignUpApp/SignUpApp/SignUp/SignUpViewModel/Validation/PasswordEqualityValidation.swift @@ -0,0 +1,44 @@ +// +// PasswordEqualityValidation.swift +// SignUpApp +// +// Created by Jun Ho JANG on 2021/04/05. +// + +import Foundation + +class PasswordEqualityValidation { + + private func returnValidation(input: String, secondInput: String) -> Bool { + if isEqual(input: input, secondInput: secondInput) == true { + return true + } else { + return false + } + } + + private func checkEquality(input: String, secondInput: String) -> String { + if isEqual(input: input, secondInput: secondInput) == false { + return PasswordEqualityMessage.notEqualPasswordWarning.rawValue + } else { + return PasswordEqualityMessage.validatedCaseMessage.rawValue + } + } + + private func isEqual(input: String, secondInput: String) -> Bool { + if input != secondInput { + return false + } else { + return true + } + } + + func returnValidationResult(input: String, secondInput: String) -> Bool { + return returnValidation(input: input, secondInput: secondInput) + } + + func checkEqualityResult(input: String, secondInput: String) -> String { + return checkEquality(input: input, secondInput: secondInput) + } + +} diff --git a/SignUpApp/SignUpApp/SignUp/SignUpViewModel/Validation/PasswordValidation.swift b/SignUpApp/SignUpApp/SignUp/SignUpViewModel/Validation/PasswordValidation.swift new file mode 100644 index 0000000..1837e5d --- /dev/null +++ b/SignUpApp/SignUpApp/SignUp/SignUpViewModel/Validation/PasswordValidation.swift @@ -0,0 +1,67 @@ +// +// PasswordValidation.swift +// SignUpApp +// +// Created by Jun Ho JANG on 2021/04/05. +// + +import Foundation + +class PasswordValidation { + + private func returnValidation(input: String) -> Bool { + if isCharNumValid(input: input) == true && isUpperCharacterIncludedPassword(input: input) == true && isNumberIncludedPassword(input: input) == true && isSpecialCharacterIncludedPassword(input: input) == true { + return true + } else { + return false + } + } + + private func checkPassword(input: String) -> String { + if isCharNumValid(input: input) == false { + return PasswordCheckMessage.characterNumberWarning.rawValue + } else if isUpperCharacterIncludedPassword(input: input) == false { + return PasswordCheckMessage.charcterUpperWarning.rawValue + } else if isNumberIncludedPassword(input: input) == false { + return PasswordCheckMessage.numberIncludedWarning.rawValue + } else if isSpecialCharacterIncludedPassword(input: input) == false { + return PasswordCheckMessage.specialCharacterWarning.rawValue + } + return PasswordCheckMessage.validatedCaseMessage.rawValue + } + + private func isCharNumValid(input: String) -> Bool { + if input.count > 16 || input.count < 8 { + return false + } else { + return true + } + } + + private func isUpperCharacterIncludedPassword(input: String) -> Bool { + let passwordRegEx = "^(?=.*[A-Z]).{8,16}" + let passwordTest = NSPredicate(format: "SELF MATCHES %@", passwordRegEx) + return passwordTest.evaluate(with: input) + } + + private func isNumberIncludedPassword(input: String) -> Bool { + let passwordRegEx = "^(?=.*[0-9]).{8,16}" + let passwordTest = NSPredicate(format: "SELF MATCHES %@", passwordRegEx) + return passwordTest.evaluate(with: input) + } + + private func isSpecialCharacterIncludedPassword(input: String) -> Bool { + let passwordRegEx = "^(?=.*[!@#$%]).{8,16}" + let passwordTest = NSPredicate(format: "SELF MATCHES %@", passwordRegEx) + return passwordTest.evaluate(with: input) + } + + func returnValidationResult(input: String) -> Bool { + return returnValidation(input: input) + } + + func checkPasswordResult(input: String) -> String { + return checkPassword(input: input) + } + +} diff --git a/SignUpApp/SignUpApp/SignUp/SignUpViewModel/Validation/UserNameValidation.swift b/SignUpApp/SignUpApp/SignUp/SignUpViewModel/Validation/UserNameValidation.swift new file mode 100644 index 0000000..379b715 --- /dev/null +++ b/SignUpApp/SignUpApp/SignUp/SignUpViewModel/Validation/UserNameValidation.swift @@ -0,0 +1,44 @@ +// +// UserNameValidation.swift +// SignUpApp +// +// Created by Jun Ho JANG on 2021/04/05. +// + +import Foundation + +class UserNameValidation { + + private func returnValidation(input: String) -> Bool { + if isInput(input: input) == true { + return true + } else { + return false + } + } + + private func checkUserNameInput(input: String) -> String { + if isInput(input: input) == false { + return UserNameCheckMessage.notInputWarning.rawValue + } else { + return UserNameCheckMessage.validatedCaseMessage.rawValue + } + } + + private func isInput(input: String) -> Bool { + if input.isEmpty { + return false + } else { + return true + } + } + + func returnValidationResult(input: String) -> Bool { + return returnValidation(input: input) + } + + func checkUserNameResult(input: String) -> String { + return checkUserNameInput(input: input) + } + +} diff --git a/temp/temp.xcodeproj/project.pbxproj b/temp/temp.xcodeproj/project.pbxproj new file mode 100644 index 0000000..27de42a --- /dev/null +++ b/temp/temp.xcodeproj/project.pbxproj @@ -0,0 +1,344 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + A0A2C31C2612E1A300BBD554 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0A2C31B2612E1A300BBD554 /* AppDelegate.swift */; }; + A0A2C31E2612E1A300BBD554 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0A2C31D2612E1A300BBD554 /* SceneDelegate.swift */; }; + A0A2C3202612E1A300BBD554 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0A2C31F2612E1A300BBD554 /* ViewController.swift */; }; + A0A2C3232612E1A300BBD554 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A0A2C3212612E1A300BBD554 /* Main.storyboard */; }; + A0A2C3252612E1A300BBD554 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A0A2C3242612E1A300BBD554 /* Assets.xcassets */; }; + A0A2C3282612E1A300BBD554 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A0A2C3262612E1A300BBD554 /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + A0A2C3182612E1A300BBD554 /* temp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = temp.app; sourceTree = BUILT_PRODUCTS_DIR; }; + A0A2C31B2612E1A300BBD554 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + A0A2C31D2612E1A300BBD554 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + A0A2C31F2612E1A300BBD554 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + A0A2C3222612E1A300BBD554 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + A0A2C3242612E1A300BBD554 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + A0A2C3272612E1A300BBD554 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + A0A2C3292612E1A300BBD554 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + A0A2C3152612E1A300BBD554 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + A0A2C30F2612E1A300BBD554 = { + isa = PBXGroup; + children = ( + A0A2C31A2612E1A300BBD554 /* temp */, + A0A2C3192612E1A300BBD554 /* Products */, + ); + sourceTree = ""; + }; + A0A2C3192612E1A300BBD554 /* Products */ = { + isa = PBXGroup; + children = ( + A0A2C3182612E1A300BBD554 /* temp.app */, + ); + name = Products; + sourceTree = ""; + }; + A0A2C31A2612E1A300BBD554 /* temp */ = { + isa = PBXGroup; + children = ( + A0A2C31B2612E1A300BBD554 /* AppDelegate.swift */, + A0A2C31D2612E1A300BBD554 /* SceneDelegate.swift */, + A0A2C31F2612E1A300BBD554 /* ViewController.swift */, + A0A2C3212612E1A300BBD554 /* Main.storyboard */, + A0A2C3242612E1A300BBD554 /* Assets.xcassets */, + A0A2C3262612E1A300BBD554 /* LaunchScreen.storyboard */, + A0A2C3292612E1A300BBD554 /* Info.plist */, + ); + path = temp; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + A0A2C3172612E1A300BBD554 /* temp */ = { + isa = PBXNativeTarget; + buildConfigurationList = A0A2C32C2612E1A300BBD554 /* Build configuration list for PBXNativeTarget "temp" */; + buildPhases = ( + A0A2C3142612E1A300BBD554 /* Sources */, + A0A2C3152612E1A300BBD554 /* Frameworks */, + A0A2C3162612E1A300BBD554 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = temp; + productName = temp; + productReference = A0A2C3182612E1A300BBD554 /* temp.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + A0A2C3102612E1A300BBD554 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1240; + LastUpgradeCheck = 1240; + TargetAttributes = { + A0A2C3172612E1A300BBD554 = { + CreatedOnToolsVersion = 12.4; + }; + }; + }; + buildConfigurationList = A0A2C3132612E1A300BBD554 /* Build configuration list for PBXProject "temp" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = A0A2C30F2612E1A300BBD554; + productRefGroup = A0A2C3192612E1A300BBD554 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + A0A2C3172612E1A300BBD554 /* temp */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + A0A2C3162612E1A300BBD554 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A0A2C3282612E1A300BBD554 /* LaunchScreen.storyboard in Resources */, + A0A2C3252612E1A300BBD554 /* Assets.xcassets in Resources */, + A0A2C3232612E1A300BBD554 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + A0A2C3142612E1A300BBD554 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A0A2C3202612E1A300BBD554 /* ViewController.swift in Sources */, + A0A2C31C2612E1A300BBD554 /* AppDelegate.swift in Sources */, + A0A2C31E2612E1A300BBD554 /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + A0A2C3212612E1A300BBD554 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + A0A2C3222612E1A300BBD554 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + A0A2C3262612E1A300BBD554 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + A0A2C3272612E1A300BBD554 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + A0A2C32A2612E1A300BBD554 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.4; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + A0A2C32B2612E1A300BBD554 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.4; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + A0A2C32D2612E1A300BBD554 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = temp/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = asd.temp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + A0A2C32E2612E1A300BBD554 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = temp/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = asd.temp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + A0A2C3132612E1A300BBD554 /* Build configuration list for PBXProject "temp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A0A2C32A2612E1A300BBD554 /* Debug */, + A0A2C32B2612E1A300BBD554 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A0A2C32C2612E1A300BBD554 /* Build configuration list for PBXNativeTarget "temp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A0A2C32D2612E1A300BBD554 /* Debug */, + A0A2C32E2612E1A300BBD554 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = A0A2C3102612E1A300BBD554 /* Project object */; +} diff --git a/temp/temp.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/temp/temp.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/temp/temp.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/temp/temp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/temp/temp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/temp/temp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/temp/temp.xcodeproj/project.xcworkspace/xcuserdata/junhojang.xcuserdatad/UserInterfaceState.xcuserstate b/temp/temp.xcodeproj/project.xcworkspace/xcuserdata/junhojang.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..bfd7d8097049be051d3bc1d019d26726a5fdaccb GIT binary patch literal 5519 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 literal 0 HcmV?d00001 diff --git a/temp/temp.xcodeproj/xcuserdata/junhojang.xcuserdatad/xcschemes/xcschememanagement.plist b/temp/temp.xcodeproj/xcuserdata/junhojang.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..ae166aa --- /dev/null +++ b/temp/temp.xcodeproj/xcuserdata/junhojang.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + temp.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/temp/temp/AppDelegate.swift b/temp/temp/AppDelegate.swift new file mode 100644 index 0000000..18b5b46 --- /dev/null +++ b/temp/temp/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// temp +// +// Created by Jun Ho JANG on 2021/03/30. +// + +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/temp/temp/Assets.xcassets/AccentColor.colorset/Contents.json b/temp/temp/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/temp/temp/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/temp/temp/Assets.xcassets/AppIcon.appiconset/Contents.json b/temp/temp/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/temp/temp/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/temp/temp/Assets.xcassets/Contents.json b/temp/temp/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/temp/temp/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/temp/temp/Base.lproj/LaunchScreen.storyboard b/temp/temp/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/temp/temp/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/temp/temp/Base.lproj/Main.storyboard b/temp/temp/Base.lproj/Main.storyboard new file mode 100644 index 0000000..25a7638 --- /dev/null +++ b/temp/temp/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/temp/temp/Info.plist b/temp/temp/Info.plist new file mode 100644 index 0000000..5b531f7 --- /dev/null +++ b/temp/temp/Info.plist @@ -0,0 +1,66 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + UIApplicationSupportsIndirectInputEvents + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/temp/temp/SceneDelegate.swift b/temp/temp/SceneDelegate.swift new file mode 100644 index 0000000..81ce373 --- /dev/null +++ b/temp/temp/SceneDelegate.swift @@ -0,0 +1,52 @@ +// +// SceneDelegate.swift +// temp +// +// Created by Jun Ho JANG on 2021/03/30. +// + +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/temp/temp/ViewController.swift b/temp/temp/ViewController.swift new file mode 100644 index 0000000..197d3e2 --- /dev/null +++ b/temp/temp/ViewController.swift @@ -0,0 +1,19 @@ +// +// ViewController.swift +// temp +// +// Created by Jun Ho JANG on 2021/03/30. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + } + + +} + From 597df5538a3e50e8aca7b96c5dd655c9608c9690 Mon Sep 17 00:00:00 2001 From: Jun Ho JANG Date: Mon, 5 Apr 2021 17:18:01 +0900 Subject: [PATCH 02/10] =?UTF-8?q?ID=20=EC=A4=91=EB=B3=B5=ED=99=95=EC=9D=B8?= =?UTF-8?q?=EC=9D=84=20=EC=9C=84=ED=95=9C=20URLSession=EC=9E=85=EB=8B=88?= =?UTF-8?q?=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Networking/NetworkingForIDCheck.swift | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/SignUpApp/SignUpApp/SignUp/Networking/NetworkingForIDCheck.swift b/SignUpApp/SignUpApp/SignUp/Networking/NetworkingForIDCheck.swift index 1f03b7b..09adfe6 100644 --- a/SignUpApp/SignUpApp/SignUp/Networking/NetworkingForIDCheck.swift +++ b/SignUpApp/SignUpApp/SignUp/Networking/NetworkingForIDCheck.swift @@ -6,3 +6,26 @@ // import Foundation + +class NetworkingForIDCheck { + + static var idData = [String]() + + static func getData(completion: @escaping ([String]) -> ()) { + let URLString = "https://8r6ruzgzve.execute-api.ap-northeast-2.amazonaws.com/default/SwiftCamp" + if let url = URL(string: URLString) { + URLSession.shared.dataTask(with: url) { (data, response, error) in + if let data = data { + do { + let res = try JSONDecoder().decode([String].self, from: data) + idData = res + completion(res) + } catch let error { + print(error) + } + } + }.resume() + } + } + +} From 40787749fde3e7b3ec0a0891d405031a1f80bd2a Mon Sep 17 00:00:00 2001 From: Jun Ho JANG Date: Mon, 5 Apr 2021 17:18:42 +0900 Subject: [PATCH 03/10] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=EA=B0=80=20Te?= =?UTF-8?q?xtField=20=EC=9E=85=EB=A0=A5=20=EC=8B=9C=20ViewController?= =?UTF-8?q?=EC=97=90=EA=B2=8C=20=EC=95=8C=EB=A6=AC=EA=B8=B0=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20=ED=94=84=EB=A1=9C=ED=86=A0=EC=BD=9C=EC=9E=85?= =?UTF-8?q?=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SignUpApp/SignUp/Protocol/DelegationProtocol.swift | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/SignUpApp/SignUpApp/SignUp/Protocol/DelegationProtocol.swift b/SignUpApp/SignUpApp/SignUp/Protocol/DelegationProtocol.swift index 053c622..c07d06c 100644 --- a/SignUpApp/SignUpApp/SignUp/Protocol/DelegationProtocol.swift +++ b/SignUpApp/SignUpApp/SignUp/Protocol/DelegationProtocol.swift @@ -6,3 +6,11 @@ // import Foundation + +protocol CheckDelegation { + func checkPassword() + func checkID() + func checkPasswordEquality() + func checkUserNameInput() + func buttonStateCondition() -> Bool +} From fa90cbcd53e553135998661c3b7c214adf9f1a88 Mon Sep 17 00:00:00 2001 From: Jun Ho JANG Date: Mon, 5 Apr 2021 17:19:05 +0900 Subject: [PATCH 04/10] =?UTF-8?q?View=EC=97=90=EC=84=9C=20=EB=8B=B4?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=B3=B8=EC=A0=81=EC=9D=B8=20=EB=82=B4?= =?UTF-8?q?=EC=9A=A9=EC=9D=98=20=ED=8B=80=EC=9E=85=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SignUpApp/SignUp/SignUpModel/SignUpInfo.swift | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/SignUpApp/SignUpApp/SignUp/SignUpModel/SignUpInfo.swift b/SignUpApp/SignUpApp/SignUp/SignUpModel/SignUpInfo.swift index 513ec8b..0d8a2b8 100644 --- a/SignUpApp/SignUpApp/SignUp/SignUpModel/SignUpInfo.swift +++ b/SignUpApp/SignUpApp/SignUp/SignUpModel/SignUpInfo.swift @@ -6,3 +6,17 @@ // import Foundation + +struct SignUpInfo { + + let title: String + let placeholder: String + let warning: String + + init(title: String, placeholder: String, warning: String) { + self.title = title + self.placeholder = placeholder + self.warning = warning + } + +} From 282276bbb1282f438a07f28e8ab875c15e57da0c Mon Sep 17 00:00:00 2001 From: Jun Ho JANG Date: Mon, 5 Apr 2021 17:19:32 +0900 Subject: [PATCH 05/10] =?UTF-8?q?View=EC=9D=98=20=EA=B5=AC=EC=84=B1?= =?UTF-8?q?=EC=9A=94=EC=86=8C=EB=8A=94=20=ED=8C=A8=ED=84=B4=EC=9D=B4=20?= =?UTF-8?q?=EC=9E=88=EC=96=B4=20StackView=EB=A1=9C=20=EC=B6=94=EC=83=81?= =?UTF-8?q?=ED=99=94=ED=96=88=EC=8A=B5=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SignUp/SignUpView/StackViewUnit.swift | 54 ++++++++++++++++--- 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/SignUpApp/SignUpApp/SignUp/SignUpView/StackViewUnit.swift b/SignUpApp/SignUpApp/SignUp/SignUpView/StackViewUnit.swift index 0dd6b34..204b161 100644 --- a/SignUpApp/SignUpApp/SignUp/SignUpView/StackViewUnit.swift +++ b/SignUpApp/SignUpApp/SignUp/SignUpView/StackViewUnit.swift @@ -9,12 +9,52 @@ import UIKit class StackViewUnit: UIStackView { - /* - // Only override draw() if you perform custom drawing. - // An empty implementation adversely affects performance during animation. - override func draw(_ rect: CGRect) { - // Drawing code + var title: UILabel! + var textField: UITextField! + var subLabel: UILabel! + + required init(coder: NSCoder) { + super.init(coder: coder) + configureTitleLabel() + configureTextField() + configureSubLabel() } - */ - + + override init(frame: CGRect) { + super.init(frame: frame) + configureTitleLabel() + configureTextField() + configureSubLabel() + } + + private func configureTitleLabel() { + title = UILabel() + title.textAlignment = .left + title.textColor = .black + title.font = UIFont(name: "HelveticaNeue-Bold", size: 14) + self.addArrangedSubview(title) + } + + private func configureTextField() { + textField = UITextField() + textField.layer.cornerRadius = 0 + textField.addConstraint(textField.heightAnchor.constraint(equalToConstant: 38)) + textField.addConstraint(textField.widthAnchor.constraint(equalToConstant: 302)) + textField.borderStyle = .bezel + textField.keyboardType = .default + textField.returnKeyType = .next + + textField.attributedPlaceholder = NSAttributedString(string: "", attributes: [NSAttributedString.Key.foregroundColor: UIColor(red: 141, green: 141, blue: 141, alpha: 1)]) + self.addArrangedSubview(textField) + } + + private func configureSubLabel() { + subLabel = UILabel() + subLabel.textAlignment = .left + subLabel.textColor = .black + subLabel.font = UIFont(name: "HelveticaNeue", size: 12) + self.addArrangedSubview(subLabel) + } + } + From df6f5d990ec086823bdaa0c41b3fa9a3190149b4 Mon Sep 17 00:00:00 2001 From: Jun Ho JANG Date: Mon, 5 Apr 2021 17:19:56 +0900 Subject: [PATCH 06/10] =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=ED=99=94=EB=A9=B4?= =?UTF-8?q?=EC=97=90=20=EB=82=98=EC=98=A4=EB=8A=94=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=EA=B0=80=20=ED=8F=AC=ED=95=A8=EB=90=98=EC=96=B4=20?= =?UTF-8?q?=EC=9E=88=EC=8A=B5=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SignUp/SignUpViewModel/SignUpViewModel.swift | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/SignUpApp/SignUpApp/SignUp/SignUpViewModel/SignUpViewModel.swift b/SignUpApp/SignUpApp/SignUp/SignUpViewModel/SignUpViewModel.swift index 352efb0..8908075 100644 --- a/SignUpApp/SignUpApp/SignUp/SignUpViewModel/SignUpViewModel.swift +++ b/SignUpApp/SignUpApp/SignUp/SignUpViewModel/SignUpViewModel.swift @@ -6,3 +6,15 @@ // import Foundation + +class SignUpViewModel { + + let mainTitle = "회원가입" + let emptyString = " " + + let idContent: SignUpInfo = SignUpInfo(title: "아이디", placeholder: "영문 소문자, 숫자, 특수기호(_, -), 5~20자", warning: "이미 사용중인 아이디입니다.") + let passwordContent: SignUpInfo = SignUpInfo(title: "비밀번호", placeholder: "영문 대/소문자, 숫자, 특수문자(!@#$%) 8~16자", warning: "안전한 비밀번호입니다.") + let checkPasswordContent: SignUpInfo = SignUpInfo(title: "비밀번호 재확인", placeholder: "", warning: "비밀번호가 일치하지 않습니다.") + let userNameContent: SignUpInfo = SignUpInfo(title: "이름", placeholder: "", warning: "이름은 필수 입력 항목입니다.") + +} From c35c63d8285286b3e72ae5236bcd79dac8a044ca Mon Sep 17 00:00:00 2001 From: Jun Ho JANG Date: Mon, 5 Apr 2021 17:20:41 +0900 Subject: [PATCH 07/10] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=EC=97=90=20=EB=8C=80=ED=95=9C=20=EB=B0=98=EC=9D=91?= =?UTF-8?q?=EA=B3=BC=20=EC=9E=85=EB=A0=A5=20=EC=8B=9C=20ViewController?= =?UTF-8?q?=EC=97=90=EA=B2=8C=20=EB=A9=94=EC=8B=9C=EC=A7=80=EB=A5=BC=20?= =?UTF-8?q?=EC=A0=84=EB=8B=AC=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=9C=20Del?= =?UTF-8?q?egation=EC=9D=84=20=EC=9E=91=EC=84=B1=ED=96=88=EC=8A=B5?= =?UTF-8?q?=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CheckPasswordTextFieldDelegate.swift | 23 +++++++++++++++++-- .../IDTextFieldDelegate.swift | 23 +++++++++++++++++-- .../PasswordTextFieldDelegate.swift | 23 +++++++++++++++++-- .../UserNameTextFieldDelegate.swift | 23 +++++++++++++++++-- 4 files changed, 84 insertions(+), 8 deletions(-) diff --git a/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/CheckPasswordTextFieldDelegate.swift b/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/CheckPasswordTextFieldDelegate.swift index e713e34..92cc09f 100644 --- a/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/CheckPasswordTextFieldDelegate.swift +++ b/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/CheckPasswordTextFieldDelegate.swift @@ -7,6 +7,25 @@ import UIKit -class CheckPasswordTextFieldDelegate: UITextFieldDelegate { - +class CheckPasswordTextFieldDelegate: NSObject, UITextFieldDelegate { + + var delegatedObject: CheckDelegation? + + func textFieldDidBeginEditing(_ textField: UITextField) { + textField.layer.borderWidth = 1.0 + textField.layer.borderColor = UIColor.systemBlue.cgColor + } + + func textFieldShouldEndEditing(_ textField: UITextField) -> Bool { + textField.layer.borderColor = UIColor.black.cgColor + delegatedObject?.checkPasswordEquality() + delegatedObject?.buttonStateCondition() + return true + } + + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + textField.resignFirstResponder() + return true + } + } diff --git a/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/IDTextFieldDelegate.swift b/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/IDTextFieldDelegate.swift index a3d27f4..96ded29 100644 --- a/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/IDTextFieldDelegate.swift +++ b/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/IDTextFieldDelegate.swift @@ -7,6 +7,25 @@ import UIKit -class IDTextFieldDelegate: UITextFieldDelegate { - +class IDTextFieldDelegate: NSObject, UITextFieldDelegate { + + var delegatedObject: CheckDelegation? + + func textFieldDidBeginEditing(_ textField: UITextField) { + textField.layer.borderWidth = 1.0 + textField.layer.borderColor = UIColor.systemBlue.cgColor + } + + func textFieldShouldEndEditing(_ textField: UITextField) -> Bool { + textField.layer.borderColor = UIColor.black.cgColor + delegatedObject?.checkID() + delegatedObject?.buttonStateCondition() + return true + } + + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + textField.resignFirstResponder() + return true + } + } diff --git a/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/PasswordTextFieldDelegate.swift b/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/PasswordTextFieldDelegate.swift index 354ce9c..a5fe881 100644 --- a/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/PasswordTextFieldDelegate.swift +++ b/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/PasswordTextFieldDelegate.swift @@ -7,6 +7,25 @@ import UIKit -class PasswordTextFieldDelegate: UITextFieldDelegate { - +class PasswordTextFieldDelegate: NSObject, UITextFieldDelegate { + + var delegatedObject: CheckDelegation? + + func textFieldDidBeginEditing(_ textField: UITextField) { + textField.layer.borderWidth = 1.0 + textField.layer.borderColor = UIColor.systemBlue.cgColor + } + + func textFieldShouldEndEditing(_ textField: UITextField) -> Bool { + textField.layer.borderColor = UIColor.black.cgColor + delegatedObject?.checkPassword() + delegatedObject?.buttonStateCondition() + return true + } + + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + textField.resignFirstResponder() + return true + } + } diff --git a/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/UserNameTextFieldDelegate.swift b/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/UserNameTextFieldDelegate.swift index fbcf2f5..3c93cfc 100644 --- a/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/UserNameTextFieldDelegate.swift +++ b/SignUpApp/SignUpApp/SignUp/SignUpTextFieldDelegate/UserNameTextFieldDelegate.swift @@ -7,6 +7,25 @@ import UIKit -class UserNameTextFieldDelegate: UITextFieldDelegate { - +class UserNameTextFieldDelegate: NSObject, UITextFieldDelegate { + + var delegatedObject: CheckDelegation? + + func textFieldDidBeginEditing(_ textField: UITextField) { + textField.layer.borderWidth = 1.0 + textField.layer.borderColor = UIColor.systemBlue.cgColor + } + + func textFieldShouldEndEditing(_ textField: UITextField) -> Bool { + textField.layer.borderColor = UIColor.black.cgColor + delegatedObject?.checkUserNameInput() + delegatedObject?.buttonStateCondition() + return true + } + + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + textField.resignFirstResponder() + return true + } + } From 4e765608d3d9632f7cdca08a23b44115de05824a Mon Sep 17 00:00:00 2001 From: Jun Ho JANG Date: Mon, 5 Apr 2021 17:29:42 +0900 Subject: [PATCH 08/10] =?UTF-8?q?Simulator=20=EB=8F=99=EC=9E=91=20gif?= =?UTF-8?q?=EB=A5=BC=20=EC=B2=A8=EB=B6=80=ED=96=88=EC=8A=B5=EB=8B=88?= =?UTF-8?q?=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2d3aaf6..09129c0 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,4 @@ # swift-signup -스위프트 회원가입 프로젝트 +![](https://images.velog.io/images/panther222128/post/b3caa6f8-7419-430b-ba82-fac83acea94b/ezgif.com-video-to-gif.gif) + + From 58a95d6f7e0f25acefcb98df80e91da694fa579f Mon Sep 17 00:00:00 2001 From: Jun Ho JANG Date: Mon, 5 Apr 2021 17:29:50 +0900 Subject: [PATCH 09/10] none --- .DS_Store | Bin 0 -> 6148 bytes SignUpApp/SignUpApp.xcodeproj/project.pbxproj | 140 ++++++- .../UserInterfaceState.xcuserstate | Bin 25532 -> 76466 bytes .../SignUpApp/Base.lproj/Main.storyboard | 117 ++---- temp/temp.xcodeproj/project.pbxproj | 344 ------------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../UserInterfaceState.xcuserstate | Bin 5519 -> 0 bytes .../xcschemes/xcschememanagement.plist | 14 - temp/temp/AppDelegate.swift | 36 -- .../AccentColor.colorset/Contents.json | 11 - .../AppIcon.appiconset/Contents.json | 98 ----- temp/temp/Assets.xcassets/Contents.json | 6 - temp/temp/Base.lproj/LaunchScreen.storyboard | 25 -- temp/temp/Base.lproj/Main.storyboard | 24 -- temp/temp/Info.plist | 66 ---- temp/temp/SceneDelegate.swift | 52 --- temp/temp/ViewController.swift | 19 - 18 files changed, 172 insertions(+), 795 deletions(-) create mode 100644 .DS_Store delete mode 100644 temp/temp.xcodeproj/project.pbxproj delete mode 100644 temp/temp.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 temp/temp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 temp/temp.xcodeproj/project.xcworkspace/xcuserdata/junhojang.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 temp/temp.xcodeproj/xcuserdata/junhojang.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 temp/temp/AppDelegate.swift delete mode 100644 temp/temp/Assets.xcassets/AccentColor.colorset/Contents.json delete mode 100644 temp/temp/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 temp/temp/Assets.xcassets/Contents.json delete mode 100644 temp/temp/Base.lproj/LaunchScreen.storyboard delete mode 100644 temp/temp/Base.lproj/Main.storyboard delete mode 100644 temp/temp/Info.plist delete mode 100644 temp/temp/SceneDelegate.swift delete mode 100644 temp/temp/ViewController.swift diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..41eda6f084c8050c7bc6193376e0b453398d872f GIT binary patch literal 6148 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�|s)L2*Nr0;yNRFXNX3 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 z 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 delta 12701 zcmaJ{2S8KT*T47O`%no;0wDwfBq1RtfrJbaLV(~_+{$tzBO=O@;nv*ew$?gQ>!?;4 zYF%~KT5BEETDPretJPZD+PXSyt5w^o-%SG5j{hf;@ZO#0ch32pbH~n$c>hOm(Fg`! zT3nFq8Uso}87K!8U^18jrh;j}1!jQRU=COSUI9yh8!QK}gUw(I*b3eP+rW0P1MCC` zz(H^b90nhN55Wm=2Al=wK@+$DE`l$>HSi_44!#37!5wfH{0x2pzk@%(pHK|LVFZ-G zNEij9p%luX9LBhy0xF>v#z6zL!xWeb)1U*U!wlF1_JqA)Z#V$vz`<|`bi$Fa9M-^E zI1x^T)8KSC1I~f-;mfcedVBbbp)88eotWhOFHnQ6>)W;Qd2naj*$mN3hiH<)^+f!V-p zX0|ZfnH|jA%mL;obCNmBoMW1p&zMWhRptxkD;M)M^Br@C`IUK$0K%v>3P5}$K%poO z#UmZkqXc9?Mr1-}l!$C_6-r0#QCHLr^+o+qe>4DPqZ~9G<)IO%2szPMRE4Th4XQ;P znvQ0mnP?W8k6uPg&@xnq>d_Xo6&*oG(TC_5`Uo9It`q1aI)zT7OXxEC99>5@(6{I( zbPxTEenF2hzz{PSVT^e=00-i>I0%by7#8Dj9D(IH1}m@tiwEMNxB!>q3S5cD;wn4=PsH=^OL#th882|*SMWl-2rtG<@oRV`ejTsF z@8SLUeS82P#E0-<`~g0KkK*I_9R3)8f+lp>KPFb}d`S*0T+4BfE}W&u(CMushjZ>~3~H zdyM^vJ-zcaoEvc?C7%o5tVb-rzjQc=ao8*huZTxuwfo+5Mg5VHg zs3=Sv9wCX0ik8ac?(iUO@Zdg~S@{JWt8z-JbNXavXJmACPYRmqYE2l@ieTa|AVGvB zLOu|n!fpIeg)&yvPOZ@zO}6%3yLIo`e?Vr=ploG%ZE0y9KRVIonXSw-RnJUio*!ef ziGCR9>zuqknRcVOf*%EPKnZYy@t_lBn{rSCs_1tq{c+O2^q?AqkEazz(gK-G2xOoO zD5B3bw7AGUji2Bb7q8PN7~H$~+8{()d;3i?oHr+0tnPb4;SxcN)si%@PiEhO(ayq} zreu3uN?N)Hsxi)q)l^`8g}0!(E|u`=98|!NrVbtBI(6>iE)pcW?+c94w6BaF!~0}r z7FIc(<-PJJR@BziXCyWC>K)goZ$EcgaJq|61SB|*FP=R4zm=577fqgQh?g0>%A+7q zO;Qx5PNjWkWz)WMOUjEX#y9t!l|*0X4jkGivvWydO-V(0e$~YK+@#@#2}vVI+Kfes zNtWb9185BdAOa|X2DnTh31m=Qs=y>l&nv)Mu!~ahc}lwX!86zzhEbB0cnMYpV<@w# zpoVg*4kkboWz>FfESvz}h9}`EFDw2Gf2Z^p!h|wmlmZo$_L7)^%n+uC8N*alN+Xoi zW>Q+4%PeFzF$bB$J(wfRhs^iPW9BIeq(l`)X(=1!qCsc~8iy95S5X66k2a&d=sn>5 z$3WjV7~K5b{Dn@szZJd`)RlB2JxEW|n?#U)MCYC!y1ktfXd6L3C;)|^h(wYo5>2Fy z)GUhW%Mv0Zdit^xt(z|zWo!b0pe=QZN>J-*HJ0L14Qhy-#1I8hHiB`~+9rT;B$l)z zYWk^jM}!qC3E+Te?OLKb50Zf$%mlOkt^xYS;l3OuaUTk6Etm^l0-`!Fk7(+^e4?eE zdO1wWE(D9fV)v7nngu|L%vPuqd}#Y>#jB3*ZNzZ`HaDFRL=YX4D|6eCLGj zCFM1B{(~}0ip#SrJ5*Nk!FlSbJomxy*pN0Ar@Pecq%8!zdVl}()OWq_Gd%AbvdtZi zw5dFM`Cdr9IHEp0T+xDQy(Ci6eys0F(S9!R{#6%EyOHu5{rzR~9N%Dhe4+dBVxh}x zQ4;ENX`m}#_DQpGXz_u_1 zM)*eiOTRI`=ax@s^kMrdSenOIb(v6ET2Yl>Q0nYkTT@!%&W;I3uYqOmu`#dZuK+9a z_#u5Vd)L-@Dm-_D209O_h!z#E0u4aB9;^m$fHlp(q8AO>P2CSoRu>p>$}2i5~M zcoQgzg;+@kYEm6ZAXWJ&MT2G+*y}Nn-QaDo2fRa)h>au@dn0%k?4xb=lN6Fh>$j)1 z*DK}XJbq|K=PsR{1+~R=>iJY@MHw~DvTApg((3M`RJzW4t?mdox|XE+1U&{mqTbys zM2D)X{D}?V7&s0bl!3gDz9uKZ={j(VI7s?){rfsN2R^1&*xW&;v!(%@qu@KTDIGa$ zhI;v6q`9!LpwPevDO8cqX~vXfikBtX5~ogW!Rk|R8EEUlXW$a)OuE#2yvgfHx;%cY zdqk|r-B#u2J|3%!QM9jY?^Rh#%de=iwRPZY(!CDcAQ==7y;`FIx4e@6Wn(S1zXv~h zYX3lb)d4ldPv>5xiH!iig5NyD-vZ>6(5qnw8I>WgqF97g*c4)fp$m=6nJAuMu_ z*9~Yhjf^E6sU%a~=XJIY#jtE090g0@XgCIzk}6V5#*>L;5}DEjD_|wUO zv%IEcWQnsX+dCmrO);+VkjdCuVH@9k$HDRLO1&ISpwwBZmx@|?nB?h!jB9CdcyXw! zxo?-ZWP+!pnVy>4fK%QQho_{ao4MXslRdBg={U#Xf_jgmeGV7GMQ|}(0^M}xufnD9 zHMk5ehb!Ppx;ANouftVvHT`wHF{G%Xu(piKls%vqm7=;PzpAFBytq?EX>D0~pW3nl zXH_0Q*jZlmua|iQUh#&jll6&1$X~R?V1&~9&T{=H0a=)?uiC->Lzfs z4sIqho?HD}a2I7vxD9THJE%9!B(unDlGO-z)BIr%e22^-S2zgB66!j)4OV%JJ-!bQ zQQwCL;6XB%%&UioVG((WOr^E5jp{Tn3Br$HStC3SPk8bWGM~Idj*@d^$|ZOfo`WC5 zPpJ0J!zOqEUWA{*&)_9^8Ga70z^iVJX`5>|d7Z2xFOxmwZL)&wdePLc!7n|g4%U;` z$O5mKckqpO!!zEu@H==D-XgD%MZ`^BeQx7-y{5I$XQ86r`6cE0>Y9qGi3Jt;RYfv& z$NXxiro{~J`NMapIWMMS*SPb|qI9pD{FlN0?(KEy-wn12E~LUOh0hoOSCeIAxqFLw ztWO^dW>~kt5QZ5)>Olg7D7lGg4T6|9a5ck&&pdf-0i6k@0DYCSl-k=kCjn$7S?09@ zrY#dhBL%hRdZw*ACoxGA%!E<((cDf*vpW%4P2M1D$l69m%!rr>MndYyTGBw)Q@!+a zRU~?GVq#!f9it%iWXj65HxvpLC@Y&In)B_}4*xMtQH%_eJdVzSwmm}oXzEmM7y?dF+m zce0&Mw&S3|IwDxq5LP8Uy9 z*PiHJ&*Zpe$q}x9nc*a65LLnuc$pc-3}^BvnH{Fk@1-Vqgd8FtykLS%K2y+af(OaF zFPI=hskV_B#gs6knK5J^d5`QT?>{%e7f7<{Kj`s)^CIJGdEmdzY`NFWTx2-`FB%hl zq=w_7SyyFkL1{^$zIuGg$QoUBMQv4~GtYg^Zgfej3!UXob)J2ENoi@Pit=*0qROhU zS5$gW(d0&>O!h#Sry<@(FP zn5|w+&iq@hJzlxqrOJPg*-zza^2+rwmFshI`R{TaWDYgU^%?o(MY%ro$aReQh&fKq zlMCcxi&!Irm_4A8%GE?ORvJ%3GCinwc9uGe^J|SeE}m)wHUhH#%NeM8Bgxk0YdT$Z^>Ip-F0+dXWw#6`X!&;Er7r0&4{!2Iad zbc;KDN3MA_{SSAz&pc>G9_U$Vz@DQ@jwP zWGXPSqZH3C`Gx%I{hh)OXeKPw0d=CQOw^G)s6(B}Z!|sp#1ZT2j(P%7J<32m$V2j| z9`!=K$z$?6Q4Md&U}y$XTr+A&Da|yzshP8y|CMjVOjx#-Oi>)X=UbAs43vuod%7Hm z29YP^X+7$VdeIIa6IJ%eiqfL$zje&38Rd;GC?6HL|0oM*P@!8?ZZ@KkXbcT5s2Ghx zC1^AU84e;2Vh*y6s1%jKB2>XaKMwN9R1SLb{z>I&db&X{+0$w~nt&#vNgQm&!PXpX z!$JQ>itBpRo30@ODUQE;R}$ZqPjjK!Xf6#pXbuMh>S$c=;7#c%A5~YBI=hyX(mbqp zMUk^bwgqTmOHz*(aj-4X`Jiyqw4QEFEahMj2L*qnIA}Rq_0Jp~6$3R|LnR^+9HhHF zDnKs(Vcv>UyR_Mmq- zDCA%$2SpqV;T)u0NH`d|k#-rk550%>qxaDPbPydvhdtd#aqtZe)^Ttb2b(x} zfrFoN@G}bW+m%0>(HV5!1MyjO4qj#QI2g@ADcMCnXhcou0=kH3T^R>cIM|DW`5rJ$ z?(6nQcT!cqgccC5pf5a-U*({@4qfA*g6Lid9_SkndvGwuZ6BA{4tGWbQgUO)EsQbLAzI%hsH&upkF;Ma34KDzoCa5q{TW8nmCx$;vybSK!2b= z(G&EPgBlKMIT**mcrwKuI$k5eEG@@=xD{@Vsm~T%a@x`!Liu0 zUc@R6rq*FPcgNpQ!8#u*X?gr1?j7d-?$QYYH8$Wx3Jx}66Q;9C=U{sdc4)vBY{f|& z?8w0$9PCLow{F7ABXAle4D8@wCo<&%?m%-ynknLrxD(dlE`zFRNbv3ta`r$Zbnc%fsxi*QS#HTBImX#I z$K8HX)=)eM5B4QWEu9R*c^)6SLRQq_5ghDI<@9kSF2tj#ZQ&y9#3OMr2m5faF9-W^ zuzw@!jf?RZTuOeYPaGV;!7MstKi9YrT#f0@Tph0AVCM6@QPBlY!W>N+@nk#&PsP)) z3lk1zb1;X4xf~qG!9g4xydF=-Gw@723(p4BwuW$UC`%^zL=Gk>%h zEOa0Jf8~#Oi3e~u2Z#Sx0*RO5 z94z4A1P;FR9JBR!J9T`#0l$ei;!Sun-h#K{x9~O&7ILtNgH8^PvSIFI*6WLE6*TdjvZF-||DgXJ8o@O_dg{I>kXEjm4qFVL`qDUpn=!xuSN3me428O^w`!4#K&2jb>Qv*E0S;=xj$omIz1a&Wc}k4RR=DyTH998uqz;|<05 z3-XvELMu>VB3TU^?-iGg^N2f-ii;@6)_5YTS6bG@rc!BHGn>d-SSy>v+Sp{)&QdO( z&%u{DxPXJNaBv|9Y2;eW!6h7YZ)DSa(y|?zrKR5gYKyeXTBKdoENuqc-y<#czNIbF zW_zuG&BZ5K>Q>YWUh{oYD{!^QJdDlr$UK~b%j;O`@+*8YXR<|Xu}5a7N9L7OW_A?* zf`hMnh5lQfP%}yZ=e2ZK&W`l~QRx9(pRcoW50DmHTx#J zh59nPk=?{@=HPA)zRkfs4eVC-Etb}QhlA%i_yOgar{9$hVBZEu*Rgxpci6q`yX-y= z?&aV?4j$p)M;tu)S5m>g&mQ*ld4N609^xSNU0U_M2KEE?2z!)+`#JbN2M>6hSLMF; zB-(xXW@Bg2{hYn_UzNXP zud`oqkWS)54jv;qMSEY80tVRsW5k>6-T&wWOW7aTA32!J!Q&h}L3GVC_8v{LzksB^ z0!CEmesC*WCglZ$2-u@44mCAZB?YxL&T0}y+BAiV+8Pq0 z8jL10@h3bI&|tA9Q6FndL`3L4nea@^Gljp}`vvU7h(gwN*~KMeo@`tbU=2 zxR0y3PIg9ib$;>l=I2Fi)6%^skfENzJ9Lh!@7RgZlg0WjT}dzr@eC`W-M4h@iTxE- z&o^P|Zr)#|SraRr&rA4#?{~g8J*yn7EG*4;KM)4F{(iF6xBp)Uq_kdU)<2IdGPC=) zoLA)WgM1=(r0W8&0JO!xL3DHTpLo^}?*AWeY3-rIa)iFh^+Wq#%o~wk(6+G1IkMQ@ z=T3*%2oiOnWb~M}rDZ+Jv*=EDXS#ot(Ww(1-jmXo(p^spiQKj4PMx4n?>=Lzs2pC) z$gIpSbkn_v5 ze0srU4LwR~pl3(h=)uqddYR=kz0C44-7vmLk54Ysi!8V3amMfTh=NbgR%P_I3OzZX zXQ~}xH@YJ+5{{yq+12z;%6RXs6c?nC2F{{e%?If6_!_(pzlJy9U3&ZE9{h#gJ$XoP zpZvjuGiDcKq1$4qOgDO;WEj0kQo@weJ0u*vJMucSmf6MZVNTGSA{Xf`k#Cs0%p=6o z#c33hBL!W2wxbt9EOaH=33Wl;P=@ff@JHbv!l$9UP=2U5R1zu+wS?My?(o;?++^Q# z%V%is-Xy4nTOP1~(oBpJ)Q{gftrk={|cjIZE3YzXV1A+3%^giGwN?0xo$AM3xtf203S z|M&fm`CstA;{Ub(UH?Zs9xsp=#1rsBc%i&7UN}#}i{cr0CSD@X%Cqt8yi}fp*Phpr z*O`~g8_k=>Tg+R>+sQl5yTZH8yTf}J00Ni*9N-t=Y8@a52nh%c2nz@gkOVjah6Rib zm=UljU`4>|0jmSn1k?p=3fL0xR>1avodLT8P6d1!@F*}OP!=c;j0sc*>H_V7>4Ad- zivvdomIhV?jt#61d?j#M;O@XZfqR4c2MrFI5%f~fF20yA=O^(U{GR-Q{K5R8{Nel& z`~rRvf2@mN&9CK;=TGEM=1=9j_$&Fl`DgjJ`Huu*L4=^4z#uRQ5(QR)P0&HmNzg^m zO^_kzDJT`p6zmmT6WkQs65J8|8q5T@2^IuL1V;r+gXO_-!HK~gg1ZOz2_6zWEVw3^ z3!WW3H~6LCg~5x1-N8$P-w*yO_)hS{;NOG)40b&WfgvcQU5FvX7-9}d4ao@U71Af9 ze@JFXc1U#y37Hi#CuCm8DXL-&N9r1X9%^z+cGq1Qt1hW-+IKlHcIN1@L|P=rLRsFf&G6eF^T z(nZ}x*`lGM;i3_u0#S)*jHpahAsQ>1A$nObcNLaY#X6n7Jk6jzID#pA^j#f!wN#cRZM;s)_1@jK#o#qWvV7oQZL7M~S= zEdE^ljrdl$AUrBOF+3xDSa@aljPM2F_2GNM_lEBa-yeP;{80D@;in=}B05J5cSSfO zToFqn-iSC6aW>+ygpsh4R+2UnkwhwyOB9k=Njr%_Vv;0Ek|fEJ6iHu+Q!-XEO)^6= zOEO3Dvg8%XBFPfT2FX6j5y@%ES;@ze^O6gaPbCi{Ln4zRGa`#4Cr8eSTo<_^a%1G? z$gPpvB6mdYihMirWaR0{vymT1y3R*li2Ne*yU1IScOt)!{4w%g2~i!QIz{!18W5Egl@nDM<%}whDv7F&B2m+$W=749dJy$AS{NN3oe-TG-8s5n z^nmEB=$z=hXlL~3=w;E3(OaXpMem5-75#Sff#^fgA4DIGJ{EmE`bP94X|y!SC2cS5 zB<&*YCLJKnlNLyeq{Y$_=@{u8=_2WB=_ctG>08q6(w)-X(mm26(hsE{Nl!>mNzX{n zNk5TZmEMvuGL5X0EJv0ndr9V&y(U{OTPa&7+bP>6+b!E8J1BcB50;DNa=A^OCeM=B z%E!wm$|uXG%3X3!K0`iB?pi5dC4WP{R$eb}ly8;qk?)o7lkb-wkROttk)M-)B5#sk zmwzq4A^%SPtNeldq5N@-Urg&5|CoRnQH&xcHl|&SCdL|Li?PR~#tev=9@7}}Va!J{ zCt^;;oQXLX^GQro%*B{HG2h4h7;`V?mzeu8PZU_;r)aJ4R|F`+6%v;sN+DI473~!r z6`d7b6`6``MXq9yqEJz(s8ZA@#wo5UZY%C8eo*|R(xOaK zCM#2vY07kEcV%B?e`TgJTbZjYQjS!PQjS&<92uvE{MjV<*KJeF?N0IN3kbjPsN^zJs0~)Y*XyT*w13W zkNq+BUhFTi_hWyHeWq%y@>d0@+N$`fV3kxQS1DAnDw8TvWmVZ!T~ysv8LFPDfvUl( zp{n7kQL0+ic-2JJWYt{N>#EhNHL5yQgKC{>gKDE{vrDyAbx8Gr>Zt0N>bUBp>a^;t z>SNV;)dkhh?fC5y+vT*I)NXCNqwT&?Gisi?t(vb6R!h`MwMwm4Yt`{;z1pBoQ@2-l zRCiH#Q)j40s;ku#)RWXx)SP;TdX{>Q`ZaaEx>3DV{g!&W`d#%g^(plk^*Qwg^{47f z>d)1#>*}A>k2HKus79wr*Ywh4YX)kDXohR@HKR3Uno3QTrdBgvLo_dGmTIR9m4PtF6|~(Y~r(rd^?3rCp<~ z({9pk)9%#1t$jy(RC`K$Mte^CiT0BAic9;2_PX|K?Op97?Xx%-hvL|{fViMIL7Xs7 z6eo>~k4um17}q7PdtA@BK5_lyvf^^%2FI1fRm4@r)y7STn;bVSj*FWaHz#gh+}gPJ z<4(qX6)%ie#dnI&j<1ZL8b3RJUi{1Puf#8kUlG45eocIR{JQuJ@mF;sokFM5X>_i5 zU4qW2bLiUZI_kRUR_iwDcIbBN-qG#T9o8MyeWW{~JEgmzyR5seyRG|0_dxeZ_lNGO z9_ZWXgY}_$v0kE&*30x7y-A;<@2u~w&(ROk57p=C3-m?$GW|HcOFvh?Sie%gTEAA` zpkJ?lQ@=yMPk%&zT7OZ0P5+fke?xy$e@Fkl{(=5!LaPK}LRdmXLR5k*AtoUq!I)r9 zuqM2kP?zv#!sdjx5_Tl)O?WTiK*HgKBMHA4)419AmT|lBwDG#h&m=X)n-WYWlZDUGY zKTPyb3``746eNZuiW0?%5s8tB(nNWpBXL+Fm)MZ_QQ{94fyH3yYZ+)6Vi|53VJWdx zS!yj4ER!wMEW|S1GSjly@~UN-Wu;}cWsPOO<%H#|#=F z56e?4&&sz3TSKi8)+npY8e=tD9oGKVENiZHuyvSqgtgE*(pq9IwYsd+tuw8&t#hsO ztqZIRt&6R%T3@s7vYxm8mLyI}O)5y5owP3LXwsRakCU2`E+$<|x|wu4>2A^wNk1k1 zob=QNZP;aNW%IWM*fch)Eyd=rwYPP#b+h%b^|B4Ijk1;5Dr{A@@wQ2}DYj|01-6y8 zt+ws9UA8^8cWwJ^2W=nNKC~UTU9nxWUAKL0yJ5R&yKTE``@we4_Dgb5vOal0a!vB` zCa zZ{J|wWZ!DvWOQIrnIeT+tYTY9ZWlxb|UR`+PSn((=Ml7P5UzKD~G?s<|uNMIcgl! z9P=GZ97`R`9j`m;9qSx#IyO7DI`%mBIu1BoryS=U7af-zR~%nEzIEJk+;#lm_|5S+ z9i{Wr!_p(tqta#R?b5aBx^zRjDLpy8WA?`E&DndiKg>R!eJcBG_9xjFvOmkdk$p4! zcJ}w#KV|=%{cHAvoQRzCoRS=O&Z?ZooUJ+AbKcE4l=ETErJT=mzRCG6=T^?0oQFBT z=lq%TtYa>di*o~W`MJTl!rZ9b=v-N@CfAy4%eCjG<~njazqpnKneRKd G>;C~QV`8EJ diff --git a/SignUpApp/SignUpApp/Base.lproj/Main.storyboard b/SignUpApp/SignUpApp/Base.lproj/Main.storyboard index 2ea3773..84c15a5 100644 --- a/SignUpApp/SignUpApp/Base.lproj/Main.storyboard +++ b/SignUpApp/SignUpApp/Base.lproj/Main.storyboard @@ -8,107 +8,62 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - + + + + + + + + - + diff --git a/temp/temp.xcodeproj/project.pbxproj b/temp/temp.xcodeproj/project.pbxproj deleted file mode 100644 index 27de42a..0000000 --- a/temp/temp.xcodeproj/project.pbxproj +++ /dev/null @@ -1,344 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - A0A2C31C2612E1A300BBD554 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0A2C31B2612E1A300BBD554 /* AppDelegate.swift */; }; - A0A2C31E2612E1A300BBD554 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0A2C31D2612E1A300BBD554 /* SceneDelegate.swift */; }; - A0A2C3202612E1A300BBD554 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0A2C31F2612E1A300BBD554 /* ViewController.swift */; }; - A0A2C3232612E1A300BBD554 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A0A2C3212612E1A300BBD554 /* Main.storyboard */; }; - A0A2C3252612E1A300BBD554 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A0A2C3242612E1A300BBD554 /* Assets.xcassets */; }; - A0A2C3282612E1A300BBD554 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A0A2C3262612E1A300BBD554 /* LaunchScreen.storyboard */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - A0A2C3182612E1A300BBD554 /* temp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = temp.app; sourceTree = BUILT_PRODUCTS_DIR; }; - A0A2C31B2612E1A300BBD554 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - A0A2C31D2612E1A300BBD554 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; - A0A2C31F2612E1A300BBD554 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - A0A2C3222612E1A300BBD554 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - A0A2C3242612E1A300BBD554 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - A0A2C3272612E1A300BBD554 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - A0A2C3292612E1A300BBD554 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - A0A2C3152612E1A300BBD554 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - A0A2C30F2612E1A300BBD554 = { - isa = PBXGroup; - children = ( - A0A2C31A2612E1A300BBD554 /* temp */, - A0A2C3192612E1A300BBD554 /* Products */, - ); - sourceTree = ""; - }; - A0A2C3192612E1A300BBD554 /* Products */ = { - isa = PBXGroup; - children = ( - A0A2C3182612E1A300BBD554 /* temp.app */, - ); - name = Products; - sourceTree = ""; - }; - A0A2C31A2612E1A300BBD554 /* temp */ = { - isa = PBXGroup; - children = ( - A0A2C31B2612E1A300BBD554 /* AppDelegate.swift */, - A0A2C31D2612E1A300BBD554 /* SceneDelegate.swift */, - A0A2C31F2612E1A300BBD554 /* ViewController.swift */, - A0A2C3212612E1A300BBD554 /* Main.storyboard */, - A0A2C3242612E1A300BBD554 /* Assets.xcassets */, - A0A2C3262612E1A300BBD554 /* LaunchScreen.storyboard */, - A0A2C3292612E1A300BBD554 /* Info.plist */, - ); - path = temp; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - A0A2C3172612E1A300BBD554 /* temp */ = { - isa = PBXNativeTarget; - buildConfigurationList = A0A2C32C2612E1A300BBD554 /* Build configuration list for PBXNativeTarget "temp" */; - buildPhases = ( - A0A2C3142612E1A300BBD554 /* Sources */, - A0A2C3152612E1A300BBD554 /* Frameworks */, - A0A2C3162612E1A300BBD554 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = temp; - productName = temp; - productReference = A0A2C3182612E1A300BBD554 /* temp.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - A0A2C3102612E1A300BBD554 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1240; - LastUpgradeCheck = 1240; - TargetAttributes = { - A0A2C3172612E1A300BBD554 = { - CreatedOnToolsVersion = 12.4; - }; - }; - }; - buildConfigurationList = A0A2C3132612E1A300BBD554 /* Build configuration list for PBXProject "temp" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = A0A2C30F2612E1A300BBD554; - productRefGroup = A0A2C3192612E1A300BBD554 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - A0A2C3172612E1A300BBD554 /* temp */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - A0A2C3162612E1A300BBD554 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A0A2C3282612E1A300BBD554 /* LaunchScreen.storyboard in Resources */, - A0A2C3252612E1A300BBD554 /* Assets.xcassets in Resources */, - A0A2C3232612E1A300BBD554 /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - A0A2C3142612E1A300BBD554 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A0A2C3202612E1A300BBD554 /* ViewController.swift in Sources */, - A0A2C31C2612E1A300BBD554 /* AppDelegate.swift in Sources */, - A0A2C31E2612E1A300BBD554 /* SceneDelegate.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - A0A2C3212612E1A300BBD554 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - A0A2C3222612E1A300BBD554 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - A0A2C3262612E1A300BBD554 /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - A0A2C3272612E1A300BBD554 /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - A0A2C32A2612E1A300BBD554 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 14.4; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - A0A2C32B2612E1A300BBD554 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 14.4; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - A0A2C32D2612E1A300BBD554 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = temp/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = asd.temp; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - A0A2C32E2612E1A300BBD554 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = temp/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = asd.temp; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - A0A2C3132612E1A300BBD554 /* Build configuration list for PBXProject "temp" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A0A2C32A2612E1A300BBD554 /* Debug */, - A0A2C32B2612E1A300BBD554 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - A0A2C32C2612E1A300BBD554 /* Build configuration list for PBXNativeTarget "temp" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A0A2C32D2612E1A300BBD554 /* Debug */, - A0A2C32E2612E1A300BBD554 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = A0A2C3102612E1A300BBD554 /* Project object */; -} diff --git a/temp/temp.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/temp/temp.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/temp/temp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/temp/temp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/temp/temp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/temp/temp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/temp/temp.xcodeproj/project.xcworkspace/xcuserdata/junhojang.xcuserdatad/UserInterfaceState.xcuserstate b/temp/temp.xcodeproj/project.xcworkspace/xcuserdata/junhojang.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index bfd7d8097049be051d3bc1d019d26726a5fdaccb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5519 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 diff --git a/temp/temp.xcodeproj/xcuserdata/junhojang.xcuserdatad/xcschemes/xcschememanagement.plist b/temp/temp.xcodeproj/xcuserdata/junhojang.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index ae166aa..0000000 --- a/temp/temp.xcodeproj/xcuserdata/junhojang.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,14 +0,0 @@ - - - - - SchemeUserState - - temp.xcscheme_^#shared#^_ - - orderHint - 0 - - - - diff --git a/temp/temp/AppDelegate.swift b/temp/temp/AppDelegate.swift deleted file mode 100644 index 18b5b46..0000000 --- a/temp/temp/AppDelegate.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// AppDelegate.swift -// temp -// -// Created by Jun Ho JANG on 2021/03/30. -// - -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/temp/temp/Assets.xcassets/AccentColor.colorset/Contents.json b/temp/temp/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897..0000000 --- a/temp/temp/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/temp/temp/Assets.xcassets/AppIcon.appiconset/Contents.json b/temp/temp/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 9221b9b..0000000 --- a/temp/temp/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "20x20" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "20x20" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "29x29" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "29x29" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "40x40" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "40x40" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "60x60" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "60x60" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "20x20" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "20x20" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "29x29" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "29x29" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "40x40" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "40x40" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "76x76" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "76x76" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "83.5x83.5" - }, - { - "idiom" : "ios-marketing", - "scale" : "1x", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/temp/temp/Assets.xcassets/Contents.json b/temp/temp/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/temp/temp/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/temp/temp/Base.lproj/LaunchScreen.storyboard b/temp/temp/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index 865e932..0000000 --- a/temp/temp/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/temp/temp/Base.lproj/Main.storyboard b/temp/temp/Base.lproj/Main.storyboard deleted file mode 100644 index 25a7638..0000000 --- a/temp/temp/Base.lproj/Main.storyboard +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/temp/temp/Info.plist b/temp/temp/Info.plist deleted file mode 100644 index 5b531f7..0000000 --- a/temp/temp/Info.plist +++ /dev/null @@ -1,66 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UIApplicationSceneManifest - - UIApplicationSupportsMultipleScenes - - UISceneConfigurations - - UIWindowSceneSessionRoleApplication - - - UISceneConfigurationName - Default Configuration - UISceneDelegateClassName - $(PRODUCT_MODULE_NAME).SceneDelegate - UISceneStoryboardFile - Main - - - - - UIApplicationSupportsIndirectInputEvents - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/temp/temp/SceneDelegate.swift b/temp/temp/SceneDelegate.swift deleted file mode 100644 index 81ce373..0000000 --- a/temp/temp/SceneDelegate.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// SceneDelegate.swift -// temp -// -// Created by Jun Ho JANG on 2021/03/30. -// - -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/temp/temp/ViewController.swift b/temp/temp/ViewController.swift deleted file mode 100644 index 197d3e2..0000000 --- a/temp/temp/ViewController.swift +++ /dev/null @@ -1,19 +0,0 @@ -// -// ViewController.swift -// temp -// -// Created by Jun Ho JANG on 2021/03/30. -// - -import UIKit - -class ViewController: UIViewController { - - override func viewDidLoad() { - super.viewDidLoad() - // Do any additional setup after loading the view. - } - - -} - From d303f369cc6d5646d2128ab729d6cdd59b8c5a3d Mon Sep 17 00:00:00 2001 From: Jun Ho JANG Date: Tue, 6 Apr 2021 15:11:14 +0900 Subject: [PATCH 10/10] none --- .DS_Store | Bin 6148 -> 6148 bytes .../UserInterfaceState.xcuserstate | Bin 76466 -> 88287 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/.DS_Store b/.DS_Store index 41eda6f084c8050c7bc6193376e0b453398d872f..3d924b306265f2fa280c7b083e39c59714b5343d 100644 GIT binary patch delta 21 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 delta 35870 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