From 4761309e21d5c771021db4759fdd416fb54aaeea Mon Sep 17 00:00:00 2001 From: starpro123 Date: Mon, 6 Jun 2022 15:43:03 +0900 Subject: [PATCH] =?UTF-8?q?11=EC=9E=A5=20=EC=BD=94=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Policy/Policy.xcodeproj/project.pbxproj | 500 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 22886 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 88 +++ .../xcschemes/xcschememanagement.plist | 14 + .../Policy/Policy/AppDelegate.swift | 36 ++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 98 ++++ .../Policy/Assets.xcassets/Contents.json | 6 + .../Policy/Base.lproj/LaunchScreen.storyboard | 25 + .../Policy/Policy/Base.lproj/Main.storyboard | 24 + alibreo/We11_Example/Policy/Policy/Info.plist | 25 + .../Policy/Policy/SceneDelegate.swift | 52 ++ .../Policy/Policy/ViewController.swift | 18 + .../Policy/PolicyTest/Hapsung.swift | 86 +++ .../Policy/PolicyTest/Mixin.swift | 126 +++++ 17 files changed, 1124 insertions(+) create mode 100644 alibreo/We11_Example/Policy/Policy.xcodeproj/project.pbxproj create mode 100644 alibreo/We11_Example/Policy/Policy.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 alibreo/We11_Example/Policy/Policy.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 alibreo/We11_Example/Policy/Policy.xcodeproj/project.xcworkspace/xcuserdata/yunsangjin.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 alibreo/We11_Example/Policy/Policy.xcodeproj/xcuserdata/yunsangjin.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 alibreo/We11_Example/Policy/Policy.xcodeproj/xcuserdata/yunsangjin.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 alibreo/We11_Example/Policy/Policy/AppDelegate.swift create mode 100644 alibreo/We11_Example/Policy/Policy/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 alibreo/We11_Example/Policy/Policy/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 alibreo/We11_Example/Policy/Policy/Assets.xcassets/Contents.json create mode 100644 alibreo/We11_Example/Policy/Policy/Base.lproj/LaunchScreen.storyboard create mode 100644 alibreo/We11_Example/Policy/Policy/Base.lproj/Main.storyboard create mode 100644 alibreo/We11_Example/Policy/Policy/Info.plist create mode 100644 alibreo/We11_Example/Policy/Policy/SceneDelegate.swift create mode 100644 alibreo/We11_Example/Policy/Policy/ViewController.swift create mode 100644 alibreo/We11_Example/Policy/PolicyTest/Hapsung.swift create mode 100644 alibreo/We11_Example/Policy/PolicyTest/Mixin.swift diff --git a/alibreo/We11_Example/Policy/Policy.xcodeproj/project.pbxproj b/alibreo/We11_Example/Policy/Policy.xcodeproj/project.pbxproj new file mode 100644 index 0000000..991ee26 --- /dev/null +++ b/alibreo/We11_Example/Policy/Policy.xcodeproj/project.pbxproj @@ -0,0 +1,500 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + DDADA01C284B543D00F8C5AE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDADA01B284B543D00F8C5AE /* AppDelegate.swift */; }; + DDADA01E284B543D00F8C5AE /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDADA01D284B543D00F8C5AE /* SceneDelegate.swift */; }; + DDADA020284B543D00F8C5AE /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDADA01F284B543D00F8C5AE /* ViewController.swift */; }; + DDADA023284B543D00F8C5AE /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DDADA021284B543D00F8C5AE /* Main.storyboard */; }; + DDADA025284B543E00F8C5AE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DDADA024284B543E00F8C5AE /* Assets.xcassets */; }; + DDADA028284B543E00F8C5AE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DDADA026284B543E00F8C5AE /* LaunchScreen.storyboard */; }; + DDADA036284B549300F8C5AE /* Mixin.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDADA035284B549300F8C5AE /* Mixin.swift */; }; + DDADA03D284CA12700F8C5AE /* Hapsung.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDADA03C284CA12700F8C5AE /* Hapsung.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + DDADA037284B549300F8C5AE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = DDADA010284B543D00F8C5AE /* Project object */; + proxyType = 1; + remoteGlobalIDString = DDADA017284B543D00F8C5AE; + remoteInfo = Policy; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + DDADA018284B543D00F8C5AE /* Policy.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Policy.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DDADA01B284B543D00F8C5AE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + DDADA01D284B543D00F8C5AE /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + DDADA01F284B543D00F8C5AE /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + DDADA022284B543D00F8C5AE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + DDADA024284B543E00F8C5AE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + DDADA027284B543E00F8C5AE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + DDADA029284B543E00F8C5AE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + DDADA033284B549300F8C5AE /* PolicyTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PolicyTest.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + DDADA035284B549300F8C5AE /* Mixin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mixin.swift; sourceTree = ""; }; + DDADA03C284CA12700F8C5AE /* Hapsung.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Hapsung.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + DDADA015284B543D00F8C5AE /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DDADA030284B549300F8C5AE /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + DDADA00F284B543D00F8C5AE = { + isa = PBXGroup; + children = ( + DDADA01A284B543D00F8C5AE /* Policy */, + DDADA034284B549300F8C5AE /* PolicyTest */, + DDADA019284B543D00F8C5AE /* Products */, + ); + sourceTree = ""; + }; + DDADA019284B543D00F8C5AE /* Products */ = { + isa = PBXGroup; + children = ( + DDADA018284B543D00F8C5AE /* Policy.app */, + DDADA033284B549300F8C5AE /* PolicyTest.xctest */, + ); + name = Products; + sourceTree = ""; + }; + DDADA01A284B543D00F8C5AE /* Policy */ = { + isa = PBXGroup; + children = ( + DDADA01B284B543D00F8C5AE /* AppDelegate.swift */, + DDADA01D284B543D00F8C5AE /* SceneDelegate.swift */, + DDADA01F284B543D00F8C5AE /* ViewController.swift */, + DDADA021284B543D00F8C5AE /* Main.storyboard */, + DDADA024284B543E00F8C5AE /* Assets.xcassets */, + DDADA026284B543E00F8C5AE /* LaunchScreen.storyboard */, + DDADA029284B543E00F8C5AE /* Info.plist */, + ); + path = Policy; + sourceTree = ""; + }; + DDADA034284B549300F8C5AE /* PolicyTest */ = { + isa = PBXGroup; + children = ( + DDADA03C284CA12700F8C5AE /* Hapsung.swift */, + DDADA035284B549300F8C5AE /* Mixin.swift */, + ); + path = PolicyTest; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + DDADA017284B543D00F8C5AE /* Policy */ = { + isa = PBXNativeTarget; + buildConfigurationList = DDADA02C284B543E00F8C5AE /* Build configuration list for PBXNativeTarget "Policy" */; + buildPhases = ( + DDADA014284B543D00F8C5AE /* Sources */, + DDADA015284B543D00F8C5AE /* Frameworks */, + DDADA016284B543D00F8C5AE /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Policy; + productName = Policy; + productReference = DDADA018284B543D00F8C5AE /* Policy.app */; + productType = "com.apple.product-type.application"; + }; + DDADA032284B549300F8C5AE /* PolicyTest */ = { + isa = PBXNativeTarget; + buildConfigurationList = DDADA039284B549300F8C5AE /* Build configuration list for PBXNativeTarget "PolicyTest" */; + buildPhases = ( + DDADA02F284B549300F8C5AE /* Sources */, + DDADA030284B549300F8C5AE /* Frameworks */, + DDADA031284B549300F8C5AE /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + DDADA038284B549300F8C5AE /* PBXTargetDependency */, + ); + name = PolicyTest; + productName = PolicyTest; + productReference = DDADA033284B549300F8C5AE /* PolicyTest.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + DDADA010284B543D00F8C5AE /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1310; + LastUpgradeCheck = 1310; + TargetAttributes = { + DDADA017284B543D00F8C5AE = { + CreatedOnToolsVersion = 13.1; + }; + DDADA032284B549300F8C5AE = { + CreatedOnToolsVersion = 13.1; + TestTargetID = DDADA017284B543D00F8C5AE; + }; + }; + }; + buildConfigurationList = DDADA013284B543D00F8C5AE /* Build configuration list for PBXProject "Policy" */; + compatibilityVersion = "Xcode 13.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = DDADA00F284B543D00F8C5AE; + productRefGroup = DDADA019284B543D00F8C5AE /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + DDADA017284B543D00F8C5AE /* Policy */, + DDADA032284B549300F8C5AE /* PolicyTest */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + DDADA016284B543D00F8C5AE /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DDADA028284B543E00F8C5AE /* LaunchScreen.storyboard in Resources */, + DDADA025284B543E00F8C5AE /* Assets.xcassets in Resources */, + DDADA023284B543D00F8C5AE /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DDADA031284B549300F8C5AE /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + DDADA014284B543D00F8C5AE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DDADA020284B543D00F8C5AE /* ViewController.swift in Sources */, + DDADA01C284B543D00F8C5AE /* AppDelegate.swift in Sources */, + DDADA01E284B543D00F8C5AE /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DDADA02F284B549300F8C5AE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DDADA03D284CA12700F8C5AE /* Hapsung.swift in Sources */, + DDADA036284B549300F8C5AE /* Mixin.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + DDADA038284B549300F8C5AE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = DDADA017284B543D00F8C5AE /* Policy */; + targetProxy = DDADA037284B549300F8C5AE /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + DDADA021284B543D00F8C5AE /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + DDADA022284B543D00F8C5AE /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + DDADA026284B543E00F8C5AE /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + DDADA027284B543E00F8C5AE /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + DDADA02A284B543E00F8C5AE /* 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++17"; + 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 = 15.0; + 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; + }; + DDADA02B284B543E00F8C5AE /* 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++17"; + 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 = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + DDADA02D284B543E00F8C5AE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 6785P7H4GT; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Policy/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = alibreo3754.Policy; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + DDADA02E284B543E00F8C5AE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 6785P7H4GT; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Policy/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = alibreo3754.Policy; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + DDADA03A284B549300F8C5AE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 6785P7H4GT; + GENERATE_INFOPLIST_FILE = YES; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = alibreo3754.PolicyTest; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Policy.app/Policy"; + }; + name = Debug; + }; + DDADA03B284B549300F8C5AE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 6785P7H4GT; + GENERATE_INFOPLIST_FILE = YES; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = alibreo3754.PolicyTest; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Policy.app/Policy"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + DDADA013284B543D00F8C5AE /* Build configuration list for PBXProject "Policy" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DDADA02A284B543E00F8C5AE /* Debug */, + DDADA02B284B543E00F8C5AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + DDADA02C284B543E00F8C5AE /* Build configuration list for PBXNativeTarget "Policy" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DDADA02D284B543E00F8C5AE /* Debug */, + DDADA02E284B543E00F8C5AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + DDADA039284B549300F8C5AE /* Build configuration list for PBXNativeTarget "PolicyTest" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DDADA03A284B549300F8C5AE /* Debug */, + DDADA03B284B549300F8C5AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = DDADA010284B543D00F8C5AE /* Project object */; +} diff --git a/alibreo/We11_Example/Policy/Policy.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/alibreo/We11_Example/Policy/Policy.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/alibreo/We11_Example/Policy/Policy.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/alibreo/We11_Example/Policy/Policy.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/alibreo/We11_Example/Policy/Policy.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/alibreo/We11_Example/Policy/Policy.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/alibreo/We11_Example/Policy/Policy.xcodeproj/project.xcworkspace/xcuserdata/yunsangjin.xcuserdatad/UserInterfaceState.xcuserstate b/alibreo/We11_Example/Policy/Policy.xcodeproj/project.xcworkspace/xcuserdata/yunsangjin.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..59507c99a4d6b74dd8008ec3171e2ac4c3cea0b2 GIT binary patch literal 22886 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 literal 0 HcmV?d00001 diff --git a/alibreo/We11_Example/Policy/Policy.xcodeproj/xcuserdata/yunsangjin.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/alibreo/We11_Example/Policy/Policy.xcodeproj/xcuserdata/yunsangjin.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..7967f90 --- /dev/null +++ b/alibreo/We11_Example/Policy/Policy.xcodeproj/xcuserdata/yunsangjin.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/alibreo/We11_Example/Policy/Policy.xcodeproj/xcuserdata/yunsangjin.xcuserdatad/xcschemes/xcschememanagement.plist b/alibreo/We11_Example/Policy/Policy.xcodeproj/xcuserdata/yunsangjin.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..a3489b6 --- /dev/null +++ b/alibreo/We11_Example/Policy/Policy.xcodeproj/xcuserdata/yunsangjin.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + Policy.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/alibreo/We11_Example/Policy/Policy/AppDelegate.swift b/alibreo/We11_Example/Policy/Policy/AppDelegate.swift new file mode 100644 index 0000000..49e8be9 --- /dev/null +++ b/alibreo/We11_Example/Policy/Policy/AppDelegate.swift @@ -0,0 +1,36 @@ +// +// AppDelegate.swift +// Policy +// +// Created by 윤상진 on 2022/06/04. +// + +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/alibreo/We11_Example/Policy/Policy/Assets.xcassets/AccentColor.colorset/Contents.json b/alibreo/We11_Example/Policy/Policy/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/alibreo/We11_Example/Policy/Policy/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/alibreo/We11_Example/Policy/Policy/Assets.xcassets/AppIcon.appiconset/Contents.json b/alibreo/We11_Example/Policy/Policy/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/alibreo/We11_Example/Policy/Policy/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/alibreo/We11_Example/Policy/Policy/Assets.xcassets/Contents.json b/alibreo/We11_Example/Policy/Policy/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/alibreo/We11_Example/Policy/Policy/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/alibreo/We11_Example/Policy/Policy/Base.lproj/LaunchScreen.storyboard b/alibreo/We11_Example/Policy/Policy/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/alibreo/We11_Example/Policy/Policy/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/alibreo/We11_Example/Policy/Policy/Base.lproj/Main.storyboard b/alibreo/We11_Example/Policy/Policy/Base.lproj/Main.storyboard new file mode 100644 index 0000000..25a7638 --- /dev/null +++ b/alibreo/We11_Example/Policy/Policy/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/alibreo/We11_Example/Policy/Policy/Info.plist b/alibreo/We11_Example/Policy/Policy/Info.plist new file mode 100644 index 0000000..dd3c9af --- /dev/null +++ b/alibreo/We11_Example/Policy/Policy/Info.plist @@ -0,0 +1,25 @@ + + + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + + diff --git a/alibreo/We11_Example/Policy/Policy/SceneDelegate.swift b/alibreo/We11_Example/Policy/Policy/SceneDelegate.swift new file mode 100644 index 0000000..db72b1a --- /dev/null +++ b/alibreo/We11_Example/Policy/Policy/SceneDelegate.swift @@ -0,0 +1,52 @@ +// +// SceneDelegate.swift +// Policy +// +// Created by 윤상진 on 2022/06/04. +// + +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/alibreo/We11_Example/Policy/Policy/ViewController.swift b/alibreo/We11_Example/Policy/Policy/ViewController.swift new file mode 100644 index 0000000..7e58022 --- /dev/null +++ b/alibreo/We11_Example/Policy/Policy/ViewController.swift @@ -0,0 +1,18 @@ +// +// ViewController.swift +// Policy +// +// Created by 윤상진 on 2022/06/04. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + } + + +} + diff --git a/alibreo/We11_Example/Policy/PolicyTest/Hapsung.swift b/alibreo/We11_Example/Policy/PolicyTest/Hapsung.swift new file mode 100644 index 0000000..38b9f83 --- /dev/null +++ b/alibreo/We11_Example/Policy/PolicyTest/Hapsung.swift @@ -0,0 +1,86 @@ +// +// Hapsung.swift +// PolicyTest +// +// Created by 윤상진 on 2022/06/05. +// + +import XCTest + +fileprivate class Phone { + let ratePolicy: RatePolicy + let calls = [Call]() + + init(ratePolicy: RatePolicy) { + self.ratePolicy = ratePolicy + } +} + +fileprivate protocol RatePolicy { + func calculateFee(phone: Phone) -> Money +} + +fileprivate protocol BasicRatePolicy: RatePolicy { + func calculateCallFee(_ call: Call) -> Money +} + +fileprivate extension BasicRatePolicy { + func calculateFee(phone: Phone) -> Money { + var result = Money.Zero + + for call in phone.calls { + result = result.plus(calculateCallFee(call)) + } + + return result + } +} + +fileprivate class NightlyDiscountPolicy: BasicRatePolicy { + init(nightlyAmount: Money, regularAmount: Money, seconds: TimeInterval) { + self.nightlyAmount = nightlyAmount + self.regularAmount = regularAmount + self.seconds = seconds + } + + func calculateCallFee(_ call: Call) -> Money { + // 실제 구현 + return Money.Zero + } + + static let LATE_NIGHT_HOUR = 22 + + let nightlyAmount: Money + let regularAmount: Money + let seconds: TimeInterval +} + +fileprivate protocol AdditionalRatePolicy: RatePolicy { + var next: RatePolicy { get } + func afterCalculated(_: Money) -> Money +} + +fileprivate extension AdditionalRatePolicy { + func calculateFee(phone: Phone) -> Money { + let fee = next.calculateFee(phone: phone) + return afterCalculated(fee) + } +} + +fileprivate class TaxablePolicy: AdditionalRatePolicy { + var next: RatePolicy + + init(next: RatePolicy) { + self.next = next + } + + func afterCalculated(_ fee: Money) -> Money { + // fee에다가 세금처리 + let tax = 1000000000000 + return fee.plus(Money(count: tax)) + } +} + +class Hapsung: XCTestCase { + +} diff --git a/alibreo/We11_Example/Policy/PolicyTest/Mixin.swift b/alibreo/We11_Example/Policy/PolicyTest/Mixin.swift new file mode 100644 index 0000000..17e8cbf --- /dev/null +++ b/alibreo/We11_Example/Policy/PolicyTest/Mixin.swift @@ -0,0 +1,126 @@ +// +// PolicyTest.swift +// PolicyTest +// +// Created by 윤상진 on 2022/06/04. +// + +import XCTest + +struct Call { + let from = Date() + let duration: TimeInterval = 0 +} + +struct Money: Equatable { + static let Zero = Money(count: 0) + let count: Int + + func plus(_ rhs: Money) -> Money { + return Money(count: self.count + rhs.count) + } +} + +fileprivate class Phone { + let ratePolicy: RatePolicy + var calls = [Call]() + + init(ratePolicy: RatePolicy) { + self.ratePolicy = ratePolicy + } + + func calculateFee() -> Money { + ratePolicy.calculateFee(phone: self) + } +} + +fileprivate protocol RatePolicy { + func calculateFee(phone: Phone) -> Money +} + +fileprivate protocol BasicRatePolicy: RatePolicy { + func calculateCallFee(_ call: Call) -> Money +} + +fileprivate extension BasicRatePolicy { + func calculateFee(phone: Phone) -> Money { + var result = Money.Zero + + for call in phone.calls { + result = result.plus(calculateCallFee(call)) + } + + return result + } +} + + +fileprivate extension BasicRatePolicy where Self: NightlyDiscountPolicy { + func calculateFee(phone: Phone) -> Money { + return Money.Zero + } +} + +fileprivate class NightlyDiscountPolicy: BasicRatePolicy { + init(nightlyAmount: Money, regularAmount: Money, seconds: TimeInterval) { + self.nightlyAmount = nightlyAmount + self.regularAmount = regularAmount + self.seconds = seconds + } + + func calculateCallFee(_ call: Call) -> Money { + // 실제 구현 + return Money.init(count: 1) + } + + static let LATE_NIGHT_HOUR = 22 + + let nightlyAmount: Money + let regularAmount: Money + let seconds: TimeInterval +} + +fileprivate protocol AdditionalRatePolicy: RatePolicy { + var next: RatePolicy { get } + func afterCalculated(_: Money) -> Money +} + +fileprivate extension AdditionalRatePolicy { + func calculateFee(phone: Phone) -> Money { + let fee = next.calculateFee(phone: phone) + return afterCalculated(fee) + } +} + +fileprivate protocol TaxablePolicy: BasicRatePolicy { + var tax: Money { get } +} + +fileprivate extension TaxablePolicy where Self: NightlyDiscountPolicy { + func calculateFee(phone: Phone) -> Money { + + let fee = (self as BasicRatePolicy).calculateFee(phone: phone) + return fee.plus(fee.plus(tax)) + } +} + +fileprivate class TaxableRateDiscountablePolicy: NightlyDiscountPolicy, TaxablePolicy { + internal init(tax: Money) { + self.tax = tax + super.init(nightlyAmount: Money(count: 10), regularAmount: Money(count: 10), seconds: .infinity) + } + + var tax: Money + + +} + +class Mixin: XCTestCase { + func testMixins() { + let taxPolicy = TaxableRateDiscountablePolicy(tax: Money(count: 100)) + var phone = Phone(ratePolicy: taxPolicy) + phone.calls = [Call()] + XCTAssertEqual(phone.calculateFee(), Money(count: 2)) + + } +}