From 673cb5a92747c07610607d6df33edc78b5c36d5e Mon Sep 17 00:00:00 2001 From: hyun99999 Date: Sat, 4 Feb 2023 23:34:57 +0900 Subject: [PATCH 01/19] =?UTF-8?q?chore:=20Widget=20Extension=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20(#364)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NADA-iOS-forRelease.xcodeproj/project.pbxproj | 195 +++++++++++++++++- .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 13 ++ Widgets/Assets.xcassets/Contents.json | 6 + .../WidgetBackground.colorset/Contents.json | 11 + Widgets/Info.plist | 11 + Widgets/Widgets.intentdefinition | 59 ++++++ Widgets/Widgets.swift | 68 ++++++ Widgets/WidgetsBundle.swift | 17 ++ Widgets/WidgetsLiveActivity.swift | 77 +++++++ 10 files changed, 467 insertions(+), 1 deletion(-) create mode 100644 Widgets/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 Widgets/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Widgets/Assets.xcassets/Contents.json create mode 100644 Widgets/Assets.xcassets/WidgetBackground.colorset/Contents.json create mode 100644 Widgets/Info.plist create mode 100644 Widgets/Widgets.intentdefinition create mode 100644 Widgets/Widgets.swift create mode 100644 Widgets/WidgetsBundle.swift create mode 100644 Widgets/WidgetsLiveActivity.swift diff --git a/NADA-iOS-forRelease.xcodeproj/project.pbxproj b/NADA-iOS-forRelease.xcodeproj/project.pbxproj index 52f97224..e594d870 100644 --- a/NADA-iOS-forRelease.xcodeproj/project.pbxproj +++ b/NADA-iOS-forRelease.xcodeproj/project.pbxproj @@ -105,6 +105,15 @@ F83206AA26F61E3700D61711 /* FrontCardCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F83206A826F61E3700D61711 /* FrontCardCell.swift */; }; F83206AB26F61E3700D61711 /* FrontCardCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F83206A926F61E3700D61711 /* FrontCardCell.xib */; }; F835EF6F29800F51001ABAAF /* UIApplication+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F835EF6E29800F51001ABAAF /* UIApplication+Extension.swift */; }; + F838B660298E5C5300D84340 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F838B65F298E5C5300D84340 /* WidgetKit.framework */; }; + F838B662298E5C5300D84340 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F838B661298E5C5300D84340 /* SwiftUI.framework */; }; + F838B665298E5C5300D84340 /* WidgetsBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = F838B664298E5C5300D84340 /* WidgetsBundle.swift */; }; + F838B667298E5C5300D84340 /* WidgetsLiveActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = F838B666298E5C5300D84340 /* WidgetsLiveActivity.swift */; }; + F838B669298E5C5300D84340 /* Widgets.swift in Sources */ = {isa = PBXBuildFile; fileRef = F838B668298E5C5300D84340 /* Widgets.swift */; }; + F838B66C298E5C5400D84340 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F838B66B298E5C5400D84340 /* Assets.xcassets */; }; + F838B66E298E5C5400D84340 /* Widgets.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = F838B66A298E5C5300D84340 /* Widgets.intentdefinition */; }; + F838B66F298E5C5400D84340 /* Widgets.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = F838B66A298E5C5300D84340 /* Widgets.intentdefinition */; }; + F838B672298E5C5400D84340 /* WidgetsExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = F838B65E298E5C5300D84340 /* WidgetsExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; F84BAF9D26FDB417004CA335 /* CardCreationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F84BAF9C26FDB417004CA335 /* CardCreationViewController.swift */; }; F84BAFAD26FDB543004CA335 /* FrontCardCreationCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F84BAFAB26FDB543004CA335 /* FrontCardCreationCollectionViewCell.swift */; }; F84BAFAE26FDB543004CA335 /* FrontCardCreationCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F84BAFAC26FDB543004CA335 /* FrontCardCreationCollectionViewCell.xib */; }; @@ -153,6 +162,30 @@ F8FC43BF26C025180033E151 /* .swiftlint.yml in Resources */ = {isa = PBXBuildFile; fileRef = F8FC43BE26C025180033E151 /* .swiftlint.yml */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + F838B670298E5C5400D84340 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F8FC437A26C01CDD0033E151 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F838B65D298E5C5300D84340; + remoteInfo = WidgetsExtension; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + F838B673298E5C5400D84340 /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + F838B672298E5C5400D84340 /* WidgetsExtension.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ 1E770167DDA25A2CE063AA5C /* Pods-NADA-iOS-forRelease.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NADA-iOS-forRelease.release.xcconfig"; path = "Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease.release.xcconfig"; sourceTree = ""; }; 39007F2B27080D8200E7143E /* UIViewController+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Extension.swift"; sourceTree = ""; }; @@ -255,6 +288,15 @@ F83206A826F61E3700D61711 /* FrontCardCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrontCardCell.swift; sourceTree = ""; }; F83206A926F61E3700D61711 /* FrontCardCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FrontCardCell.xib; sourceTree = ""; }; F835EF6E29800F51001ABAAF /* UIApplication+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIApplication+Extension.swift"; sourceTree = ""; }; + F838B65E298E5C5300D84340 /* WidgetsExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = WidgetsExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + F838B65F298E5C5300D84340 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; }; + F838B661298E5C5300D84340 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; }; + F838B664298E5C5300D84340 /* WidgetsBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetsBundle.swift; sourceTree = ""; }; + F838B666298E5C5300D84340 /* WidgetsLiveActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetsLiveActivity.swift; sourceTree = ""; }; + F838B668298E5C5300D84340 /* Widgets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Widgets.swift; sourceTree = ""; }; + F838B66A298E5C5300D84340 /* Widgets.intentdefinition */ = {isa = PBXFileReference; lastKnownFileType = file.intentdefinition; path = Widgets.intentdefinition; sourceTree = ""; }; + F838B66B298E5C5400D84340 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + F838B66D298E5C5400D84340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; F84BAF9C26FDB417004CA335 /* CardCreationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardCreationViewController.swift; sourceTree = ""; }; F84BAFAB26FDB543004CA335 /* FrontCardCreationCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrontCardCreationCollectionViewCell.swift; sourceTree = ""; }; F84BAFAC26FDB543004CA335 /* FrontCardCreationCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FrontCardCreationCollectionViewCell.xib; sourceTree = ""; }; @@ -306,6 +348,15 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + F838B65B298E5C5300D84340 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F838B662298E5C5300D84340 /* SwiftUI.framework in Frameworks */, + F838B660298E5C5300D84340 /* WidgetKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; F8FC437F26C01CDD0033E151 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -543,6 +594,8 @@ isa = PBXGroup; children = ( 4A2183AE0E469153221624A0 /* Pods_NADA_iOS_forRelease.framework */, + F838B65F298E5C5300D84340 /* WidgetKit.framework */, + F838B661298E5C5300D84340 /* SwiftUI.framework */, ); name = Frameworks; sourceTree = ""; @@ -622,6 +675,19 @@ path = CardCell; sourceTree = ""; }; + F838B663298E5C5300D84340 /* Widgets */ = { + isa = PBXGroup; + children = ( + F838B664298E5C5300D84340 /* WidgetsBundle.swift */, + F838B666298E5C5300D84340 /* WidgetsLiveActivity.swift */, + F838B668298E5C5300D84340 /* Widgets.swift */, + F838B66A298E5C5300D84340 /* Widgets.intentdefinition */, + F838B66B298E5C5400D84340 /* Assets.xcassets */, + F838B66D298E5C5400D84340 /* Info.plist */, + ); + path = Widgets; + sourceTree = ""; + }; F84BAF9E26FDB425004CA335 /* CardCreation */ = { isa = PBXGroup; children = ( @@ -788,6 +854,7 @@ children = ( F8FC43BE26C025180033E151 /* .swiftlint.yml */, F8FC438426C01CDD0033E151 /* NADA-iOS-forRelease */, + F838B663298E5C5300D84340 /* Widgets */, F8FC438326C01CDD0033E151 /* Products */, 186051B2C99DBAECC539DAC9 /* Pods */, 4D28D444572353D68574D2B0 /* Frameworks */, @@ -798,6 +865,7 @@ isa = PBXGroup; children = ( F8FC438226C01CDD0033E151 /* NADA-iOS-forRelease.app */, + F838B65E298E5C5300D84340 /* WidgetsExtension.appex */, ); name = Products; sourceTree = ""; @@ -971,6 +1039,23 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + F838B65D298E5C5300D84340 /* WidgetsExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = F838B676298E5C5400D84340 /* Build configuration list for PBXNativeTarget "WidgetsExtension" */; + buildPhases = ( + F838B65A298E5C5300D84340 /* Sources */, + F838B65B298E5C5300D84340 /* Frameworks */, + F838B65C298E5C5300D84340 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = WidgetsExtension; + productName = WidgetsExtension; + productReference = F838B65E298E5C5300D84340 /* WidgetsExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; F8FC438126C01CDD0033E151 /* NADA-iOS-forRelease */ = { isa = PBXNativeTarget; buildConfigurationList = F8FC439626C01CDE0033E151 /* Build configuration list for PBXNativeTarget "NADA-iOS-forRelease" */; @@ -981,10 +1066,12 @@ F8FC438026C01CDD0033E151 /* Resources */, AF97E239CC02D3189BC80412 /* [CP] Embed Pods Frameworks */, F8FC43BD26C0244D0033E151 /* ShellScript */, + F838B673298E5C5400D84340 /* Embed Foundation Extensions */, ); buildRules = ( ); dependencies = ( + F838B671298E5C5400D84340 /* PBXTargetDependency */, ); name = "NADA-iOS-forRelease"; productName = "NADA-iOS-forRelease"; @@ -997,9 +1084,12 @@ F8FC437A26C01CDD0033E151 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1250; + LastSwiftUpdateCheck = 1420; LastUpgradeCheck = 1250; TargetAttributes = { + F838B65D298E5C5300D84340 = { + CreatedOnToolsVersion = 14.2; + }; F8FC438126C01CDD0033E151 = { CreatedOnToolsVersion = 12.5.1; }; @@ -1019,11 +1109,20 @@ projectRoot = ""; targets = ( F8FC438126C01CDD0033E151 /* NADA-iOS-forRelease */, + F838B65D298E5C5300D84340 /* WidgetsExtension */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + F838B65C298E5C5300D84340 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F838B66C298E5C5400D84340 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; F8FC438026C01CDD0033E151 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -1138,11 +1237,23 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + F838B65A298E5C5300D84340 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F838B66E298E5C5400D84340 /* Widgets.intentdefinition in Sources */, + F838B667298E5C5300D84340 /* WidgetsLiveActivity.swift in Sources */, + F838B669298E5C5300D84340 /* Widgets.swift in Sources */, + F838B665298E5C5300D84340 /* WidgetsBundle.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; F8FC437E26C01CDD0033E151 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( F87122762733046300A24E74 /* Card.swift in Sources */, + F838B66F298E5C5400D84340 /* Widgets.intentdefinition in Sources */, 39317D2227646F8E00D87166 /* GroupNameEditBottomSheetViewController.swift in Sources */, F84BAF9D26FDB417004CA335 /* CardCreationViewController.swift in Sources */, F8C83FCB272FA32C0009DF0D /* GroupService.swift in Sources */, @@ -1245,6 +1356,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + F838B671298E5C5400D84340 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = F838B65D298E5C5300D84340 /* WidgetsExtension */; + targetProxy = F838B670298E5C5400D84340 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ F8FC439026C01CDE0033E151 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; @@ -1257,6 +1376,69 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + F838B674298E5C5400D84340 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = ""; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Widgets/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = Widgets; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "YJC.NADA-iOS-forRelease.Widgets"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + F838B675298E5C5400D84340 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CODE_SIGN_IDENTITY = "iPhone Distribution"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = ""; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Widgets/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = Widgets; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "YJC.NADA-iOS-forRelease.Widgets"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; F8FC439426C01CDE0033E151 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1377,6 +1559,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 7F4EE1D042EC783FA8528743 /* Pods-NADA-iOS-forRelease.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = "NADA-iOS-forRelease/NADA-iOS-forRelease.entitlements"; @@ -1405,6 +1588,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 1E770167DDA25A2CE063AA5C /* Pods-NADA-iOS-forRelease.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = "NADA-iOS-forRelease/NADA-iOS-forRelease.entitlements"; @@ -1432,6 +1616,15 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + F838B676298E5C5400D84340 /* Build configuration list for PBXNativeTarget "WidgetsExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F838B674298E5C5400D84340 /* Debug */, + F838B675298E5C5400D84340 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; F8FC437D26C01CDD0033E151 /* Build configuration list for PBXProject "NADA-iOS-forRelease" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/Widgets/Assets.xcassets/AccentColor.colorset/Contents.json b/Widgets/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 00000000..eb878970 --- /dev/null +++ b/Widgets/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Widgets/Assets.xcassets/AppIcon.appiconset/Contents.json b/Widgets/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..13613e3e --- /dev/null +++ b/Widgets/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Widgets/Assets.xcassets/Contents.json b/Widgets/Assets.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/Widgets/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Widgets/Assets.xcassets/WidgetBackground.colorset/Contents.json b/Widgets/Assets.xcassets/WidgetBackground.colorset/Contents.json new file mode 100644 index 00000000..eb878970 --- /dev/null +++ b/Widgets/Assets.xcassets/WidgetBackground.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Widgets/Info.plist b/Widgets/Info.plist new file mode 100644 index 00000000..0f118fb7 --- /dev/null +++ b/Widgets/Info.plist @@ -0,0 +1,11 @@ + + + + + NSExtension + + NSExtensionPointIdentifier + com.apple.widgetkit-extension + + + diff --git a/Widgets/Widgets.intentdefinition b/Widgets/Widgets.intentdefinition new file mode 100644 index 00000000..bdb40455 --- /dev/null +++ b/Widgets/Widgets.intentdefinition @@ -0,0 +1,59 @@ + + + + + INEnums + + INIntentDefinitionModelVersion + 1.2 + INIntentDefinitionNamespace + 88xZPY + INIntentDefinitionSystemVersion + 20A294 + INIntentDefinitionToolsBuildVersion + 12A6144 + INIntentDefinitionToolsVersion + 12.0 + INIntents + + + INIntentCategory + information + INIntentDescriptionID + tVvJ9c + INIntentEligibleForWidgets + + INIntentIneligibleForSuggestions + + INIntentName + Configuration + INIntentResponse + + INIntentResponseCodes + + + INIntentResponseCodeName + success + INIntentResponseCodeSuccess + + + + INIntentResponseCodeName + failure + + + + INIntentTitle + Configuration + INIntentTitleID + gpCwrM + INIntentType + Custom + INIntentVerb + View + + + INTypes + + + diff --git a/Widgets/Widgets.swift b/Widgets/Widgets.swift new file mode 100644 index 00000000..9c3fa935 --- /dev/null +++ b/Widgets/Widgets.swift @@ -0,0 +1,68 @@ +// +// Widgets.swift +// Widgets +// +// Created by kimhyungyu on 2023/02/04. +// + +import WidgetKit +import SwiftUI +import Intents + +struct Provider: IntentTimelineProvider { + func placeholder(in context: Context) -> SimpleEntry { + SimpleEntry(date: Date(), configuration: ConfigurationIntent()) + } + + func getSnapshot(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (SimpleEntry) -> ()) { + let entry = SimpleEntry(date: Date(), configuration: configuration) + completion(entry) + } + + func getTimeline(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (Timeline) -> ()) { + var entries: [SimpleEntry] = [] + + // Generate a timeline consisting of five entries an hour apart, starting from the current date. + let currentDate = Date() + for hourOffset in 0 ..< 5 { + let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)! + let entry = SimpleEntry(date: entryDate, configuration: configuration) + entries.append(entry) + } + + let timeline = Timeline(entries: entries, policy: .atEnd) + completion(timeline) + } +} + +struct SimpleEntry: TimelineEntry { + let date: Date + let configuration: ConfigurationIntent +} + +struct WidgetsEntryView : View { + var entry: Provider.Entry + + var body: some View { + Text(entry.date, style: .time) + } +} + +struct Widgets: Widget { + let kind: String = "Widgets" + + var body: some WidgetConfiguration { + IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: Provider()) { entry in + WidgetsEntryView(entry: entry) + } + .configurationDisplayName("My Widget") + .description("This is an example widget.") + } +} + +struct Widgets_Previews: PreviewProvider { + static var previews: some View { + WidgetsEntryView(entry: SimpleEntry(date: Date(), configuration: ConfigurationIntent())) + .previewContext(WidgetPreviewContext(family: .systemSmall)) + } +} diff --git a/Widgets/WidgetsBundle.swift b/Widgets/WidgetsBundle.swift new file mode 100644 index 00000000..d750f311 --- /dev/null +++ b/Widgets/WidgetsBundle.swift @@ -0,0 +1,17 @@ +// +// WidgetsBundle.swift +// Widgets +// +// Created by kimhyungyu on 2023/02/04. +// + +import WidgetKit +import SwiftUI + +@main +struct WidgetsBundle: WidgetBundle { + var body: some Widget { + Widgets() + WidgetsLiveActivity() + } +} diff --git a/Widgets/WidgetsLiveActivity.swift b/Widgets/WidgetsLiveActivity.swift new file mode 100644 index 00000000..a1535ec5 --- /dev/null +++ b/Widgets/WidgetsLiveActivity.swift @@ -0,0 +1,77 @@ +// +// WidgetsLiveActivity.swift +// Widgets +// +// Created by kimhyungyu on 2023/02/04. +// + +import ActivityKit +import WidgetKit +import SwiftUI + +struct WidgetsAttributes: ActivityAttributes { + public struct ContentState: Codable, Hashable { + // Dynamic stateful properties about your activity go here! + var value: Int + } + + // Fixed non-changing properties about your activity go here! + var name: String +} + +struct WidgetsLiveActivity: Widget { + var body: some WidgetConfiguration { + ActivityConfiguration(for: WidgetsAttributes.self) { context in + // Lock screen/banner UI goes here + VStack { + Text("Hello") + } + .activityBackgroundTint(Color.cyan) + .activitySystemActionForegroundColor(Color.black) + + } dynamicIsland: { context in + DynamicIsland { + // Expanded UI goes here. Compose the expanded UI through + // various regions, like leading/trailing/center/bottom + DynamicIslandExpandedRegion(.leading) { + Text("Leading") + } + DynamicIslandExpandedRegion(.trailing) { + Text("Trailing") + } + DynamicIslandExpandedRegion(.bottom) { + Text("Bottom") + // more content + } + } compactLeading: { + Text("L") + } compactTrailing: { + Text("T") + } minimal: { + Text("Min") + } + .widgetURL(URL(string: "http://www.apple.com")) + .keylineTint(Color.red) + } + } +} + +struct WidgetsLiveActivity_Previews: PreviewProvider { + static let attributes = WidgetsAttributes(name: "Me") + static let contentState = WidgetsAttributes.ContentState(value: 3) + + static var previews: some View { + attributes + .previewContext(contentState, viewKind: .dynamicIsland(.compact)) + .previewDisplayName("Island Compact") + attributes + .previewContext(contentState, viewKind: .dynamicIsland(.expanded)) + .previewDisplayName("Island Expanded") + attributes + .previewContext(contentState, viewKind: .dynamicIsland(.minimal)) + .previewDisplayName("Minimal") + attributes + .previewContext(contentState, viewKind: .content) + .previewDisplayName("Notification") + } +} From e863c20ef44f8680785dddcae9eae63856fd0c8a Mon Sep 17 00:00:00 2001 From: hyun99999 Date: Sat, 4 Feb 2023 23:47:43 +0900 Subject: [PATCH 02/19] =?UTF-8?q?add:=20=EC=9C=84=EC=A0=AF=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=20=EC=97=90=EC=85=8B=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?(#364)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AccentColor.colorset/Contents.json | 11 +++++++++ .../AppIcon.appiconset/Contents.json | 13 ++++++++++ .../Resource/Assets.xcassets/Contents.json | 6 +++++ .../WidgetBackground.colorset/Contents.json | 11 +++++++++ .../logoNada.imageset/Contents.json | 23 ++++++++++++++++++ .../logoNada.imageset/logoNada.png | Bin 0 -> 284 bytes .../logoNada.imageset/logoNada@2x.png | Bin 0 -> 382 bytes .../logoNada.imageset/logoNada@3x.png | Bin 0 -> 467 bytes .../widgetLogoWhite.imageset/Contents.json | 23 ++++++++++++++++++ .../widgetLogoWhite.png | Bin 0 -> 623 bytes .../widgetLogoWhite@2x.png | Bin 0 -> 1056 bytes .../widgetLogoWhite@3x.png | Bin 0 -> 1542 bytes .../widgetQr.imageset/Contents.json | 23 ++++++++++++++++++ .../widgetQr.imageset/widgetQr.png | Bin 0 -> 1493 bytes .../widgetQr.imageset/widgetQr@2x.png | Bin 0 -> 3388 bytes .../widgetQr.imageset/widgetQr@3x.png | Bin 0 -> 5304 bytes .../Contents.json | 23 ++++++++++++++++++ .../widgetQrLockscreenWhite.png | Bin 0 -> 1101 bytes .../widgetQrLockscreenWhite@2x.png | Bin 0 -> 1891 bytes .../widgetQrLockscreenWhite@3x.png | Bin 0 -> 2947 bytes 20 files changed, 133 insertions(+) create mode 100644 Widgets/Resource/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 Widgets/Resource/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Widgets/Resource/Assets.xcassets/Contents.json create mode 100644 Widgets/Resource/Assets.xcassets/WidgetBackground.colorset/Contents.json create mode 100644 Widgets/Resource/Assets.xcassets/logoNada.imageset/Contents.json create mode 100644 Widgets/Resource/Assets.xcassets/logoNada.imageset/logoNada.png create mode 100644 Widgets/Resource/Assets.xcassets/logoNada.imageset/logoNada@2x.png create mode 100644 Widgets/Resource/Assets.xcassets/logoNada.imageset/logoNada@3x.png create mode 100644 Widgets/Resource/Assets.xcassets/widgetLogoWhite.imageset/Contents.json create mode 100644 Widgets/Resource/Assets.xcassets/widgetLogoWhite.imageset/widgetLogoWhite.png create mode 100644 Widgets/Resource/Assets.xcassets/widgetLogoWhite.imageset/widgetLogoWhite@2x.png create mode 100644 Widgets/Resource/Assets.xcassets/widgetLogoWhite.imageset/widgetLogoWhite@3x.png create mode 100644 Widgets/Resource/Assets.xcassets/widgetQr.imageset/Contents.json create mode 100644 Widgets/Resource/Assets.xcassets/widgetQr.imageset/widgetQr.png create mode 100644 Widgets/Resource/Assets.xcassets/widgetQr.imageset/widgetQr@2x.png create mode 100644 Widgets/Resource/Assets.xcassets/widgetQr.imageset/widgetQr@3x.png create mode 100644 Widgets/Resource/Assets.xcassets/widgetQrLockscreenWhite.imageset/Contents.json create mode 100644 Widgets/Resource/Assets.xcassets/widgetQrLockscreenWhite.imageset/widgetQrLockscreenWhite.png create mode 100644 Widgets/Resource/Assets.xcassets/widgetQrLockscreenWhite.imageset/widgetQrLockscreenWhite@2x.png create mode 100644 Widgets/Resource/Assets.xcassets/widgetQrLockscreenWhite.imageset/widgetQrLockscreenWhite@3x.png diff --git a/Widgets/Resource/Assets.xcassets/AccentColor.colorset/Contents.json b/Widgets/Resource/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 00000000..eb878970 --- /dev/null +++ b/Widgets/Resource/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Widgets/Resource/Assets.xcassets/AppIcon.appiconset/Contents.json b/Widgets/Resource/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..13613e3e --- /dev/null +++ b/Widgets/Resource/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Widgets/Resource/Assets.xcassets/Contents.json b/Widgets/Resource/Assets.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/Widgets/Resource/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Widgets/Resource/Assets.xcassets/WidgetBackground.colorset/Contents.json b/Widgets/Resource/Assets.xcassets/WidgetBackground.colorset/Contents.json new file mode 100644 index 00000000..eb878970 --- /dev/null +++ b/Widgets/Resource/Assets.xcassets/WidgetBackground.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Widgets/Resource/Assets.xcassets/logoNada.imageset/Contents.json b/Widgets/Resource/Assets.xcassets/logoNada.imageset/Contents.json new file mode 100644 index 00000000..5765c0cd --- /dev/null +++ b/Widgets/Resource/Assets.xcassets/logoNada.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "scale" : "1x", + "idiom" : "universal", + "filename" : "logoNada.png" + }, + { + "idiom" : "universal", + "filename" : "logoNada@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "logoNada@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Widgets/Resource/Assets.xcassets/logoNada.imageset/logoNada.png b/Widgets/Resource/Assets.xcassets/logoNada.imageset/logoNada.png new file mode 100644 index 0000000000000000000000000000000000000000..d802b2bc7c3fa4bb5a67fd43f388dc1195e0da93 GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~&3?$8t&j!lvI6;x#X;^) z4C~IxyaaMo0(?ST-3xra7o>qv`d1Jm{d+;iuY%Ms1*!iFGQJh00nyR}pWA@yxl4ll zf*D@b#W&1XFfb4}Z^~Hg4HT~Tba4!kxZHX{k*~pkr}bf4Q$nDM&*HRahBAqAM|pQJ znL8Bn9}0M1v|;KRQI#uyf6nR>s`c6WvS=+=b8;ZdmaYXK6c4&I&1_h}@nI)h--&MF z>nFAvN#0wNt0vB}xN`j$PWSSC;fJ(bK8N0R3c0yK+{>d?sLYA~(G~kFo4@CHH&;8_ U|1$cw4(JpHPgg&ebxsLQ0Hw`t00000 literal 0 HcmV?d00001 diff --git a/Widgets/Resource/Assets.xcassets/logoNada.imageset/logoNada@2x.png b/Widgets/Resource/Assets.xcassets/logoNada.imageset/logoNada@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2bdebe159cf271c09b56c57d05092e0e4882caba GIT binary patch literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_>3?$zOPHh5GEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaMo0(?ST-3xra7o>eJNcmNm@wFiBYe6cQoA#+7@f%1y6-dUI+jaoebC(49 z1v5NTh;J~cKO->TO=Y}xOPW9diN`*ob)GT(zB U)SdW55$IV4Pgg&ebxsLQ07vGVSO5S3 literal 0 HcmV?d00001 diff --git a/Widgets/Resource/Assets.xcassets/logoNada.imageset/logoNada@3x.png b/Widgets/Resource/Assets.xcassets/logoNada.imageset/logoNada@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..57adc73b7c3e38d81a48545b0f6e9e5d523d5741 GIT binary patch literal 467 zcmeAS@N?(olHy`uVBq!ia0vp^-XP4v3?xq_q~8QmEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaOO0(?ST-3xra6{P(rNc~oj`n@3SYe5o_3uXgF(gGb6e1IxBOM?7@85-o@ z-#3_-vY%o4y)>XvcAhSdAs)w{UbFT)Vj#kL;Wz`ERn)GICe{l}RgxGzZZfR3wsT67 z&TwPS-|q9q=gp7W?1Goor8=kkWE$)(&DQ77yJh`o^Ia>)BYR_aTVBb@J0ufx$VV?( z%{-Z{{0L9p!H{(cTH%RY;mKUv54q&^cE&Vw#&mPa9E|8o>bS4RQy(Ld7b~%LqeSeK zqbI~Fc-F_>2*14RL*jHjo^>%2@yZhWH4fg;mD%ul`7-gyoIUwjjYq4B^p)E$F6NhM z<6xU^aHsLyS&7eQUAi7#D9O8ir|0diXPOmn!saxzW~xO<%vriJBjGadN(;{B;5C+< z-scW=O62_N65g0mHJW~W z!M-z(?*wf;#Ct6M@QZ_eb6Qi+9WhEzW+?yb%>KXf50l~AzlV-+zj*)*UItHBKbLh* G2~7at+{L#5 literal 0 HcmV?d00001 diff --git a/Widgets/Resource/Assets.xcassets/widgetLogoWhite.imageset/Contents.json b/Widgets/Resource/Assets.xcassets/widgetLogoWhite.imageset/Contents.json new file mode 100644 index 00000000..3edb3130 --- /dev/null +++ b/Widgets/Resource/Assets.xcassets/widgetLogoWhite.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "scale" : "1x", + "filename" : "widgetLogoWhite.png", + "idiom" : "universal" + }, + { + "filename" : "widgetLogoWhite@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "widgetLogoWhite@3x.png", + "scale" : "3x", + "idiom" : "universal" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Widgets/Resource/Assets.xcassets/widgetLogoWhite.imageset/widgetLogoWhite.png b/Widgets/Resource/Assets.xcassets/widgetLogoWhite.imageset/widgetLogoWhite.png new file mode 100644 index 0000000000000000000000000000000000000000..dea0f8d7eb2e7cb549fa891886431f967be6dd07 GIT binary patch literal 623 zcmeAS@N?(olHy`uVBq!ia0vp^GeDSy8A!f*V=DxtSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skw2Ka=yx)=ET#|!#d&iw`|<|+yD3uZVgVEDdS;eK>MS)GPG(70=!E{-7? z_ugK&^*$URa_nR9>PIV@`260!3Q<|G<7Jv!yqNo37WLKc{0=J{vdQaQW# zr0;`ypLt}@)n_hmmtT5kwm{^xR1ms$%gmc!E+D%9ObzR;Tl1bJ*YrwON9BAp7hqc? zYQVF$$uUEe$8mKcLlp1j%P})%Jv+3;M1I+lp9ZpPIfF0GGT>dy8+_rGfu$~s@MR|h zOx^HZ>c*XG;9T-11RhK+OIc^J9I5p7;iXa}66Tg|_v#^gcSat--*G z?a&Juj>YB*Yw~rZu6>?;^l-)nZtKoJ^OxFgc<8F4`?67WqxmU=w{1&nI2Vd;c=1`s zLp$-KdhR9OZh7ttS~DJ$d08bkRd05UJ{a-g)y$HEN%GBkZn{yt-G9$tY11?Pqa)Q?<|>ZHkq|Ra!-KGEGD2qNwk$Pom2VnVwy|VlaK$%j01t3~QF9c5Ix)))=~l$9UV4#snAZ;CcQ5 l$tE?j6Twk1Ep=_~f3H>RKduOCYy!qRgQu&X%Q~loCIH?E8EXIl literal 0 HcmV?d00001 diff --git a/Widgets/Resource/Assets.xcassets/widgetLogoWhite.imageset/widgetLogoWhite@2x.png b/Widgets/Resource/Assets.xcassets/widgetLogoWhite.imageset/widgetLogoWhite@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..61d256366c76bbcc6e27bdc3d839ea5ac388df0c GIT binary patch literal 1056 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 a;go?kxcceNR}MCciYY~Ffgz1 zba4#Hxc7GE`D|fFk>lI#uPxi!uCXx8KwzViMx(;DZS4+=*%zt`yzxBfEXc~=xO zV@*?qz`~#_-K`3`9SR*^9=LWqzvOJT^7gHB|C7qhZ_4MJS?7Oio%gKz&fK3VMxUSk zzIP^T)+7kHv{9?LbLXw@s^~X+YW8#_)+X^VC%@S=W9yL(24#UqE`6?;5h-{e&)CMt zV#^+$HInD0l8p?uiE&F$X%0c)85d#Zi9>@2|DymEO2v)7>XFYBKe=bfXXb ze82ILb*Ww3nTQ)%yN@P5nJs)KhU2f-w!2rlT5l%nyX@QedzR|qdV`ehqKB?komb1= z_g$`MQNqg`8FibkRvJu@S@!#&>DO*9>EzAAaeMrhW^PC{TfcPM-nrJ{%MY+cuC|T* zl{Wp_q61~tlb`mkb!*7AXnFnI=7tTUm=U+S6z7Iej@9bzybjYmBN`Gp7O#0G(DK)t z<+A;)W1smBeG}Nwp354my>(_j|Dx>Yj89GO=4l6(E;0Jq$2?6jCvIDlrS;=7pZ3cu z7t0r|u-^XX%?f8R{2#L15AXDxc&fN}kK~)5J^elVe^kcv=g(_1V@l*TdBY?A zcDF#7>)|^~H-GwPcc)fM(@BfYz2L;hkOJ*)%V2%>w^tBz2DC^G;oG?i!d{7 zoEY6`aPyLmfq(US4K@~^6Ki}#CQA#LC~kf-ZSlRX6Ne6|UHP+y{ZqA{Seek7%dKk* z*Jo&-I20sknew1ch`Gz==+!+=;<*m@7AC1$y?Gz^RV=t>#RsN6%iq73_!KS}<7U;R zqg1d#F>&3LhF-4CJ6LjL4(TXc_SjEZ&beXJ3mJ9h=Cs^U4ugsbb&e4X0i34OO}TV3 zoSrROI5DAaYL2di?dc4aHQ7$rVr-YG9gj;8vu@vg!=-m`RP4v~;?>gy4n4X3Vp-#I zd6(-C#C}=*+WKR1o94ME;Rf?+qGDF2Hi!S1d`SDx53gL8caNR;>a9c$XZ;XSZ|T%} zy01>_)ob@P4=%WD$Sh>2J$Ptd@}WZM@1C2MXhMPP>VM42XD+`z!mITZn3)+oUHx3v IIVCg!0AP*@jQ{`u literal 0 HcmV?d00001 diff --git a/Widgets/Resource/Assets.xcassets/widgetQrLockscreenWhite.imageset/widgetQrLockscreenWhite@2x.png b/Widgets/Resource/Assets.xcassets/widgetQrLockscreenWhite.imageset/widgetQrLockscreenWhite@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8ebf69e4ddd1175dc55f98a189922cf944c5c409 GIT binary patch literal 1891 zcmZ`)dpOezAKwf$GxH)_Y(p=}EfULZWOJ<;)o}^=Nle0G5o;52dEHL+WSS(6ljPRs z63$UJoFra!TFiZxG2ui+^_CsI@4xT)KF|00er|t!|NG?nc)P=uw3I*~5Zu$lLt=e&8~ za`DV1OM$DjD6xPm)64mVTuPmOM~a^XfO4YM4`UZ!nfjk zAM;1lPulaHNt)MWqwHBk-je6e|CbV#%-15G|6%@z(#3xshZjd$)IIx92mM)<%+ZHN zykk%?XJGJ{n}YBRP(+2wCw!%%6?uF#*D+PTPH7GajA;S`uDOd zfXp2PBK|`x^1RS*ziGqU6pSs^^ueE^oZehP=2@S3X&=DL>$kcsi$@{qmKsqoVVBu+ z(*=wxmmDJ((ye{gm{E7UVs&c7r^Qy#IIctKM4Q51AtL2Snw~|)&6ZiOo)AHy%4|6 zP>mUY_{sC1e@x@Y9hwC%T?b;Z9L3#!60mj#AelgSC)n;2 zkNCMG5Bz4oP&;0E37lH;Ye&1IUVjw6GOK2GV&jh3))5faBZ#v4$78sS;d3EYr!jH0 z!^Fq^R0)#JSpR`$~Z;VzZ zai|C&*a??!o?5_O<2AX^n(gXwfB+FdAT5GTWxm=LuN>HhIyTHhK=KZ-XpHZ*;RF&8 z9p};UX19!od67`OW<>7Q;^A?Wrea?{xV;VvzLSMjhqYOl{(N$rMJS~@)E zz9pPBCL}BD*S zKg)v$I|{R`Hdq-X^R|il?ly>zHa$Znb@r~&2Fk>-KL`vnG-dCqRyC(62$~-*2!iMR zMnC%TD%Z<$ux*6p8HFo0p|~V8O{BCIO?DfwmmaYUDwca%x)7US(QgmcEZ0p?r!cVt zsb!i^TP*RYdmT81Ut6x&;1!g*&Ck6NzrI+()sY#is5Rtdtccee55jaa3__jHZVUQX zK*|viI|bA+X2#s6PQmw7eE^k6RkJ7<*MkaSnU)GrlpEu&ymDm)NiO>}gxwxAjQhNd zR%Rddf@J%^D#7-H@AsHQCKjxa1qVfQh0=0K`CDnd&U2wAM(BO}I^55BTkR=tx@^viVy71}iF3v)S8byQ0b&GR zJexW_ady0EeyU%FNle`8Ywb!orspu;$`0&tWGtWTSpIFxAR2nirf=mf``H<`G*+Pc zRjt=kuIb@)c(Z@Evsfc%2~o5et?wanQtZ5^HNY`!y+`*5i+fS+o6)|UlI#pkx*@ie z2M$iN#*h!rZ!!;!G5WkCLys3tA#Ecz-};X+0s|sLpA`3Rt?{?l6Hw=^V>m$?4Zs_% ugTlRP{+zEoy4PHo_uo{?e|yH|kqkU!Cki3pl0WU#9mvzw+ogd3Wc&q1%Z9%I literal 0 HcmV?d00001 diff --git a/Widgets/Resource/Assets.xcassets/widgetQrLockscreenWhite.imageset/widgetQrLockscreenWhite@3x.png b/Widgets/Resource/Assets.xcassets/widgetQrLockscreenWhite.imageset/widgetQrLockscreenWhite@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..33f4be45b933ee1cc202b9abc69f993ce0c54849 GIT binary patch literal 2947 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 bZt0nTTByQB+Lbi^e;ZAWtY9?;w_^SW+trtG literal 0 HcmV?d00001 From faba04ab6e00fd1932e63650529a8ee33739987e Mon Sep 17 00:00:00 2001 From: hyun99999 Date: Sat, 4 Feb 2023 23:48:14 +0900 Subject: [PATCH 03/19] =?UTF-8?q?move:=20=ED=8C=8C=EC=9D=BC=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99=20(#364)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NADA-iOS-forRelease.xcodeproj/project.pbxproj | 28 ++++++++++++++++--- .../AccentColor.colorset/Contents.json | 11 -------- .../AppIcon.appiconset/Contents.json | 13 --------- Widgets/Assets.xcassets/Contents.json | 6 ---- .../WidgetBackground.colorset/Contents.json | 11 -------- .../Resource/Extension/Color+Extension.swift | 8 ++++++ Widgets/{ => Resource}/Info.plist | 0 7 files changed, 32 insertions(+), 45 deletions(-) delete mode 100644 Widgets/Assets.xcassets/AccentColor.colorset/Contents.json delete mode 100644 Widgets/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 Widgets/Assets.xcassets/Contents.json delete mode 100644 Widgets/Assets.xcassets/WidgetBackground.colorset/Contents.json create mode 100644 Widgets/Resource/Extension/Color+Extension.swift rename Widgets/{ => Resource}/Info.plist (100%) diff --git a/NADA-iOS-forRelease.xcodeproj/project.pbxproj b/NADA-iOS-forRelease.xcodeproj/project.pbxproj index e594d870..acfd4f81 100644 --- a/NADA-iOS-forRelease.xcodeproj/project.pbxproj +++ b/NADA-iOS-forRelease.xcodeproj/project.pbxproj @@ -132,6 +132,7 @@ F87122762733046300A24E74 /* Card.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87122752733046300A24E74 /* Card.swift */; }; F871227827330A3800A24E74 /* CardCreationRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F871227727330A3800A24E74 /* CardCreationRequest.swift */; }; F8719DDB274F92E90081AD51 /* UITextField+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8719DDA274F92E90081AD51 /* UITextField+Extension.swift */; }; + F87D2223298EA616001A882B /* Color+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87D2222298EA616001A882B /* Color+Extension.swift */; }; F88101F92987CBAF007266B5 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = F88101F82987CBAF007266B5 /* GoogleService-Info.plist */; }; F8915A22275728F20013D609 /* SelectBirthBottomViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8915A20275728F20013D609 /* SelectBirthBottomViewController.swift */; }; F8915A23275728F20013D609 /* SelectMBTIBottomViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8915A21275728F20013D609 /* SelectMBTIBottomViewController.swift */; }; @@ -315,6 +316,7 @@ F87122752733046300A24E74 /* Card.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Card.swift; sourceTree = ""; }; F871227727330A3800A24E74 /* CardCreationRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardCreationRequest.swift; sourceTree = ""; }; F8719DDA274F92E90081AD51 /* UITextField+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITextField+Extension.swift"; sourceTree = ""; }; + F87D2222298EA616001A882B /* Color+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Color+Extension.swift"; sourceTree = ""; }; F88101F82987CBAF007266B5 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; F8915A20275728F20013D609 /* SelectBirthBottomViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectBirthBottomViewController.swift; sourceTree = ""; }; F8915A21275728F20013D609 /* SelectMBTIBottomViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectMBTIBottomViewController.swift; sourceTree = ""; }; @@ -678,12 +680,11 @@ F838B663298E5C5300D84340 /* Widgets */ = { isa = PBXGroup; children = ( + F87D2220298EA5E5001A882B /* Resource */, F838B664298E5C5300D84340 /* WidgetsBundle.swift */, F838B666298E5C5300D84340 /* WidgetsLiveActivity.swift */, F838B668298E5C5300D84340 /* Widgets.swift */, F838B66A298E5C5300D84340 /* Widgets.intentdefinition */, - F838B66B298E5C5400D84340 /* Assets.xcassets */, - F838B66D298E5C5400D84340 /* Info.plist */, ); path = Widgets; sourceTree = ""; @@ -782,6 +783,24 @@ path = Card; sourceTree = ""; }; + F87D2220298EA5E5001A882B /* Resource */ = { + isa = PBXGroup; + children = ( + F838B66D298E5C5400D84340 /* Info.plist */, + F838B66B298E5C5400D84340 /* Assets.xcassets */, + F87D2221298EA606001A882B /* Extension */, + ); + path = Resource; + sourceTree = ""; + }; + F87D2221298EA606001A882B /* Extension */ = { + isa = PBXGroup; + children = ( + F87D2222298EA616001A882B /* Color+Extension.swift */, + ); + path = Extension; + sourceTree = ""; + }; F8915A1F275713A10013D609 /* CardCreation */ = { isa = PBXGroup; children = ( @@ -1303,6 +1322,7 @@ F871227827330A3800A24E74 /* CardCreationRequest.swift in Sources */, 39D88B5F2745FB7E00A72164 /* MoreViewController.swift in Sources */, F8FC43B326C020B90033E151 /* BackCardCreationDelegate.swift in Sources */, + F87D2223298EA616001A882B /* Color+Extension.swift in Sources */, 39369944274A568900684420 /* GroupEditTableViewCell.swift in Sources */, F8C83FBB272F9F370009DF0D /* NetworkResult.swift in Sources */, 39D2E130270B43DA00AD0889 /* UIFont+Extension.swift in Sources */, @@ -1387,7 +1407,7 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = Widgets/Info.plist; + INFOPLIST_FILE = Widgets/Resource/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Widgets; INFOPLIST_KEY_NSHumanReadableCopyright = ""; IPHONEOS_DEPLOYMENT_TARGET = 16.2; @@ -1419,7 +1439,7 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = Widgets/Info.plist; + INFOPLIST_FILE = Widgets/Resource/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Widgets; INFOPLIST_KEY_NSHumanReadableCopyright = ""; IPHONEOS_DEPLOYMENT_TARGET = 16.2; diff --git a/Widgets/Assets.xcassets/AccentColor.colorset/Contents.json b/Widgets/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb878970..00000000 --- a/Widgets/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Widgets/Assets.xcassets/AppIcon.appiconset/Contents.json b/Widgets/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 13613e3e..00000000 --- a/Widgets/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Widgets/Assets.xcassets/Contents.json b/Widgets/Assets.xcassets/Contents.json deleted file mode 100644 index 73c00596..00000000 --- a/Widgets/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Widgets/Assets.xcassets/WidgetBackground.colorset/Contents.json b/Widgets/Assets.xcassets/WidgetBackground.colorset/Contents.json deleted file mode 100644 index eb878970..00000000 --- a/Widgets/Assets.xcassets/WidgetBackground.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Widgets/Resource/Extension/Color+Extension.swift b/Widgets/Resource/Extension/Color+Extension.swift new file mode 100644 index 00000000..fe887f37 --- /dev/null +++ b/Widgets/Resource/Extension/Color+Extension.swift @@ -0,0 +1,8 @@ +// +// Color+Extension.swift +// NADA-iOS-forRelease +// +// Created by kimhyungyu on 2023/02/04. +// + +import Foundation diff --git a/Widgets/Info.plist b/Widgets/Resource/Info.plist similarity index 100% rename from Widgets/Info.plist rename to Widgets/Resource/Info.plist From e5ab3f50f57faf8576d77ca373a08e62cbbdaa48 Mon Sep 17 00:00:00 2001 From: hyun99999 Date: Sun, 5 Feb 2023 02:19:29 +0900 Subject: [PATCH 04/19] =?UTF-8?q?chore:=20Intetns=20Extension=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20(#364)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IntentsExtension/Info.plist | 20 ++ IntentsExtension/IntentHandler.swift | 19 ++ .../Base.lproj/MainInterface.storyboard | 26 ++ IntentsExtensionUI/Info.plist | 20 ++ IntentsExtensionUI/IntentViewController.swift | 36 +++ NADA-iOS-forRelease.xcodeproj/project.pbxproj | 300 ++++++++++++++++++ 6 files changed, 421 insertions(+) create mode 100644 IntentsExtension/Info.plist create mode 100644 IntentsExtension/IntentHandler.swift create mode 100644 IntentsExtensionUI/Base.lproj/MainInterface.storyboard create mode 100644 IntentsExtensionUI/Info.plist create mode 100644 IntentsExtensionUI/IntentViewController.swift diff --git a/IntentsExtension/Info.plist b/IntentsExtension/Info.plist new file mode 100644 index 00000000..ee646a16 --- /dev/null +++ b/IntentsExtension/Info.plist @@ -0,0 +1,20 @@ + + + + + NSExtension + + NSExtensionAttributes + + IntentsRestrictedWhileLocked + + IntentsSupported + + + NSExtensionPointIdentifier + com.apple.intents-service + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).IntentHandler + + + diff --git a/IntentsExtension/IntentHandler.swift b/IntentsExtension/IntentHandler.swift new file mode 100644 index 00000000..542cb467 --- /dev/null +++ b/IntentsExtension/IntentHandler.swift @@ -0,0 +1,19 @@ +// +// IntentHandler.swift +// IntentsExtension +// +// Created by kimhyungyu on 2023/02/05. +// + +import Intents + +class IntentHandler: INExtension { + + override func handler(for intent: INIntent) -> Any { + // This is the default implementation. If you want different objects to handle different intents, + // you can override this and return the handler you want for that particular intent. + + return self + } + +} diff --git a/IntentsExtensionUI/Base.lproj/MainInterface.storyboard b/IntentsExtensionUI/Base.lproj/MainInterface.storyboard new file mode 100644 index 00000000..e6c64fcf --- /dev/null +++ b/IntentsExtensionUI/Base.lproj/MainInterface.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IntentsExtensionUI/Info.plist b/IntentsExtensionUI/Info.plist new file mode 100644 index 00000000..739fbdc5 --- /dev/null +++ b/IntentsExtensionUI/Info.plist @@ -0,0 +1,20 @@ + + + + + NSExtension + + NSExtensionAttributes + + IntentsSupported + + INSendMessageIntent + + + NSExtensionMainStoryboard + MainInterface + NSExtensionPointIdentifier + com.apple.intents-ui-service + + + diff --git a/IntentsExtensionUI/IntentViewController.swift b/IntentsExtensionUI/IntentViewController.swift new file mode 100644 index 00000000..86d2b872 --- /dev/null +++ b/IntentsExtensionUI/IntentViewController.swift @@ -0,0 +1,36 @@ +// +// IntentViewController.swift +// IntentsExtensionUI +// +// Created by kimhyungyu on 2023/02/05. +// + +import IntentsUI + +// As an example, this extension's Info.plist has been configured to handle interactions for INSendMessageIntent. +// You will want to replace this or add other intents as appropriate. +// The intents whose interactions you wish to handle must be declared in the extension's Info.plist. + +// You can test this example integration by saying things to Siri like: +// "Send a message using " + +class IntentViewController: UIViewController, INUIHostedViewControlling { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + } + + // MARK: - INUIHostedViewControlling + + // Prepare your view controller for the interaction to handle. + func configureView(for parameters: Set, of interaction: INInteraction, interactiveBehavior: INUIInteractiveBehavior, context: INUIHostedViewContext, completion: @escaping (Bool, Set, CGSize) -> Void) { + // Do configuration here, including preparing views and calculating a desired size for presentation. + completion(true, parameters, self.desiredSize) + } + + var desiredSize: CGSize { + return self.extensionContext!.hostedViewMaximumAllowedSize + } + +} diff --git a/NADA-iOS-forRelease.xcodeproj/project.pbxproj b/NADA-iOS-forRelease.xcodeproj/project.pbxproj index acfd4f81..90d462e8 100644 --- a/NADA-iOS-forRelease.xcodeproj/project.pbxproj +++ b/NADA-iOS-forRelease.xcodeproj/project.pbxproj @@ -133,6 +133,13 @@ F871227827330A3800A24E74 /* CardCreationRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F871227727330A3800A24E74 /* CardCreationRequest.swift */; }; F8719DDB274F92E90081AD51 /* UITextField+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8719DDA274F92E90081AD51 /* UITextField+Extension.swift */; }; F87D2223298EA616001A882B /* Color+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87D2222298EA616001A882B /* Color+Extension.swift */; }; + F87D222A298ECAFB001A882B /* Intents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F87D2229298ECAFB001A882B /* Intents.framework */; }; + F87D222D298ECAFB001A882B /* IntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87D222C298ECAFB001A882B /* IntentHandler.swift */; }; + F87D2235298ECAFB001A882B /* IntentsUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F87D2234298ECAFB001A882B /* IntentsUI.framework */; }; + F87D2238298ECAFB001A882B /* IntentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87D2237298ECAFB001A882B /* IntentViewController.swift */; }; + F87D223B298ECAFB001A882B /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F87D2239298ECAFB001A882B /* MainInterface.storyboard */; }; + F87D223F298ECAFB001A882B /* IntentsExtensionUI.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = F87D2233298ECAFB001A882B /* IntentsExtensionUI.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + F87D2242298ECAFB001A882B /* IntentsExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = F87D2228298ECAFB001A882B /* IntentsExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; F88101F92987CBAF007266B5 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = F88101F82987CBAF007266B5 /* GoogleService-Info.plist */; }; F8915A22275728F20013D609 /* SelectBirthBottomViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8915A20275728F20013D609 /* SelectBirthBottomViewController.swift */; }; F8915A23275728F20013D609 /* SelectMBTIBottomViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8915A21275728F20013D609 /* SelectMBTIBottomViewController.swift */; }; @@ -171,6 +178,20 @@ remoteGlobalIDString = F838B65D298E5C5300D84340; remoteInfo = WidgetsExtension; }; + F87D223D298ECAFB001A882B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F8FC437A26C01CDD0033E151 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F87D2232298ECAFB001A882B; + remoteInfo = IntentsExtensionUI; + }; + F87D2240298ECAFB001A882B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F8FC437A26C01CDD0033E151 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F87D2227298ECAFB001A882B; + remoteInfo = IntentsExtension; + }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -180,6 +201,8 @@ dstPath = ""; dstSubfolderSpec = 13; files = ( + F87D223F298ECAFB001A882B /* IntentsExtensionUI.appex in Embed Foundation Extensions */, + F87D2242298ECAFB001A882B /* IntentsExtension.appex in Embed Foundation Extensions */, F838B672298E5C5400D84340 /* WidgetsExtension.appex in Embed Foundation Extensions */, ); name = "Embed Foundation Extensions"; @@ -317,6 +340,15 @@ F871227727330A3800A24E74 /* CardCreationRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardCreationRequest.swift; sourceTree = ""; }; F8719DDA274F92E90081AD51 /* UITextField+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITextField+Extension.swift"; sourceTree = ""; }; F87D2222298EA616001A882B /* Color+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Color+Extension.swift"; sourceTree = ""; }; + F87D2228298ECAFB001A882B /* IntentsExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = IntentsExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + F87D2229298ECAFB001A882B /* Intents.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Intents.framework; path = System/Library/Frameworks/Intents.framework; sourceTree = SDKROOT; }; + F87D222C298ECAFB001A882B /* IntentHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntentHandler.swift; sourceTree = ""; }; + F87D222E298ECAFB001A882B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + F87D2233298ECAFB001A882B /* IntentsExtensionUI.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = IntentsExtensionUI.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + F87D2234298ECAFB001A882B /* IntentsUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IntentsUI.framework; path = System/Library/Frameworks/IntentsUI.framework; sourceTree = SDKROOT; }; + F87D2237298ECAFB001A882B /* IntentViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntentViewController.swift; sourceTree = ""; }; + F87D223A298ECAFB001A882B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; + F87D223C298ECAFB001A882B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; F88101F82987CBAF007266B5 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; F8915A20275728F20013D609 /* SelectBirthBottomViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectBirthBottomViewController.swift; sourceTree = ""; }; F8915A21275728F20013D609 /* SelectMBTIBottomViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectMBTIBottomViewController.swift; sourceTree = ""; }; @@ -359,6 +391,22 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + F87D2225298ECAFB001A882B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F87D222A298ECAFB001A882B /* Intents.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F87D2230298ECAFB001A882B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F87D2235298ECAFB001A882B /* IntentsUI.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; F8FC437F26C01CDD0033E151 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -598,6 +646,8 @@ 4A2183AE0E469153221624A0 /* Pods_NADA_iOS_forRelease.framework */, F838B65F298E5C5300D84340 /* WidgetKit.framework */, F838B661298E5C5300D84340 /* SwiftUI.framework */, + F87D2229298ECAFB001A882B /* Intents.framework */, + F87D2234298ECAFB001A882B /* IntentsUI.framework */, ); name = Frameworks; sourceTree = ""; @@ -801,6 +851,25 @@ path = Extension; sourceTree = ""; }; + F87D222B298ECAFB001A882B /* IntentsExtension */ = { + isa = PBXGroup; + children = ( + F87D222C298ECAFB001A882B /* IntentHandler.swift */, + F87D222E298ECAFB001A882B /* Info.plist */, + ); + path = IntentsExtension; + sourceTree = ""; + }; + F87D2236298ECAFB001A882B /* IntentsExtensionUI */ = { + isa = PBXGroup; + children = ( + F87D2237298ECAFB001A882B /* IntentViewController.swift */, + F87D2239298ECAFB001A882B /* MainInterface.storyboard */, + F87D223C298ECAFB001A882B /* Info.plist */, + ); + path = IntentsExtensionUI; + sourceTree = ""; + }; F8915A1F275713A10013D609 /* CardCreation */ = { isa = PBXGroup; children = ( @@ -874,6 +943,8 @@ F8FC43BE26C025180033E151 /* .swiftlint.yml */, F8FC438426C01CDD0033E151 /* NADA-iOS-forRelease */, F838B663298E5C5300D84340 /* Widgets */, + F87D222B298ECAFB001A882B /* IntentsExtension */, + F87D2236298ECAFB001A882B /* IntentsExtensionUI */, F8FC438326C01CDD0033E151 /* Products */, 186051B2C99DBAECC539DAC9 /* Pods */, 4D28D444572353D68574D2B0 /* Frameworks */, @@ -885,6 +956,8 @@ children = ( F8FC438226C01CDD0033E151 /* NADA-iOS-forRelease.app */, F838B65E298E5C5300D84340 /* WidgetsExtension.appex */, + F87D2228298ECAFB001A882B /* IntentsExtension.appex */, + F87D2233298ECAFB001A882B /* IntentsExtensionUI.appex */, ); name = Products; sourceTree = ""; @@ -1075,6 +1148,40 @@ productReference = F838B65E298E5C5300D84340 /* WidgetsExtension.appex */; productType = "com.apple.product-type.app-extension"; }; + F87D2227298ECAFB001A882B /* IntentsExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = F87D2246298ECAFB001A882B /* Build configuration list for PBXNativeTarget "IntentsExtension" */; + buildPhases = ( + F87D2224298ECAFB001A882B /* Sources */, + F87D2225298ECAFB001A882B /* Frameworks */, + F87D2226298ECAFB001A882B /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = IntentsExtension; + productName = IntentsExtension; + productReference = F87D2228298ECAFB001A882B /* IntentsExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; + F87D2232298ECAFB001A882B /* IntentsExtensionUI */ = { + isa = PBXNativeTarget; + buildConfigurationList = F87D2243298ECAFB001A882B /* Build configuration list for PBXNativeTarget "IntentsExtensionUI" */; + buildPhases = ( + F87D222F298ECAFB001A882B /* Sources */, + F87D2230298ECAFB001A882B /* Frameworks */, + F87D2231298ECAFB001A882B /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = IntentsExtensionUI; + productName = IntentsExtensionUI; + productReference = F87D2233298ECAFB001A882B /* IntentsExtensionUI.appex */; + productType = "com.apple.product-type.app-extension"; + }; F8FC438126C01CDD0033E151 /* NADA-iOS-forRelease */ = { isa = PBXNativeTarget; buildConfigurationList = F8FC439626C01CDE0033E151 /* Build configuration list for PBXNativeTarget "NADA-iOS-forRelease" */; @@ -1091,6 +1198,8 @@ ); dependencies = ( F838B671298E5C5400D84340 /* PBXTargetDependency */, + F87D223E298ECAFB001A882B /* PBXTargetDependency */, + F87D2241298ECAFB001A882B /* PBXTargetDependency */, ); name = "NADA-iOS-forRelease"; productName = "NADA-iOS-forRelease"; @@ -1109,6 +1218,12 @@ F838B65D298E5C5300D84340 = { CreatedOnToolsVersion = 14.2; }; + F87D2227298ECAFB001A882B = { + CreatedOnToolsVersion = 14.2; + }; + F87D2232298ECAFB001A882B = { + CreatedOnToolsVersion = 14.2; + }; F8FC438126C01CDD0033E151 = { CreatedOnToolsVersion = 12.5.1; }; @@ -1129,6 +1244,8 @@ targets = ( F8FC438126C01CDD0033E151 /* NADA-iOS-forRelease */, F838B65D298E5C5300D84340 /* WidgetsExtension */, + F87D2227298ECAFB001A882B /* IntentsExtension */, + F87D2232298ECAFB001A882B /* IntentsExtensionUI */, ); }; /* End PBXProject section */ @@ -1142,6 +1259,21 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + F87D2226298ECAFB001A882B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F87D2231298ECAFB001A882B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F87D223B298ECAFB001A882B /* MainInterface.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; F8FC438026C01CDD0033E151 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -1267,6 +1399,22 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + F87D2224298ECAFB001A882B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F87D222D298ECAFB001A882B /* IntentHandler.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F87D222F298ECAFB001A882B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F87D2238298ECAFB001A882B /* IntentViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; F8FC437E26C01CDD0033E151 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1382,9 +1530,27 @@ target = F838B65D298E5C5300D84340 /* WidgetsExtension */; targetProxy = F838B670298E5C5400D84340 /* PBXContainerItemProxy */; }; + F87D223E298ECAFB001A882B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = F87D2232298ECAFB001A882B /* IntentsExtensionUI */; + targetProxy = F87D223D298ECAFB001A882B /* PBXContainerItemProxy */; + }; + F87D2241298ECAFB001A882B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = F87D2227298ECAFB001A882B /* IntentsExtension */; + targetProxy = F87D2240298ECAFB001A882B /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ + F87D2239298ECAFB001A882B /* MainInterface.storyboard */ = { + isa = PBXVariantGroup; + children = ( + F87D223A298ECAFB001A882B /* Base */, + ); + name = MainInterface.storyboard; + sourceTree = ""; + }; F8FC439026C01CDE0033E151 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( @@ -1459,6 +1625,122 @@ }; name = Release; }; + F87D2244298ECAFB001A882B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = T3VFJ764ZC; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = IntentsExtensionUI/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = IntentsExtensionUI; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "YJC.NADA-iOS-forRelease.IntentsExtensionUI"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + F87D2245298ECAFB001A882B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CODE_SIGN_IDENTITY = "iPhone Distribution"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = T3VFJ764ZC; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = IntentsExtensionUI/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = IntentsExtensionUI; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "YJC.NADA-iOS-forRelease.IntentsExtensionUI"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + F87D2247298ECAFB001A882B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = T3VFJ764ZC; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = IntentsExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = IntentsExtension; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "YJC.NADA-iOS-forRelease.IntentsExtension"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + F87D2248298ECAFB001A882B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CODE_SIGN_IDENTITY = "iPhone Distribution"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = T3VFJ764ZC; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = IntentsExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = IntentsExtension; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "YJC.NADA-iOS-forRelease.IntentsExtension"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; F8FC439426C01CDE0033E151 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1645,6 +1927,24 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + F87D2243298ECAFB001A882B /* Build configuration list for PBXNativeTarget "IntentsExtensionUI" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F87D2244298ECAFB001A882B /* Debug */, + F87D2245298ECAFB001A882B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F87D2246298ECAFB001A882B /* Build configuration list for PBXNativeTarget "IntentsExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F87D2247298ECAFB001A882B /* Debug */, + F87D2248298ECAFB001A882B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; F8FC437D26C01CDD0033E151 /* Build configuration list for PBXProject "NADA-iOS-forRelease" */ = { isa = XCConfigurationList; buildConfigurations = ( From 7b55b55bb4c6b6b1f098cdee33af0633f9c37bb1 Mon Sep 17 00:00:00 2001 From: hyun99999 Date: Sun, 5 Feb 2023 02:21:57 +0900 Subject: [PATCH 05/19] add: Color+Extension (#364) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Color 를 확장하여서 위젯의 다크모드를 대응. --- .../Resource/Extension/Color+Extension.swift | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/Widgets/Resource/Extension/Color+Extension.swift b/Widgets/Resource/Extension/Color+Extension.swift index fe887f37..f7b45a6e 100644 --- a/Widgets/Resource/Extension/Color+Extension.swift +++ b/Widgets/Resource/Extension/Color+Extension.swift @@ -5,4 +5,28 @@ // Created by kimhyungyu on 2023/02/04. // -import Foundation +import SwiftUI + +extension Color { + static func backgroundColor(for colorScheme: ColorScheme) -> Color { + switch colorScheme { + case .light: + return Color(red: 255.0 / 255.0, green: 255.0 / 255.0, blue: 255.0 / 255.0) + case .dark: + return Color(red: 19.0 / 255.0, green: 20.0 / 255.0, blue: 22.0 / 255.0, opacity: 0.5) + @unknown default: + return Color(red: 255.0 / 255.0, green: 255.0 / 255.0, blue: 255.0 / 255.0) + } + } + + static func userNameColor(for colorScheme: ColorScheme) -> Color { + switch colorScheme { + case .light: + return Color(red: 19.0 / 255.0, green: 20.0 / 255.0, blue: 22.0 / 255.0) + case .dark: + return Color(red: 255.0 / 255.0, green: 255.0 / 255.0, blue: 255.0 / 255.0) + @unknown default: + return Color(red: 19.0 / 255.0, green: 20.0 / 255.0, blue: 22.0 / 255.0) + } + } +} From 5edf32acfcb7a660c46acef5a43bbd5e306c11c5 Mon Sep 17 00:00:00 2001 From: hyun99999 Date: Mon, 6 Feb 2023 10:33:44 +0900 Subject: [PATCH 06/19] =?UTF-8?q?feat:=20WidgetsBundle=20=EC=97=90=20?= =?UTF-8?q?=EC=9C=84=EC=A0=AF=EB=93=A4=20=EC=B6=94=EA=B0=80=20(#364)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - WidgetsBundle 관련 파일 이동. --- NADA-iOS-forRelease.xcodeproj/project.pbxproj | 48 +++++++++++++------ .../{ => Resource}/Widgets.intentdefinition | 0 .../MyCardWidget.swift} | 34 ++++++------- .../OpenAppLockScreenWidget.swift | 0 Widgets/WidgetsBundle/QRCodeWidget.swift | 0 .../{ => WidgetsBundle}/WidgetsBundle.swift | 4 +- .../WidgetsLiveActivity.swift | 0 7 files changed, 53 insertions(+), 33 deletions(-) rename Widgets/{ => Resource}/Widgets.intentdefinition (100%) rename Widgets/{Widgets.swift => WidgetsBundle/MyCardWidget.swift} (59%) create mode 100644 Widgets/WidgetsBundle/OpenAppLockScreenWidget.swift create mode 100644 Widgets/WidgetsBundle/QRCodeWidget.swift rename Widgets/{ => WidgetsBundle}/WidgetsBundle.swift (74%) rename Widgets/{ => WidgetsBundle}/WidgetsLiveActivity.swift (100%) diff --git a/NADA-iOS-forRelease.xcodeproj/project.pbxproj b/NADA-iOS-forRelease.xcodeproj/project.pbxproj index 90d462e8..c7e6db49 100644 --- a/NADA-iOS-forRelease.xcodeproj/project.pbxproj +++ b/NADA-iOS-forRelease.xcodeproj/project.pbxproj @@ -107,9 +107,7 @@ F835EF6F29800F51001ABAAF /* UIApplication+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F835EF6E29800F51001ABAAF /* UIApplication+Extension.swift */; }; F838B660298E5C5300D84340 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F838B65F298E5C5300D84340 /* WidgetKit.framework */; }; F838B662298E5C5300D84340 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F838B661298E5C5300D84340 /* SwiftUI.framework */; }; - F838B665298E5C5300D84340 /* WidgetsBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = F838B664298E5C5300D84340 /* WidgetsBundle.swift */; }; F838B667298E5C5300D84340 /* WidgetsLiveActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = F838B666298E5C5300D84340 /* WidgetsLiveActivity.swift */; }; - F838B669298E5C5300D84340 /* Widgets.swift in Sources */ = {isa = PBXBuildFile; fileRef = F838B668298E5C5300D84340 /* Widgets.swift */; }; F838B66C298E5C5400D84340 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F838B66B298E5C5400D84340 /* Assets.xcassets */; }; F838B66E298E5C5400D84340 /* Widgets.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = F838B66A298E5C5300D84340 /* Widgets.intentdefinition */; }; F838B66F298E5C5400D84340 /* Widgets.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = F838B66A298E5C5300D84340 /* Widgets.intentdefinition */; }; @@ -132,7 +130,6 @@ F87122762733046300A24E74 /* Card.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87122752733046300A24E74 /* Card.swift */; }; F871227827330A3800A24E74 /* CardCreationRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F871227727330A3800A24E74 /* CardCreationRequest.swift */; }; F8719DDB274F92E90081AD51 /* UITextField+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8719DDA274F92E90081AD51 /* UITextField+Extension.swift */; }; - F87D2223298EA616001A882B /* Color+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87D2222298EA616001A882B /* Color+Extension.swift */; }; F87D222A298ECAFB001A882B /* Intents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F87D2229298ECAFB001A882B /* Intents.framework */; }; F87D222D298ECAFB001A882B /* IntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87D222C298ECAFB001A882B /* IntentHandler.swift */; }; F87D2235298ECAFB001A882B /* IntentsUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F87D2234298ECAFB001A882B /* IntentsUI.framework */; }; @@ -144,6 +141,11 @@ F8915A22275728F20013D609 /* SelectBirthBottomViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8915A20275728F20013D609 /* SelectBirthBottomViewController.swift */; }; F8915A23275728F20013D609 /* SelectMBTIBottomViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8915A21275728F20013D609 /* SelectMBTIBottomViewController.swift */; }; F8A9FE1A2743DC6B00BC60CE /* CardListInGroupRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8A9FE192743DC6B00BC60CE /* CardListInGroupRequest.swift */; }; + F8BCDD22298FFA830044D0B4 /* QRCodeWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8BCDD21298FFA830044D0B4 /* QRCodeWidget.swift */; }; + F8BCDD24298FFA940044D0B4 /* OpenAppLockScreenWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8BCDD23298FFA940044D0B4 /* OpenAppLockScreenWidget.swift */; }; + F8BCDD25298FFAF90044D0B4 /* WidgetsBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = F838B664298E5C5300D84340 /* WidgetsBundle.swift */; }; + F8BCDD26298FFB0B0044D0B4 /* MyCardWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = F838B668298E5C5300D84340 /* MyCardWidget.swift */; }; + F8BCDD27298FFB280044D0B4 /* Color+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87D2222298EA616001A882B /* Color+Extension.swift */; }; F8C310C0273A7360008EC5BA /* FrontCardCreationDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8C310BF273A7360008EC5BA /* FrontCardCreationDelegate.swift */; }; F8C83FAE272F99940009DF0D /* MoyaLoggerPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8C83FAD272F99940009DF0D /* MoyaLoggerPlugin.swift */; }; F8C83FB6272F9E380009DF0D /* UtilService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8C83FB5272F9E380009DF0D /* UtilService.swift */; }; @@ -317,7 +319,7 @@ F838B661298E5C5300D84340 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; }; F838B664298E5C5300D84340 /* WidgetsBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetsBundle.swift; sourceTree = ""; }; F838B666298E5C5300D84340 /* WidgetsLiveActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetsLiveActivity.swift; sourceTree = ""; }; - F838B668298E5C5300D84340 /* Widgets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Widgets.swift; sourceTree = ""; }; + F838B668298E5C5300D84340 /* MyCardWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyCardWidget.swift; sourceTree = ""; }; F838B66A298E5C5300D84340 /* Widgets.intentdefinition */ = {isa = PBXFileReference; lastKnownFileType = file.intentdefinition; path = Widgets.intentdefinition; sourceTree = ""; }; F838B66B298E5C5400D84340 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; F838B66D298E5C5400D84340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -353,6 +355,8 @@ F8915A20275728F20013D609 /* SelectBirthBottomViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectBirthBottomViewController.swift; sourceTree = ""; }; F8915A21275728F20013D609 /* SelectMBTIBottomViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectMBTIBottomViewController.swift; sourceTree = ""; }; F8A9FE192743DC6B00BC60CE /* CardListInGroupRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CardListInGroupRequest.swift; sourceTree = ""; }; + F8BCDD21298FFA830044D0B4 /* QRCodeWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeWidget.swift; sourceTree = ""; }; + F8BCDD23298FFA940044D0B4 /* OpenAppLockScreenWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenAppLockScreenWidget.swift; sourceTree = ""; }; F8C310BF273A7360008EC5BA /* FrontCardCreationDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrontCardCreationDelegate.swift; sourceTree = ""; }; F8C83FAD272F99940009DF0D /* MoyaLoggerPlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoyaLoggerPlugin.swift; sourceTree = ""; }; F8C83FB5272F9E380009DF0D /* UtilService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UtilService.swift; sourceTree = ""; }; @@ -731,10 +735,7 @@ isa = PBXGroup; children = ( F87D2220298EA5E5001A882B /* Resource */, - F838B664298E5C5300D84340 /* WidgetsBundle.swift */, - F838B666298E5C5300D84340 /* WidgetsLiveActivity.swift */, - F838B668298E5C5300D84340 /* Widgets.swift */, - F838B66A298E5C5300D84340 /* Widgets.intentdefinition */, + F87D2249298ECBEA001A882B /* WidgetsBundle */, ); path = Widgets; sourceTree = ""; @@ -838,6 +839,7 @@ children = ( F838B66D298E5C5400D84340 /* Info.plist */, F838B66B298E5C5400D84340 /* Assets.xcassets */, + F838B66A298E5C5300D84340 /* Widgets.intentdefinition */, F87D2221298EA606001A882B /* Extension */, ); path = Resource; @@ -870,6 +872,18 @@ path = IntentsExtensionUI; sourceTree = ""; }; + F87D2249298ECBEA001A882B /* WidgetsBundle */ = { + isa = PBXGroup; + children = ( + F838B664298E5C5300D84340 /* WidgetsBundle.swift */, + F838B668298E5C5300D84340 /* MyCardWidget.swift */, + F8BCDD21298FFA830044D0B4 /* QRCodeWidget.swift */, + F8BCDD23298FFA940044D0B4 /* OpenAppLockScreenWidget.swift */, + F838B666298E5C5300D84340 /* WidgetsLiveActivity.swift */, + ); + path = WidgetsBundle; + sourceTree = ""; + }; F8915A1F275713A10013D609 /* CardCreation */ = { isa = PBXGroup; children = ( @@ -1392,10 +1406,13 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + F8BCDD24298FFA940044D0B4 /* OpenAppLockScreenWidget.swift in Sources */, + F8BCDD27298FFB280044D0B4 /* Color+Extension.swift in Sources */, F838B66E298E5C5400D84340 /* Widgets.intentdefinition in Sources */, F838B667298E5C5300D84340 /* WidgetsLiveActivity.swift in Sources */, - F838B669298E5C5300D84340 /* Widgets.swift in Sources */, - F838B665298E5C5300D84340 /* WidgetsBundle.swift in Sources */, + F8BCDD25298FFAF90044D0B4 /* WidgetsBundle.swift in Sources */, + F8BCDD22298FFA830044D0B4 /* QRCodeWidget.swift in Sources */, + F8BCDD26298FFB0B0044D0B4 /* MyCardWidget.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1470,7 +1487,6 @@ F871227827330A3800A24E74 /* CardCreationRequest.swift in Sources */, 39D88B5F2745FB7E00A72164 /* MoreViewController.swift in Sources */, F8FC43B326C020B90033E151 /* BackCardCreationDelegate.swift in Sources */, - F87D2223298EA616001A882B /* Color+Extension.swift in Sources */, 39369944274A568900684420 /* GroupEditTableViewCell.swift in Sources */, F8C83FBB272F9F370009DF0D /* NetworkResult.swift in Sources */, 39D2E130270B43DA00AD0889 /* UIFont+Extension.swift in Sources */, @@ -1631,9 +1647,9 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = T3VFJ764ZC; + DEVELOPMENT_TEAM = ""; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = IntentsExtensionUI/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = IntentsExtensionUI; @@ -1647,6 +1663,7 @@ MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "YJC.NADA-iOS-forRelease.IntentsExtensionUI"; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; @@ -1689,9 +1706,9 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = T3VFJ764ZC; + DEVELOPMENT_TEAM = ""; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = IntentsExtension/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = IntentsExtension; @@ -1705,6 +1722,7 @@ MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "YJC.NADA-iOS-forRelease.IntentsExtension"; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; diff --git a/Widgets/Widgets.intentdefinition b/Widgets/Resource/Widgets.intentdefinition similarity index 100% rename from Widgets/Widgets.intentdefinition rename to Widgets/Resource/Widgets.intentdefinition diff --git a/Widgets/Widgets.swift b/Widgets/WidgetsBundle/MyCardWidget.swift similarity index 59% rename from Widgets/Widgets.swift rename to Widgets/WidgetsBundle/MyCardWidget.swift index 9c3fa935..bc02e171 100644 --- a/Widgets/Widgets.swift +++ b/Widgets/WidgetsBundle/MyCardWidget.swift @@ -1,5 +1,5 @@ // -// Widgets.swift +// MyCardWidget.swift // Widgets // // Created by kimhyungyu on 2023/02/04. @@ -9,24 +9,24 @@ import WidgetKit import SwiftUI import Intents -struct Provider: IntentTimelineProvider { - func placeholder(in context: Context) -> SimpleEntry { - SimpleEntry(date: Date(), configuration: ConfigurationIntent()) +struct MyCardProvider: IntentTimelineProvider { + func placeholder(in context: Context) -> MyCardEntry { + MyCardEntry(date: Date(), configuration: ConfigurationIntent()) } - func getSnapshot(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (SimpleEntry) -> ()) { - let entry = SimpleEntry(date: Date(), configuration: configuration) + func getSnapshot(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (MyCardEntry) -> Void) { + let entry = MyCardEntry(date: Date(), configuration: configuration) completion(entry) } - func getTimeline(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (Timeline) -> ()) { - var entries: [SimpleEntry] = [] + func getTimeline(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (Timeline) -> Void) { + var entries: [MyCardEntry] = [] // Generate a timeline consisting of five entries an hour apart, starting from the current date. let currentDate = Date() for hourOffset in 0 ..< 5 { let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)! - let entry = SimpleEntry(date: entryDate, configuration: configuration) + let entry = MyCardEntry(date: entryDate, configuration: configuration) entries.append(entry) } @@ -35,34 +35,34 @@ struct Provider: IntentTimelineProvider { } } -struct SimpleEntry: TimelineEntry { +struct MyCardEntry: TimelineEntry { let date: Date let configuration: ConfigurationIntent } -struct WidgetsEntryView : View { - var entry: Provider.Entry +struct MyCardEntryView: View { + var entry: MyCardProvider.Entry var body: some View { Text(entry.date, style: .time) } } -struct Widgets: Widget { +struct MyCardWidget: Widget { let kind: String = "Widgets" var body: some WidgetConfiguration { - IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: Provider()) { entry in - WidgetsEntryView(entry: entry) + IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: MyCardProvider()) { entry in + MyCardEntryView(entry: entry) } .configurationDisplayName("My Widget") .description("This is an example widget.") } } -struct Widgets_Previews: PreviewProvider { +struct MyCardWidget_Previews: PreviewProvider { static var previews: some View { - WidgetsEntryView(entry: SimpleEntry(date: Date(), configuration: ConfigurationIntent())) + MyCardEntryView(entry: MyCardEntry(date: Date(), configuration: ConfigurationIntent())) .previewContext(WidgetPreviewContext(family: .systemSmall)) } } diff --git a/Widgets/WidgetsBundle/OpenAppLockScreenWidget.swift b/Widgets/WidgetsBundle/OpenAppLockScreenWidget.swift new file mode 100644 index 00000000..e69de29b diff --git a/Widgets/WidgetsBundle/QRCodeWidget.swift b/Widgets/WidgetsBundle/QRCodeWidget.swift new file mode 100644 index 00000000..e69de29b diff --git a/Widgets/WidgetsBundle.swift b/Widgets/WidgetsBundle/WidgetsBundle.swift similarity index 74% rename from Widgets/WidgetsBundle.swift rename to Widgets/WidgetsBundle/WidgetsBundle.swift index d750f311..e1a7dfd6 100644 --- a/Widgets/WidgetsBundle.swift +++ b/Widgets/WidgetsBundle/WidgetsBundle.swift @@ -11,7 +11,9 @@ import SwiftUI @main struct WidgetsBundle: WidgetBundle { var body: some Widget { - Widgets() + MyCardWidget() + OpenAppLockScreenWidget() + QRCodeWidget() WidgetsLiveActivity() } } diff --git a/Widgets/WidgetsLiveActivity.swift b/Widgets/WidgetsBundle/WidgetsLiveActivity.swift similarity index 100% rename from Widgets/WidgetsLiveActivity.swift rename to Widgets/WidgetsBundle/WidgetsLiveActivity.swift From 789a9d42591209014b54bde1a495e01d31cc2eaa Mon Sep 17 00:00:00 2001 From: hyun99999 Date: Mon, 6 Feb 2023 11:59:35 +0900 Subject: [PATCH 07/19] =?UTF-8?q?chore:=20=EC=82=AC=EC=9A=A9=ED=95=A0=20in?= =?UTF-8?q?tent=20=EB=A5=BC=20target=20=EC=97=90=20=EC=B6=94=EA=B0=80=20(#?= =?UTF-8?q?364)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Intent Definition File 에서 사용할 custom intent 를 타겟에 추가 --- IntentsExtension/Info.plist | 6 +++++- IntentsExtensionUI/Info.plist | 1 + NADA-iOS-forRelease/Info.plist | 4 ++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/IntentsExtension/Info.plist b/IntentsExtension/Info.plist index ee646a16..3fd27e58 100644 --- a/IntentsExtension/Info.plist +++ b/IntentsExtension/Info.plist @@ -8,8 +8,12 @@ IntentsRestrictedWhileLocked - IntentsSupported + IntentsRestrictedWhileProtectedDataUnavailable + IntentsSupported + + MyCardIntent + NSExtensionPointIdentifier com.apple.intents-service diff --git a/IntentsExtensionUI/Info.plist b/IntentsExtensionUI/Info.plist index 739fbdc5..2fcb578d 100644 --- a/IntentsExtensionUI/Info.plist +++ b/IntentsExtensionUI/Info.plist @@ -9,6 +9,7 @@ IntentsSupported INSendMessageIntent + MyCardIntent NSExtensionMainStoryboard diff --git a/NADA-iOS-forRelease/Info.plist b/NADA-iOS-forRelease/Info.plist index fa43581f..c40fd8c8 100644 --- a/NADA-iOS-forRelease/Info.plist +++ b/NADA-iOS-forRelease/Info.plist @@ -52,6 +52,10 @@ 명함을 이미지로 저장하기 위해 갤러리 권한 허용이 필요해요. NSPhotoLibraryUsageDescription 명함 배경을 설정하기 위해 갤러리 권한 허용이 필요해요. + NSUserActivityTypes + + MyCardIntent + UIAppFonts NotoSansCJKkr-Bold.otf From 33e2a8995ed227bff7cb1cfb4e4a3103345d6175 Mon Sep 17 00:00:00 2001 From: hyun99999 Date: Mon, 6 Feb 2023 12:00:47 +0900 Subject: [PATCH 08/19] =?UTF-8?q?chore:=20Widgets=20intent=20definition=20?= =?UTF-8?q?file=20=ED=83=80=EA=B2=9F=20=EB=A9=A4=EB=B2=84=EC=89=BD=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20(#364)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NADA-iOS-forRelease.xcodeproj/project.pbxproj | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NADA-iOS-forRelease.xcodeproj/project.pbxproj b/NADA-iOS-forRelease.xcodeproj/project.pbxproj index c7e6db49..665f6fc8 100644 --- a/NADA-iOS-forRelease.xcodeproj/project.pbxproj +++ b/NADA-iOS-forRelease.xcodeproj/project.pbxproj @@ -94,6 +94,8 @@ 77F2C0ED27632AA7007641E3 /* CardHarmony.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 77F2C0EC27632AA7007641E3 /* CardHarmony.storyboard */; }; 77F47D93276C79B600414659 /* Header.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77F47D92276C79B600414659 /* Header.swift */; }; DBBB91E1639641F40C5B4416 /* Pods_NADA_iOS_forRelease.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A2183AE0E469153221624A0 /* Pods_NADA_iOS_forRelease.framework */; }; + F80975E92990A27400075B93 /* Widgets.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = F838B66A298E5C5300D84340 /* Widgets.intentdefinition */; }; + F80975EA2990A27900075B93 /* Widgets.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = F838B66A298E5C5300D84340 /* Widgets.intentdefinition */; }; F811720027383097002742CF /* ChangeGroupRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F81171FF27383097002742CF /* ChangeGroupRequest.swift */; }; F822E7A92709CEB60020452C /* Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = F822E7A82709CEB60020452C /* Notification.swift */; }; F8268DB927730B0100BF114B /* FirstCardAlertBottomSheetViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8268DB827730B0100BF114B /* FirstCardAlertBottomSheetViewController.swift */; }; @@ -1420,6 +1422,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + F80975E92990A27400075B93 /* Widgets.intentdefinition in Sources */, F87D222D298ECAFB001A882B /* IntentHandler.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; From b70d7a9f702c50521a2712f9e66bfe6c967543af Mon Sep 17 00:00:00 2001 From: hyun99999 Date: Mon, 6 Feb 2023 12:01:04 +0900 Subject: [PATCH 09/19] =?UTF-8?q?chore:=20Widgets=20intent=20definition=20?= =?UTF-8?q?file=20=ED=83=80=EA=B2=9F=20=EB=A9=A4=EB=B2=84=EC=89=BD=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20(#364)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NADA-iOS-forRelease.xcodeproj/project.pbxproj | 1 + 1 file changed, 1 insertion(+) diff --git a/NADA-iOS-forRelease.xcodeproj/project.pbxproj b/NADA-iOS-forRelease.xcodeproj/project.pbxproj index 665f6fc8..65cda31c 100644 --- a/NADA-iOS-forRelease.xcodeproj/project.pbxproj +++ b/NADA-iOS-forRelease.xcodeproj/project.pbxproj @@ -1431,6 +1431,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + F80975EA2990A27900075B93 /* Widgets.intentdefinition in Sources */, F87D2238298ECAFB001A882B /* IntentViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; From c12b1487dff70a18d58e15d690501ce824bd8e65 Mon Sep 17 00:00:00 2001 From: hyun99999 Date: Mon, 6 Feb 2023 12:01:32 +0900 Subject: [PATCH 10/19] =?UTF-8?q?chore:=20fastlane=20match=20=EB=A1=9C=20p?= =?UTF-8?q?rovisioning=20profile=20=EC=84=A4=EC=B9=98=20(#364)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NADA-iOS-forRelease.xcodeproj/project.pbxproj | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/NADA-iOS-forRelease.xcodeproj/project.pbxproj b/NADA-iOS-forRelease.xcodeproj/project.pbxproj index 65cda31c..860aace6 100644 --- a/NADA-iOS-forRelease.xcodeproj/project.pbxproj +++ b/NADA-iOS-forRelease.xcodeproj/project.pbxproj @@ -1589,9 +1589,11 @@ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = T3VFJ764ZC; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Widgets/Resource/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Widgets; @@ -1606,6 +1608,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "YJC.NADA-iOS-forRelease.Widgets"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match AppStore YJC.NADA-iOS-forRelease.Widgets"; SKIP_INSTALL = YES; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; @@ -1649,11 +1652,12 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = T3VFJ764ZC; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = IntentsExtensionUI/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = IntentsExtensionUI; @@ -1668,6 +1672,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "YJC.NADA-iOS-forRelease.IntentsExtensionUI"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match AppStore YJC.NADA-iOS-forRelease.IntentsExtensionUI"; SKIP_INSTALL = YES; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; @@ -1708,11 +1713,12 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = T3VFJ764ZC; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = IntentsExtension/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = IntentsExtension; @@ -1727,6 +1733,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "YJC.NADA-iOS-forRelease.IntentsExtension"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match AppStore YJC.NADA-iOS-forRelease.IntentsExtension"; SKIP_INSTALL = YES; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; From be82fd5abf9a5f5e20bb9ccd4ee60a6a05afc02b Mon Sep 17 00:00:00 2001 From: hyun99999 Date: Mon, 6 Feb 2023 12:04:15 +0900 Subject: [PATCH 11/19] =?UTF-8?q?feat:=20MyCardIntent=20=EB=8F=99=EC=A0=81?= =?UTF-8?q?=EC=9D=B8=20intent=20=EC=83=9D=EC=84=B1=20(#364)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Configurable Widget 에서도 동적인 선택 목록을 설정할 수 있도록 dynamic options 설정. - MyCard 타입을 생성하여 파라미터로 설정. - MyCard 타입에서 cardID 로 선택목록을 구분하기 위해서 property 로 설정. --- Widgets/Resource/Widgets.intentdefinition | 152 +++++++++++++++++++++- 1 file changed, 146 insertions(+), 6 deletions(-) diff --git a/Widgets/Resource/Widgets.intentdefinition b/Widgets/Resource/Widgets.intentdefinition index bdb40455..294930b5 100644 --- a/Widgets/Resource/Widgets.intentdefinition +++ b/Widgets/Resource/Widgets.intentdefinition @@ -9,11 +9,11 @@ INIntentDefinitionNamespace 88xZPY INIntentDefinitionSystemVersion - 20A294 + 22C65 INIntentDefinitionToolsBuildVersion - 12A6144 + 14C18 INIntentDefinitionToolsVersion - 12.0 + 14.2 INIntents @@ -25,8 +25,70 @@ INIntentIneligibleForSuggestions + INIntentLastParameterTag + 2 INIntentName - Configuration + MyCard + INIntentParameters + + + INIntentParameterConfigurable + + INIntentParameterDisplayName + 내 명함 + INIntentParameterDisplayNameID + vkhY1e + INIntentParameterDisplayPriority + 1 + INIntentParameterName + myCard + INIntentParameterObjectType + Card + INIntentParameterObjectTypeNamespace + 88xZPY + INIntentParameterPromptDialogs + + + INIntentParameterPromptDialogCustom + + INIntentParameterPromptDialogType + Configuration + + + INIntentParameterPromptDialogCustom + + INIntentParameterPromptDialogType + Primary + + + INIntentParameterPromptDialogCustom + + INIntentParameterPromptDialogFormatString + There are ${count} options matching ‘${myCard}’. + INIntentParameterPromptDialogFormatStringID + 9Bbr2o + INIntentParameterPromptDialogType + DisambiguationIntroduction + + + INIntentParameterPromptDialogCustom + + INIntentParameterPromptDialogFormatString + Just to confirm, you wanted ‘${myCard}’? + INIntentParameterPromptDialogFormatStringID + HeCjcW + INIntentParameterPromptDialogType + Confirmation + + + INIntentParameterSupportsDynamicEnumeration + + INIntentParameterTag + 2 + INIntentParameterType + Object + + INIntentResponse INIntentResponseCodes @@ -44,7 +106,7 @@ INIntentTitle - Configuration + My Card INIntentTitleID gpCwrM INIntentType @@ -54,6 +116,84 @@ INTypes - + + + INTypeDisplayName + Card + INTypeDisplayNameID + J1deG2 + INTypeLastPropertyTag + 100 + INTypeName + Card + INTypeProperties + + + INTypePropertyDefault + + INTypePropertyDisplayPriority + 1 + INTypePropertyName + identifier + INTypePropertyTag + 1 + INTypePropertyType + String + + + INTypePropertyDefault + + INTypePropertyDisplayPriority + 2 + INTypePropertyName + displayString + INTypePropertyTag + 2 + INTypePropertyType + String + + + INTypePropertyDefault + + INTypePropertyDisplayPriority + 3 + INTypePropertyName + pronunciationHint + INTypePropertyTag + 3 + INTypePropertyType + String + + + INTypePropertyDefault + + INTypePropertyDisplayPriority + 4 + INTypePropertyName + alternativeSpeakableMatches + INTypePropertySupportsMultipleValues + + INTypePropertyTag + 4 + INTypePropertyType + SpeakableString + + + INTypePropertyDisplayName + Card ID + INTypePropertyDisplayNameID + aRJ51O + INTypePropertyDisplayPriority + 5 + INTypePropertyName + cardID + INTypePropertyTag + 100 + INTypePropertyType + String + + + + From 6d923279d01d89aaeb7708304fffac92ea21491c Mon Sep 17 00:00:00 2001 From: hyun99999 Date: Mon, 6 Feb 2023 12:24:36 +0900 Subject: [PATCH 12/19] =?UTF-8?q?bug:=20Card=20type=20=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD=20(#364)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - custom intent 의 타입으로 선언했던 Card 가 중복된 이름으로 여겨져서 "multiple commands produce" 에러가 생겨서 MyCard 로 변경. --- Widgets/Resource/Widgets.intentdefinition | 26 +++-------------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/Widgets/Resource/Widgets.intentdefinition b/Widgets/Resource/Widgets.intentdefinition index 294930b5..78da667f 100644 --- a/Widgets/Resource/Widgets.intentdefinition +++ b/Widgets/Resource/Widgets.intentdefinition @@ -43,7 +43,7 @@ INIntentParameterName myCard INIntentParameterObjectType - Card + MyCard INIntentParameterObjectTypeNamespace 88xZPY INIntentParameterPromptDialogs @@ -60,26 +60,6 @@ INIntentParameterPromptDialogType Primary - - INIntentParameterPromptDialogCustom - - INIntentParameterPromptDialogFormatString - There are ${count} options matching ‘${myCard}’. - INIntentParameterPromptDialogFormatStringID - 9Bbr2o - INIntentParameterPromptDialogType - DisambiguationIntroduction - - - INIntentParameterPromptDialogCustom - - INIntentParameterPromptDialogFormatString - Just to confirm, you wanted ‘${myCard}’? - INIntentParameterPromptDialogFormatStringID - HeCjcW - INIntentParameterPromptDialogType - Confirmation - INIntentParameterSupportsDynamicEnumeration @@ -119,13 +99,13 @@ INTypeDisplayName - Card + MyCard INTypeDisplayNameID J1deG2 INTypeLastPropertyTag 100 INTypeName - Card + MyCard INTypeProperties From 4f8a38bb897c88e85f46ae738cab55a73fa496bd Mon Sep 17 00:00:00 2001 From: hyun99999 Date: Mon, 6 Feb 2023 12:26:34 +0900 Subject: [PATCH 13/19] =?UTF-8?q?chore:=20=EC=8A=A4=ED=82=A4=EB=A7=88=20?= =?UTF-8?q?=EC=88=9C=EC=84=9C=20=EB=B3=80=EA=B2=BD=20(#364)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xcschemes/IntentsExtension.xcscheme | 97 +++++++++++++++ .../xcschemes/IntentsExtensionUI.xcscheme | 97 +++++++++++++++ .../xcschemes/WidgetsExtension.xcscheme | 114 ++++++++++++++++++ 3 files changed, 308 insertions(+) create mode 100644 NADA-iOS-forRelease.xcodeproj/xcshareddata/xcschemes/IntentsExtension.xcscheme create mode 100644 NADA-iOS-forRelease.xcodeproj/xcshareddata/xcschemes/IntentsExtensionUI.xcscheme create mode 100644 NADA-iOS-forRelease.xcodeproj/xcshareddata/xcschemes/WidgetsExtension.xcscheme diff --git a/NADA-iOS-forRelease.xcodeproj/xcshareddata/xcschemes/IntentsExtension.xcscheme b/NADA-iOS-forRelease.xcodeproj/xcshareddata/xcschemes/IntentsExtension.xcscheme new file mode 100644 index 00000000..e859c310 --- /dev/null +++ b/NADA-iOS-forRelease.xcodeproj/xcshareddata/xcschemes/IntentsExtension.xcscheme @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NADA-iOS-forRelease.xcodeproj/xcshareddata/xcschemes/IntentsExtensionUI.xcscheme b/NADA-iOS-forRelease.xcodeproj/xcshareddata/xcschemes/IntentsExtensionUI.xcscheme new file mode 100644 index 00000000..a9a57819 --- /dev/null +++ b/NADA-iOS-forRelease.xcodeproj/xcshareddata/xcschemes/IntentsExtensionUI.xcscheme @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NADA-iOS-forRelease.xcodeproj/xcshareddata/xcschemes/WidgetsExtension.xcscheme b/NADA-iOS-forRelease.xcodeproj/xcshareddata/xcschemes/WidgetsExtension.xcscheme new file mode 100644 index 00000000..d076c405 --- /dev/null +++ b/NADA-iOS-forRelease.xcodeproj/xcshareddata/xcschemes/WidgetsExtension.xcscheme @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From ccc8c99b3788dbd63249691dc2a81dfa00d64caa Mon Sep 17 00:00:00 2001 From: hyun99999 Date: Mon, 6 Feb 2023 12:27:43 +0900 Subject: [PATCH 14/19] =?UTF-8?q?fix:=20Configurable=20Widget=20=EC=97=90?= =?UTF-8?q?=20intent=20=EC=A0=81=EC=9A=A9=20(#364)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 기존의 ConfigurationIntent 를 MyCardIntent 로 변경. --- Widgets/WidgetsBundle/MyCardWidget.swift | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Widgets/WidgetsBundle/MyCardWidget.swift b/Widgets/WidgetsBundle/MyCardWidget.swift index bc02e171..c2c0ae43 100644 --- a/Widgets/WidgetsBundle/MyCardWidget.swift +++ b/Widgets/WidgetsBundle/MyCardWidget.swift @@ -11,15 +11,15 @@ import Intents struct MyCardProvider: IntentTimelineProvider { func placeholder(in context: Context) -> MyCardEntry { - MyCardEntry(date: Date(), configuration: ConfigurationIntent()) + MyCardEntry(date: Date(), configuration: MyCardIntent()) } - func getSnapshot(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (MyCardEntry) -> Void) { + func getSnapshot(for configuration: MyCardIntent, in context: Context, completion: @escaping (MyCardEntry) -> Void) { let entry = MyCardEntry(date: Date(), configuration: configuration) completion(entry) } - func getTimeline(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (Timeline) -> Void) { + func getTimeline(for configuration: MyCardIntent, in context: Context, completion: @escaping (Timeline) -> Void) { var entries: [MyCardEntry] = [] // Generate a timeline consisting of five entries an hour apart, starting from the current date. @@ -37,7 +37,7 @@ struct MyCardProvider: IntentTimelineProvider { struct MyCardEntry: TimelineEntry { let date: Date - let configuration: ConfigurationIntent + let configuration: MyCardIntent } struct MyCardEntryView: View { @@ -52,7 +52,7 @@ struct MyCardWidget: Widget { let kind: String = "Widgets" var body: some WidgetConfiguration { - IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: MyCardProvider()) { entry in + IntentConfiguration(kind: kind, intent: MyCardIntent.self, provider: MyCardProvider()) { entry in MyCardEntryView(entry: entry) } .configurationDisplayName("My Widget") @@ -62,7 +62,7 @@ struct MyCardWidget: Widget { struct MyCardWidget_Previews: PreviewProvider { static var previews: some View { - MyCardEntryView(entry: MyCardEntry(date: Date(), configuration: ConfigurationIntent())) + MyCardEntryView(entry: MyCardEntry(date: Date(), configuration: MyCardIntent())) .previewContext(WidgetPreviewContext(family: .systemSmall)) } } From 946f86323e0c4931fda7b9e7701d4a98f3a9562e Mon Sep 17 00:00:00 2001 From: hyun99999 Date: Mon, 6 Feb 2023 12:37:16 +0900 Subject: [PATCH 15/19] =?UTF-8?q?add:=20QRCodeWidget=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=20(#364)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Widgets/WidgetsBundle/QRCodeWidget.swift | 54 ++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/Widgets/WidgetsBundle/QRCodeWidget.swift b/Widgets/WidgetsBundle/QRCodeWidget.swift index e69de29b..1db7b90f 100644 --- a/Widgets/WidgetsBundle/QRCodeWidget.swift +++ b/Widgets/WidgetsBundle/QRCodeWidget.swift @@ -0,0 +1,54 @@ +// +// QRCodeWidget.swift +// WidgetsExtension +// +// Created by kimhyungyu on 2023/02/05. +// + +import WidgetKit +import SwiftUI + +struct QRCodeProvider: TimelineProvider { + func placeholder(in context: Context) -> QRCodeEntry { + QRCodeEntry(date: Date()) + } + + func getSnapshot(in context: Context, completion: @escaping (QRCodeEntry) -> Void) { + let entry = QRCodeEntry(date: Date()) + completion(entry) + } + + func getTimeline(in context: Context, completion: @escaping (Timeline) -> Void) { + var entries: [QRCodeEntry] = [] + + let currentDate = Date() + for hourOffset in 0 ..< 5 { + let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)! + let entry = QRCodeEntry(date: entryDate) + entries.append(entry) + } + + let timeline = Timeline(entries: entries, policy: .never) + completion(timeline) + } +} + +struct QRCodeEntry: TimelineEntry { + let date: Date +} +struct QRCodeWidget: Widget { + let kind: String = "QRCodeWidget" + + var body: some WidgetConfiguration { + StaticConfiguration(kind: kind, + provider: QRCodeProvider()) { entry in + QRCodeEntryView(entry: entry) + } +} + +struct QRCodeWidget_Previews: PreviewProvider { + static var previews: some View { + QRCodeEntryView(entry: QRCodeEntry(date: Date())) + .previewContext(WidgetPreviewContext(family: .systemSmall)) + } +} From bc8d1c145f45054217e7df24d5224200d6e889f3 Mon Sep 17 00:00:00 2001 From: hyun99999 Date: Mon, 6 Feb 2023 12:59:01 +0900 Subject: [PATCH 16/19] =?UTF-8?q?feat:=20QRCodeWidget=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=20(#364)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 선택목록을 제공하지 않기 때문에 StaticConfiguration 사용. - image 로 UI 구현. - 위젯 선택시 동작이 예정되어 있기 때문에 widgetURL 사용. - QRCodeWidget 을 설명하는 내용 작성. --- Widgets/WidgetsBundle/QRCodeWidget.swift | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Widgets/WidgetsBundle/QRCodeWidget.swift b/Widgets/WidgetsBundle/QRCodeWidget.swift index 1db7b90f..04d23414 100644 --- a/Widgets/WidgetsBundle/QRCodeWidget.swift +++ b/Widgets/WidgetsBundle/QRCodeWidget.swift @@ -36,6 +36,22 @@ struct QRCodeProvider: TimelineProvider { struct QRCodeEntry: TimelineEntry { let date: Date } + +struct QRCodeEntryView: View { + var entry: QRCodeProvider.Entry + @Environment(\.widgetFamily) var widgetFamily + + var body: some View { + switch widgetFamily { + default: + Image("widgetQr") + .resizable() + .scaledToFill() + .widgetURL(URL(string: "openQRCodeWidget")) + } + } +} + struct QRCodeWidget: Widget { let kind: String = "QRCodeWidget" @@ -44,6 +60,9 @@ struct QRCodeWidget: Widget { provider: QRCodeProvider()) { entry in QRCodeEntryView(entry: entry) } + .configurationDisplayName("QR Code 위젯") + .description("QR Code 를 인식할 수 있도록 카메라로 빠르게 접근합니다.") + } } struct QRCodeWidget_Previews: PreviewProvider { From 3808d37cac7f26daf1c23965de0ebe0ea24a969d Mon Sep 17 00:00:00 2001 From: hyun99999 Date: Mon, 6 Feb 2023 12:59:47 +0900 Subject: [PATCH 17/19] =?UTF-8?q?feat:=20QRCodeWidget=20LockScreen=20Widge?= =?UTF-8?q?t=20=EA=B5=AC=ED=98=84=20(#364)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - accessoryCircular 를 추가하여 잠금화면 위젯 구현. --- Widgets/WidgetsBundle/QRCodeWidget.swift | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Widgets/WidgetsBundle/QRCodeWidget.swift b/Widgets/WidgetsBundle/QRCodeWidget.swift index 04d23414..45faeed3 100644 --- a/Widgets/WidgetsBundle/QRCodeWidget.swift +++ b/Widgets/WidgetsBundle/QRCodeWidget.swift @@ -43,6 +43,13 @@ struct QRCodeEntryView: View { var body: some View { switch widgetFamily { + case .accessoryCircular: + ZStack { + AccessoryWidgetBackground() + Image("widgetQrLockscreenWhite") + .resizable() + .widgetURL(URL(string: "openQRCodeWidget")) + } default: Image("widgetQr") .resizable() @@ -62,6 +69,7 @@ struct QRCodeWidget: Widget { } .configurationDisplayName("QR Code 위젯") .description("QR Code 를 인식할 수 있도록 카메라로 빠르게 접근합니다.") + .supportedFamilies([.systemSmall, .accessoryCircular]) } } @@ -69,5 +77,7 @@ struct QRCodeWidget_Previews: PreviewProvider { static var previews: some View { QRCodeEntryView(entry: QRCodeEntry(date: Date())) .previewContext(WidgetPreviewContext(family: .systemSmall)) + QRCodeEntryView(entry: QRCodeEntry(date: Date())) + .previewContext(WidgetPreviewContext(family: .accessoryCircular)) } } From 20849311a60e719d64c173f99d04542b329b40f4 Mon Sep 17 00:00:00 2001 From: hyun99999 Date: Mon, 6 Feb 2023 13:03:03 +0900 Subject: [PATCH 18/19] =?UTF-8?q?add:=20OpenAppLockScreenWidget=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20(#364)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 잠금화면 위젯으로만 사용하기 때문에 accessoryCircular 만 설정. - 선택목록을 제공하지 않기 때문에 StaticConfiguration 사용. --- .../OpenAppLockScreenWidget.swift | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/Widgets/WidgetsBundle/OpenAppLockScreenWidget.swift b/Widgets/WidgetsBundle/OpenAppLockScreenWidget.swift index e69de29b..be217f55 100644 --- a/Widgets/WidgetsBundle/OpenAppLockScreenWidget.swift +++ b/Widgets/WidgetsBundle/OpenAppLockScreenWidget.swift @@ -0,0 +1,56 @@ +// +// OpenAppLockScreenWidget.swift +// WidgetsExtension +// +// Created by kimhyungyu on 2023/02/05. +// + +import WidgetKit +import SwiftUI + +struct OpenAppLockScreenProvider: TimelineProvider { + func placeholder(in context: Context) -> OpenAppLockScreenEntry { + OpenAppLockScreenEntry(date: Date()) + } + + func getSnapshot(in context: Context, completion: @escaping (OpenAppLockScreenEntry) -> Void) { + let entry = OpenAppLockScreenEntry(date: Date()) + completion(entry) + } + + func getTimeline(in context: Context, completion: @escaping (Timeline) -> Void) { + var entries: [OpenAppLockScreenEntry] = [] + + let currentDate = Date() + for hourOffset in 0 ..< 5 { + let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)! + let entry = OpenAppLockScreenEntry(date: entryDate) + entries.append(entry) + } + + let timeline = Timeline(entries: entries, policy: .never) + completion(timeline) + } +} + +struct OpenAppLockScreenEntry: TimelineEntry { + let date: Date +} +struct OpenAppLockScreenWidget: Widget { + let kind: String = "OpenAppLockScreen" + + var body: some WidgetConfiguration { + StaticConfiguration(kind: kind, + provider: OpenAppLockScreenProvider()) { entry in + OpenAppLockScreenEntryView(entry: entry) + } + .supportedFamilies([.accessoryCircular]) + } +} + +struct OpenAppLockScreenWidget_Previews: PreviewProvider { + static var previews: some View { + OpenAppLockScreenEntryView(entry: OpenAppLockScreenEntry(date: Date())) + .previewContext(WidgetPreviewContext(family: .accessoryCircular)) + } +} From 6d3a398a466a50eeb4c7216f0c419fa26d06ad9a Mon Sep 17 00:00:00 2001 From: hyun99999 Date: Mon, 6 Feb 2023 14:53:49 +0900 Subject: [PATCH 19/19] =?UTF-8?q?feat:=20OpenAppLockScreenWidget=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20(#364)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 잠금화면 위젯이기 때문에 accessoryCircular 만 구현. - OpenAppLockScreenWidget 설명 작성. --- .../OpenAppLockScreenWidget.swift | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Widgets/WidgetsBundle/OpenAppLockScreenWidget.swift b/Widgets/WidgetsBundle/OpenAppLockScreenWidget.swift index be217f55..c72adb53 100644 --- a/Widgets/WidgetsBundle/OpenAppLockScreenWidget.swift +++ b/Widgets/WidgetsBundle/OpenAppLockScreenWidget.swift @@ -36,6 +36,25 @@ struct OpenAppLockScreenProvider: TimelineProvider { struct OpenAppLockScreenEntry: TimelineEntry { let date: Date } + +struct OpenAppLockScreenEntryView: View { + var entry: OpenAppLockScreenProvider.Entry + @Environment(\.widgetFamily) var widgetFamily + + var body: some View { + switch widgetFamily { + case .accessoryCircular: + ZStack { + AccessoryWidgetBackground() + Image("widgetLogoWhite") + .resizable() + } + default: + Image("widgetLogoWhite") + } + } +} + struct OpenAppLockScreenWidget: Widget { let kind: String = "OpenAppLockScreen" @@ -44,6 +63,8 @@ struct OpenAppLockScreenWidget: Widget { provider: OpenAppLockScreenProvider()) { entry in OpenAppLockScreenEntryView(entry: entry) } + .configurationDisplayName("나다 NADA") + .description("나다 NADA를 실행합니다.") .supportedFamilies([.accessoryCircular]) } }