From c3d0cd13f5259d96c20dce0a4205a2f240a45fdd Mon Sep 17 00:00:00 2001 From: hext Date: Tue, 19 Apr 2022 00:35:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8A=9F=E8=83=BD:=20?= =?UTF-8?q?=E6=A1=8C=E9=9D=A2=E5=B0=8F=E9=83=A8=E4=BB=B6,=20=E5=B1=95?= =?UTF-8?q?=E7=A4=BA=E6=9C=80=E8=BF=91=E6=B6=88=E6=81=AF,=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=94=B6=E5=88=B0=E6=8E=A8=E9=80=81=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=88=B7=E6=96=B0;=20=E6=96=B0=E5=A2=9E=E5=8A=9F=E8=83=BD:=201?= =?UTF-8?q?=E5=88=86=E9=92=9F=E5=86=85=E5=88=A0=E9=99=A4=E4=B8=A4=E6=9D=A1?= =?UTF-8?q?=E6=B6=88=E6=81=AF,=20=E4=BC=9A=E6=8F=90=E7=A4=BA=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E4=B8=80=E9=94=AE=E6=B8=85=E7=A9=BA=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E6=B6=88=E6=81=AF.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ios/PushDeer-iOS/Notification/Info.plist | 13 + .../Notification/Notification.entitlements | 10 + .../Notification/NotificationService.swift | 39 ++ ios/PushDeer-iOS/Podfile | 5 + ios/PushDeer-iOS/Podfile.lock | 2 +- .../PushDeer.xcodeproj/project.pbxproj | 494 +++++++++++++++++- ios/PushDeer-iOS/PushDeer/Env.swift | 8 + .../PushDeer/Model/MessageModel.swift | 13 + .../PushDeer/PushDeer-SelfHosted.entitlements | 4 + .../PushDeer/PushDeer.entitlements | 4 + ios/PushDeer-iOS/PushDeer/PushDeerApp.swift | 5 + .../PushDeer/Service/AppState.swift | 77 ++- .../PushDeer/Service/HttpRequest.swift | 4 + .../PushDeer/Service/PushDeerApi.swift | 5 + .../PushDeer/View/MessageListView.swift | 63 +++ .../PushDeer/View/SettingsView.swift | 1 + .../PushDeerClip-SelfHosted.entitlements | 4 + .../PushDeerClip/PushDeerClip.entitlements | 4 + .../AccentColor.colorset/Contents.json | 38 ++ .../AppIcon.appiconset/Contents.json | 98 ++++ .../Assets.xcassets/Contents.json | 6 + .../Assets.xcassets/Images/Contents.json | 6 + .../Images/deer.gray.imageset/Contents.json | 22 + .../Images/deer.gray.imageset/deer.gray.png | Bin 0 -> 29004 bytes .../deer.gray.imageset/deer.gray@2x.png | Bin 0 -> 109215 bytes .../WidgetBackground.colorset/Contents.json | 11 + ios/PushDeer-iOS/PushDeerWidget/Info.plist | 16 + .../PushDeerWidget.intentdefinition | 59 +++ .../PushDeerWidget/PushDeerWidget.swift | 179 +++++++ ...eerWidgetExtension-SelfHosted.entitlements | 14 + .../PushDeerWidgetExtension.entitlements | 14 + 31 files changed, 1199 insertions(+), 19 deletions(-) create mode 100644 ios/PushDeer-iOS/Notification/Info.plist create mode 100644 ios/PushDeer-iOS/Notification/Notification.entitlements create mode 100644 ios/PushDeer-iOS/Notification/NotificationService.swift create mode 100644 ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/Contents.json create mode 100644 ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/Images/Contents.json create mode 100644 ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/Images/deer.gray.imageset/Contents.json create mode 100644 ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/Images/deer.gray.imageset/deer.gray.png create mode 100644 ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/Images/deer.gray.imageset/deer.gray@2x.png create mode 100644 ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/WidgetBackground.colorset/Contents.json create mode 100644 ios/PushDeer-iOS/PushDeerWidget/Info.plist create mode 100644 ios/PushDeer-iOS/PushDeerWidget/PushDeerWidget.intentdefinition create mode 100644 ios/PushDeer-iOS/PushDeerWidget/PushDeerWidget.swift create mode 100644 ios/PushDeer-iOS/PushDeerWidget/PushDeerWidgetExtension-SelfHosted.entitlements create mode 100644 ios/PushDeer-iOS/PushDeerWidget/PushDeerWidgetExtension.entitlements diff --git a/ios/PushDeer-iOS/Notification/Info.plist b/ios/PushDeer-iOS/Notification/Info.plist new file mode 100644 index 0000000..57421eb --- /dev/null +++ b/ios/PushDeer-iOS/Notification/Info.plist @@ -0,0 +1,13 @@ + + + + + NSExtension + + NSExtensionPointIdentifier + com.apple.usernotifications.service + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).NotificationService + + + diff --git a/ios/PushDeer-iOS/Notification/Notification.entitlements b/ios/PushDeer-iOS/Notification/Notification.entitlements new file mode 100644 index 0000000..ee95ab7 --- /dev/null +++ b/ios/PushDeer-iOS/Notification/Notification.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.network.client + + + diff --git a/ios/PushDeer-iOS/Notification/NotificationService.swift b/ios/PushDeer-iOS/Notification/NotificationService.swift new file mode 100644 index 0000000..2a84990 --- /dev/null +++ b/ios/PushDeer-iOS/Notification/NotificationService.swift @@ -0,0 +1,39 @@ +// +// NotificationService.swift +// Notification +// +// Created by HEXT on 2022/4/19. +// + +import UserNotifications +import WidgetKit + +class NotificationService: UNNotificationServiceExtension { + + var contentHandler: ((UNNotificationContent) -> Void)? + var bestAttemptContent: UNMutableNotificationContent? + + override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { + self.contentHandler = contentHandler + bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) + + if let bestAttemptContent = bestAttemptContent { + // Modify the notification content here... + // bestAttemptContent.title = "\(bestAttemptContent.title) [modified]" + + contentHandler(bestAttemptContent) + } + + // 刷新所有桌面小部件 + WidgetCenter.shared.reloadAllTimelines() + } + + override func serviceExtensionTimeWillExpire() { + // Called just before the extension will be terminated by the system. + // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. + if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { + contentHandler(bestAttemptContent) + } + } + +} diff --git a/ios/PushDeer-iOS/Podfile b/ios/PushDeer-iOS/Podfile index c3582aa..2bc32c5 100644 --- a/ios/PushDeer-iOS/Podfile +++ b/ios/PushDeer-iOS/Podfile @@ -28,6 +28,11 @@ target 'PushDeerClip' do end +target 'PushDeerWidgetExtension' do + # Pods for PushDeerWidgetExtension + pod 'Moya', '~> 15.0' +end + # define unsupported pods def unsupported_pods # macCatalyst 不支持的库 diff --git a/ios/PushDeer-iOS/Podfile.lock b/ios/PushDeer-iOS/Podfile.lock index 003a15d..fe5d5e2 100644 --- a/ios/PushDeer-iOS/Podfile.lock +++ b/ios/PushDeer-iOS/Podfile.lock @@ -47,6 +47,6 @@ SPEC CHECKSUMS: WechatOpenSDK: 6a4d1436c15b3b5fe2a0bd383f3046010186da44 WoodPeckeriOS: 12ec7f38c695e51cd94a476228888dfe85d9d916 -PODFILE CHECKSUM: 1b349626994062a8291e3db07d3dbf087894c4d2 +PODFILE CHECKSUM: 42e3d8abd976589c1043ff9f9e864c275a490160 COCOAPODS: 1.11.2 diff --git a/ios/PushDeer-iOS/PushDeer.xcodeproj/project.pbxproj b/ios/PushDeer-iOS/PushDeer.xcodeproj/project.pbxproj index f5eda93..a335ba2 100644 --- a/ios/PushDeer-iOS/PushDeer.xcodeproj/project.pbxproj +++ b/ios/PushDeer-iOS/PushDeer.xcodeproj/project.pbxproj @@ -7,7 +7,21 @@ objects = { /* Begin PBXBuildFile section */ + 1C63523789DA4965F9F87DB8 /* Pods_PushDeerWidgetExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F8DCAE5BD814D7C0D2F2722 /* Pods_PushDeerWidgetExtension.framework */; }; 4812F19BB0BFEFE089BC253E /* Pods_PushDeerClip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E03C2088F4CD9F4C0848E1A5 /* Pods_PushDeerClip.framework */; }; + 5206008727CF749E00188431 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5206008627CF749E00188431 /* WidgetKit.framework */; }; + 5206008927CF749E00188431 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5206008827CF749E00188431 /* SwiftUI.framework */; }; + 5206008C27CF749E00188431 /* PushDeerWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5206008B27CF749E00188431 /* PushDeerWidget.swift */; }; + 5206008F27CF749F00188431 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5206008E27CF749F00188431 /* Assets.xcassets */; }; + 5206009127CF749F00188431 /* PushDeerWidget.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 5206008D27CF749E00188431 /* PushDeerWidget.intentdefinition */; }; + 5206009227CF749F00188431 /* PushDeerWidget.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 5206008D27CF749E00188431 /* PushDeerWidget.intentdefinition */; }; + 5206009527CF749F00188431 /* PushDeerWidgetExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 5206008527CF749E00188431 /* PushDeerWidgetExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 5206009D27CF74C100188431 /* HttpRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52450F412784943F003652D8 /* HttpRequest.swift */; }; + 5206009E27CF76BC00188431 /* PushDeerApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52450F3727848243003652D8 /* PushDeerApi.swift */; }; + 5206009F27CF76C400188431 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52450F3E2784923D003652D8 /* Result.swift */; }; + 520600A027CF76F900188431 /* AppState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52450F3A278491F8003652D8 /* AppState.swift */; }; + 520600A127CF770600188431 /* Env.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5243372627A6D86200190D00 /* Env.swift */; }; + 520600A627D0AE2300188431 /* Line.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52EB90B22778DA4E0048E0ED /* Line.swift */; }; 52163EB327773F8400594190 /* MainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52163EB227773F8400594190 /* MainView.swift */; }; 52163EB52777413B00594190 /* MessageListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52163EB42777413B00594190 /* MessageListView.swift */; }; 52163EB72777415F00594190 /* DeviceListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52163EB62777415F00594190 /* DeviceListView.swift */; }; @@ -71,6 +85,8 @@ 52B8CF86277E0C12004CB680 /* BaseNavigationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52EB90AD2778AFD60048E0ED /* BaseNavigationView.swift */; }; 52B8CF87277E0C5C004CB680 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5292F4FC2776BC7A00B9A7BB /* Assets.xcassets */; }; 52B8FB8727F36F9D00C29D13 /* BetterSafariView in Frameworks */ = {isa = PBXBuildFile; productRef = 52B8FB8627F36F9D00C29D13 /* BetterSafariView */; }; + 52C4B434280DC28D009817EA /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52C4B433280DC28D009817EA /* NotificationService.swift */; }; + 52C4B438280DC28D009817EA /* Notification.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 52C4B431280DC28D009817EA /* Notification.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 52E317D9279305BB000B8BB1 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 52E317D7279305BB000B8BB1 /* InfoPlist.strings */; }; 52E317DC279305BB000B8BB1 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 52E317DA279305BB000B8BB1 /* Localizable.strings */; }; 52E317DF279305BB000B8BB1 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 52E317DD279305BB000B8BB1 /* InfoPlist.strings */; }; @@ -91,6 +107,13 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 5206009327CF749F00188431 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5292F4ED2776BC7900B9A7BB /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5206008427CF749E00188431; + remoteInfo = PushDeerWidgetExtension; + }; 52B8CF71277E0B46004CB680 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 5292F4ED2776BC7900B9A7BB /* Project object */; @@ -98,9 +121,28 @@ remoteGlobalIDString = 52B8CF63277E0B44004CB680; remoteInfo = PushDeerClip; }; + 52C4B436280DC28D009817EA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5292F4ED2776BC7900B9A7BB /* Project object */; + proxyType = 1; + remoteGlobalIDString = 52C4B430280DC28D009817EA; + remoteInfo = Notification; + }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ + 5206009727CF749F00188431 /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 5206009527CF749F00188431 /* PushDeerWidgetExtension.appex in Embed App Extensions */, + 52C4B438280DC28D009817EA /* Notification.appex in Embed App Extensions */, + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; 52B8CF77277E0B46004CB680 /* Embed App Clips */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -115,6 +157,15 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 5206008527CF749E00188431 /* PushDeerWidgetExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = PushDeerWidgetExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 5206008627CF749E00188431 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; }; + 5206008827CF749E00188431 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; }; + 5206008B27CF749E00188431 /* PushDeerWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushDeerWidget.swift; sourceTree = ""; }; + 5206008D27CF749E00188431 /* PushDeerWidget.intentdefinition */ = {isa = PBXFileReference; lastKnownFileType = file.intentdefinition; path = PushDeerWidget.intentdefinition; sourceTree = ""; }; + 5206008E27CF749F00188431 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 5206009027CF749F00188431 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 520600A427D085A100188431 /* PushDeerWidgetExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = PushDeerWidgetExtension.entitlements; sourceTree = ""; }; + 520600A527D085C200188431 /* PushDeerWidgetExtension-SelfHosted.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "PushDeerWidgetExtension-SelfHosted.entitlements"; sourceTree = ""; }; 52163EB227773F8400594190 /* MainView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainView.swift; sourceTree = ""; }; 52163EB42777413B00594190 /* MessageListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageListView.swift; sourceTree = ""; }; 52163EB62777415F00594190 /* DeviceListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceListView.swift; sourceTree = ""; }; @@ -152,6 +203,10 @@ 52B8CF6F277E0B46004CB680 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 52B8CF70277E0B46004CB680 /* PushDeerClip.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = PushDeerClip.entitlements; sourceTree = ""; }; 52BE373227C236DD004AA630 /* PushDeer-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "PushDeer-Bridging-Header.h"; sourceTree = ""; }; + 52C4B431280DC28D009817EA /* Notification.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = Notification.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 52C4B433280DC28D009817EA /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = ""; }; + 52C4B435280DC28D009817EA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 52C4B439280DC28D009817EA /* Notification.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Notification.entitlements; sourceTree = ""; }; 52E317D8279305BB000B8BB1 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 52E317DB279305BB000B8BB1 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 52E317DE279305BB000B8BB1 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -169,18 +224,33 @@ 52F40D2E277CA05600766C24 /* MessageItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageItemView.swift; sourceTree = ""; }; 52FB1FEB27CA9D7300367DE0 /* SafariView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SafariView.swift; sourceTree = ""; }; 69F56B2711ED98819D474BE3 /* Pods-PushDeerClip.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PushDeerClip.debug.xcconfig"; path = "Target Support Files/Pods-PushDeerClip/Pods-PushDeerClip.debug.xcconfig"; sourceTree = ""; }; + 7F8DCAE5BD814D7C0D2F2722 /* Pods_PushDeerWidgetExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PushDeerWidgetExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 8B9D658D778AE868A0E052A8 /* Pods-PushDeer.debug-selfhosted.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PushDeer.debug-selfhosted.xcconfig"; path = "Target Support Files/Pods-PushDeer/Pods-PushDeer.debug-selfhosted.xcconfig"; sourceTree = ""; }; + 8CF87A70A3872FDE613FD228 /* Pods-PushDeerWidgetExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PushDeerWidgetExtension.release.xcconfig"; path = "Target Support Files/Pods-PushDeerWidgetExtension/Pods-PushDeerWidgetExtension.release.xcconfig"; sourceTree = ""; }; 9CC775BE0326BF31C6FACF06 /* Pods-PushDeerClip.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PushDeerClip.release.xcconfig"; path = "Target Support Files/Pods-PushDeerClip/Pods-PushDeerClip.release.xcconfig"; sourceTree = ""; }; + B3763489EDE07E6970B0F8E5 /* Pods-PushDeerWidgetExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PushDeerWidgetExtension.debug.xcconfig"; path = "Target Support Files/Pods-PushDeerWidgetExtension/Pods-PushDeerWidgetExtension.debug.xcconfig"; sourceTree = ""; }; B796E2A583611F7B6DC34726 /* Pods-PushDeerClip.release-selfhosted.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PushDeerClip.release-selfhosted.xcconfig"; path = "Target Support Files/Pods-PushDeerClip/Pods-PushDeerClip.release-selfhosted.xcconfig"; sourceTree = ""; }; CB57B55699850AD493C774D0 /* Pods-PushDeerClip.debug-selfhosted.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PushDeerClip.debug-selfhosted.xcconfig"; path = "Target Support Files/Pods-PushDeerClip/Pods-PushDeerClip.debug-selfhosted.xcconfig"; sourceTree = ""; }; CCCE1F6E56B157872E2C755F /* Pods-PushDeer.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PushDeer.release.xcconfig"; path = "Target Support Files/Pods-PushDeer/Pods-PushDeer.release.xcconfig"; sourceTree = ""; }; CE3005BD875FC9819A92466C /* Pods-PushDeer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PushDeer.debug.xcconfig"; path = "Target Support Files/Pods-PushDeer/Pods-PushDeer.debug.xcconfig"; sourceTree = ""; }; + D612A216E0469D1A050C3523 /* Pods-PushDeerWidgetExtension.release-selfhosted.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PushDeerWidgetExtension.release-selfhosted.xcconfig"; path = "Target Support Files/Pods-PushDeerWidgetExtension/Pods-PushDeerWidgetExtension.release-selfhosted.xcconfig"; sourceTree = ""; }; E03C2088F4CD9F4C0848E1A5 /* Pods_PushDeerClip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PushDeerClip.framework; sourceTree = BUILT_PRODUCTS_DIR; }; E380A18349DE4D26071E913E /* Pods_PushDeer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PushDeer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E45C830227D3A7C7E965F94B /* Pods-PushDeerWidgetExtension.debug-selfhosted.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PushDeerWidgetExtension.debug-selfhosted.xcconfig"; path = "Target Support Files/Pods-PushDeerWidgetExtension/Pods-PushDeerWidgetExtension.debug-selfhosted.xcconfig"; sourceTree = ""; }; E60A7D4CA1149E1DBC55C672 /* Pods-PushDeer.release-selfhosted.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PushDeer.release-selfhosted.xcconfig"; path = "Target Support Files/Pods-PushDeer/Pods-PushDeer.release-selfhosted.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 5206008227CF749E00188431 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 5206008927CF749E00188431 /* SwiftUI.framework in Frameworks */, + 5206008727CF749E00188431 /* WidgetKit.framework in Frameworks */, + 1C63523789DA4965F9F87DB8 /* Pods_PushDeerWidgetExtension.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 5292F4F22776BC7900B9A7BB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -201,6 +271,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 52C4B42E280DC28D009817EA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -215,10 +292,27 @@ E60A7D4CA1149E1DBC55C672 /* Pods-PushDeer.release-selfhosted.xcconfig */, CB57B55699850AD493C774D0 /* Pods-PushDeerClip.debug-selfhosted.xcconfig */, B796E2A583611F7B6DC34726 /* Pods-PushDeerClip.release-selfhosted.xcconfig */, + B3763489EDE07E6970B0F8E5 /* Pods-PushDeerWidgetExtension.debug.xcconfig */, + E45C830227D3A7C7E965F94B /* Pods-PushDeerWidgetExtension.debug-selfhosted.xcconfig */, + 8CF87A70A3872FDE613FD228 /* Pods-PushDeerWidgetExtension.release.xcconfig */, + D612A216E0469D1A050C3523 /* Pods-PushDeerWidgetExtension.release-selfhosted.xcconfig */, ); path = Pods; sourceTree = ""; }; + 5206008A27CF749E00188431 /* PushDeerWidget */ = { + isa = PBXGroup; + children = ( + 5206008B27CF749E00188431 /* PushDeerWidget.swift */, + 5206008D27CF749E00188431 /* PushDeerWidget.intentdefinition */, + 5206008E27CF749F00188431 /* Assets.xcassets */, + 5206009027CF749F00188431 /* Info.plist */, + 520600A427D085A100188431 /* PushDeerWidgetExtension.entitlements */, + 520600A527D085C200188431 /* PushDeerWidgetExtension-SelfHosted.entitlements */, + ); + path = PushDeerWidget; + sourceTree = ""; + }; 52450F362784822C003652D8 /* Service */ = { isa = PBXGroup; children = ( @@ -246,6 +340,8 @@ children = ( 5292F4F72776BC7900B9A7BB /* PushDeer */, 52B8CF65277E0B44004CB680 /* PushDeerClip */, + 5206008A27CF749E00188431 /* PushDeerWidget */, + 52C4B432280DC28D009817EA /* Notification */, 5292F4F62776BC7900B9A7BB /* Products */, 17D35B157765D96FC4DA6C39 /* Pods */, 78FEAD2568FB92808C44E85A /* Frameworks */, @@ -258,6 +354,8 @@ children = ( 5292F4F52776BC7900B9A7BB /* PushDeer.app */, 52B8CF64277E0B44004CB680 /* PushDeerClip.app */, + 5206008527CF749E00188431 /* PushDeerWidgetExtension.appex */, + 52C4B431280DC28D009817EA /* Notification.appex */, ); name = Products; sourceTree = ""; @@ -327,6 +425,16 @@ path = "Preview Content"; sourceTree = ""; }; + 52C4B432280DC28D009817EA /* Notification */ = { + isa = PBXGroup; + children = ( + 52C4B439280DC28D009817EA /* Notification.entitlements */, + 52C4B433280DC28D009817EA /* NotificationService.swift */, + 52C4B435280DC28D009817EA /* Info.plist */, + ); + path = Notification; + sourceTree = ""; + }; 52EB90B12778D9F90048E0ED /* Common */ = { isa = PBXGroup; children = ( @@ -363,6 +471,9 @@ children = ( E380A18349DE4D26071E913E /* Pods_PushDeer.framework */, E03C2088F4CD9F4C0848E1A5 /* Pods_PushDeerClip.framework */, + 5206008627CF749E00188431 /* WidgetKit.framework */, + 5206008827CF749E00188431 /* SwiftUI.framework */, + 7F8DCAE5BD814D7C0D2F2722 /* Pods_PushDeerWidgetExtension.framework */, ); name = Frameworks; sourceTree = ""; @@ -370,6 +481,26 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 5206008427CF749E00188431 /* PushDeerWidgetExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5206009C27CF749F00188431 /* Build configuration list for PBXNativeTarget "PushDeerWidgetExtension" */; + buildPhases = ( + 97FE7C51BE9FCE0E275A4CA3 /* [CP] Check Pods Manifest.lock */, + 5206008127CF749E00188431 /* Sources */, + 5206008227CF749E00188431 /* Frameworks */, + 5206008327CF749E00188431 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PushDeerWidgetExtension; + packageProductDependencies = ( + ); + productName = PushDeerWidgetExtension; + productReference = 5206008527CF749E00188431 /* PushDeerWidgetExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; 5292F4F42776BC7900B9A7BB /* PushDeer */ = { isa = PBXNativeTarget; buildConfigurationList = 5292F5032776BC7A00B9A7BB /* Build configuration list for PBXNativeTarget "PushDeer" */; @@ -380,11 +511,14 @@ 5292F4F32776BC7900B9A7BB /* Resources */, 52B8CF77277E0B46004CB680 /* Embed App Clips */, D5C7FAC44EC37CBCD945E0F2 /* [CP] Embed Pods Frameworks */, + 5206009727CF749F00188431 /* Embed App Extensions */, ); buildRules = ( ); dependencies = ( 52B8CF72277E0B46004CB680 /* PBXTargetDependency */, + 5206009427CF749F00188431 /* PBXTargetDependency */, + 52C4B437280DC28D009817EA /* PBXTargetDependency */, ); name = PushDeer; packageProductDependencies = ( @@ -418,6 +552,23 @@ productReference = 52B8CF64277E0B44004CB680 /* PushDeerClip.app */; productType = "com.apple.product-type.application.on-demand-install-capable"; }; + 52C4B430280DC28D009817EA /* Notification */ = { + isa = PBXNativeTarget; + buildConfigurationList = 52C4B43E280DC28D009817EA /* Build configuration list for PBXNativeTarget "Notification" */; + buildPhases = ( + 52C4B42D280DC28D009817EA /* Sources */, + 52C4B42E280DC28D009817EA /* Frameworks */, + 52C4B42F280DC28D009817EA /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Notification; + productName = Notification; + productReference = 52C4B431280DC28D009817EA /* Notification.appex */; + productType = "com.apple.product-type.app-extension"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -425,9 +576,12 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1320; + LastSwiftUpdateCheck = 1330; LastUpgradeCheck = 1320; TargetAttributes = { + 5206008427CF749E00188431 = { + CreatedOnToolsVersion = 13.2.1; + }; 5292F4F42776BC7900B9A7BB = { CreatedOnToolsVersion = 13.2.1; LastSwiftMigration = 1320; @@ -436,6 +590,9 @@ CreatedOnToolsVersion = 13.2.1; LastSwiftMigration = 1320; }; + 52C4B430280DC28D009817EA = { + CreatedOnToolsVersion = 13.3.1; + }; }; }; buildConfigurationList = 5292F4F02776BC7900B9A7BB /* Build configuration list for PBXProject "PushDeer" */; @@ -458,11 +615,21 @@ targets = ( 5292F4F42776BC7900B9A7BB /* PushDeer */, 52B8CF63277E0B44004CB680 /* PushDeerClip */, + 5206008427CF749E00188431 /* PushDeerWidgetExtension */, + 52C4B430280DC28D009817EA /* Notification */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 5206008327CF749E00188431 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5206008F27CF749F00188431 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 5292F4F32776BC7900B9A7BB /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -485,6 +652,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 52C4B42F280DC28D009817EA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -527,6 +701,28 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-PushDeerClip/Pods-PushDeerClip-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + 97FE7C51BE9FCE0E275A4CA3 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-PushDeerWidgetExtension-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; D5C7FAC44EC37CBCD945E0F2 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -569,6 +765,21 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 5206008127CF749E00188431 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5206009127CF749F00188431 /* PushDeerWidget.intentdefinition in Sources */, + 5206009F27CF76C400188431 /* Result.swift in Sources */, + 5206008C27CF749E00188431 /* PushDeerWidget.swift in Sources */, + 520600A027CF76F900188431 /* AppState.swift in Sources */, + 5206009E27CF76BC00188431 /* PushDeerApi.swift in Sources */, + 520600A627D0AE2300188431 /* Line.swift in Sources */, + 5206009D27CF74C100188431 /* HttpRequest.swift in Sources */, + 520600A127CF770600188431 /* Env.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 5292F4F12776BC7900B9A7BB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -577,6 +788,7 @@ 52FB1FEC27CA9D7300367DE0 /* SafariView.swift in Sources */, 523150DC2778762B00941EDC /* DeviceItemView.swift in Sources */, 523150D9277875FB00941EDC /* DeletableView.swift in Sources */, + 5206009227CF749F00188431 /* PushDeerWidget.intentdefinition in Sources */, 52163EBB277741AC00594190 /* SettingsView.swift in Sources */, 5242C872278C8CBB00FDB27E /* EditableText.swift in Sources */, 52163EB327773F8400594190 /* MainView.swift in Sources */, @@ -649,15 +861,33 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 52C4B42D280DC28D009817EA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 52C4B434280DC28D009817EA /* NotificationService.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 5206009427CF749F00188431 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5206008427CF749E00188431 /* PushDeerWidgetExtension */; + targetProxy = 5206009327CF749F00188431 /* PBXContainerItemProxy */; + }; 52B8CF72277E0B46004CB680 /* PBXTargetDependency */ = { isa = PBXTargetDependency; platformFilter = ios; target = 52B8CF63277E0B44004CB680 /* PushDeerClip */; targetProxy = 52B8CF71277E0B46004CB680 /* PBXContainerItemProxy */; }; + 52C4B437280DC28D009817EA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 52C4B430280DC28D009817EA /* Notification */; + targetProxy = 52C4B436280DC28D009817EA /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ @@ -691,6 +921,130 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 5206009827CF749F00188431 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B3763489EDE07E6970B0F8E5 /* Pods-PushDeerWidgetExtension.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CODE_SIGN_ENTITLEMENTS = PushDeerWidget/PushDeerWidgetExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 4; + DEVELOPMENT_TEAM = HUJ6HAE4VU; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = PushDeerWidget/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = PushDeerWidget; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.2; + PRODUCT_BUNDLE_IDENTIFIER = com.pushdeer.app.ios.PushDeerWidget; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SUPPORTS_MACCATALYST = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 5206009927CF749F00188431 /* Debug-SelfHosted */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E45C830227D3A7C7E965F94B /* Pods-PushDeerWidgetExtension.debug-selfhosted.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CODE_SIGN_ENTITLEMENTS = "PushDeerWidget/PushDeerWidgetExtension-SelfHosted.entitlements"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 4; + DEVELOPMENT_TEAM = HUJ6HAE4VU; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = PushDeerWidget/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = PushDeerWidget; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.2; + PRODUCT_BUNDLE_IDENTIFIER = com.pushdeer.self.ios.PushDeerWidget; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SUPPORTS_MACCATALYST = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Debug-SelfHosted"; + }; + 5206009A27CF749F00188431 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8CF87A70A3872FDE613FD228 /* Pods-PushDeerWidgetExtension.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CODE_SIGN_ENTITLEMENTS = PushDeerWidget/PushDeerWidgetExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 4; + DEVELOPMENT_TEAM = HUJ6HAE4VU; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = PushDeerWidget/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = PushDeerWidget; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.2; + PRODUCT_BUNDLE_IDENTIFIER = com.pushdeer.app.ios.PushDeerWidget; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SUPPORTS_MACCATALYST = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 5206009B27CF749F00188431 /* Release-SelfHosted */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D612A216E0469D1A050C3523 /* Pods-PushDeerWidgetExtension.release-selfhosted.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CODE_SIGN_ENTITLEMENTS = "PushDeerWidget/PushDeerWidgetExtension-SelfHosted.entitlements"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 4; + DEVELOPMENT_TEAM = HUJ6HAE4VU; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = PushDeerWidget/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = PushDeerWidget; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.2; + PRODUCT_BUNDLE_IDENTIFIER = com.pushdeer.self.ios.PushDeerWidget; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SUPPORTS_MACCATALYST = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Release-SelfHosted"; + }; 524E99E827B3DDF000292396 /* Debug-SelfHosted */ = { isa = XCBuildConfiguration; buildSettings = { @@ -758,6 +1112,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 8B9D658D778AE868A0E052A8 /* Pods-PushDeer.debug-selfhosted.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-SH"; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ENABLE_MODULES = YES; @@ -901,6 +1256,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = E60A7D4CA1149E1DBC55C672 /* Pods-PushDeer.release-selfhosted.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-SH"; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ENABLE_MODULES = YES; @@ -1102,6 +1458,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = CE3005BD875FC9819A92466C /* Pods-PushDeer.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ENABLE_MODULES = YES; @@ -1143,6 +1500,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = CCCE1F6E56B157872E2C755F /* Pods-PushDeer.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ENABLE_MODULES = YES; @@ -1266,9 +1624,132 @@ }; name = Release; }; + 52C4B43A280DC28D009817EA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = Notification/Notification.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 4; + DEVELOPMENT_TEAM = HUJ6HAE4VU; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Notification/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = Notification; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.2; + PRODUCT_BUNDLE_IDENTIFIER = com.pushdeer.app.ios.Notification; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SUPPORTS_MACCATALYST = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 52C4B43B280DC28D009817EA /* Debug-SelfHosted */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = Notification/Notification.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 4; + DEVELOPMENT_TEAM = HUJ6HAE4VU; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Notification/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = Notification; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.2; + PRODUCT_BUNDLE_IDENTIFIER = com.pushdeer.self.ios.Notification; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SUPPORTS_MACCATALYST = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Debug-SelfHosted"; + }; + 52C4B43C280DC28D009817EA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = Notification/Notification.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 4; + DEVELOPMENT_TEAM = HUJ6HAE4VU; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Notification/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = Notification; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.2; + PRODUCT_BUNDLE_IDENTIFIER = com.pushdeer.app.ios.Notification; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SUPPORTS_MACCATALYST = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 52C4B43D280DC28D009817EA /* Release-SelfHosted */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = Notification/Notification.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 4; + DEVELOPMENT_TEAM = HUJ6HAE4VU; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Notification/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = Notification; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.2; + PRODUCT_BUNDLE_IDENTIFIER = com.pushdeer.self.ios.Notification; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SUPPORTS_MACCATALYST = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Release-SelfHosted"; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 5206009C27CF749F00188431 /* Build configuration list for PBXNativeTarget "PushDeerWidgetExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5206009827CF749F00188431 /* Debug */, + 5206009927CF749F00188431 /* Debug-SelfHosted */, + 5206009A27CF749F00188431 /* Release */, + 5206009B27CF749F00188431 /* Release-SelfHosted */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 5292F4F02776BC7900B9A7BB /* Build configuration list for PBXProject "PushDeer" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -1302,6 +1783,17 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 52C4B43E280DC28D009817EA /* Build configuration list for PBXNativeTarget "Notification" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 52C4B43A280DC28D009817EA /* Debug */, + 52C4B43B280DC28D009817EA /* Debug-SelfHosted */, + 52C4B43C280DC28D009817EA /* Release */, + 52C4B43D280DC28D009817EA /* Release-SelfHosted */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ diff --git a/ios/PushDeer-iOS/PushDeer/Env.swift b/ios/PushDeer-iOS/PushDeer/Env.swift index 414a088..920d034 100644 --- a/ios/PushDeer-iOS/PushDeer/Env.swift +++ b/ios/PushDeer-iOS/PushDeer/Env.swift @@ -27,5 +27,13 @@ struct Env { static let wxUniversalLink = "https://vip.pushdeer.com/app/" /// PushDeer 官网地址 static let officialWebsite = "https://www.pushdeer.com" + /// 共享组名, 使用它来访问 App Clip Widget 共享数据 + static let appGroupId: String = { + #if SELFHOSTED + return "group.com.pushdeer.self.ios" + #else + return "group.com.pushdeer.app.ios" + #endif + }() } diff --git a/ios/PushDeer-iOS/PushDeer/Model/MessageModel.swift b/ios/PushDeer-iOS/PushDeer/Model/MessageModel.swift index 4ceaecb..23b4f4a 100644 --- a/ios/PushDeer-iOS/PushDeer/Model/MessageModel.swift +++ b/ios/PushDeer-iOS/PushDeer/Model/MessageModel.swift @@ -51,6 +51,19 @@ extension MessageModel { static let _viewContext = PersistenceController.shared.container.viewContext static let _fetchRequest = MessageModel.fetchRequest() + /// 删除本地持久化的所有消息 + static func deleteAll() throws -> Void { + // let fetchRequest: NSFetchRequest = MessageModel.fetchRequest() + // let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest) + // try _viewContext.execute(deleteRequest) + let fetchRequest = MessageModel.fetchRequest() + let models = try _viewContext.fetch(fetchRequest) + models.forEach { model in + _viewContext.delete(model) + } + try _viewContext.save() + } + /// 持久化保存和更新 static func saveAndUpdate(messageItems: [MessageItem]) throws -> Void { try messageItems.forEach(saveAndUpdate) diff --git a/ios/PushDeer-iOS/PushDeer/PushDeer-SelfHosted.entitlements b/ios/PushDeer-iOS/PushDeer/PushDeer-SelfHosted.entitlements index 64fe498..b5c7e16 100644 --- a/ios/PushDeer-iOS/PushDeer/PushDeer-SelfHosted.entitlements +++ b/ios/PushDeer-iOS/PushDeer/PushDeer-SelfHosted.entitlements @@ -14,6 +14,10 @@ com.apple.security.app-sandbox + com.apple.security.application-groups + + group.com.pushdeer.self.ios + com.apple.security.network.client com.apple.security.personal-information.photos-library diff --git a/ios/PushDeer-iOS/PushDeer/PushDeer.entitlements b/ios/PushDeer-iOS/PushDeer/PushDeer.entitlements index 9cc65b4..46f1c07 100644 --- a/ios/PushDeer-iOS/PushDeer/PushDeer.entitlements +++ b/ios/PushDeer-iOS/PushDeer/PushDeer.entitlements @@ -15,6 +15,10 @@ com.apple.security.app-sandbox + com.apple.security.application-groups + + group.com.pushdeer.app.ios + com.apple.security.network.client com.apple.security.personal-information.photos-library diff --git a/ios/PushDeer-iOS/PushDeer/PushDeerApp.swift b/ios/PushDeer-iOS/PushDeer/PushDeerApp.swift index dab7bc5..51e214c 100644 --- a/ios/PushDeer-iOS/PushDeer/PushDeerApp.swift +++ b/ios/PushDeer-iOS/PushDeer/PushDeerApp.swift @@ -6,6 +6,7 @@ // import SwiftUI +import WidgetKit @main struct PushDeerApp: App { @@ -39,6 +40,10 @@ struct PushDeerApp: App { } } } + .onReceive(NotificationCenter.default.publisher(for: UIApplication.willResignActiveNotification), perform: { _ in + // APP将要进入非活跃状态时, 刷新小部件 + WidgetCenter.shared.reloadAllTimelines() + }) .environmentObject(store) .environment(\.managedObjectContext, persistenceController.container.viewContext) } diff --git a/ios/PushDeer-iOS/PushDeer/Service/AppState.swift b/ios/PushDeer-iOS/PushDeer/Service/AppState.swift index 5d33992..96e5dc2 100644 --- a/ios/PushDeer-iOS/PushDeer/Service/AppState.swift +++ b/ios/PushDeer-iOS/PushDeer/Service/AppState.swift @@ -10,9 +10,9 @@ import AuthenticationServices class AppState: ObservableObject { /// 账号 token - @Published var token : String { + @Published var token : String = "" { didSet { - UserDefaults.standard.set(token, forKey: "PushDeer_token") + getUserDefaults().set(token, forKey: "PushDeer_token") } } /// 设备列表 @@ -22,9 +22,9 @@ class AppState: ObservableObject { /// 消息列表 // @Published var messages: [MessageItem] = [] /// 选中的 tab 下标 - @Published var tabSelectedIndex: Int { + @Published var tabSelectedIndex: Int = 2 { didSet { - UserDefaults.standard.set(tabSelectedIndex, forKey: "PushDeer_tabSelectedIndex") + getUserDefaults().set(tabSelectedIndex, forKey: "PushDeer_tabSelectedIndex") } } /// 设备推送 token @@ -32,28 +32,28 @@ class AppState: ObservableObject { /// 用户信息 @Published var userInfo: UserInfoContent? /// 是否显示测试发推送的 UI - @Published var isShowTestPush: Bool { + @Published var isShowTestPush: Bool = true { didSet { - UserDefaults.standard.set(isShowTestPush, forKey: "PushDeer_isShowTestPush") + getUserDefaults().set(isShowTestPush, forKey: "PushDeer_isShowTestPush") } } /// 是否使用内置浏览器打开链接 - @Published var isUseBuiltInBrowser: Bool { + @Published var isUseBuiltInBrowser: Bool = true { didSet { - UserDefaults.standard.set(isUseBuiltInBrowser, forKey: "PushDeer_isUseBuiltInBrowser") + getUserDefaults().set(isUseBuiltInBrowser, forKey: "PushDeer_isUseBuiltInBrowser") } } /// MarkDown BaseURL @Published var markDownBaseURL: String? { didSet { - UserDefaults.standard.set(markDownBaseURL, forKey: "PushDeer_markDownBaseURL") + getUserDefaults().set(markDownBaseURL, forKey: "PushDeer_markDownBaseURL") } } /// API endpoint - @Published var api_endpoint : String { + @Published var api_endpoint : String = "" { didSet { - UserDefaults.standard.set(api_endpoint, forKey: "PushDeer_api_endpoint") + getUserDefaults().set(api_endpoint, forKey: "PushDeer_api_endpoint") } } @@ -68,12 +68,26 @@ class AppState: ObservableObject { static let shared = AppState() private init() { - let _token = UserDefaults.standard.string(forKey: "PushDeer_token") - let _tabSelectedIndex = UserDefaults.standard.integer(forKey: "PushDeer_tabSelectedIndex") - let _isShowTestPush = UserDefaults.standard.object(forKey: "PushDeer_isShowTestPush") - let _isUseBuiltInBrowser = UserDefaults.standard.object(forKey: "PushDeer_isUseBuiltInBrowser") - let _markDownBaseURL = UserDefaults.standard.string(forKey: "PushDeer_markDownBaseURL") - let _api_endpoint = UserDefaults.standard.string(forKey: "PushDeer_api_endpoint") + reloadUserDefaults() + moveOldUserDefaults() + } + + func getUserDefaults() -> UserDefaults { + let ud = UserDefaults(suiteName: Env.appGroupId) + if let ud = ud { + return ud + } else { + return UserDefaults.standard + } + } + + func reloadUserDefaults() -> Void { + let _token = getUserDefaults().string(forKey: "PushDeer_token") + let _tabSelectedIndex = getUserDefaults().integer(forKey: "PushDeer_tabSelectedIndex") + let _isShowTestPush = getUserDefaults().object(forKey: "PushDeer_isShowTestPush") + let _isUseBuiltInBrowser = getUserDefaults().object(forKey: "PushDeer_isUseBuiltInBrowser") + let _markDownBaseURL = getUserDefaults().string(forKey: "PushDeer_markDownBaseURL") + let _api_endpoint = getUserDefaults().string(forKey: "PushDeer_api_endpoint") token = _token ?? "" tabSelectedIndex = _tabSelectedIndex isShowTestPush = _isShowTestPush as? Bool ?? true @@ -82,6 +96,35 @@ class AppState: ObservableObject { api_endpoint = _api_endpoint ?? "" } + /// 迁移老版本数据, 老版本不是存在共享组中, 需要迁移到共享组 + func moveOldUserDefaults() -> Void { + let oldUserDefaults = UserDefaults.standard + if let _token = oldUserDefaults.string(forKey: "PushDeer_token") { + oldUserDefaults.removeObject(forKey: "PushDeer_token") + token = _token + } + if let _tabSelectedIndex = oldUserDefaults.object(forKey: "PushDeer_tabSelectedIndex") as? Int { + oldUserDefaults.removeObject(forKey: "PushDeer_tabSelectedIndex") + tabSelectedIndex = _tabSelectedIndex + } + if let _isShowTestPush = oldUserDefaults.object(forKey: "PushDeer_isShowTestPush") as? Bool { + oldUserDefaults.removeObject(forKey: "PushDeer_isShowTestPush") + isShowTestPush = _isShowTestPush + } + if let _isUseBuiltInBrowser = oldUserDefaults.object(forKey: "PushDeer_isUseBuiltInBrowser") as? Bool { + oldUserDefaults.removeObject(forKey: "PushDeer_isUseBuiltInBrowser") + isUseBuiltInBrowser = _isUseBuiltInBrowser + } + if let _markDownBaseURL = oldUserDefaults.string(forKey: "PushDeer_markDownBaseURL") { + oldUserDefaults.removeObject(forKey: "PushDeer_markDownBaseURL") + markDownBaseURL = _markDownBaseURL + } + if let _api_endpoint = oldUserDefaults.string(forKey: "PushDeer_api_endpoint") { + oldUserDefaults.removeObject(forKey: "PushDeer_api_endpoint") + api_endpoint = _api_endpoint + } + } + func appleIdLogin(_ result: Result) async throws -> TokenContent { switch result { case let .success(authorization): diff --git a/ios/PushDeer-iOS/PushDeer/Service/HttpRequest.swift b/ios/PushDeer-iOS/PushDeer/Service/HttpRequest.swift index 4c0149d..1e91793 100644 --- a/ios/PushDeer-iOS/PushDeer/Service/HttpRequest.swift +++ b/ios/PushDeer-iOS/PushDeer/Service/HttpRequest.swift @@ -135,4 +135,8 @@ struct HttpRequest { static func rmMessage(id: Int) async throws -> ActionContent { return try await request(.rmMessage(token: AppState.shared.token, id: id), resultType: ActionContent.self) } + + static func rmAllMessage() async throws -> ActionContent { + return try await request(.rmAllMessage(token: AppState.shared.token), resultType: ActionContent.self) + } } diff --git a/ios/PushDeer-iOS/PushDeer/Service/PushDeerApi.swift b/ios/PushDeer-iOS/PushDeer/Service/PushDeerApi.swift index 01541af..652f6b4 100644 --- a/ios/PushDeer-iOS/PushDeer/Service/PushDeerApi.swift +++ b/ios/PushDeer-iOS/PushDeer/Service/PushDeerApi.swift @@ -40,6 +40,7 @@ enum PushDeerApi { case getMessages(token: String, limit: Int) case rmMessage(token: String, id: Int) + case rmAllMessage(token: String) } @@ -91,6 +92,8 @@ extension PushDeerApi: TargetType { return "/message/list" case .rmMessage: return "/message/remove" + case .rmAllMessage: + return "/message/clean" } } var method: Moya.Method { @@ -139,6 +142,8 @@ extension PushDeerApi: TargetType { return .requestParameters(parameters: ["token": token, "limit": limit],encoding: URLEncoding.queryString) case let .rmMessage(token, id): return .requestParameters(parameters: ["token": token, "id": id],encoding: URLEncoding.queryString) + case let .rmAllMessage(token): + return .requestParameters(parameters: ["token": token],encoding: URLEncoding.queryString) } } diff --git a/ios/PushDeer-iOS/PushDeer/View/MessageListView.swift b/ios/PushDeer-iOS/PushDeer/View/MessageListView.swift index ef0c80a..a11c664 100644 --- a/ios/PushDeer-iOS/PushDeer/View/MessageListView.swift +++ b/ios/PushDeer-iOS/PushDeer/View/MessageListView.swift @@ -15,6 +15,17 @@ struct MessageListView: View { @FetchRequest(sortDescriptors: [NSSortDescriptor(keyPath: \MessageModel.created_at, ascending: false)], animation: .default) private var messages: FetchedResults + @State private var showRemoveAllMessageView: Bool = false + @State private var lastDeleteTime: TimeInterval = 0 + + func recordDeleteTime() -> Void { + let currentDeleteTime = Date.timeIntervalSinceReferenceDate + if currentDeleteTime - lastDeleteTime < 60 { + showRemoveAllMessageView = true + } + lastDeleteTime = currentDeleteTime + } + var body: some View { BaseNavigationView(title: "消息") { ScrollView { @@ -28,6 +39,7 @@ struct MessageListView: View { viewContext.delete(messageItem) try? viewContext.save() HToast.showSuccess(NSLocalizedString("已删除", comment: "删除设备/Key/消息时提示")) + recordDeleteTime() Task { do { _ = try await HttpRequest.rmMessage(id: Int(id)) @@ -40,6 +52,14 @@ struct MessageListView: View { Spacer(minLength: 30) } } + .overlay( + Group { + if (showRemoveAllMessageView) { + RemoveAllMessageView{showRemoveAllMessageView = false} + } + }, + alignment: .bottom + ) .navigationBarItems(trailing: Button(action: { withAnimation(.easeOut) { store.isShowTestPush = !store.isShowTestPush @@ -115,8 +135,51 @@ struct TestPushView: View { } } +struct RemoveAllMessageView: View { + /// 取消按钮点击的回调 + let closeAction : () -> () + var body: some View { + VStack(alignment: .center, spacing: 0) { + HLine() + .stroke(Color("borderColor")) + .frame(height: 1) + HStack(spacing: 12) { + Button(NSLocalizedString("清除全部消息", comment: "")) { + Task { + do { + try MessageModel.deleteAll() + _ = try await HttpRequest.rmAllMessage() + HToast.showSuccess(NSLocalizedString("已清空", comment: "")) + self.closeAction() + } catch { + HToast.showError(error.localizedDescription) + } + } + } + .font(.system(size: 20)) + .padding(.horizontal) + .frame( height: 42) + .overlay(RoundedRectangle(cornerRadius: 4).stroke()) + .foregroundColor(Color.accentColor) + + Button(NSLocalizedString("取消", comment: "")) { + self.closeAction() + } + .font(.system(size: 20)) + .padding(.horizontal) + .frame( height: 42) + .overlay(RoundedRectangle(cornerRadius: 4).stroke()) + .foregroundColor(Color.accentColor) + } + .padding() + } + .background(Color("backgroundColor").opacity(0.9)) + } +} + struct MessageView_Previews: PreviewProvider { static var previews: some View { MessageListView() + .environmentObject(AppState.shared) } } diff --git a/ios/PushDeer-iOS/PushDeer/View/SettingsView.swift b/ios/PushDeer-iOS/PushDeer/View/SettingsView.swift index e18730e..1c3b0ea 100644 --- a/ios/PushDeer-iOS/PushDeer/View/SettingsView.swift +++ b/ios/PushDeer-iOS/PushDeer/View/SettingsView.swift @@ -21,6 +21,7 @@ struct SettingsView: View { VStack { SettingsItemView(title: NSLocalizedString("登录为", comment: "") + " " + userName(), button: NSLocalizedString("退出", comment: "退出登录按钮上的文字")) { store.token = "" + HToast.showText(NSLocalizedString("退出", comment: "退出登录按钮上的文字")) } .padding(EdgeInsets(top: 18, leading: 20, bottom: 0, trailing: 20)) diff --git a/ios/PushDeer-iOS/PushDeerClip/PushDeerClip-SelfHosted.entitlements b/ios/PushDeer-iOS/PushDeerClip/PushDeerClip-SelfHosted.entitlements index bc419bf..a8f59a6 100644 --- a/ios/PushDeer-iOS/PushDeerClip/PushDeerClip-SelfHosted.entitlements +++ b/ios/PushDeer-iOS/PushDeerClip/PushDeerClip-SelfHosted.entitlements @@ -16,5 +16,9 @@ $(AppIdentifierPrefix)com.pushdeer.self.ios + com.apple.security.application-groups + + group.com.pushdeer.self.ios + diff --git a/ios/PushDeer-iOS/PushDeerClip/PushDeerClip.entitlements b/ios/PushDeer-iOS/PushDeerClip/PushDeerClip.entitlements index a92507e..e9fb37d 100644 --- a/ios/PushDeer-iOS/PushDeerClip/PushDeerClip.entitlements +++ b/ios/PushDeer-iOS/PushDeerClip/PushDeerClip.entitlements @@ -16,5 +16,9 @@ $(AppIdentifierPrefix)com.pushdeer.app.ios + com.apple.security.application-groups + + group.com.pushdeer.app.ios + diff --git a/ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/AccentColor.colorset/Contents.json b/ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..f21a778 --- /dev/null +++ b/ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.537", + "green" : "0.278", + "red" : "0.231" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.702", + "green" : "0.365", + "red" : "0.302" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/Contents.json b/ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/Images/Contents.json b/ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/Images/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/Images/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/Images/deer.gray.imageset/Contents.json b/ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/Images/deer.gray.imageset/Contents.json new file mode 100644 index 0000000..d12cc1a --- /dev/null +++ b/ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/Images/deer.gray.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "filename" : "deer.gray.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "deer.gray@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/Images/deer.gray.imageset/deer.gray.png b/ios/PushDeer-iOS/PushDeerWidget/Assets.xcassets/Images/deer.gray.imageset/deer.gray.png new file mode 100644 index 0000000000000000000000000000000000000000..308d2d54961530ca4e19c11812aaf1a28907d260 GIT binary patch literal 29004 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%0DORFBiZSZT83c_1`(4`F^j*t&Gc_M|_HZ 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

HM;Gn@=7?$B&JBN=_bPRRhk`a? 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 xLg + + + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + NSExtension + + NSExtensionPointIdentifier + com.apple.widgetkit-extension + + + diff --git a/ios/PushDeer-iOS/PushDeerWidget/PushDeerWidget.intentdefinition b/ios/PushDeer-iOS/PushDeerWidget/PushDeerWidget.intentdefinition new file mode 100644 index 0000000..bdb4045 --- /dev/null +++ b/ios/PushDeer-iOS/PushDeerWidget/PushDeerWidget.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/ios/PushDeer-iOS/PushDeerWidget/PushDeerWidget.swift b/ios/PushDeer-iOS/PushDeerWidget/PushDeerWidget.swift new file mode 100644 index 0000000..1a33d85 --- /dev/null +++ b/ios/PushDeer-iOS/PushDeerWidget/PushDeerWidget.swift @@ -0,0 +1,179 @@ +// +// PushDeerWidget.swift +// PushDeerWidget +// +// Created by HEXT on 2022/3/2. +// + +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) -> ()) { + Task { + let currentDate = Date() + let entryDate = Calendar.current.date(byAdding: .minute, value: 1, to: currentDate)! + var entries: [SimpleEntry] = [] + var entry = SimpleEntry(date: entryDate, configuration: configuration) + AppState.shared.reloadUserDefaults() + print("token", AppState.shared.token) + do { + let messages = try await HttpRequest.getMessages().messages + entry.messages = handleList(messages, context: context) + } catch { + + } + entries.append(entry) + let timeline = Timeline(entries: entries, policy: .atEnd) + completion(timeline) + } + } + + func handleList(_ origList: [MessageItem], context: Context) -> [MessageItem] { + var list = origList + var limit = 0 + switch context.family { + case .systemSmall, .systemMedium: + limit = 4 + default: + limit = 10 + } + if list.count <= limit + 1 { + return list; + } + list = list.prefix(limit) + [] + list.append( + MessageItem(id: -1, uid: "", text: "+其它\(origList.count - limit)条", desp: "", type: "text", pushkey_name: "", created_at: "") + ) + return list; + } +} + +struct SimpleEntry: TimelineEntry { + let date: Date + let configuration: ConfigurationIntent + var messages: [MessageItem] = placeholderList +} + +struct PushDeerWidgetEntryView : View { + var entry: Provider.Entry + + var body: some View { + HContentView { + if AppState.shared.token.isEmpty { + Text("未登录") + } else if entry.messages.isEmpty { + Text("无消息") + } else { + VStack(alignment: .leading, spacing: 5) { + ForEach(entry.messages) { + if entry.messages.first?.id != $0.id { + Divider() + } + if $0.id == -1 { + HText(text: $0.text) + .foregroundColor(.accentColor) + } else { + HText(text: $0.text) + } + } + .font(.system(size: 15)) + Spacer(minLength: 0) + } + .padding(.top, 5) + .padding() + .accentColor(Color("AccentColor")) + } + } + } +} + +struct HContentView: View { + /// 页面主体View + @ViewBuilder let contentView: Content + + @Environment(\.colorScheme) private var colorScheme + + var body: some View { + ZStack { + // VStack HStack Spacer 组合起来撑到最大 + VStack { + HStack { + Spacer() + } + Spacer() + } + contentView + } + .background( + Image("deer.gray") + .opacity(colorScheme == .dark ? 0.4 : 1), + alignment: .topTrailing + ) + } +} + +struct HText: View { + let text: String + var body: some View { + if #available(iOSApplicationExtension 15.0, *) { + Group { + if #available(iOSApplicationExtension 15.0, *) { + Text(try! AttributedString(markdown: text)) + } + } + } else { + Text(verbatim: text) + } + } +} + +@main +struct PushDeerWidget: Widget { + let kind: String = "PushDeerWidget" + + var body: some WidgetConfiguration { + IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: Provider()) { entry in + PushDeerWidgetEntryView(entry: entry) + } + .configurationDisplayName("最近的PushDeer消息") + .description("这个小部件可以快捷展示你最近收到的消息.") + } +} + +struct PushDeerWidget_Previews: PreviewProvider { + static var previews: some View { + AppState.shared.token = "1" + return Group { + PushDeerWidgetEntryView(entry: SimpleEntry(date: Date(), configuration: ConfigurationIntent())) + .previewContext(WidgetPreviewContext(family: .systemSmall)) + PushDeerWidgetEntryView(entry: SimpleEntry(date: Date(), configuration: ConfigurationIntent())) + .previewContext(WidgetPreviewContext(family: .systemMedium)) + PushDeerWidgetEntryView(entry: SimpleEntry(date: Date(), configuration: ConfigurationIntent())) + .previewContext(WidgetPreviewContext(family: .systemLarge)) + if #available(iOSApplicationExtension 15.0, *) { + PushDeerWidgetEntryView(entry: SimpleEntry(date: Date(), configuration: ConfigurationIntent())) + .previewContext(WidgetPreviewContext(family: .systemExtraLarge)) + } + } + } +} + +let placeholderList = [ + MessageItem(id: 1, uid: "", text: "展示最新通知", desp: "", type: "text", pushkey_name: "", created_at: ""), + MessageItem(id: 2, uid: "", text: "方便快速查看", desp: "", type: "text", pushkey_name: "", created_at: ""), + MessageItem(id: 3, uid: "", text: "保持消息同步", desp: "", type: "text", pushkey_name: "", created_at: ""), + MessageItem(id: 4, uid: "", text: "自动即时刷新", desp: "", type: "text", pushkey_name: "", created_at: ""), + MessageItem(id: -1, uid: "", text: "+其它\(8)条", desp: "", type: "text", pushkey_name: "", created_at: ""), +] diff --git a/ios/PushDeer-iOS/PushDeerWidget/PushDeerWidgetExtension-SelfHosted.entitlements b/ios/PushDeer-iOS/PushDeerWidget/PushDeerWidgetExtension-SelfHosted.entitlements new file mode 100644 index 0000000..51fcac8 --- /dev/null +++ b/ios/PushDeer-iOS/PushDeerWidget/PushDeerWidgetExtension-SelfHosted.entitlements @@ -0,0 +1,14 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.application-groups + + group.com.pushdeer.self.ios + + com.apple.security.network.client + + + diff --git a/ios/PushDeer-iOS/PushDeerWidget/PushDeerWidgetExtension.entitlements b/ios/PushDeer-iOS/PushDeerWidget/PushDeerWidgetExtension.entitlements new file mode 100644 index 0000000..c8bd608 --- /dev/null +++ b/ios/PushDeer-iOS/PushDeerWidget/PushDeerWidgetExtension.entitlements @@ -0,0 +1,14 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.application-groups + + group.com.pushdeer.app.ios + + com.apple.security.network.client + + +