From 9e834505be6aa2d33d9cb4c185bca589572e4be7 Mon Sep 17 00:00:00 2001 From: Zoe Date: Sun, 14 Jan 2024 09:55:07 +0900 Subject: [PATCH 01/16] =?UTF-8?q?[Add/#80]=20=EC=97=90=EC=85=8B=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Assets.xcassets/Contents.json | 6 +++++ .../ios_limit_time_img.imageset/Contents.json | 23 ++++++++++++++++++ .../ios_limit_time_img.png | Bin 0 -> 2710 bytes .../ios_limit_time_img@2x.png | Bin 0 -> 6610 bytes .../ios_limit_time_img@3x.png | Bin 0 -> 17195 bytes 5 files changed, 29 insertions(+) create mode 100644 HMH_iOS/ShiledConfig/Assets.xcassets/Contents.json create mode 100644 HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/Contents.json create mode 100644 HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/ios_limit_time_img.png create mode 100644 HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/ios_limit_time_img@2x.png create mode 100644 HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/ios_limit_time_img@3x.png diff --git a/HMH_iOS/ShiledConfig/Assets.xcassets/Contents.json b/HMH_iOS/ShiledConfig/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/HMH_iOS/ShiledConfig/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/Contents.json b/HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/Contents.json new file mode 100644 index 0000000..cd60202 --- /dev/null +++ b/HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "ios_limit_time_img.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "ios_limit_time_img@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "ios_limit_time_img@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/ios_limit_time_img.png b/HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/ios_limit_time_img.png new file mode 100644 index 0000000000000000000000000000000000000000..2f6de0c61967d22f8e8edbedfdf3b230db43afc6 GIT binary patch literal 2710 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 ND9fwKRm*$|{vXt8rQZMm literal 0 HcmV?d00001 diff --git a/HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/ios_limit_time_img@3x.png b/HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/ios_limit_time_img@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..b63cd08e5e23ee71866604610dd0962b1bf688a9 GIT binary patch literal 17195 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 khK7b}& Date: Sun, 14 Jan 2024 09:55:46 +0900 Subject: [PATCH 02/16] =?UTF-8?q?[Feat/#80]=20Shield=20-=20=EC=B0=A8?= =?UTF-8?q?=EB=8B=A8=20=EB=B7=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj | 4 + .../ShieldConfigurationExtension.swift | 102 +++++++++++++++--- 2 files changed, 94 insertions(+), 12 deletions(-) diff --git a/HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj b/HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj index 1e7572d..323e8cc 100644 --- a/HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj +++ b/HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj @@ -64,6 +64,7 @@ 17CF9FC92B4EE964000DD09C /* AppUsingProgressViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17CF9FC82B4EE964000DD09C /* AppUsingProgressViewCell.swift */; }; 17CF9FCF2B4F1A91000DD09C /* MyGoalTimeCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17CF9FCE2B4F1A91000DD09C /* MyGoalTimeCell.swift */; }; 17CF9FD12B4F31C0000DD09C /* BlackHoleImageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17CF9FD02B4F31C0000DD09C /* BlackHoleImageCell.swift */; }; + 360D11082B536746008BE85A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 360D11072B536746008BE85A /* Assets.xcassets */; }; 363863BA2B50782E000FE5E7 /* CreateChallengeResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 363863B92B50782E000FE5E7 /* CreateChallengeResponseDTO.swift */; }; 363863BD2B5129F2000FE5E7 /* Lottie in Frameworks */ = {isa = PBXBuildFile; productRef = 363863BC2B5129F2000FE5E7 /* Lottie */; }; 364923602B4ED47000BF7ACA /* SwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3649235F2B4ED47000BF7ACA /* SwiftUIView.swift */; }; @@ -268,6 +269,7 @@ 17CF9FC82B4EE964000DD09C /* AppUsingProgressViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppUsingProgressViewCell.swift; sourceTree = ""; }; 17CF9FCE2B4F1A91000DD09C /* MyGoalTimeCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyGoalTimeCell.swift; sourceTree = ""; }; 17CF9FD02B4F31C0000DD09C /* BlackHoleImageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlackHoleImageCell.swift; sourceTree = ""; }; + 360D11072B536746008BE85A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 363863B92B50782E000FE5E7 /* CreateChallengeResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateChallengeResponseDTO.swift; sourceTree = ""; }; 3649235F2B4ED47000BF7ACA /* SwiftUIView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUIView.swift; sourceTree = ""; }; 364923612B4F4E7D00BF7ACA /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = ""; }; @@ -1032,6 +1034,7 @@ 36E531BD2B4C78A900B4BBE3 /* ShieldConfigurationExtension.swift */, 36E531BF2B4C78A900B4BBE3 /* Info.plist */, 36E531C02B4C78A900B4BBE3 /* ShiledConfig.entitlements */, + 360D11072B536746008BE85A /* Assets.xcassets */, ); path = ShiledConfig; sourceTree = ""; @@ -1256,6 +1259,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 360D11082B536746008BE85A /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/HMH_iOS/ShiledConfig/ShieldConfigurationExtension.swift b/HMH_iOS/ShiledConfig/ShieldConfigurationExtension.swift index ff1c694..184ed42 100644 --- a/HMH_iOS/ShiledConfig/ShieldConfigurationExtension.swift +++ b/HMH_iOS/ShiledConfig/ShieldConfigurationExtension.swift @@ -1,8 +1,8 @@ // // ShieldConfigurationExtension.swift -// ShiledConfig +// ShieldConfiguration // -// Created by 지희의 MAC on 1/9/24. +// Created by Yun Dongbeom on 2023/08/08. // import ManagedSettings @@ -12,24 +12,102 @@ import UIKit // Override the functions below to customize the shields used in various situations. // The system provides a default appearance for any methods that your subclass doesn't override. // Make sure that your class name matches the NSExtensionPrincipalClass in your Info.plist. +// MARK: - ShieldView 커스터마이징 class ShieldConfigurationExtension: ShieldConfigurationDataSource { + + // MARK: - 제한 중인 앱/도메인 웹 정보를 받아 ShieldView를 커스터마이징하는 메서드 + /// 앱/도메인 웹 사용 제한 중일 경우 overlay되는 ShieldView는 ShieldConfiguration를 통해 커스터마이징 할 수 있습니다. + /// 각 configuration 메서드로부터 전달받은 앱 정보를 통해 커스터마이징 해보세요. + /// * ShieldConfiguration init 이외에 ShieldView의 커스터마이징은 제한됩니다. + /// * 더 많은 정보는 아래 링크를 확인하세요. + /// https://developer.apple.com/documentation/managedsettingsui/shieldconfiguration + private func setShieldConfig( + _ tokenName: String, + hasSecondaryButton: Bool = false) -> ShieldConfiguration { + let CUSTOM_ICON = UIImage(named: "ios_limit_time_img") + let CUSTOM_TITLE = ShieldConfiguration.Label( + text: "목표 사용 시간 종료", + color: .white + ) + let CUSTOM_SUBTITLE = ShieldConfiguration.Label( + text: "이제 \(tokenName)을(를) 사용할 수 없어요\n※ 알림이 오지 않는다면 설정에서 푸시 알림 권한을 허용해 주세요", + color: UIColor(red: 0.55, green: 0.55, blue: 0.62, alpha: 1) + ) + let CUSTOM_PRIMARY_BUTTON_LABEL = ShieldConfiguration.Label( + text: "닫기", + color: UIColor(red: 0.86, green: 0.86, blue: 0.91, alpha: 1) + ) + let CUSTOM_PRIAMRY_BUTTON_BACKGROUND: UIColor = UIColor(red: 0.24, green: 0.09, blue: 0.83, alpha: 1) + let CUSTOM_SECONDARY_BUTTON_LABEL = ShieldConfiguration.Label( + text: "잠금 해제하기", + color: UIColor(red: 0.65, green: 0.65, blue: 0.73, alpha: 1) + ) + + let backgrounColor = UIColor(hue: 240/360, saturation: 14/100, brightness: 10/100, alpha: 1.0) + + let ONE_BUTTON_SHIELD_CONFIG = ShieldConfiguration( + backgroundBlurStyle: .systemMaterial, + backgroundColor: backgrounColor, + icon: CUSTOM_ICON, + title: CUSTOM_TITLE, + subtitle: CUSTOM_SUBTITLE, + primaryButtonLabel: CUSTOM_PRIMARY_BUTTON_LABEL, + primaryButtonBackgroundColor: CUSTOM_PRIAMRY_BUTTON_BACKGROUND + ) + + let TWO_BUTTON_SHIELD_CONFIG = ShieldConfiguration( + backgroundBlurStyle: .dark, + backgroundColor: backgrounColor, + icon: CUSTOM_ICON, + title: CUSTOM_TITLE, + subtitle: CUSTOM_SUBTITLE, + primaryButtonLabel: CUSTOM_PRIMARY_BUTTON_LABEL, + primaryButtonBackgroundColor: CUSTOM_PRIAMRY_BUTTON_BACKGROUND, + secondaryButtonLabel: CUSTOM_SECONDARY_BUTTON_LABEL + ) + + return hasSecondaryButton ? TWO_BUTTON_SHIELD_CONFIG : ONE_BUTTON_SHIELD_CONFIG + } + + // MARK: - 어플리케이션만 제한된 앱 override func configuration(shielding application: Application) -> ShieldConfiguration { // Customize the shield as needed for applications. - ShieldConfiguration() + guard let displayName = application.localizedDisplayName else { + return setShieldConfig("확인불가 앱") + } + return setShieldConfig(displayName, hasSecondaryButton: true) } - override func configuration(shielding application: Application, in category: ActivityCategory) -> ShieldConfiguration { - // Customize the shield as needed for applications shielded because of their category. - ShieldConfiguration() - } + // MARK: - 카테고리를 통해 어플리케이션이 제한된 앱 + override func configuration( + shielding application: Application, + in category: ActivityCategory) -> ShieldConfiguration { + // Customize the shield as needed for applications shielded because of their category. + guard let displayName = application.localizedDisplayName, + let categoryName = category.localizedDisplayName else { + return setShieldConfig("확인불가 앱") + } + return setShieldConfig(categoryName + " " + displayName, hasSecondaryButton: true) + } + // MARK: - 웹 도메인만 제한된 앱 override func configuration(shielding webDomain: WebDomain) -> ShieldConfiguration { // Customize the shield as needed for web domains. - ShieldConfiguration() + guard let displayName = webDomain.domain else { + return setShieldConfig("확인불가 웹 도메인") + } + return setShieldConfig(displayName) } - override func configuration(shielding webDomain: WebDomain, in category: ActivityCategory) -> ShieldConfiguration { - // Customize the shield as needed for web domains shielded because of their category. - ShieldConfiguration() - } + // MARK: - 카테고리를 통해 웹 도메인이 제한된 앱 + override func configuration( + shielding webDomain: WebDomain, + in category: ActivityCategory) -> ShieldConfiguration { + // Customize the shield as needed for web domains shielded because of their category. + guard let displayName = webDomain.domain, + let categoryName = category.localizedDisplayName else { + return setShieldConfig("확인불가 웹 도메인") + } + return setShieldConfig(categoryName + " " + displayName) + } } From 5580f3de0ac49686c725a549292fcdfd2162315a Mon Sep 17 00:00:00 2001 From: Zoe Date: Sun, 14 Jan 2024 09:56:06 +0900 Subject: [PATCH 03/16] =?UTF-8?q?[Feat/#80]=20=EC=B0=A8=EB=8B=A8=20?= =?UTF-8?q?=ED=9B=84=20=EC=95=A1=EC=85=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ShiledAction/ShieldActionExtension.swift | 97 +++++++++++++++---- 1 file changed, 78 insertions(+), 19 deletions(-) diff --git a/HMH_iOS/ShiledAction/ShieldActionExtension.swift b/HMH_iOS/ShiledAction/ShieldActionExtension.swift index 4c5ddb3..36a7dc5 100644 --- a/HMH_iOS/ShiledAction/ShieldActionExtension.swift +++ b/HMH_iOS/ShiledAction/ShieldActionExtension.swift @@ -1,35 +1,94 @@ // // ShieldActionExtension.swift -// ShiledAction +// ShieldAction // -// Created by 지희의 MAC on 1/9/24. +// Created by Yun Dongbeom on 2023/08/08. // import ManagedSettings +import UIKit // Override the functions below to customize the shield actions used in various situations. // The system provides a default response for any functions that your subclass doesn't override. // Make sure that your class name matches the NSExtensionPrincipalClass in your Info.plist. +// MARK: - ShieldAction +/// 설정한 스케쥴 시간 중 FamilyActivitySelection으로 설정한 앱/웹 도메인 접근 시 +/// 사용을 제한하는 Block View에서 버튼 클릭 시 동작을 작성할 수 있습니다. class ShieldActionExtension: ShieldActionDelegate { - override func handle(action: ShieldAction, for application: ApplicationToken, completionHandler: @escaping (ShieldActionResponse) -> Void) { - // Handle the action as needed. - switch action { - case .primaryButtonPressed: - completionHandler(.close) - case .secondaryButtonPressed: - completionHandler(.defer) - @unknown default: - fatalError() + + let userNotiCenter = UNUserNotificationCenter.current() + // MARK: ApplicationToken으로 설정 된 앱에서 버튼 클릭 시 동작을 설정합니다. + /// handle 메서드의 인자인 ShieldAction은 두 가지 case로 나누어집니다. + /// - .primaryButtonPressed : ShieldConfiguration의 primaryButtonLabel에 해당됩니다. + /// - .secondaryButtonPressed: ShieldConfiguration의 secondaryButtonLabel에 해당됩니다. + /// * case를 구분하지 않거나, 사용하지 않을 경우, 모든 버튼 클릭 시 동작하도록 할 수 있습니다. + /// * ShieldConfiguration로 설정 된 secondaryButtonLabel이 없을 경우, 해당 case를 사용할 수 없습니다. + override func handle( + action: ShieldAction, + for application: ApplicationToken, + completionHandler: @escaping (ShieldActionResponse) -> Void) { + // Handle the action as needed. + switch action { + case .primaryButtonPressed: + /// 시스템이 현재 어플리케이션이나 웹 브라우저를 닫도록 합니다. + completionHandler(.close) + case .secondaryButtonPressed: + /// 액션에 대한 응답을 지연시키며 뷰를 갱신합니다. + let dailyStore = ManagedSettingsStore() + // dailyStore.clearAllSettings() + requestSendNoti(seconds: 1) + completionHandler(.defer) + @unknown default: + fatalError() + } } - } - override func handle(action: ShieldAction, for webDomain: WebDomainToken, completionHandler: @escaping (ShieldActionResponse) -> Void) { - // Handle the action as needed. - completionHandler(.close) - } + // MARK: WebDomainToken으로 설정 된 웹에서 버튼 클릭 시 동작을 설정합니다. + override func handle( + action: ShieldAction, + for webDomain: WebDomainToken, + completionHandler: @escaping (ShieldActionResponse) -> Void) { + // Handle the action as needed. + completionHandler(.close) + } - override func handle(action: ShieldAction, for category: ActivityCategoryToken, completionHandler: @escaping (ShieldActionResponse) -> Void) { - // Handle the action as needed. - completionHandler(.close) + // MARK: ActivityCategoryToken으로 설정 된 웹에서 버튼 클릭 시 동작을 설정합니다. + /// ActivityCategory는 각 Application이 App Category를 기준으로 분류 시킨 상위 카테고리 그룹입니다. + /// ActivityCategory 내의 모든 Application 설정 시 ActivityCategory으로 설정하였다고 시스템은 인식합니다. + override func handle( + action: ShieldAction, + for category: ActivityCategoryToken, + completionHandler: @escaping (ShieldActionResponse) -> Void) { + switch action { + case .primaryButtonPressed: + /// 시스템이 현재 어플리케이션이나 웹 브라우저를 닫도록 합니다. + completionHandler(.close) + case .secondaryButtonPressed: + /// 추가 동작이 없으며 뷰를 갱신하지 않습니다. + completionHandler(.none) + @unknown default: + fatalError() + } + } + func requestSendNoti(seconds: Double) { + let notiContent = UNMutableNotificationContent() + notiContent.title = "하면함" + notiContent.body = "이용 시간을 연장해주세요" + notiContent.userInfo = ["targetScene": "splash"] // 푸시 받을때 오는 데이터 + + // 알림이 trigger되는 시간 설정 + let trigger = UNTimeIntervalNotificationTrigger(timeInterval: seconds, repeats: false) + + let request = UNNotificationRequest( + identifier: UUID().uuidString, + content: notiContent, + trigger: trigger + ) + + userNotiCenter.add(request) { (error) in + print(#function, error) + } + } } + From 302ff86baa0df543d5c5c7edc93fb1e781543e51 Mon Sep 17 00:00:00 2001 From: Zoe Date: Sun, 14 Jan 2024 20:54:52 +0900 Subject: [PATCH 04/16] =?UTF-8?q?[Fix/#80]=20=ED=88=AC=EB=AA=85=20?= =?UTF-8?q?=EB=B0=B0=EA=B2=BD=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ios_limit_time_img.imageset/Contents.json | 6 +++--- .../img_ios_limit.png | Bin 0 -> 4546 bytes .../img_ios_limit@2x.png | Bin 0 -> 12388 bytes .../img_ios_limit@3x.png | Bin 0 -> 36101 bytes .../ios_limit_time_img.png | Bin 2710 -> 0 bytes .../ios_limit_time_img@2x.png | Bin 6610 -> 0 bytes .../ios_limit_time_img@3x.png | Bin 17195 -> 0 bytes 7 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/img_ios_limit.png create mode 100644 HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/img_ios_limit@2x.png create mode 100644 HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/img_ios_limit@3x.png delete mode 100644 HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/ios_limit_time_img.png delete mode 100644 HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/ios_limit_time_img@2x.png delete mode 100644 HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/ios_limit_time_img@3x.png diff --git a/HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/Contents.json b/HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/Contents.json index cd60202..6497ffc 100644 --- a/HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/Contents.json +++ b/HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "ios_limit_time_img.png", + "filename" : "img_ios_limit.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "ios_limit_time_img@2x.png", + "filename" : "img_ios_limit@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "ios_limit_time_img@3x.png", + "filename" : "img_ios_limit@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/img_ios_limit.png b/HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/img_ios_limit.png new file mode 100644 index 0000000000000000000000000000000000000000..e0dc607f076a2b53bfea661b099ff03e5a0c6b54 GIT binary patch literal 4546 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൥Z%;P0f`r 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 JPDHLkV1mNjS-1cI literal 0 HcmV?d00001 diff --git a/HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/ios_limit_time_img.png b/HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/ios_limit_time_img.png deleted file mode 100644 index 2f6de0c61967d22f8e8edbedfdf3b230db43afc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2710 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 ND9fwKRm*$|{vXt8rQZMm diff --git a/HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/ios_limit_time_img@3x.png b/HMH_iOS/ShiledConfig/Assets.xcassets/ios_limit_time_img.imageset/ios_limit_time_img@3x.png deleted file mode 100644 index b63cd08e5e23ee71866604610dd0962b1bf688a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17195 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 khK7b}& Date: Mon, 15 Jan 2024 01:32:47 +0900 Subject: [PATCH 05/16] =?UTF-8?q?[Add/#80]=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HMH_iOS/DeviceReport/ActivityReport.swift | 8 ++++++++ HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj | 8 ++++++++ HMH_iOS/HMH_iOS/Global/Extension/UserDefault+.swift | 8 ++++++++ 3 files changed, 24 insertions(+) create mode 100644 HMH_iOS/DeviceReport/ActivityReport.swift create mode 100644 HMH_iOS/HMH_iOS/Global/Extension/UserDefault+.swift diff --git a/HMH_iOS/DeviceReport/ActivityReport.swift b/HMH_iOS/DeviceReport/ActivityReport.swift new file mode 100644 index 0000000..1ca26ba --- /dev/null +++ b/HMH_iOS/DeviceReport/ActivityReport.swift @@ -0,0 +1,8 @@ +// +// ActivityReport.swift +// DeviceReport +// +// Created by 지희의 MAC on 1/15/24. +// + +import Foundation diff --git a/HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj b/HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj index 323e8cc..da8389c 100644 --- a/HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj +++ b/HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj @@ -65,6 +65,8 @@ 17CF9FCF2B4F1A91000DD09C /* MyGoalTimeCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17CF9FCE2B4F1A91000DD09C /* MyGoalTimeCell.swift */; }; 17CF9FD12B4F31C0000DD09C /* BlackHoleImageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17CF9FD02B4F31C0000DD09C /* BlackHoleImageCell.swift */; }; 360D11082B536746008BE85A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 360D11072B536746008BE85A /* Assets.xcassets */; }; + 360D110E2B541DB4008BE85A /* UserDefault+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 360D110D2B541DB4008BE85A /* UserDefault+.swift */; }; + 360D11102B5443FD008BE85A /* ActivityReport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 360D110F2B5443FD008BE85A /* ActivityReport.swift */; }; 363863BA2B50782E000FE5E7 /* CreateChallengeResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 363863B92B50782E000FE5E7 /* CreateChallengeResponseDTO.swift */; }; 363863BD2B5129F2000FE5E7 /* Lottie in Frameworks */ = {isa = PBXBuildFile; productRef = 363863BC2B5129F2000FE5E7 /* Lottie */; }; 364923602B4ED47000BF7ACA /* SwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3649235F2B4ED47000BF7ACA /* SwiftUIView.swift */; }; @@ -270,6 +272,8 @@ 17CF9FCE2B4F1A91000DD09C /* MyGoalTimeCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyGoalTimeCell.swift; sourceTree = ""; }; 17CF9FD02B4F31C0000DD09C /* BlackHoleImageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlackHoleImageCell.swift; sourceTree = ""; }; 360D11072B536746008BE85A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 360D110D2B541DB4008BE85A /* UserDefault+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserDefault+.swift"; sourceTree = ""; }; + 360D110F2B5443FD008BE85A /* ActivityReport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityReport.swift; sourceTree = ""; }; 363863B92B50782E000FE5E7 /* CreateChallengeResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateChallengeResponseDTO.swift; sourceTree = ""; }; 3649235F2B4ED47000BF7ACA /* SwiftUIView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUIView.swift; sourceTree = ""; }; 364923612B4F4E7D00BF7ACA /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = ""; }; @@ -560,6 +564,7 @@ 36A3D9BB2B3EBD2D007EA272 /* UIScreen+.swift */, 3666C88C2B471B1D00564874 /* UIImage+.swift */, 0B17D3F02B51AD4B00CFA3B7 /* UIViewController+.swift */, + 360D110D2B541DB4008BE85A /* UserDefault+.swift */, ); path = Extension; sourceTree = ""; @@ -977,6 +982,7 @@ 3666C86C2B45F4B200564874 /* TotalActivityView.swift */, 3666C86E2B45F4B200564874 /* Info.plist */, 3666C86F2B45F4B200564874 /* DeviceReport.entitlements */, + 360D110F2B5443FD008BE85A /* ActivityReport.swift */, ); path = DeviceReport; sourceTree = ""; @@ -1304,6 +1310,7 @@ 174AF49A2B447CFB00450D07 /* ChanllengeViews.swift in Sources */, 17CF9FC92B4EE964000DD09C /* AppUsingProgressViewCell.swift in Sources */, 0B000CEB2B4D9D9100AEC582 /* SelectTotalTimeController.swift in Sources */, + 360D110E2B541DB4008BE85A /* UserDefault+.swift in Sources */, 17314F872B49853C0089A551 /* HMHQuitAlert.swift in Sources */, 364923A02B505F2000BF7ACA /* CreateChallengeRequestDTO.swift in Sources */, 0BA193B62B4D08B7007E3F9C /* ProblemSurveyViewController.swift in Sources */, @@ -1386,6 +1393,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 360D11102B5443FD008BE85A /* ActivityReport.swift in Sources */, 3666C86D2B45F4B200564874 /* TotalActivityView.swift in Sources */, 3666C8692B45F4B200564874 /* DeviceReport.swift in Sources */, 3666C86B2B45F4B200564874 /* TotalActivityReport.swift in Sources */, diff --git a/HMH_iOS/HMH_iOS/Global/Extension/UserDefault+.swift b/HMH_iOS/HMH_iOS/Global/Extension/UserDefault+.swift new file mode 100644 index 0000000..0485da3 --- /dev/null +++ b/HMH_iOS/HMH_iOS/Global/Extension/UserDefault+.swift @@ -0,0 +1,8 @@ +// +// UserDefault+.swift +// HMH_iOS +// +// Created by 지희의 MAC on 1/14/24. +// + +import Foundation From 1824fad1d97e34878b76791248bd392d82f06551 Mon Sep 17 00:00:00 2001 From: Zoe Date: Mon, 15 Jan 2024 01:33:34 +0900 Subject: [PATCH 06/16] =?UTF-8?q?[Add/#80]=20=EA=B3=B5=EC=9C=A0=EB=A5=BC?= =?UTF-8?q?=20=EC=9C=84=ED=95=9C=20=EB=B3=80=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HMH_iOS/DeviceReport/ActivityReport.swift | 27 ++++++++++ HMH_iOS/DeviceReport/DeviceReport.swift | 2 +- .../DeviceReport/TotalActivityReport.swift | 51 +++++++++++++++---- .../ShieldConfigurationExtension.swift | 2 +- 4 files changed, 70 insertions(+), 12 deletions(-) diff --git a/HMH_iOS/DeviceReport/ActivityReport.swift b/HMH_iOS/DeviceReport/ActivityReport.swift index 1ca26ba..6cedfbd 100644 --- a/HMH_iOS/DeviceReport/ActivityReport.swift +++ b/HMH_iOS/DeviceReport/ActivityReport.swift @@ -6,3 +6,30 @@ // import Foundation + +// MARK: - Device Activity Report 관련 데이터 모델이 정의되어 있는 파일입니다. +import Foundation +import ManagedSettings + +struct ActivityReport { + let totalDuration: TimeInterval + let apps: [AppDeviceActivity] +} + +struct AppDeviceActivity: Identifiable { + var id: String + var displayName: String + var duration: TimeInterval + var numberOfPickups: Int + var token: ApplicationToken? +} + +extension TimeInterval { + /// TimeInterval 타입 값을 00:00 형식의 String으로 변환해주는 메서드 + func toString() -> String { + let time = NSInteger(self) + let minutes = (time / 60) % 60 + let hours = (time / 3600) + return String(format: "%0.2d:%0.2d", hours,minutes) + } +} diff --git a/HMH_iOS/DeviceReport/DeviceReport.swift b/HMH_iOS/DeviceReport/DeviceReport.swift index b76e05b..34dabb3 100644 --- a/HMH_iOS/DeviceReport/DeviceReport.swift +++ b/HMH_iOS/DeviceReport/DeviceReport.swift @@ -13,7 +13,7 @@ struct DeviceReport: DeviceActivityReportExtension { var body: some DeviceActivityReportScene { // Create a report for each DeviceActivityReport.Context that your app supports. TotalActivityReport { totalActivity in - TotalActivityView(totalActivity: totalActivity) + TotalActivityView(totalActivity: totalActivity.totalDuration.toString()) } // Add more reports here... } diff --git a/HMH_iOS/DeviceReport/TotalActivityReport.swift b/HMH_iOS/DeviceReport/TotalActivityReport.swift index 3a1116e..96555c3 100644 --- a/HMH_iOS/DeviceReport/TotalActivityReport.swift +++ b/HMH_iOS/DeviceReport/TotalActivityReport.swift @@ -8,31 +8,62 @@ import DeviceActivity import SwiftUI +// MARK: - 각각의 Device Activity Report들에 대응하는 컨텍스트 정의 extension DeviceActivityReport.Context { // If your app initializes a DeviceActivityReport with this context, then the system will use // your extension's corresponding DeviceActivityReportScene to render the contents of the // report. + /// 해당 리포트의 내용 렌더링에 사용할 DeviceActivityReportScene에 대응하는 익스텐션이 필요합니다. ex) TotalActivityReport static let totalActivity = Self("Total Activity") } +// MARK: - Device Activity Report의 내용을 어떻게 구성할 지 설정 struct TotalActivityReport: DeviceActivityReportScene { // Define which context your scene will represent. + /// 보여줄 리포트에 대한 컨텍스트를 정의해줍니다. let context: DeviceActivityReport.Context = .totalActivity // Define the custom configuration and the resulting view for this report. - let content: (String) -> TotalActivityView + /// 어떤 데이터를 사용해서 어떤 뷰를 보여줄 지 정의해줍니다. (SwiftUI View) + let content: (ActivityReport) -> TotalActivityView - func makeConfiguration(representing data: DeviceActivityResults) async -> String { + /// DeviceActivityResults 데이터를 받아서 필터링 + func makeConfiguration( + representing data: DeviceActivityResults) async -> ActivityReport { // Reformat the data into a configuration that can be used to create // the report's view. - let formatter = DateComponentsFormatter() - formatter.allowedUnits = [.day, .hour, .minute, .second] - formatter.unitsStyle = .abbreviated - formatter.zeroFormattingBehavior = .dropAll + var totalActivityDuration: Double = 0 /// 총 스크린 타임 시간 + var list: [AppDeviceActivity] = [] /// 사용 앱 리스트 - let totalActivityDuration = await data.flatMap { $0.activitySegments }.reduce(0, { - $0 + $1.totalActivityDuration - }) - return formatter.string(from: totalActivityDuration) ?? "No activity data" + /// DeviceActivityResults 데이터에서 화면에 보여주기 위해 필요한 내용을 추출해줍니다. + for await eachData in data { + /// 특정 시간 간격 동안 사용자의 활동 + for await activitySegment in eachData.activitySegments { + /// 활동 세그먼트 동안 사용자의 카테고리 별 Device Activity + for await categoryActivity in activitySegment.categories { + /// 이 카테고리의 totalActivityDuration에 기여한 사용자의 application Activity + for await applicationActivity in categoryActivity.applications { + let appName = (applicationActivity.application.localizedDisplayName ?? "nil") /// 앱 이름 + let bundle = (applicationActivity.application.bundleIdentifier ?? "nil") /// 앱 번들id + let duration = applicationActivity.totalActivityDuration /// 앱의 total activity 기간 + totalActivityDuration += duration + let numberOfPickups = applicationActivity.numberOfPickups /// 앱에 대해 직접적인 pickup 횟수 + let token = applicationActivity.application.token /// 앱의 토큰 + let appActivity = AppDeviceActivity( + id: bundle, + displayName: appName, + duration: duration, + numberOfPickups: numberOfPickups, + token: token + ) + list.append(appActivity) + } + } + + } + } + + /// 필터링된 ActivityReport 데이터들을 반환 + return ActivityReport(totalDuration: totalActivityDuration, apps: list) } } diff --git a/HMH_iOS/ShiledConfig/ShieldConfigurationExtension.swift b/HMH_iOS/ShiledConfig/ShieldConfigurationExtension.swift index 184ed42..bc4a5a2 100644 --- a/HMH_iOS/ShiledConfig/ShieldConfigurationExtension.swift +++ b/HMH_iOS/ShiledConfig/ShieldConfigurationExtension.swift @@ -30,7 +30,7 @@ class ShieldConfigurationExtension: ShieldConfigurationDataSource { color: .white ) let CUSTOM_SUBTITLE = ShieldConfiguration.Label( - text: "이제 \(tokenName)을(를) 사용할 수 없어요\n※ 알림이 오지 않는다면 설정에서 푸시 알림 권한을 허용해 주세요", + text: "이제 \(tokenName)을(를) 사용할 수 없어요\n\n※ 알림이 오지 않는다면 설정에서 푸시 알림 권한을 허용해 주세요", color: UIColor(red: 0.55, green: 0.55, blue: 0.62, alpha: 1) ) let CUSTOM_PRIMARY_BUTTON_LABEL = ShieldConfiguration.Label( From a1903c4f753c90d57beef8c0c9112e8db533ead1 Mon Sep 17 00:00:00 2001 From: Zoe Date: Mon, 15 Jan 2024 12:33:35 +0900 Subject: [PATCH 07/16] =?UTF-8?q?[Feat/#80]=20ShieldView=20-=20push=20Aler?= =?UTF-8?q?t=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj | 4 + .../Common/CustomAlert/HMHPushAlert.swift | 104 ++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 HMH_iOS/HMH_iOS/Presentation/Common/CustomAlert/HMHPushAlert.swift diff --git a/HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj b/HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj index da8389c..5504918 100644 --- a/HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj +++ b/HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj @@ -86,6 +86,7 @@ 364923A02B505F2000BF7ACA /* CreateChallengeRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3649239F2B505F2000BF7ACA /* CreateChallengeRequestDTO.swift */; }; 364C4E712B4BC9780015729C /* AppAddButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 364C4E702B4BC9780015729C /* AppAddButtonView.swift */; }; 364C4E732B4BF27C0015729C /* AppAddCollectionReusableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 364C4E722B4BF27C0015729C /* AppAddCollectionReusableView.swift */; }; + 36610E3C2B5463280044F1CA /* HMHPushAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36610E3B2B5463280044F1CA /* HMHPushAlert.swift */; }; 3666C84D2B45F41300564874 /* HMHAppSelectButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3666C84C2B45F41300564874 /* HMHAppSelectButtonView.swift */; }; 3666C8552B45F47600564874 /* DeviceActivity.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3666C8542B45F47600564874 /* DeviceActivity.framework */; }; 3666C8582B45F47600564874 /* DeviceActivityMonitorExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3666C8572B45F47600564874 /* DeviceActivityMonitorExtension.swift */; }; @@ -292,6 +293,7 @@ 3649239F2B505F2000BF7ACA /* CreateChallengeRequestDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateChallengeRequestDTO.swift; sourceTree = ""; }; 364C4E702B4BC9780015729C /* AppAddButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppAddButtonView.swift; sourceTree = ""; }; 364C4E722B4BF27C0015729C /* AppAddCollectionReusableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppAddCollectionReusableView.swift; sourceTree = ""; }; + 36610E3B2B5463280044F1CA /* HMHPushAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HMHPushAlert.swift; sourceTree = ""; }; 3666C84C2B45F41300564874 /* HMHAppSelectButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HMHAppSelectButtonView.swift; sourceTree = ""; }; 3666C8522B45F47600564874 /* DeviceMonitor.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = DeviceMonitor.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 3666C8542B45F47600564874 /* DeviceActivity.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DeviceActivity.framework; path = System/Library/Frameworks/DeviceActivity.framework; sourceTree = SDKROOT; }; @@ -790,6 +792,7 @@ 17314F822B486BEC0089A551 /* AlertViewController.swift */, 17314F842B497FDE0089A551 /* HMHLogoutAlert.swift */, 17314F862B49853C0089A551 /* HMHQuitAlert.swift */, + 36610E3B2B5463280044F1CA /* HMHPushAlert.swift */, ); path = CustomAlert; sourceTree = ""; @@ -1284,6 +1287,7 @@ 0B8A89BC2B369F2D00688BA6 /* UIView+.swift in Sources */, 0B8A89AF2B369E4300688BA6 /* HomeModel.swift in Sources */, 3666C89F2B485C8F00564874 /* DateCollectionViewCell.swift in Sources */, + 36610E3C2B5463280044F1CA /* HMHPushAlert.swift in Sources */, 3666C87A2B45F4F900564874 /* SelectedBlocker.swift in Sources */, 0B17D3ED2B5108D200CFA3B7 /* UserDefaultWrapper.swift in Sources */, 0BC0EBD42B494459003EF5D4 /* OnboardingSwipeView.swift in Sources */, diff --git a/HMH_iOS/HMH_iOS/Presentation/Common/CustomAlert/HMHPushAlert.swift b/HMH_iOS/HMH_iOS/Presentation/Common/CustomAlert/HMHPushAlert.swift new file mode 100644 index 0000000..a8eb3b0 --- /dev/null +++ b/HMH_iOS/HMH_iOS/Presentation/Common/CustomAlert/HMHPushAlert.swift @@ -0,0 +1,104 @@ +// +// HMHPushAlert.swift +// HMH_iOS +// +// Created by 지희의 MAC on 1/15/24. +// + +import UIKit + +import SnapKit +import Then + +final class HMHPushAlert: UIView { + weak var delegate: AlertDelegate? + var appName: String = "" + + private let titleLabel = UILabel().then { + $0.textColor = .whiteText + $0.font = .iosText5Medium16 + $0.textAlignment = .center + $0.numberOfLines = 2 + } + + private let descriptionLabel = UILabel().then { + $0.text = StringLiteral.AlertDescription.push + $0.textColor = .whiteText + $0.font = .iosDetail1Regular14 + $0.textAlignment = .center + $0.setTextWithLineHeight(text: StringLiteral.AlertDescription.quit, lineHeight: 21) + $0.numberOfLines = .zero + } + + private let buttonStackView = UIStackView().then { + $0.axis = .horizontal + $0.distribution = .fillEqually + $0.spacing = 7 + } + + private let cancelButton = CustomAlertButton(buttonType: .disabled, buttonText: StringLiteral.AlertButton.confirm) + private let confirmButton = CustomAlertButton(buttonType: .enabled, buttonText: StringLiteral.AlertButton.cancel) + + override init(frame: CGRect) { + super.init(frame: frame) + setAddTarget() + configureView() + setUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setUI() { + setHierarchy() + setConstraints() + } + + private func setHierarchy() { + self.addSubviews(titleLabel, descriptionLabel, buttonStackView) + buttonStackView.addArrangeSubViews([cancelButton, confirmButton]) + } + + private func setConstraints() { + titleLabel.snp.makeConstraints { + $0.top.equalToSuperview().inset(35.adjusted) + $0.horizontalEdges.equalToSuperview() + } + + descriptionLabel.snp.makeConstraints { + $0.top.equalTo(titleLabel.snp.bottom).offset(12.adjusted) + $0.horizontalEdges.equalToSuperview().inset(44.adjusted) + } + + buttonStackView.snp.makeConstraints { + $0.horizontalEdges.equalToSuperview().inset(20.adjustedWidth) + $0.bottom.equalToSuperview().inset(19.adjusted) + } + } + + private func setAddTarget() { + cancelButton.addTarget(self, action: #selector(cancelButtonTapped), for: .touchUpInside) + confirmButton.addTarget(self, action: #selector(confirmButtonTapped), for: .touchUpInside) + } + + private func configureView() { + self.do { + $0.makeCornerRound(radius: 10.adjusted) + $0.backgroundColor = .gray7 + } + } + + func setAppName(appName: String) { + self.titleLabel.text = appName + StringLiteral.AlertTitle.push + } + + @objc func cancelButtonTapped() { + delegate?.alertDismissTapped() + } + + @objc func confirmButtonTapped() { + //여기서 연장 / 실패 서버통신 + delegate?.alertDismissTapped() + } +} From 3d86c84d1a4f5c75ac9470f91d1d5ea4fdd5ea1a Mon Sep 17 00:00:00 2001 From: Zoe Date: Mon, 15 Jan 2024 12:33:57 +0900 Subject: [PATCH 08/16] =?UTF-8?q?[Feat/#80]=20ShieldView=20-=20Alert=20cas?= =?UTF-8?q?e=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CustomAlert/AlertViewController.swift | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/HMH_iOS/HMH_iOS/Presentation/Common/CustomAlert/AlertViewController.swift b/HMH_iOS/HMH_iOS/Presentation/Common/CustomAlert/AlertViewController.swift index b6c5769..3f28cfe 100644 --- a/HMH_iOS/HMH_iOS/Presentation/Common/CustomAlert/AlertViewController.swift +++ b/HMH_iOS/HMH_iOS/Presentation/Common/CustomAlert/AlertViewController.swift @@ -10,6 +10,7 @@ import UIKit enum AlertType { case HMHLogoutAlert case HMHQuitALert + case HMHPushALert } final class AlertViewController: UIViewController { @@ -18,11 +19,14 @@ final class AlertViewController: UIViewController { private let logoutAlert = HMHLogoutAlert() private let quitAlert = HMHQuitAlert() + private let pushAlert = HMHPushAlert() + + var appName = "" override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .black.withAlphaComponent(0.7) - + pushAlert.setAppName(appName: appName) setDelegate() setAlertType() setUI() @@ -34,7 +38,7 @@ final class AlertViewController: UIViewController { } private func setHierarchy() { - view.addSubviews(logoutAlert, quitAlert) + view.addSubviews(logoutAlert, quitAlert, pushAlert) } private func setConstraint() { @@ -49,27 +53,38 @@ final class AlertViewController: UIViewController { $0.height.equalTo(203.adjusted) $0.width.equalTo(293.adjusted) } + + pushAlert.snp.makeConstraints { + $0.center.equalToSuperview() + $0.height.equalTo(222.adjusted) + $0.width.equalTo(293.adjusted) + } } private func setAlertType() { switch alertType { case .HMHLogoutAlert: - setAlertView(logout: true, quit: false) + setAlertView(logout: true, quit: false, push: false) case .HMHQuitALert: - setAlertView(logout: false, quit: true) + setAlertView(logout: false, quit: true, push: false) + case .HMHPushALert: + setAlertView(logout: false, quit: false, push: true) default: break } } - private func setAlertView(logout: Bool, quit: Bool) { + private func setAlertView(logout: Bool, quit: Bool, push: Bool) { logoutAlert.isHidden = !logout quitAlert.isHidden = !quit + pushAlert.isHidden = !push + } func setDelegate() { logoutAlert.delegate = self quitAlert.delegate = self + pushAlert.delegate = self } func emptyActions() { @@ -85,7 +100,6 @@ extension AlertViewController: AlertDelegate { func enabledButtonTapped() { dismiss(animated: false) { let loginViewController = LoginViewController() - if let window = UIApplication.shared.windows.first { let navigationController = UINavigationController(rootViewController: loginViewController) navigationController.isNavigationBarHidden = true From 15dc66184291a1e8c43bcb03c1a21f4e555cd622 Mon Sep 17 00:00:00 2001 From: Zoe Date: Mon, 15 Jan 2024 12:35:22 +0900 Subject: [PATCH 09/16] =?UTF-8?q?[Feat/#80]=20ShieldView=20-=20Alert=20Str?= =?UTF-8?q?ing=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HMH_iOS/HMH_iOS/Global/Literals/String/String.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/HMH_iOS/HMH_iOS/Global/Literals/String/String.swift b/HMH_iOS/HMH_iOS/Global/Literals/String/String.swift index 393dd4c..be85a55 100644 --- a/HMH_iOS/HMH_iOS/Global/Literals/String/String.swift +++ b/HMH_iOS/HMH_iOS/Global/Literals/String/String.swift @@ -84,10 +84,12 @@ enum StringLiteral { enum AlertTitle { static let logout = "HMH을 로그아웃 하실 건가요?" static let quit = "HMH을 탈퇴 하실 건가요?" + static let push = "을(를)\n계속 사용하시겠어요?" } enum AlertDescription { static let quit = "회원탈퇴 후 유저의 정보는 30일 동안 임시보관 후 영구 삭제됩니다." + static let push = "사용 시간을 연장하면\n챌린지를 실패해요" } enum OnboardingButton { From d575016e3fd37a64febaae8cdf15349df3978d8a Mon Sep 17 00:00:00 2001 From: Zoe Date: Mon, 15 Jan 2024 12:36:38 +0900 Subject: [PATCH 10/16] =?UTF-8?q?[Add/#80]=20ShieldView=20-=20=EB=AA=A8?= =?UTF-8?q?=EB=8B=88=ED=84=B0=EB=A7=81=EC=9D=84=20=EC=9C=84=ED=95=9C=20Ext?= =?UTF-8?q?ension=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DeviceMonitor/HMHMonitorExtension.swift | 26 +++++++++++++++++++ HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj | 4 +++ 2 files changed, 30 insertions(+) create mode 100644 HMH_iOS/DeviceMonitor/HMHMonitorExtension.swift diff --git a/HMH_iOS/DeviceMonitor/HMHMonitorExtension.swift b/HMH_iOS/DeviceMonitor/HMHMonitorExtension.swift new file mode 100644 index 0000000..38e349f --- /dev/null +++ b/HMH_iOS/DeviceMonitor/HMHMonitorExtension.swift @@ -0,0 +1,26 @@ +// +// HMHMonitorExtension.swift +// DeviceMonitor +// +// Created by 지희의 MAC on 1/15/24. +// + +import Foundation +import DeviceActivity +import ManagedSettings + +class MyMonitorExtension: DeviceActivityMonitor { + let store = ManagedSettingsStore() + + + // You can use the `store` property to shield apps when an interval starts, ends, or meets a threshold. + override func intervalDidStart(for activity: DeviceActivityName) { + super.intervalDidStart(for: activity) + + + // Shield selected applications. +// let model = MyModel() +// let applications = model.selectionToShield.applications +// store.shield.applications = applications.isEmpty ? nil : applications + } +} diff --git a/HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj b/HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj index 5504918..ca877ef 100644 --- a/HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj +++ b/HMH_iOS/HMH_iOS.xcodeproj/project.pbxproj @@ -86,6 +86,7 @@ 364923A02B505F2000BF7ACA /* CreateChallengeRequestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3649239F2B505F2000BF7ACA /* CreateChallengeRequestDTO.swift */; }; 364C4E712B4BC9780015729C /* AppAddButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 364C4E702B4BC9780015729C /* AppAddButtonView.swift */; }; 364C4E732B4BF27C0015729C /* AppAddCollectionReusableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 364C4E722B4BF27C0015729C /* AppAddCollectionReusableView.swift */; }; + 365AF6672B54547800BAC51F /* HMHMonitorExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 365AF6662B54547800BAC51F /* HMHMonitorExtension.swift */; }; 36610E3C2B5463280044F1CA /* HMHPushAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36610E3B2B5463280044F1CA /* HMHPushAlert.swift */; }; 3666C84D2B45F41300564874 /* HMHAppSelectButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3666C84C2B45F41300564874 /* HMHAppSelectButtonView.swift */; }; 3666C8552B45F47600564874 /* DeviceActivity.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3666C8542B45F47600564874 /* DeviceActivity.framework */; }; @@ -293,6 +294,7 @@ 3649239F2B505F2000BF7ACA /* CreateChallengeRequestDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateChallengeRequestDTO.swift; sourceTree = ""; }; 364C4E702B4BC9780015729C /* AppAddButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppAddButtonView.swift; sourceTree = ""; }; 364C4E722B4BF27C0015729C /* AppAddCollectionReusableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppAddCollectionReusableView.swift; sourceTree = ""; }; + 365AF6662B54547800BAC51F /* HMHMonitorExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HMHMonitorExtension.swift; sourceTree = ""; }; 36610E3B2B5463280044F1CA /* HMHPushAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HMHPushAlert.swift; sourceTree = ""; }; 3666C84C2B45F41300564874 /* HMHAppSelectButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HMHAppSelectButtonView.swift; sourceTree = ""; }; 3666C8522B45F47600564874 /* DeviceMonitor.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = DeviceMonitor.appex; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -973,6 +975,7 @@ 3666C8572B45F47600564874 /* DeviceActivityMonitorExtension.swift */, 3666C8592B45F47600564874 /* Info.plist */, 3666C85A2B45F47600564874 /* DeviceMonitor.entitlements */, + 365AF6662B54547800BAC51F /* HMHMonitorExtension.swift */, ); path = DeviceMonitor; sourceTree = ""; @@ -1389,6 +1392,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 365AF6672B54547800BAC51F /* HMHMonitorExtension.swift in Sources */, 3666C8582B45F47600564874 /* DeviceActivityMonitorExtension.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; From be3529bec52348a6c2e853ca4fe8ef76633f9eb7 Mon Sep 17 00:00:00 2001 From: Zoe Date: Mon, 15 Jan 2024 12:37:14 +0900 Subject: [PATCH 11/16] [Feat/#80] push setting --- HMH_iOS/HMH_iOS/HMH_iOS.entitlements | 2 ++ 1 file changed, 2 insertions(+) diff --git a/HMH_iOS/HMH_iOS/HMH_iOS.entitlements b/HMH_iOS/HMH_iOS/HMH_iOS.entitlements index 2d2d872..8795150 100644 --- a/HMH_iOS/HMH_iOS/HMH_iOS.entitlements +++ b/HMH_iOS/HMH_iOS/HMH_iOS.entitlements @@ -2,6 +2,8 @@ + aps-environment + development com.apple.developer.applesignin Default From bb3005e8a5be62680471d0525c158476da48cab0 Mon Sep 17 00:00:00 2001 From: Zoe Date: Mon, 15 Jan 2024 12:37:30 +0900 Subject: [PATCH 12/16] =?UTF-8?q?[Chore/#80]=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EC=BD=94=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HMH_iOS/Presentation/Challenge/SwiftUIView/SwiftUIView.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/HMH_iOS/HMH_iOS/Presentation/Challenge/SwiftUIView/SwiftUIView.swift b/HMH_iOS/HMH_iOS/Presentation/Challenge/SwiftUIView/SwiftUIView.swift index 26571ab..6aa532e 100644 --- a/HMH_iOS/HMH_iOS/Presentation/Challenge/SwiftUIView/SwiftUIView.swift +++ b/HMH_iOS/HMH_iOS/Presentation/Challenge/SwiftUIView/SwiftUIView.swift @@ -13,7 +13,6 @@ struct SwiftUIView: View { var body: some View { FamilyActivityPicker(selection: $model.newSelection) - } } From cee9f0dd9107f5a28c7599099cdd8623602a9fed Mon Sep 17 00:00:00 2001 From: Zoe Date: Mon, 15 Jan 2024 12:40:32 +0900 Subject: [PATCH 13/16] =?UTF-8?q?[Feat/#80]=20ShieldView=20-=20noti=20func?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HMH_iOS/ShiledAction/ShieldActionExtension.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/HMH_iOS/ShiledAction/ShieldActionExtension.swift b/HMH_iOS/ShiledAction/ShieldActionExtension.swift index 36a7dc5..feb68eb 100644 --- a/HMH_iOS/ShiledAction/ShieldActionExtension.swift +++ b/HMH_iOS/ShiledAction/ShieldActionExtension.swift @@ -36,7 +36,7 @@ class ShieldActionExtension: ShieldActionDelegate { /// 액션에 대한 응답을 지연시키며 뷰를 갱신합니다. let dailyStore = ManagedSettingsStore() // dailyStore.clearAllSettings() - requestSendNoti(seconds: 1) + requestSendNoti(seconds: 1, title: "") completionHandler(.defer) @unknown default: fatalError() @@ -70,11 +70,11 @@ class ShieldActionExtension: ShieldActionDelegate { fatalError() } } - func requestSendNoti(seconds: Double) { + func requestSendNoti(seconds: Double, title: String) { let notiContent = UNMutableNotificationContent() notiContent.title = "하면함" notiContent.body = "이용 시간을 연장해주세요" - notiContent.userInfo = ["targetScene": "splash"] // 푸시 받을때 오는 데이터 + notiContent.userInfo = ["AppName": title] // 푸시 받을때 오는 데이터 // 알림이 trigger되는 시간 설정 let trigger = UNTimeIntervalNotificationTrigger(timeInterval: seconds, repeats: false) From 822bb397b2c1caefa8608448cfd70aa46c9554ec Mon Sep 17 00:00:00 2001 From: Zoe Date: Mon, 15 Jan 2024 12:42:01 +0900 Subject: [PATCH 14/16] =?UTF-8?q?[Feat/#80]=20ShieldView=20-=20AppDelegate?= =?UTF-8?q?=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HMH_iOS/HMH_iOS/Application/AppDelegate.swift | 41 +++++++++++++++---- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/HMH_iOS/HMH_iOS/Application/AppDelegate.swift b/HMH_iOS/HMH_iOS/Application/AppDelegate.swift index 91b551e..a183edc 100644 --- a/HMH_iOS/HMH_iOS/Application/AppDelegate.swift +++ b/HMH_iOS/HMH_iOS/Application/AppDelegate.swift @@ -9,28 +9,51 @@ import UIKit @main class AppDelegate: UIResponder, UIApplicationDelegate { - - - + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - // Override point for customization after application launch. + let userNotiCenter = UNUserNotificationCenter.current() + userNotiCenter.delegate = self + return true } - + // MARK: UISceneSession Lifecycle - + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { // Called when a new scene session is being created. // Use this method to select a configuration to create the new scene with. return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) } - + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { // Called when the user discards a scene session. // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. // Use this method to release any resources that were specific to the discarded scenes, as they will not return. } - - } +extension AppDelegate: UNUserNotificationCenterDelegate { + func userNotificationCenter(_ center: UNUserNotificationCenter, + willPresent notification: UNNotification, + withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { + completionHandler([.list, .badge, .sound]) + } + + func userNotificationCenter(_ center: UNUserNotificationCenter, + didReceive response: UNNotificationResponse, + withCompletionHandler completionHandler: @escaping () -> Void) { + + // deep link처리 시 아래 url값 가지고 처리 + guard let appName = response.notification.request.content.userInfo.values.first as? String else { return } + showCustomAlert(appName: String(stringLiteral: appName)) + completionHandler() + } + + func showCustomAlert(appName: String) { + let pushAertViewController = AlertViewController() + pushAertViewController.appName = appName + pushAertViewController.alertType = .HMHPushALert + pushAertViewController.modalPresentationStyle = .overFullScreen + UIApplication.shared.windows.first?.rootViewController?.present(pushAertViewController, animated: false, completion: nil) + } +} From c40edc2f5b28546ce033bda13d9291bde8ad88bd Mon Sep 17 00:00:00 2001 From: Zoe Date: Mon, 15 Jan 2024 17:15:28 +0900 Subject: [PATCH 15/16] =?UTF-8?q?[Feat/#80]=20UserDefault=20=EC=84=B8?= =?UTF-8?q?=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HMH_iOS/Global/Extension/UserDefault+.swift | 4 ++++ .../Challenge/SwiftUIView/AppAddButtonView.swift | 14 +++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/HMH_iOS/HMH_iOS/Global/Extension/UserDefault+.swift b/HMH_iOS/HMH_iOS/Global/Extension/UserDefault+.swift index 0485da3..fe001be 100644 --- a/HMH_iOS/HMH_iOS/Global/Extension/UserDefault+.swift +++ b/HMH_iOS/HMH_iOS/Global/Extension/UserDefault+.swift @@ -6,3 +6,7 @@ // import Foundation + +public extension UserDefaults { + static let shared = UserDefaults(suiteName: "group.HMH")! +} diff --git a/HMH_iOS/HMH_iOS/Presentation/Challenge/SwiftUIView/AppAddButtonView.swift b/HMH_iOS/HMH_iOS/Presentation/Challenge/SwiftUIView/AppAddButtonView.swift index 33720c4..e01d19f 100644 --- a/HMH_iOS/HMH_iOS/Presentation/Challenge/SwiftUIView/AppAddButtonView.swift +++ b/HMH_iOS/HMH_iOS/Presentation/Challenge/SwiftUIView/AppAddButtonView.swift @@ -8,6 +8,7 @@ import SwiftUI import UIKit import FamilyControls +import DeviceActivity //class AppAddButtonViewModel: ObservableObject { // @Published var newSerlection: FamilyActivitySelection @@ -20,6 +21,7 @@ import FamilyControls struct AppAddButtonView: View { @EnvironmentObject var model: BlockingApplicationModel + var appGroupData: [String] = [] @State var isPresented = false var body: some View { @@ -32,8 +34,14 @@ struct AppAddButtonView: View { } .frame(width: 335, height: 68) .familyActivityPicker(isPresented: $isPresented, selection: $model.newSelection) - .onChange(of: isPresented) { oldValue, newValue in + .onChange(of: isPresented) { oldValue, newValue in if newValue == false { + let app = model.selectedApps.forEach { + print($0.bundleIdentifier?.utf8) + } + let appTokens: () = model.selectedAppsTokens.forEach { + print($0) + } let mainViewController = TabBarController() let navigationController = UINavigationController(rootViewController: mainViewController) let sceneDelegate = UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate @@ -48,6 +56,10 @@ struct AppAddButtonView: View { } .background(Color(.clear)) } + + func storeMonitor() { + + } } #Preview { From 23431b19ac6c927983f70313ac2065bd41a241e9 Mon Sep 17 00:00:00 2001 From: Zoe Date: Mon, 15 Jan 2024 22:12:57 +0900 Subject: [PATCH 16/16] =?UTF-8?q?[Fix/#80]=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HMH_iOS/DeviceReport/ActivityReport.swift | 2 -- 1 file changed, 2 deletions(-) diff --git a/HMH_iOS/DeviceReport/ActivityReport.swift b/HMH_iOS/DeviceReport/ActivityReport.swift index 6cedfbd..4f7cbc6 100644 --- a/HMH_iOS/DeviceReport/ActivityReport.swift +++ b/HMH_iOS/DeviceReport/ActivityReport.swift @@ -5,8 +5,6 @@ // Created by 지희의 MAC on 1/15/24. // -import Foundation - // MARK: - Device Activity Report 관련 데이터 모델이 정의되어 있는 파일입니다. import Foundation import ManagedSettings