From b4d1d6b9d5d14bc36aeb5807064952823d5b5908 Mon Sep 17 00:00:00 2001 From: hext Date: Tue, 4 Jan 2022 22:28:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=81=E8=A3=85=E7=BD=91=E7=BB=9C=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E5=B1=82,=20=E5=AF=B9=E6=8E=A5=E6=8E=A5=E5=8F=A3API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ios/PushDeer-iOS/.gitignore | 2 +- ios/PushDeer-iOS/Podfile | 22 + ios/PushDeer-iOS/Podfile.lock | 22 + .../PushDeer.xcodeproj/project.pbxproj | 410 ++++++++++++++++++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + ios/PushDeer-iOS/PushDeer/AppDelegate.swift | 49 +++ .../AppIcon.appiconset/Contents.json | 216 +++++---- .../AppIcon.appiconset/icon-1024.png | Bin 0 -> 50876 bytes .../AppIcon.appiconset/icon-20-ipad.png | Bin 0 -> 641 bytes .../AppIcon.appiconset/icon-20@2x-ipad.png | Bin 0 -> 1515 bytes .../AppIcon.appiconset/icon-20@2x.png | Bin 0 -> 1515 bytes .../AppIcon.appiconset/icon-20@3x.png | Bin 0 -> 2730 bytes .../AppIcon.appiconset/icon-29-ipad.png | Bin 0 -> 947 bytes .../AppIcon.appiconset/icon-29.png | Bin 0 -> 947 bytes .../AppIcon.appiconset/icon-29@2x-ipad.png | Bin 0 -> 2670 bytes .../AppIcon.appiconset/icon-29@2x.png | Bin 0 -> 2670 bytes .../AppIcon.appiconset/icon-29@3x.png | Bin 0 -> 4454 bytes .../AppIcon.appiconset/icon-40.png | Bin 0 -> 1515 bytes .../AppIcon.appiconset/icon-40@2x.png | Bin 0 -> 4096 bytes .../AppIcon.appiconset/icon-40@3x.png | Bin 0 -> 6542 bytes .../AppIcon.appiconset/icon-60@2x.png | Bin 0 -> 6542 bytes .../AppIcon.appiconset/icon-60@3x.png | Bin 0 -> 10930 bytes .../AppIcon.appiconset/icon-76.png | Bin 0 -> 3804 bytes .../AppIcon.appiconset/icon-76@2x.png | Bin 0 -> 8735 bytes .../AppIcon.appiconset/icon-83.5@2x.png | Bin 0 -> 9843 bytes .../PushDeer/Common/AppleSignInButton.swift | 71 +++ ios/PushDeer-iOS/PushDeer/Info.plist | 15 + ios/PushDeer-iOS/PushDeer/Model/Result.swift | 59 +++ .../PushDeer/PushDeer.entitlements | 6 + ios/PushDeer-iOS/PushDeer/PushDeerApp.swift | 4 +- .../PushDeer/Service/AppState.swift | 19 + .../PushDeer/Service/HttpRequest.swift | 55 +++ .../PushDeer/Service/PushDeerApi.swift | 114 +++++ .../PushDeer/View/DeviceListView.swift | 16 +- .../PushDeer/View/KeyListView.swift | 6 +- .../PushDeer/View/LoginView.swift | 32 +- .../PushDeer/View/MessageItemView.swift | 64 +++ .../PushDeer/View/MessageListView.swift | 50 ++- .../AccentColor.colorset/Contents.json | 11 + .../Assets.xcassets/Contents.json | 6 + .../PushDeerClip/ContentView.swift | 20 + ios/PushDeer-iOS/PushDeerClip/Info.plist | 18 + .../Preview Assets.xcassets/Contents.json | 6 + .../PushDeerClip/PushDeerClip.entitlements | 16 + .../PushDeerClip/PushDeerClipApp.swift | 19 + 46 files changed, 1232 insertions(+), 114 deletions(-) create mode 100644 ios/PushDeer-iOS/Podfile create mode 100644 ios/PushDeer-iOS/Podfile.lock create mode 100644 ios/PushDeer-iOS/PushDeer.xcworkspace/contents.xcworkspacedata create mode 100644 ios/PushDeer-iOS/PushDeer.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/PushDeer-iOS/PushDeer/AppDelegate.swift create mode 100644 ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-1024.png create mode 100644 ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-20-ipad.png create mode 100644 ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-20@2x-ipad.png create mode 100644 ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png create mode 100644 ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png create mode 100644 ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-29-ipad.png create mode 100644 ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-29.png create mode 100644 ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-29@2x-ipad.png create mode 100644 ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png create mode 100644 ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png create mode 100644 ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-40.png create mode 100644 ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png create mode 100644 ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png create mode 100644 ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png create mode 100644 ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png create mode 100644 ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-76.png create mode 100644 ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png create mode 100644 ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png create mode 100644 ios/PushDeer-iOS/PushDeer/Common/AppleSignInButton.swift create mode 100644 ios/PushDeer-iOS/PushDeer/Info.plist create mode 100644 ios/PushDeer-iOS/PushDeer/Model/Result.swift create mode 100644 ios/PushDeer-iOS/PushDeer/Service/AppState.swift create mode 100644 ios/PushDeer-iOS/PushDeer/Service/HttpRequest.swift create mode 100644 ios/PushDeer-iOS/PushDeer/Service/PushDeerApi.swift create mode 100644 ios/PushDeer-iOS/PushDeer/View/MessageItemView.swift create mode 100644 ios/PushDeer-iOS/PushDeerClip/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 ios/PushDeer-iOS/PushDeerClip/Assets.xcassets/Contents.json create mode 100644 ios/PushDeer-iOS/PushDeerClip/ContentView.swift create mode 100644 ios/PushDeer-iOS/PushDeerClip/Info.plist create mode 100644 ios/PushDeer-iOS/PushDeerClip/Preview Content/Preview Assets.xcassets/Contents.json create mode 100644 ios/PushDeer-iOS/PushDeerClip/PushDeerClip.entitlements create mode 100644 ios/PushDeer-iOS/PushDeerClip/PushDeerClipApp.swift diff --git a/ios/PushDeer-iOS/.gitignore b/ios/PushDeer-iOS/.gitignore index 2c6e72c..2ffe609 100644 --- a/ios/PushDeer-iOS/.gitignore +++ b/ios/PushDeer-iOS/.gitignore @@ -78,7 +78,7 @@ playground.xcworkspace # you should judge for yourself, the pros and cons are mentioned at: # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control # -# Pods/ +Pods/ # # Add this line if you want to avoid checking in source code from the Xcode workspace # *.xcworkspace diff --git a/ios/PushDeer-iOS/Podfile b/ios/PushDeer-iOS/Podfile new file mode 100644 index 0000000..69cda7e --- /dev/null +++ b/ios/PushDeer-iOS/Podfile @@ -0,0 +1,22 @@ +# Uncomment the next line to define a global platform for your project +platform :ios, '14.0' + +# Comment the next line if you don't want to use dynamic frameworks +use_frameworks! + +def commonPods + # Pods for common + pod 'Moya', '~> 15.0' +end + +target 'PushDeer' do + commonPods + # Pods for PushDeer + +end + +target 'PushDeerClip' do + commonPods + # Pods for PushDeerClip + +end diff --git a/ios/PushDeer-iOS/Podfile.lock b/ios/PushDeer-iOS/Podfile.lock new file mode 100644 index 0000000..f7de2c8 --- /dev/null +++ b/ios/PushDeer-iOS/Podfile.lock @@ -0,0 +1,22 @@ +PODS: + - Alamofire (5.5.0) + - Moya (15.0.0): + - Moya/Core (= 15.0.0) + - Moya/Core (15.0.0): + - Alamofire (~> 5.0) + +DEPENDENCIES: + - Moya (~> 15.0) + +SPEC REPOS: + trunk: + - Alamofire + - Moya + +SPEC CHECKSUMS: + Alamofire: 1c4fb5369c3fe93d2857c780d8bbe09f06f97e7c + Moya: 138f0573e53411fb3dc17016add0b748dfbd78ee + +PODFILE CHECKSUM: 71abdebce610eefe1a0299d0a0bd00a463b0a79c + +COCOAPODS: 1.11.2 diff --git a/ios/PushDeer-iOS/PushDeer.xcodeproj/project.pbxproj b/ios/PushDeer-iOS/PushDeer.xcodeproj/project.pbxproj index 54ffd5c..9255dd8 100644 --- a/ios/PushDeer-iOS/PushDeer.xcodeproj/project.pbxproj +++ b/ios/PushDeer-iOS/PushDeer.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 4812F19BB0BFEFE089BC253E /* Pods_PushDeerClip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E03C2088F4CD9F4C0848E1A5 /* Pods_PushDeerClip.framework */; }; 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 */; }; @@ -14,18 +15,76 @@ 52163EBB277741AC00594190 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52163EBA277741AC00594190 /* SettingsView.swift */; }; 523150D9277875FB00941EDC /* DeletableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 523150D8277875FB00941EDC /* DeletableView.swift */; }; 523150DC2778762B00941EDC /* DeviceItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 523150DB2778762B00941EDC /* DeviceItemView.swift */; }; + 52450F3827848243003652D8 /* PushDeerApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52450F3727848243003652D8 /* PushDeerApi.swift */; }; + 52450F3927848243003652D8 /* PushDeerApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52450F3727848243003652D8 /* PushDeerApi.swift */; }; + 52450F3B278491F8003652D8 /* AppState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52450F3A278491F8003652D8 /* AppState.swift */; }; + 52450F3C278491F8003652D8 /* AppState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52450F3A278491F8003652D8 /* AppState.swift */; }; + 52450F3F2784923D003652D8 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52450F3E2784923D003652D8 /* Result.swift */; }; + 52450F402784923D003652D8 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52450F3E2784923D003652D8 /* Result.swift */; }; + 52450F422784943F003652D8 /* HttpRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52450F412784943F003652D8 /* HttpRequest.swift */; }; + 52450F432784943F003652D8 /* HttpRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52450F412784943F003652D8 /* HttpRequest.swift */; }; + 52483FC2277ED6D5003A100E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52483FC1277ED6D5003A100E /* AppDelegate.swift */; }; + 52483FC3277ED6D5003A100E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52483FC1277ED6D5003A100E /* AppDelegate.swift */; }; 5292F4F92776BC7900B9A7BB /* PushDeerApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5292F4F82776BC7900B9A7BB /* PushDeerApp.swift */; }; 5292F4FB2776BC7900B9A7BB /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5292F4FA2776BC7900B9A7BB /* ContentView.swift */; }; 5292F4FD2776BC7A00B9A7BB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5292F4FC2776BC7A00B9A7BB /* Assets.xcassets */; }; 5292F5002776BC7A00B9A7BB /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5292F4FF2776BC7A00B9A7BB /* Preview Assets.xcassets */; }; + 52B8CF5F277DE660004CB680 /* AppleSignInButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B8CF5E277DE660004CB680 /* AppleSignInButton.swift */; }; + 52B8CF67277E0B44004CB680 /* PushDeerClipApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B8CF66277E0B44004CB680 /* PushDeerClipApp.swift */; }; + 52B8CF69277E0B44004CB680 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B8CF68277E0B44004CB680 /* ContentView.swift */; }; + 52B8CF6B277E0B46004CB680 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 52B8CF6A277E0B46004CB680 /* Assets.xcassets */; }; + 52B8CF6E277E0B46004CB680 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 52B8CF6D277E0B46004CB680 /* Preview Assets.xcassets */; }; + 52B8CF73277E0B46004CB680 /* PushDeerClip.app in Embed App Clips */ = {isa = PBXBuildFile; fileRef = 52B8CF64277E0B44004CB680 /* PushDeerClip.app */; platformFilter = ios; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 52B8CF78277E0BF1004CB680 /* MainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52163EB227773F8400594190 /* MainView.swift */; }; + 52B8CF79277E0BFB004CB680 /* DeviceListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52163EB62777415F00594190 /* DeviceListView.swift */; }; + 52B8CF7A277E0BFB004CB680 /* MessageListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52163EB42777413B00594190 /* MessageListView.swift */; }; + 52B8CF7B277E0BFB004CB680 /* DeviceItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 523150DB2778762B00941EDC /* DeviceItemView.swift */; }; + 52B8CF7C277E0BFB004CB680 /* KeyListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52163EB82777417900594190 /* KeyListView.swift */; }; + 52B8CF7D277E0BFB004CB680 /* KeyItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52EB90AF2778D67F0048E0ED /* KeyItemView.swift */; }; + 52B8CF7E277E0BFB004CB680 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52163EBA277741AC00594190 /* SettingsView.swift */; }; + 52B8CF7F277E0BFB004CB680 /* SettingsItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52F2C222277961D7006F08DC /* SettingsItemView.swift */; }; + 52B8CF80277E0BFB004CB680 /* MessageItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52F40D2E277CA05600766C24 /* MessageItemView.swift */; }; + 52B8CF81277E0BFB004CB680 /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52F0243E277737470071D861 /* LoginView.swift */; }; + 52B8CF82277E0C06004CB680 /* AppleSignInButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B8CF5E277DE660004CB680 /* AppleSignInButton.swift */; }; + 52B8CF83277E0C12004CB680 /* DeletableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 523150D8277875FB00941EDC /* DeletableView.swift */; }; + 52B8CF84277E0C12004CB680 /* CardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52EB90AB2778ADF80048E0ED /* CardView.swift */; }; + 52B8CF85277E0C12004CB680 /* Line.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52EB90B22778DA4E0048E0ED /* Line.swift */; }; + 52B8CF86277E0C12004CB680 /* BaseNavigationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52EB90AD2778AFD60048E0ED /* BaseNavigationView.swift */; }; + 52B8CF87277E0C5C004CB680 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5292F4FC2776BC7A00B9A7BB /* Assets.xcassets */; }; 52EB90AC2778ADF80048E0ED /* CardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52EB90AB2778ADF80048E0ED /* CardView.swift */; }; 52EB90AE2778AFD60048E0ED /* BaseNavigationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52EB90AD2778AFD60048E0ED /* BaseNavigationView.swift */; }; 52EB90B02778D67F0048E0ED /* KeyItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52EB90AF2778D67F0048E0ED /* KeyItemView.swift */; }; 52EB90B32778DA4E0048E0ED /* Line.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52EB90B22778DA4E0048E0ED /* Line.swift */; }; 52F0243F277737470071D861 /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52F0243E277737470071D861 /* LoginView.swift */; }; 52F2C223277961D7006F08DC /* SettingsItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52F2C222277961D7006F08DC /* SettingsItemView.swift */; }; + 52F40D2F277CA05600766C24 /* MessageItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52F40D2E277CA05600766C24 /* MessageItemView.swift */; }; + 64B0C15E70CCC382B480F76E /* Pods_PushDeer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E380A18349DE4D26071E913E /* Pods_PushDeer.framework */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 52B8CF71277E0B46004CB680 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5292F4ED2776BC7900B9A7BB /* Project object */; + proxyType = 1; + remoteGlobalIDString = 52B8CF63277E0B44004CB680; + remoteInfo = PushDeerClip; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 52B8CF77277E0B46004CB680 /* Embed App Clips */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "$(CONTENTS_FOLDER_PATH)/AppClips"; + dstSubfolderSpec = 16; + files = ( + 52B8CF73277E0B46004CB680 /* PushDeerClip.app in Embed App Clips */, + ); + name = "Embed App Clips"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ 52163EB227773F8400594190 /* MainView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainView.swift; sourceTree = ""; }; 52163EB42777413B00594190 /* MessageListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageListView.swift; sourceTree = ""; }; @@ -34,11 +93,25 @@ 52163EBA277741AC00594190 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; 523150D8277875FB00941EDC /* DeletableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeletableView.swift; sourceTree = ""; }; 523150DB2778762B00941EDC /* DeviceItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceItemView.swift; sourceTree = ""; }; + 52450F3727848243003652D8 /* PushDeerApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushDeerApi.swift; sourceTree = ""; }; + 52450F3A278491F8003652D8 /* AppState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppState.swift; sourceTree = ""; }; + 52450F3E2784923D003652D8 /* Result.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Result.swift; sourceTree = ""; }; + 52450F412784943F003652D8 /* HttpRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HttpRequest.swift; sourceTree = ""; }; + 52450F442784A95D003652D8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 52483FC1277ED6D5003A100E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 5292F4F52776BC7900B9A7BB /* PushDeer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PushDeer.app; sourceTree = BUILT_PRODUCTS_DIR; }; 5292F4F82776BC7900B9A7BB /* PushDeerApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushDeerApp.swift; sourceTree = ""; }; 5292F4FA2776BC7900B9A7BB /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; 5292F4FC2776BC7A00B9A7BB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 5292F4FF2776BC7A00B9A7BB /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + 52B8CF5E277DE660004CB680 /* AppleSignInButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppleSignInButton.swift; sourceTree = ""; }; + 52B8CF64277E0B44004CB680 /* PushDeerClip.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PushDeerClip.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 52B8CF66277E0B44004CB680 /* PushDeerClipApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushDeerClipApp.swift; sourceTree = ""; }; + 52B8CF68277E0B44004CB680 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + 52B8CF6A277E0B46004CB680 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 52B8CF6D277E0B46004CB680 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + 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 = ""; }; 52EB90AB2778ADF80048E0ED /* CardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardView.swift; sourceTree = ""; }; 52EB90AD2778AFD60048E0ED /* BaseNavigationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseNavigationView.swift; sourceTree = ""; }; 52EB90AF2778D67F0048E0ED /* KeyItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyItemView.swift; sourceTree = ""; }; @@ -46,6 +119,13 @@ 52F0243C277733CE0071D861 /* PushDeer.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = PushDeer.entitlements; sourceTree = ""; }; 52F0243E277737470071D861 /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = ""; }; 52F2C222277961D7006F08DC /* SettingsItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsItemView.swift; sourceTree = ""; }; + 52F40D2E277CA05600766C24 /* MessageItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageItemView.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 = ""; }; + 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 = ""; }; + 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 = ""; }; + 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; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -53,17 +133,58 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 64B0C15E70CCC382B480F76E /* Pods_PushDeer.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 52B8CF61277E0B44004CB680 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4812F19BB0BFEFE089BC253E /* Pods_PushDeerClip.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 17D35B157765D96FC4DA6C39 /* Pods */ = { + isa = PBXGroup; + children = ( + CE3005BD875FC9819A92466C /* Pods-PushDeer.debug.xcconfig */, + CCCE1F6E56B157872E2C755F /* Pods-PushDeer.release.xcconfig */, + 69F56B2711ED98819D474BE3 /* Pods-PushDeerClip.debug.xcconfig */, + 9CC775BE0326BF31C6FACF06 /* Pods-PushDeerClip.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + 52450F362784822C003652D8 /* Service */ = { + isa = PBXGroup; + children = ( + 52450F3727848243003652D8 /* PushDeerApi.swift */, + 52450F3A278491F8003652D8 /* AppState.swift */, + 52450F412784943F003652D8 /* HttpRequest.swift */, + ); + path = Service; + sourceTree = ""; + }; + 52450F3D27849228003652D8 /* Model */ = { + isa = PBXGroup; + children = ( + 52450F3E2784923D003652D8 /* Result.swift */, + ); + path = Model; + sourceTree = ""; + }; 5292F4EC2776BC7900B9A7BB = { isa = PBXGroup; children = ( 5292F4F72776BC7900B9A7BB /* PushDeer */, + 52B8CF65277E0B44004CB680 /* PushDeerClip */, 5292F4F62776BC7900B9A7BB /* Products */, + 17D35B157765D96FC4DA6C39 /* Pods */, + 78FEAD2568FB92808C44E85A /* Frameworks */, ); indentWidth = 2; sourceTree = ""; @@ -72,6 +193,7 @@ isa = PBXGroup; children = ( 5292F4F52776BC7900B9A7BB /* PushDeer.app */, + 52B8CF64277E0B44004CB680 /* PushDeerClip.app */, ); name = Products; sourceTree = ""; @@ -79,8 +201,13 @@ 5292F4F72776BC7900B9A7BB /* PushDeer */ = { isa = PBXGroup; children = ( + 52450F442784A95D003652D8 /* Info.plist */, + 52450F362784822C003652D8 /* Service */, + 52B8CF5D277DE5FF004CB680 /* Common */, + 52450F3D27849228003652D8 /* Model */, 52F0243D2777370F0071D861 /* View */, 52F0243C277733CE0071D861 /* PushDeer.entitlements */, + 52483FC1277ED6D5003A100E /* AppDelegate.swift */, 5292F4F82776BC7900B9A7BB /* PushDeerApp.swift */, 5292F4FA2776BC7900B9A7BB /* ContentView.swift */, 5292F4FC2776BC7A00B9A7BB /* Assets.xcassets */, @@ -97,6 +224,35 @@ path = "Preview Content"; sourceTree = ""; }; + 52B8CF5D277DE5FF004CB680 /* Common */ = { + isa = PBXGroup; + children = ( + 52B8CF5E277DE660004CB680 /* AppleSignInButton.swift */, + ); + path = Common; + sourceTree = ""; + }; + 52B8CF65277E0B44004CB680 /* PushDeerClip */ = { + isa = PBXGroup; + children = ( + 52B8CF66277E0B44004CB680 /* PushDeerClipApp.swift */, + 52B8CF68277E0B44004CB680 /* ContentView.swift */, + 52B8CF6A277E0B46004CB680 /* Assets.xcassets */, + 52B8CF6F277E0B46004CB680 /* Info.plist */, + 52B8CF70277E0B46004CB680 /* PushDeerClip.entitlements */, + 52B8CF6C277E0B46004CB680 /* Preview Content */, + ); + path = PushDeerClip; + sourceTree = ""; + }; + 52B8CF6C277E0B46004CB680 /* Preview Content */ = { + isa = PBXGroup; + children = ( + 52B8CF6D277E0B46004CB680 /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; 52EB90B12778D9F90048E0ED /* Common */ = { isa = PBXGroup; children = ( @@ -120,11 +276,21 @@ 52163EBA277741AC00594190 /* SettingsView.swift */, 523150DB2778762B00941EDC /* DeviceItemView.swift */, 52EB90AF2778D67F0048E0ED /* KeyItemView.swift */, + 52F40D2E277CA05600766C24 /* MessageItemView.swift */, 52F2C222277961D7006F08DC /* SettingsItemView.swift */, ); path = View; sourceTree = ""; }; + 78FEAD2568FB92808C44E85A /* Frameworks */ = { + isa = PBXGroup; + children = ( + E380A18349DE4D26071E913E /* Pods_PushDeer.framework */, + E03C2088F4CD9F4C0848E1A5 /* Pods_PushDeerClip.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -132,19 +298,42 @@ isa = PBXNativeTarget; buildConfigurationList = 5292F5032776BC7A00B9A7BB /* Build configuration list for PBXNativeTarget "PushDeer" */; buildPhases = ( + D7C2D4C0049487EE64D69530 /* [CP] Check Pods Manifest.lock */, 5292F4F12776BC7900B9A7BB /* Sources */, 5292F4F22776BC7900B9A7BB /* Frameworks */, 5292F4F32776BC7900B9A7BB /* Resources */, + 52B8CF77277E0B46004CB680 /* Embed App Clips */, + D5C7FAC44EC37CBCD945E0F2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( + 52B8CF72277E0B46004CB680 /* PBXTargetDependency */, ); name = PushDeer; productName = PushDeer; productReference = 5292F4F52776BC7900B9A7BB /* PushDeer.app */; productType = "com.apple.product-type.application"; }; + 52B8CF63277E0B44004CB680 /* PushDeerClip */ = { + isa = PBXNativeTarget; + buildConfigurationList = 52B8CF74277E0B46004CB680 /* Build configuration list for PBXNativeTarget "PushDeerClip" */; + buildPhases = ( + 2478CBF24D0E46561F75C65B /* [CP] Check Pods Manifest.lock */, + 52B8CF60277E0B44004CB680 /* Sources */, + 52B8CF61277E0B44004CB680 /* Frameworks */, + 52B8CF62277E0B44004CB680 /* Resources */, + 2E496999EBC4004366E8DE5E /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PushDeerClip; + productName = PushDeerClip; + productReference = 52B8CF64277E0B44004CB680 /* PushDeerClip.app */; + productType = "com.apple.product-type.application.on-demand-install-capable"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -158,6 +347,9 @@ 5292F4F42776BC7900B9A7BB = { CreatedOnToolsVersion = 13.2.1; }; + 52B8CF63277E0B44004CB680 = { + CreatedOnToolsVersion = 13.2.1; + }; }; }; buildConfigurationList = 5292F4F02776BC7900B9A7BB /* Build configuration list for PBXProject "PushDeer" */; @@ -174,6 +366,7 @@ projectRoot = ""; targets = ( 5292F4F42776BC7900B9A7BB /* PushDeer */, + 52B8CF63277E0B44004CB680 /* PushDeerClip */, ); }; /* End PBXProject section */ @@ -188,8 +381,99 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 52B8CF62277E0B44004CB680 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 52B8CF6E277E0B46004CB680 /* Preview Assets.xcassets in Resources */, + 52B8CF87277E0C5C004CB680 /* Assets.xcassets in Resources */, + 52B8CF6B277E0B46004CB680 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 2478CBF24D0E46561F75C65B /* [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-PushDeerClip-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; + }; + 2E496999EBC4004366E8DE5E /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-PushDeerClip/Pods-PushDeerClip-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-PushDeerClip/Pods-PushDeerClip-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-PushDeerClip/Pods-PushDeerClip-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + D5C7FAC44EC37CBCD945E0F2 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-PushDeer/Pods-PushDeer-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-PushDeer/Pods-PushDeer-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-PushDeer/Pods-PushDeer-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + D7C2D4C0049487EE64D69530 /* [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-PushDeer-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; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 5292F4F12776BC7900B9A7BB /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -203,18 +487,63 @@ 52EB90B32778DA4E0048E0ED /* Line.swift in Sources */, 52F2C223277961D7006F08DC /* SettingsItemView.swift in Sources */, 52163EB72777415F00594190 /* DeviceListView.swift in Sources */, + 52B8CF5F277DE660004CB680 /* AppleSignInButton.swift in Sources */, 52163EB92777417900594190 /* KeyListView.swift in Sources */, 5292F4FB2776BC7900B9A7BB /* ContentView.swift in Sources */, + 52450F3B278491F8003652D8 /* AppState.swift in Sources */, 5292F4F92776BC7900B9A7BB /* PushDeerApp.swift in Sources */, + 52483FC2277ED6D5003A100E /* AppDelegate.swift in Sources */, + 52450F3827848243003652D8 /* PushDeerApi.swift in Sources */, 52EB90AE2778AFD60048E0ED /* BaseNavigationView.swift in Sources */, 52EB90AC2778ADF80048E0ED /* CardView.swift in Sources */, 52EB90B02778D67F0048E0ED /* KeyItemView.swift in Sources */, + 52450F3F2784923D003652D8 /* Result.swift in Sources */, + 52450F422784943F003652D8 /* HttpRequest.swift in Sources */, 52163EB52777413B00594190 /* MessageListView.swift in Sources */, + 52F40D2F277CA05600766C24 /* MessageItemView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 52B8CF60277E0B44004CB680 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 52B8CF82277E0C06004CB680 /* AppleSignInButton.swift in Sources */, + 52B8CF69277E0B44004CB680 /* ContentView.swift in Sources */, + 52B8CF78277E0BF1004CB680 /* MainView.swift in Sources */, + 52B8CF79277E0BFB004CB680 /* DeviceListView.swift in Sources */, + 52B8CF84277E0C12004CB680 /* CardView.swift in Sources */, + 52B8CF7E277E0BFB004CB680 /* SettingsView.swift in Sources */, + 52B8CF7C277E0BFB004CB680 /* KeyListView.swift in Sources */, + 52B8CF7A277E0BFB004CB680 /* MessageListView.swift in Sources */, + 52B8CF83277E0C12004CB680 /* DeletableView.swift in Sources */, + 52B8CF81277E0BFB004CB680 /* LoginView.swift in Sources */, + 52B8CF7F277E0BFB004CB680 /* SettingsItemView.swift in Sources */, + 52450F3C278491F8003652D8 /* AppState.swift in Sources */, + 52B8CF80277E0BFB004CB680 /* MessageItemView.swift in Sources */, + 52483FC3277ED6D5003A100E /* AppDelegate.swift in Sources */, + 52450F3927848243003652D8 /* PushDeerApi.swift in Sources */, + 52B8CF86277E0C12004CB680 /* BaseNavigationView.swift in Sources */, + 52B8CF67277E0B44004CB680 /* PushDeerClipApp.swift in Sources */, + 52B8CF85277E0C12004CB680 /* Line.swift in Sources */, + 52450F402784923D003652D8 /* Result.swift in Sources */, + 52450F432784943F003652D8 /* HttpRequest.swift in Sources */, + 52B8CF7B277E0BFB004CB680 /* DeviceItemView.swift in Sources */, + 52B8CF7D277E0BFB004CB680 /* KeyItemView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 52B8CF72277E0B46004CB680 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + platformFilter = ios; + target = 52B8CF63277E0B44004CB680 /* PushDeerClip */; + targetProxy = 52B8CF71277E0B46004CB680 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin XCBuildConfiguration section */ 5292F5012776BC7A00B9A7BB /* Debug */ = { isa = XCBuildConfiguration; @@ -334,6 +663,7 @@ }; 5292F5042776BC7A00B9A7BB /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = CE3005BD875FC9819A92466C /* Pods-PushDeer.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -344,6 +674,7 @@ DEVELOPMENT_TEAM = Y47WTLML2S; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = PushDeer/Info.plist; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; @@ -365,6 +696,7 @@ }; 5292F5052776BC7A00B9A7BB /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = CCCE1F6E56B157872E2C755F /* Pods-PushDeer.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -375,6 +707,7 @@ DEVELOPMENT_TEAM = Y47WTLML2S; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = PushDeer/Info.plist; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; @@ -394,6 +727,74 @@ }; name = Release; }; + 52B8CF75277E0B46004CB680 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 69F56B2711ED98819D474BE3 /* Pods-PushDeerClip.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = PushDeerClip/PushDeerClip.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"PushDeerClip/Preview Content\""; + DEVELOPMENT_TEAM = Y47WTLML2S; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = PushDeerClip/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = PushDeer; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.wskfz.pushdeer.ios.Clip; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 52B8CF76277E0B46004CB680 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9CC775BE0326BF31C6FACF06 /* Pods-PushDeerClip.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = PushDeerClip/PushDeerClip.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"PushDeerClip/Preview Content\""; + DEVELOPMENT_TEAM = Y47WTLML2S; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = PushDeerClip/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = PushDeer; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.wskfz.pushdeer.ios.Clip; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -415,6 +816,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 52B8CF74277E0B46004CB680 /* Build configuration list for PBXNativeTarget "PushDeerClip" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 52B8CF75277E0B46004CB680 /* Debug */, + 52B8CF76277E0B46004CB680 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = 5292F4ED2776BC7900B9A7BB /* Project object */; diff --git a/ios/PushDeer-iOS/PushDeer.xcworkspace/contents.xcworkspacedata b/ios/PushDeer-iOS/PushDeer.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..66be700 --- /dev/null +++ b/ios/PushDeer-iOS/PushDeer.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/ios/PushDeer-iOS/PushDeer.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/PushDeer-iOS/PushDeer.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/PushDeer-iOS/PushDeer.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/PushDeer-iOS/PushDeer/AppDelegate.swift b/ios/PushDeer-iOS/PushDeer/AppDelegate.swift new file mode 100644 index 0000000..015d238 --- /dev/null +++ b/ios/PushDeer-iOS/PushDeer/AppDelegate.swift @@ -0,0 +1,49 @@ +// +// AppDelegate.swift +// PushDeer +// +// Created by HeXiaoTian on 2021/12/31. +// + +import UIKit +import UserNotifications + +class AppDelegate: NSObject, UIApplicationDelegate, UNUserNotificationCenterDelegate { + + static var deviceToken: String = "" + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { + + let center = UNUserNotificationCenter.current() + center.delegate = self + center.requestAuthorization(options: [.badge, .sound, .alert]) { granted, error in + print("注册通知结果: \(granted) - \(String(describing: error))") + } + application.registerForRemoteNotifications() + + Task { + // APP启动后要先调一个无用接口, 用于触发国行手机的网络授权弹框, 未授权前调的接口会直接失败. (提前触发网络授权弹窗) + let result = try await HttpRequest.fake() + AppState.shared.token = result.token + HttpRequest.getDevices() + } + + return true + } + + func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { + let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)}) + print("deviceToken: ", deviceTokenString) + AppDelegate.deviceToken = deviceTokenString; + } + + func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification) async -> UNNotificationPresentationOptions { + print("willPresent:", notification.request.content.userInfo) + return [.sound, .list, .banner] + } + + func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse) async { + print("didReceive:", response.notification.request.content.userInfo) + } + +} diff --git a/ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/Contents.json index 9221b9b..728e6c3 100644 --- a/ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,98 +1,122 @@ { - "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" + "images": [ + { + "size": "20x20", + "idiom": "iphone", + "filename": "icon-20@2x.png", + "scale": "2x" + }, + { + "size": "20x20", + "idiom": "iphone", + "filename": "icon-20@3x.png", + "scale": "3x" + }, + { + "size": "29x29", + "idiom": "iphone", + "filename": "icon-29.png", + "scale": "1x" + }, + { + "size": "29x29", + "idiom": "iphone", + "filename": "icon-29@2x.png", + "scale": "2x" + }, + { + "size": "29x29", + "idiom": "iphone", + "filename": "icon-29@3x.png", + "scale": "3x" + }, + { + "size": "40x40", + "idiom": "iphone", + "filename": "icon-40@2x.png", + "scale": "2x" + }, + { + "size": "40x40", + "idiom": "iphone", + "filename": "icon-40@3x.png", + "scale": "3x" + }, + { + "size": "60x60", + "idiom": "iphone", + "filename": "icon-60@2x.png", + "scale": "2x" + }, + { + "size": "60x60", + "idiom": "iphone", + "filename": "icon-60@3x.png", + "scale": "3x" + }, + { + "size": "20x20", + "idiom": "ipad", + "filename": "icon-20-ipad.png", + "scale": "1x" + }, + { + "size": "20x20", + "idiom": "ipad", + "filename": "icon-20@2x-ipad.png", + "scale": "2x" + }, + { + "size": "29x29", + "idiom": "ipad", + "filename": "icon-29-ipad.png", + "scale": "1x" + }, + { + "size": "29x29", + "idiom": "ipad", + "filename": "icon-29@2x-ipad.png", + "scale": "2x" + }, + { + "size": "40x40", + "idiom": "ipad", + "filename": "icon-40.png", + "scale": "1x" + }, + { + "size": "40x40", + "idiom": "ipad", + "filename": "icon-40@2x.png", + "scale": "2x" + }, + { + "size": "76x76", + "idiom": "ipad", + "filename": "icon-76.png", + "scale": "1x" + }, + { + "size": "76x76", + "idiom": "ipad", + "filename": "icon-76@2x.png", + "scale": "2x" + }, + { + "size": "83.5x83.5", + "idiom": "ipad", + "filename": "icon-83.5@2x.png", + "scale": "2x" + }, + { + "size": "1024x1024", + "idiom": "ios-marketing", + "filename": "icon-1024.png", + "scale": "1x" + } + ], + "info": { + "version": 1, + "author": "icon.wuruihong.com" } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} +} \ No newline at end of file diff --git a/ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-1024.png b/ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..33f6f4a9801ce5e38e9f545352574b59f6780d77 GIT binary patch literal 50876 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 RBNY5mQ_)h+Q@rul{{s+wu|5C* literal 0 HcmV?d00001 diff --git a/ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-20-ipad.png b/ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-20-ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..c73023ce6e4cc40b789da9089c221b88bf773cd6 GIT binary patch literal 641 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 literal 0 HcmV?d00001 diff --git a/ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png b/ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1bd003a23577f5f7d6fc190565414412aa77fa41 GIT binary patch literal 2670 zcmV-!3X%1RP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 diff --git a/ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png b/ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..76757814e516c20ad5bddb4732fb716f189411bf GIT binary patch literal 4454 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 XzPr@Vf;WIcQjnCGyl9n(VetO|Rby&Q literal 0 HcmV?d00001 diff --git a/ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-76.png b/ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-76.png new file mode 100644 index 0000000000000000000000000000000000000000..41fc21a68ef727c28217349ff8d2d808a3e13f7d GIT binary patch literal 3804 zcmV<24kPi2P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 S9C2L$0000qy;3FQb1(sMmm4<{U6@< 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 literal 0 HcmV?d00001 diff --git a/ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png b/ios/PushDeer-iOS/PushDeer/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..824da59fd70ed57f309cb36ffb4f9f8559825088 GIT binary patch literal 9843 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 Void + let onCompletion: (Result) -> Void + + func makeUIView(context: Context) -> ASAuthorizationAppleIDButton { + let signInButton = ASAuthorizationAppleIDButton(type: type, style: style) + let coordinator = AppleSignInCoordinator(onRequest: onRequest, onCompletion: onCompletion) + signInButton.addAction( + UIAction { action in + coordinator.performRequests() + }, + for: UIControl.Event.touchUpInside + ) + return signInButton + } + + func updateUIView(_ uiView: ASAuthorizationAppleIDButton, context: Context) { + + } +} + +class AppleSignInCoordinator: NSObject, ASAuthorizationControllerDelegate { + + let onRequest: (ASAuthorizationAppleIDRequest) -> Void + let onCompletion: (Result) -> Void + + init( + onRequest: @escaping (ASAuthorizationAppleIDRequest) -> Void, + onCompletion: @escaping (Result) -> Void + ) { + self.onRequest = onRequest + self.onCompletion = onCompletion + } + + @objc func performRequests() { + let appleIDProvider = ASAuthorizationAppleIDProvider() + let request = appleIDProvider.createRequest() + onRequest(request) + let authorizationController = ASAuthorizationController(authorizationRequests: [request]) + authorizationController.delegate = self + authorizationController.performRequests() + } + + func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) { + print(authorization.debugDescription) + onCompletion(.success(authorization)) + } + + func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) { + print(error.localizedDescription) + onCompletion(.failure(error)) + } +} diff --git a/ios/PushDeer-iOS/PushDeer/Info.plist b/ios/PushDeer-iOS/PushDeer/Info.plist new file mode 100644 index 0000000..fde08b1 --- /dev/null +++ b/ios/PushDeer-iOS/PushDeer/Info.plist @@ -0,0 +1,15 @@ + + + + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + UIBackgroundModes + + remote-notification + + + diff --git a/ios/PushDeer-iOS/PushDeer/Model/Result.swift b/ios/PushDeer-iOS/PushDeer/Model/Result.swift new file mode 100644 index 0000000..3e8deb6 --- /dev/null +++ b/ios/PushDeer-iOS/PushDeer/Model/Result.swift @@ -0,0 +1,59 @@ +// +// Result.swift +// PushDeer +// +// Created by HEXT on 2022/1/4. +// + +import Foundation + +/// 每个API接口的标准返回结构 +struct ApiResult : Codable{ + let code: Int + /// 错误提示, code != 0 时才有 + let error: String? + /// 返回内容, code == 0 时才有 + let content: T? +} + +struct TokenContent: Codable{ + let token: String +} + +struct DeviceItem: Codable, Identifiable{ + let id: Int + let uid: String + let name: String + let type: String + let device_id: String + let is_clip: Int +} + +struct DeviceContent: Codable{ + let devices: [DeviceItem] +} + +struct KeyContent: Codable{ + let keys: [KeyItem] +} + +struct KeyItem: Codable, Identifiable{ + let id: Int + let key: String +} + +struct MessageContent: Codable{ + let messages: [MessageItem] +} + +struct MessageItem: Codable, Identifiable{ + let id: Int + let uid: String + let text: String + let desp: String + let type: String +} + +struct ActionContent: Codable{ + let message: String +} diff --git a/ios/PushDeer-iOS/PushDeer/PushDeer.entitlements b/ios/PushDeer-iOS/PushDeer/PushDeer.entitlements index ee95ab7..2808c6d 100644 --- a/ios/PushDeer-iOS/PushDeer/PushDeer.entitlements +++ b/ios/PushDeer-iOS/PushDeer/PushDeer.entitlements @@ -2,6 +2,12 @@ + aps-environment + development + com.apple.developer.applesignin + + Default + com.apple.security.app-sandbox com.apple.security.network.client diff --git a/ios/PushDeer-iOS/PushDeer/PushDeerApp.swift b/ios/PushDeer-iOS/PushDeer/PushDeerApp.swift index b54ec1d..6689ecb 100644 --- a/ios/PushDeer-iOS/PushDeer/PushDeerApp.swift +++ b/ios/PushDeer-iOS/PushDeer/PushDeerApp.swift @@ -9,9 +9,11 @@ import SwiftUI @main struct PushDeerApp: App { + @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate + var body: some Scene { WindowGroup { - ContentView() + ContentView().environmentObject(AppState.shared) } } } diff --git a/ios/PushDeer-iOS/PushDeer/Service/AppState.swift b/ios/PushDeer-iOS/PushDeer/Service/AppState.swift new file mode 100644 index 0000000..24476bb --- /dev/null +++ b/ios/PushDeer-iOS/PushDeer/Service/AppState.swift @@ -0,0 +1,19 @@ +// +// AppState.swift +// PushDeer +// +// Created by HEXT on 2022/1/4. +// + +import Foundation +class AppState: ObservableObject { + @Published var token : String? = nil + @Published var devices: [DeviceItem] = [] + @Published var keys: [KeyItem] = [] + @Published var messages: [MessageItem] = [] + @Published var tab_selected: Int = 1 + @Published var device_token: String = "" + + static let shared = AppState() + private init() {} +} diff --git a/ios/PushDeer-iOS/PushDeer/Service/HttpRequest.swift b/ios/PushDeer-iOS/PushDeer/Service/HttpRequest.swift new file mode 100644 index 0000000..d498a83 --- /dev/null +++ b/ios/PushDeer-iOS/PushDeer/Service/HttpRequest.swift @@ -0,0 +1,55 @@ +// +// HttpRequest.swift +// PushDeer +// +// Created by HEXT on 2022/1/4. +// + +import Foundation +import Moya + +struct HttpRequest { + + static let provider = MoyaProvider(callbackQueue: DispatchQueue.main) + + /// 统一处理接口请求, 并且封装成 Swift Concurrency 模式 (async / await) + static func request(_ targetType: PushDeerApi, resultType: T.Type) async throws -> T { + return try await withCheckedThrowingContinuation { continuation in + provider.request(targetType) { result in + switch result { + case let .success(response): + do { + let result = try JSONDecoder().decode(ApiResult.self, from: response.data) + print(result) + if let content = result.content, result.code == 0 { + continuation.resume(returning: content) + } else { + continuation.resume(throwing: NSError(domain: result.error ?? "接口报错", code: result.code, userInfo: nil)) + } + } catch { + print(error) + continuation.resume(throwing: error) + } + case let .failure(error): + print(error) + continuation.resume(throwing: error) + } + } + } + } + + static func fake() async throws -> TokenContent { + return try await request(.fake, resultType: TokenContent.self) + } + + static func login(idToken: String) async throws -> TokenContent { + return try await request(.login(idToken: idToken), resultType: TokenContent.self) + } + + @MainActor static func getDevices() { + _Concurrency.Task { + let result = try await request(.getDevices(token: AppState.shared.token ?? ""), resultType: DeviceContent.self) + AppState.shared.devices = result.devices + } + } +} diff --git a/ios/PushDeer-iOS/PushDeer/Service/PushDeerApi.swift b/ios/PushDeer-iOS/PushDeer/Service/PushDeerApi.swift new file mode 100644 index 0000000..11fc662 --- /dev/null +++ b/ios/PushDeer-iOS/PushDeer/Service/PushDeerApi.swift @@ -0,0 +1,114 @@ +// +// PushDeerApi.swift +// PushDeer +// +// Created by HEXT on 2022/1/4. +// + +import Foundation +import Moya + +enum PushDeerApi { + + case fake + case login(idToken: String) + + case regDevice(token: String, name: String, device_id: String, is_clip: Int) + case getDevices(token: String) + case rmDevice(token: String, id: Int) + + case genKey(token: String) + case regenKey(token: String, id: Int) + case renameKey(token: String, id: Int, name: String) + case getKeys(token: String) + case rmKey(token: String, id: Int) + + /// type: 文本=text,markdown,图片=image,默认为markdown + case push(pushkey: String, text: String, desp: String, type: String) + + case getMessages(token: String, limit: Int) + case rmMessage(token: String, id: Int) + +} + +extension PushDeerApi: TargetType { + var baseURL: URL { URL( string: "http://pushdeer.wskfz.com:8800" )! } + var path: String { + switch self { + case .fake: + return "/login/fake" + case .login: + return "/login/idtoken" + + case .regDevice: + return "/device/reg" + case .getDevices: + return "/device/list" + case .rmDevice: + return "/device/remove" + + case .genKey: + return "/key/gen" + case .regenKey: + return "/key/regen" + case .renameKey: + return "/key/rename" + case .getKeys: + return "/key/list" + case .rmKey: + return "/key/remove" + + case .push: + return "/message/push" + + case .getMessages: + return "/message/list" + case .rmMessage: + return "/message/remove" + } + } + var method: Moya.Method { + switch self { + default: + return .post + } + } + var task: Task { + switch self { + case .fake: + return .requestParameters(parameters: [:], encoding: URLEncoding.queryString) + case let .login(idToken): + return .requestParameters(parameters: ["idToken": idToken], encoding: URLEncoding.queryString) + + case let .regDevice(token, name, device_id, is_clip): + return .requestParameters(parameters: ["token": token,"name": name, "device_id": device_id,"is_clip": is_clip], encoding: URLEncoding.queryString) + case let .getDevices(token): + return .requestParameters(parameters: ["token": token], encoding: URLEncoding.queryString) + case let .rmDevice(token, id): + return .requestParameters(parameters: ["token": token,"id": id], encoding: URLEncoding.queryString) + + case let .genKey(token): + return .requestParameters(parameters: ["token": token], encoding: URLEncoding.queryString) + case let .regenKey(token, id): + return .requestParameters(parameters: ["token": token,"id": id], encoding: URLEncoding.queryString) + case let .renameKey(token, id, name): + return .requestParameters(parameters: ["token": token,"id": id,"name": name], encoding: URLEncoding.queryString) + case let .getKeys(token): + return .requestParameters(parameters: ["token": token],encoding: URLEncoding.queryString) + case let .rmKey(token, id): + return .requestParameters(parameters: ["token": token, "id": id],encoding: URLEncoding.queryString) + + case let .push(pushkey, text, desp, type): + return .requestParameters(parameters: ["pushkey": pushkey, "text": text, "desp": desp, "type": type],encoding: URLEncoding.queryString) + + case let .getMessages(token, limit): + 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) + + } + } + var headers: [String: String]? { + return ["Content-type": "application/json"] + } +} diff --git a/ios/PushDeer-iOS/PushDeer/View/DeviceListView.swift b/ios/PushDeer-iOS/PushDeer/View/DeviceListView.swift index d67fd36..64dbed9 100644 --- a/ios/PushDeer-iOS/PushDeer/View/DeviceListView.swift +++ b/ios/PushDeer-iOS/PushDeer/View/DeviceListView.swift @@ -9,32 +9,36 @@ import SwiftUI /// 设备界面 struct DeviceListView: View { - @State var devices = Array(0..<10) + @EnvironmentObject private var store: AppState var body: some View { BaseNavigationView(title: "设备") { ScrollView { LazyVStack(alignment: .center) { - ForEach(devices, id: \.self) { name in + ForEach(store.devices, id: \.id) { deviceItem in DeletableView(contentView: { - DeviceItemView(name: "设备 \(name)") + DeviceItemView(name: deviceItem.name) }, deleteAction: { - devices.removeAll { _name in - _name == name + store.devices.removeAll { _deviceItem in + _deviceItem.id == deviceItem.id } }) .padding(EdgeInsets(top: 18, leading: 26, bottom: 0, trailing: 24)) } + Spacer(minLength: 30) } } .navigationBarItems(trailing: Button(action: { withAnimation(.easeOut) { - devices.insert(Int(arc4random_uniform(1000)), at: 0) +// store.devices.insert(DeviceItem(), at: 0) } }, label: { Image(systemName: "plus") .foregroundColor(Color(UIColor.lightGray)) })) } + .onAppear { + HttpRequest.getDevices() + } } } diff --git a/ios/PushDeer-iOS/PushDeer/View/KeyListView.swift b/ios/PushDeer-iOS/PushDeer/View/KeyListView.swift index cbe289b..04ed228 100644 --- a/ios/PushDeer-iOS/PushDeer/View/KeyListView.swift +++ b/ios/PushDeer-iOS/PushDeer/View/KeyListView.swift @@ -7,11 +7,6 @@ import SwiftUI -struct KeyItem: Codable, Identifiable{ - let id: Int - let key: String -} - /// Key 界面 struct KeyListView: View { @State private var keyItems = [ @@ -37,6 +32,7 @@ struct KeyListView: View { }) .padding(EdgeInsets(top: 18, leading: 26, bottom: 0, trailing: 24)) } + Spacer(minLength: 30) } } .navigationBarItems(trailing: Button(action: { diff --git a/ios/PushDeer-iOS/PushDeer/View/LoginView.swift b/ios/PushDeer-iOS/PushDeer/View/LoginView.swift index a8ea102..de4ae61 100644 --- a/ios/PushDeer-iOS/PushDeer/View/LoginView.swift +++ b/ios/PushDeer-iOS/PushDeer/View/LoginView.swift @@ -17,15 +17,39 @@ struct LoginView: View { .resizable() .scaledToFit() Spacer() - SignInWithAppleButton( + AppleSignInButton( onRequest: { request in - + request.requestedScopes = [.fullName, .email] }, onCompletion: { result in - + switch result { + case let .success(authorization): + if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential { + // 用户唯一ID,在一个开发者账号下的APP获取到的是一样的 + print(appleIDCredential.user) // 000791.7a323f1326dd4674bc16d32fd6339875.1424 + // 注意:当第一次认证成功之后,将不会再返回email,fullName等信息,可以在设置->Apple ID->密码与安全性->使用您AppleID的App 中删除对应的APP。 + print(appleIDCredential.email as Any) // easychen@qq.com + print(appleIDCredential.fullName as Any) // givenName: lijie familyName: chen + // 「JWT」格式的token,用于验证信息合法性。其值用.分割成3段, 中间一段base64后会看到包含了 用户唯一标识 和 邮箱 等字段 + let idToken = String(data:appleIDCredential.identityToken!, encoding: .utf8) + print(idToken as Any) + + Task { + do { + let result = try await HttpRequest.login(idToken: idToken!) + + print(result) + } catch { + print(error) + } + } + } + case let .failure(error): + print(error) + } } ) - .frame(height: 64) + .frame(maxWidth: 375, minHeight: 64, maxHeight: 64) .padding() Spacer() } diff --git a/ios/PushDeer-iOS/PushDeer/View/MessageItemView.swift b/ios/PushDeer-iOS/PushDeer/View/MessageItemView.swift new file mode 100644 index 0000000..252e73c --- /dev/null +++ b/ios/PushDeer-iOS/PushDeer/View/MessageItemView.swift @@ -0,0 +1,64 @@ +// +// MessageItemView.swift +// PushDeer +// +// Created by HEXT on 2021/12/29. +// + +import SwiftUI + +struct MessageItemView: View { + /// 删除按钮点击的回调 + let deleteAction : () -> () + + var body: some View { + VStack { + HStack { + HLine().stroke(Color(UIColor.lightGray)) + .frame(width: 20, height: 1) + Image("avatar2") + .resizable() + .scaledToFit() + .frame(width: 38, height: 38) + Text("key名字") + .font(.system(size: 14)) + .foregroundColor(Color(UIColor.darkGray)) + Text("· 5分钟前") + .font(.system(size: 12)) + .foregroundColor(Color(UIColor.darkGray)) + HLine().stroke(Color(UIColor.lightGray)) + .frame(height: 1) + } + + DeletableView(contentView: { + CardView { + HStack{ + Text("纯文本的效果") + .font(.system(size: 14)) + .foregroundColor(Color(UIColor.darkGray)) + .padding() + Spacer(minLength: 0) + } + .contextMenu { + Button("复制") { + UIPasteboard.general.string = "someText" + } + } + } + }, deleteAction: deleteAction) + .padding(EdgeInsets(top: 10, leading: 26, bottom: 0, trailing: 24)) + + } + .padding(.top, 25) + } +} + +struct MessageItemView_Previews: PreviewProvider { + static var previews: some View { + VStack { + MessageItemView(){} + MessageItemView(){} + Spacer() + } + } +} diff --git a/ios/PushDeer-iOS/PushDeer/View/MessageListView.swift b/ios/PushDeer-iOS/PushDeer/View/MessageListView.swift index 23f40fc..9680ee9 100644 --- a/ios/PushDeer-iOS/PushDeer/View/MessageListView.swift +++ b/ios/PushDeer-iOS/PushDeer/View/MessageListView.swift @@ -9,8 +9,56 @@ import SwiftUI /// 消息界面 struct MessageListView: View { + + @State private var messages = Array(0..<10) + @State private var isShowTest = true + var body: some View { - Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) + BaseNavigationView(title: "消息") { + ScrollView { + LazyVStack(alignment: .leading) { + if isShowTest { + TestPushView() + } + ForEach(messages, id: \.self) { msg in + MessageItemView { + messages.removeAll { _msg in + _msg == msg + } + } + } + Spacer(minLength: 30) + } + } + .navigationBarItems(trailing: Button(action: { + withAnimation(.easeOut) { + isShowTest = !isShowTest + } + }, label: { + Image(systemName: isShowTest ? "chevron.up" : "chevron.down") + .foregroundColor(Color(UIColor.lightGray)) + })) + } + } +} + +struct TestPushView: View { + @State private var testText = "" + var body: some View { + TextEditor(text: $testText) + .overlay(RoundedRectangle(cornerRadius: 4).stroke(Color.accentColor)) + .frame(height: 128) + .padding(EdgeInsets(top: 18, leading: 26, bottom: 0, trailing: 24)) + + Button("推送测试") { + print("点击推送测试") + } + .font(.system(size: 20)) + .frame(width: 104, height: 42) + .foregroundColor(Color.white) + .background(Color.accentColor) + .cornerRadius(8) + .padding(EdgeInsets(top: 12, leading: 26, bottom: 0, trailing: 24)) } } diff --git a/ios/PushDeer-iOS/PushDeerClip/Assets.xcassets/AccentColor.colorset/Contents.json b/ios/PushDeer-iOS/PushDeerClip/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/ios/PushDeer-iOS/PushDeerClip/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/PushDeer-iOS/PushDeerClip/Assets.xcassets/Contents.json b/ios/PushDeer-iOS/PushDeerClip/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/ios/PushDeer-iOS/PushDeerClip/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/PushDeer-iOS/PushDeerClip/ContentView.swift b/ios/PushDeer-iOS/PushDeerClip/ContentView.swift new file mode 100644 index 0000000..bd475d1 --- /dev/null +++ b/ios/PushDeer-iOS/PushDeerClip/ContentView.swift @@ -0,0 +1,20 @@ +// +// ContentView.swift +// PushDeerClip +// +// Created by HEXT on 2021/12/30. +// + +import SwiftUI + +struct ContentView: View { + var body: some View { + MainView() + } +} + +struct ContentView_Previews: PreviewProvider { + static var previews: some View { + ContentView() + } +} diff --git a/ios/PushDeer-iOS/PushDeerClip/Info.plist b/ios/PushDeer-iOS/PushDeerClip/Info.plist new file mode 100644 index 0000000..301b5a0 --- /dev/null +++ b/ios/PushDeer-iOS/PushDeerClip/Info.plist @@ -0,0 +1,18 @@ + + + + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + NSAppClip + + NSAppClipRequestEphemeralUserNotification + + NSAppClipRequestLocationConfirmation + + + + diff --git a/ios/PushDeer-iOS/PushDeerClip/Preview Content/Preview Assets.xcassets/Contents.json b/ios/PushDeer-iOS/PushDeerClip/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/ios/PushDeer-iOS/PushDeerClip/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/PushDeer-iOS/PushDeerClip/PushDeerClip.entitlements b/ios/PushDeer-iOS/PushDeerClip/PushDeerClip.entitlements new file mode 100644 index 0000000..e6942c0 --- /dev/null +++ b/ios/PushDeer-iOS/PushDeerClip/PushDeerClip.entitlements @@ -0,0 +1,16 @@ + + + + + aps-environment + development + com.apple.developer.applesignin + + Default + + com.apple.developer.parent-application-identifiers + + $(AppIdentifierPrefix)com.wskfz.pushdeer.ios + + + diff --git a/ios/PushDeer-iOS/PushDeerClip/PushDeerClipApp.swift b/ios/PushDeer-iOS/PushDeerClip/PushDeerClipApp.swift new file mode 100644 index 0000000..292aa1d --- /dev/null +++ b/ios/PushDeer-iOS/PushDeerClip/PushDeerClipApp.swift @@ -0,0 +1,19 @@ +// +// PushDeerClipApp.swift +// PushDeerClip +// +// Created by HEXT on 2021/12/30. +// + +import SwiftUI + +@main +struct PushDeerClipApp: App { + @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate + + var body: some Scene { + WindowGroup { + ContentView().environmentObject(AppState.shared) + } + } +}