Commit 7ebc2ad9 by macmini

1.0.3 新增评论

parent f665c00b
...@@ -3,63 +3,17 @@ ...@@ -3,63 +3,17 @@
archiveVersion = 1; archiveVersion = 1;
classes = { classes = {
}; };
objectVersion = 56; objectVersion = 74;
objects = { objects = {
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
5971E9BC30751C8A63B4C055 /* Pods_Toolboxes.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9ACDCA11009D00204DDE29D6 /* Pods_Toolboxes.framework */; }; 5971E9BC30751C8A63B4C055 /* Pods_Toolboxes.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9ACDCA11009D00204DDE29D6 /* Pods_Toolboxes.framework */; };
9901294E2CA6B71200C19D27 /* Color+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9901294D2CA6B71200C19D27 /* Color+.swift */; };
990129502CA6B7B200C19D27 /* Date+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9901294F2CA6B7B200C19D27 /* Date+.swift */; };
995E87712C9E8E5300FA5AC4 /* ToolboxesApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995E87702C9E8E5300FA5AC4 /* ToolboxesApp.swift */; };
995E87732C9E8E5300FA5AC4 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995E87722C9E8E5300FA5AC4 /* ContentView.swift */; };
995E87772C9E8E5500FA5AC4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 995E87762C9E8E5500FA5AC4 /* Assets.xcassets */; };
995E877A2C9E8E5500FA5AC4 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 995E87792C9E8E5500FA5AC4 /* Preview Assets.xcassets */; };
995E87842C9E8E5500FA5AC4 /* ToolboxesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995E87832C9E8E5500FA5AC4 /* ToolboxesTests.swift */; };
995E878E2C9E8E5500FA5AC4 /* ToolboxesUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995E878D2C9E8E5500FA5AC4 /* ToolboxesUITests.swift */; };
995E87902C9E8E5500FA5AC4 /* ToolboxesUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995E878F2C9E8E5500FA5AC4 /* ToolboxesUITestsLaunchTests.swift */; };
995E879E2C9E983400FA5AC4 /* CompassView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995E879D2C9E983400FA5AC4 /* CompassView.swift */; };
995E87A02C9E98B700FA5AC4 /* DataView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995E879F2C9E98B700FA5AC4 /* DataView.swift */; };
995E87A22C9E99AD00FA5AC4 /* LocationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995E87A12C9E99AD00FA5AC4 /* LocationView.swift */; };
995E87A42C9E99F600FA5AC4 /* MoreView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995E87A32C9E99F600FA5AC4 /* MoreView.swift */; };
995E87A62C9E9C0B00FA5AC4 /* MapLayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995E87A52C9E9C0B00FA5AC4 /* MapLayerView.swift */; };
995E87A92C9E9D8800FA5AC4 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 995E87A72C9E9D8800FA5AC4 /* Localizable.strings */; };
995E87AC2C9E9DC000FA5AC4 /* Const.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995E87AB2C9E9DC000FA5AC4 /* Const.swift */; };
995E87AE2C9EAB6A00FA5AC4 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995E87AD2C9EAB6A00FA5AC4 /* AppDelegate.swift */; };
9969F6BE2CA3B944003CAB53 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9969F6BD2CA3B944003CAB53 /* WidgetKit.framework */; }; 9969F6BE2CA3B944003CAB53 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9969F6BD2CA3B944003CAB53 /* WidgetKit.framework */; };
9969F6C02CA3B944003CAB53 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9969F6BF2CA3B944003CAB53 /* SwiftUI.framework */; }; 9969F6C02CA3B944003CAB53 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9969F6BF2CA3B944003CAB53 /* SwiftUI.framework */; };
9969F6C32CA3B944003CAB53 /* ToolboxesWidgetsBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9969F6C22CA3B944003CAB53 /* ToolboxesWidgetsBundle.swift */; };
9969F6C52CA3B944003CAB53 /* ToolboxesWidgetsLiveActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9969F6C42CA3B944003CAB53 /* ToolboxesWidgetsLiveActivity.swift */; };
9969F6C72CA3B944003CAB53 /* ToolboxesWidgets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9969F6C62CA3B944003CAB53 /* ToolboxesWidgets.swift */; };
9969F6C92CA3B944003CAB53 /* AppIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9969F6C82CA3B944003CAB53 /* AppIntent.swift */; };
9969F6CF2CA3B946003CAB53 /* ToolboxesWidgetsExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 9969F6BC2CA3B944003CAB53 /* ToolboxesWidgetsExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 9969F6CF2CA3B946003CAB53 /* ToolboxesWidgetsExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 9969F6BC2CA3B944003CAB53 /* ToolboxesWidgetsExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
9969F6D52CA3EDA3003CAB53 /* FlashlightView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9969F6D42CA3EDA3003CAB53 /* FlashlightView.swift */; }; 9992A5D12EE1309F002AA53C /* Alamofire in Frameworks */ = {isa = PBXBuildFile; productRef = 9992A5D02EE1309F002AA53C /* Alamofire */; };
99955E9E2C9EBAC400D079C6 /* MapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99955E9D2C9EBAC400D079C6 /* MapView.swift */; }; 9992A5DA2EE13375002AA53C /* ObjectMapper in Frameworks */ = {isa = PBXBuildFile; productRef = 9992A5D92EE13375002AA53C /* ObjectMapper */; };
999B660D2CB8C1850098422D /* String+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 999B660C2CB8C1850098422D /* String+.swift */; }; 9992A5EA2EE13591002AA53C /* CryptoSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 9992A5E92EE13591002AA53C /* CryptoSwift */; };
999FC5D52CB6089D00B4A5C0 /* AsyncGifImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 999FC5D02CB6089D00B4A5C0 /* AsyncGifImage.swift */; };
999FC5D62CB6089D00B4A5C0 /* GifDefined.swift in Sources */ = {isa = PBXBuildFile; fileRef = 999FC5D12CB6089D00B4A5C0 /* GifDefined.swift */; };
999FC5D72CB6089D00B4A5C0 /* GifImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 999FC5D22CB6089D00B4A5C0 /* GifImage.swift */; };
999FC5D82CB6089D00B4A5C0 /* UIImage.Gif.swift in Sources */ = {isa = PBXBuildFile; fileRef = 999FC5D32CB6089D00B4A5C0 /* UIImage.Gif.swift */; };
99A414642CB37C5B00EFC06E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9969F6CA2CA3B946003CAB53 /* Assets.xcassets */; };
99A414652CB37C6C00EFC06E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 995E87762C9E8E5500FA5AC4 /* Assets.xcassets */; };
99A414672CB3E44C00EFC06E /* AltitudeMediumView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99A414662CB3E44C00EFC06E /* AltitudeMediumView.swift */; };
99A414682CB3E44C00EFC06E /* AltitudeMediumView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99A414662CB3E44C00EFC06E /* AltitudeMediumView.swift */; };
99A9E5162CA1140900217BE2 /* HomeCenterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99A9E5152CA1140900217BE2 /* HomeCenterView.swift */; };
99A9E5192CA15A9F00217BE2 /* CompassManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99A9E5182CA15A9F00217BE2 /* CompassManager.swift */; };
99ACC9332CB36AB4004CDC15 /* AltitudeSmallView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99CF63732CA2C07400F22059 /* AltitudeSmallView.swift */; };
99C84D182CA8EF1900F269E0 /* VIew+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C84D172CA8EF1900F269E0 /* VIew+.swift */; };
99C84D192CA8F27F00F269E0 /* Color+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9901294D2CA6B71200C19D27 /* Color+.swift */; };
99C84D1A2CA8F28500F269E0 /* VIew+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C84D172CA8EF1900F269E0 /* VIew+.swift */; };
99C84D1B2CA8F3CF00F269E0 /* Const.swift in Sources */ = {isa = PBXBuildFile; fileRef = 995E87AB2C9E9DC000FA5AC4 /* Const.swift */; };
99C84D1C2CA8F3E800F269E0 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 995E87A72C9E9D8800FA5AC4 /* Localizable.strings */; };
99C84D1D2CA8F75D00F269E0 /* CompassManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99A9E5182CA15A9F00217BE2 /* CompassManager.swift */; };
99CF636D2CA290A600F22059 /* InfinityPopupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99CF636C2CA290A600F22059 /* InfinityPopupView.swift */; };
99CF636F2CA2B32F00F22059 /* CustomNavigationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99CF636E2CA2B32F00F22059 /* CustomNavigationView.swift */; };
99CF63712CA2B90D00F22059 /* WidgetListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99CF63702CA2B90D00F22059 /* WidgetListView.swift */; };
99CF63742CA2C07400F22059 /* AltitudeSmallView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99CF63732CA2C07400F22059 /* AltitudeSmallView.swift */; };
99D553CC2CB4D79A001224EF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 99D553CB2CB4D79A001224EF /* LaunchScreen.storyboard */; };
99D553ED2CB529DD001224EF /* wuqiong.gif in Resources */ = {isa = PBXBuildFile; fileRef = 99D553EC2CB529DD001224EF /* wuqiong.gif */; };
99D76BD82CAA4D8B00EAD9E0 /* InfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99D76BD72CAA4D8B00EAD9E0 /* InfoView.swift */; };
99FF658A2CA53B590014179A /* BarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99FF65892CA53B590014179A /* BarChartView.swift */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */ /* Begin PBXContainerItemProxy section */
...@@ -103,67 +57,68 @@ ...@@ -103,67 +57,68 @@
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
9068DA139C0D41DBDF1A5C60 /* Pods-Toolboxes.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Toolboxes.debug.xcconfig"; path = "Target Support Files/Pods-Toolboxes/Pods-Toolboxes.debug.xcconfig"; sourceTree = "<group>"; }; 9068DA139C0D41DBDF1A5C60 /* Pods-Toolboxes.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Toolboxes.debug.xcconfig"; path = "Target Support Files/Pods-Toolboxes/Pods-Toolboxes.debug.xcconfig"; sourceTree = "<group>"; };
968EE969DC07BCD2F5A5230E /* Pods-Toolboxes.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Toolboxes.release.xcconfig"; path = "Target Support Files/Pods-Toolboxes/Pods-Toolboxes.release.xcconfig"; sourceTree = "<group>"; }; 968EE969DC07BCD2F5A5230E /* Pods-Toolboxes.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Toolboxes.release.xcconfig"; path = "Target Support Files/Pods-Toolboxes/Pods-Toolboxes.release.xcconfig"; sourceTree = "<group>"; };
9901294D2CA6B71200C19D27 /* Color+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Color+.swift"; sourceTree = "<group>"; };
9901294F2CA6B7B200C19D27 /* Date+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Date+.swift"; sourceTree = "<group>"; };
995E876D2C9E8E5300FA5AC4 /* Toolboxes.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Toolboxes.app; sourceTree = BUILT_PRODUCTS_DIR; }; 995E876D2C9E8E5300FA5AC4 /* Toolboxes.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Toolboxes.app; sourceTree = BUILT_PRODUCTS_DIR; };
995E87702C9E8E5300FA5AC4 /* ToolboxesApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolboxesApp.swift; sourceTree = "<group>"; };
995E87722C9E8E5300FA5AC4 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
995E87762C9E8E5500FA5AC4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
995E87792C9E8E5500FA5AC4 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
995E877F2C9E8E5500FA5AC4 /* ToolboxesTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ToolboxesTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 995E877F2C9E8E5500FA5AC4 /* ToolboxesTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ToolboxesTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
995E87832C9E8E5500FA5AC4 /* ToolboxesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolboxesTests.swift; sourceTree = "<group>"; };
995E87892C9E8E5500FA5AC4 /* ToolboxesUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ToolboxesUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 995E87892C9E8E5500FA5AC4 /* ToolboxesUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ToolboxesUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
995E878D2C9E8E5500FA5AC4 /* ToolboxesUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolboxesUITests.swift; sourceTree = "<group>"; };
995E878F2C9E8E5500FA5AC4 /* ToolboxesUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolboxesUITestsLaunchTests.swift; sourceTree = "<group>"; };
995E879D2C9E983400FA5AC4 /* CompassView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompassView.swift; sourceTree = "<group>"; };
995E879F2C9E98B700FA5AC4 /* DataView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataView.swift; sourceTree = "<group>"; };
995E87A12C9E99AD00FA5AC4 /* LocationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationView.swift; sourceTree = "<group>"; };
995E87A32C9E99F600FA5AC4 /* MoreView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoreView.swift; sourceTree = "<group>"; };
995E87A52C9E9C0B00FA5AC4 /* MapLayerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapLayerView.swift; sourceTree = "<group>"; };
995E87A82C9E9D8800FA5AC4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
995E87AA2C9E9DA100FA5AC4 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = "<group>"; };
995E87AB2C9E9DC000FA5AC4 /* Const.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Const.swift; sourceTree = "<group>"; };
995E87AD2C9EAB6A00FA5AC4 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
9969F6BC2CA3B944003CAB53 /* ToolboxesWidgetsExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = ToolboxesWidgetsExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 9969F6BC2CA3B944003CAB53 /* ToolboxesWidgetsExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = ToolboxesWidgetsExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
9969F6BD2CA3B944003CAB53 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; }; 9969F6BD2CA3B944003CAB53 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; };
9969F6BF2CA3B944003CAB53 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; }; 9969F6BF2CA3B944003CAB53 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; };
9969F6C22CA3B944003CAB53 /* ToolboxesWidgetsBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolboxesWidgetsBundle.swift; sourceTree = "<group>"; };
9969F6C42CA3B944003CAB53 /* ToolboxesWidgetsLiveActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolboxesWidgetsLiveActivity.swift; sourceTree = "<group>"; };
9969F6C62CA3B944003CAB53 /* ToolboxesWidgets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolboxesWidgets.swift; sourceTree = "<group>"; };
9969F6C82CA3B944003CAB53 /* AppIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppIntent.swift; sourceTree = "<group>"; };
9969F6CA2CA3B946003CAB53 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
9969F6CC2CA3B946003CAB53 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
9969F6D42CA3EDA3003CAB53 /* FlashlightView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FlashlightView.swift; sourceTree = "<group>"; };
99955E9D2C9EBAC400D079C6 /* MapView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapView.swift; sourceTree = "<group>"; };
999B660C2CB8C1850098422D /* String+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+.swift"; sourceTree = "<group>"; };
999FC5D02CB6089D00B4A5C0 /* AsyncGifImage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsyncGifImage.swift; sourceTree = "<group>"; };
999FC5D12CB6089D00B4A5C0 /* GifDefined.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GifDefined.swift; sourceTree = "<group>"; };
999FC5D22CB6089D00B4A5C0 /* GifImage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GifImage.swift; sourceTree = "<group>"; };
999FC5D32CB6089D00B4A5C0 /* UIImage.Gif.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIImage.Gif.swift; sourceTree = "<group>"; };
99A414662CB3E44C00EFC06E /* AltitudeMediumView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AltitudeMediumView.swift; sourceTree = "<group>"; };
99A9E5152CA1140900217BE2 /* HomeCenterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeCenterView.swift; sourceTree = "<group>"; };
99A9E5182CA15A9F00217BE2 /* CompassManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompassManager.swift; sourceTree = "<group>"; };
99C84D172CA8EF1900F269E0 /* VIew+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "VIew+.swift"; sourceTree = "<group>"; };
99C84D1E2CA9082400F269E0 /* ToolboxesWidgetsExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ToolboxesWidgetsExtension.entitlements; sourceTree = "<group>"; }; 99C84D1E2CA9082400F269E0 /* ToolboxesWidgetsExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ToolboxesWidgetsExtension.entitlements; sourceTree = "<group>"; };
99CF636C2CA290A600F22059 /* InfinityPopupView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfinityPopupView.swift; sourceTree = "<group>"; };
99CF636E2CA2B32F00F22059 /* CustomNavigationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomNavigationView.swift; sourceTree = "<group>"; };
99CF63702CA2B90D00F22059 /* WidgetListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetListView.swift; sourceTree = "<group>"; };
99CF63732CA2C07400F22059 /* AltitudeSmallView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AltitudeSmallView.swift; sourceTree = "<group>"; };
99D553CB2CB4D79A001224EF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
99D553EC2CB529DD001224EF /* wuqiong.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = wuqiong.gif; sourceTree = "<group>"; };
99D76BD72CAA4D8B00EAD9E0 /* InfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfoView.swift; sourceTree = "<group>"; };
99FF65872CA528670014179A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
99FF65882CA52D080014179A /* Toolboxes.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Toolboxes.entitlements; sourceTree = "<group>"; };
99FF65892CA53B590014179A /* BarChartView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BarChartView.swift; sourceTree = "<group>"; };
9ACDCA11009D00204DDE29D6 /* Pods_Toolboxes.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Toolboxes.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9ACDCA11009D00204DDE29D6 /* Pods_Toolboxes.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Toolboxes.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
9992A5A22EE12963002AA53C /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = (
Info.plist,
);
target = 995E876C2C9E8E5300FA5AC4 /* Toolboxes */;
};
9992A5A32EE12963002AA53C /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = (
/Localized/Localizable.strings,
Assets.xcassets,
Const.swift,
"extension/Color+.swift",
"extension/VIew+.swift",
tools/CompassManager.swift,
tools/Crypto/SecretKey.swift,
tools/Crypto/vpn_AES256.swift,
tools/Crypto/vpn_Base64Decoder.swift,
tools/network/earth_APi.swift,
tools/network/HTTPParsable.swift,
widgets/AltitudeMediumView.swift,
widgets/AltitudeSmallView.swift,
);
target = 9969F6BB2CA3B944003CAB53 /* ToolboxesWidgetsExtension */;
};
9992A5B92EE12972002AA53C /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = (
Info.plist,
);
target = 9969F6BB2CA3B944003CAB53 /* ToolboxesWidgetsExtension */;
};
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
/* Begin PBXFileSystemSynchronizedRootGroup section */
9992A5762EE12963002AA53C /* Toolboxes */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (9992A5A22EE12963002AA53C /* PBXFileSystemSynchronizedBuildFileExceptionSet */, 9992A5A32EE12963002AA53C /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = Toolboxes; sourceTree = "<group>"; };
9992A5A52EE1296A002AA53C /* ToolboxesTests */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = ToolboxesTests; sourceTree = "<group>"; };
9992A5A92EE1296D002AA53C /* ToolboxesUITests */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = ToolboxesUITests; sourceTree = "<group>"; };
9992A5B22EE12971002AA53C /* ToolboxesWidgets */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (9992A5B92EE12972002AA53C /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = ToolboxesWidgets; sourceTree = "<group>"; };
/* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
995E876A2C9E8E5300FA5AC4 /* Frameworks */ = { 995E876A2C9E8E5300FA5AC4 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
9992A5DA2EE13375002AA53C /* ObjectMapper in Frameworks */,
9992A5EA2EE13591002AA53C /* CryptoSwift in Frameworks */,
5971E9BC30751C8A63B4C055 /* Pods_Toolboxes.framework in Frameworks */, 5971E9BC30751C8A63B4C055 /* Pods_Toolboxes.framework in Frameworks */,
9992A5D12EE1309F002AA53C /* Alamofire in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
...@@ -193,25 +148,14 @@ ...@@ -193,25 +148,14 @@
/* End PBXFrameworksBuildPhase section */ /* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */ /* Begin PBXGroup section */
9901294C2CA6B70500C19D27 /* extension */ = {
isa = PBXGroup;
children = (
9901294D2CA6B71200C19D27 /* Color+.swift */,
9901294F2CA6B7B200C19D27 /* Date+.swift */,
99C84D172CA8EF1900F269E0 /* VIew+.swift */,
999B660C2CB8C1850098422D /* String+.swift */,
);
path = extension;
sourceTree = "<group>";
};
995E87642C9E8E5300FA5AC4 = { 995E87642C9E8E5300FA5AC4 = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
99C84D1E2CA9082400F269E0 /* ToolboxesWidgetsExtension.entitlements */, 99C84D1E2CA9082400F269E0 /* ToolboxesWidgetsExtension.entitlements */,
995E876F2C9E8E5300FA5AC4 /* Toolboxes */, 9992A5762EE12963002AA53C /* Toolboxes */,
995E87822C9E8E5500FA5AC4 /* ToolboxesTests */, 9992A5A52EE1296A002AA53C /* ToolboxesTests */,
995E878C2C9E8E5500FA5AC4 /* ToolboxesUITests */, 9992A5A92EE1296D002AA53C /* ToolboxesUITests */,
9969F6C12CA3B944003CAB53 /* ToolboxesWidgets */, 9992A5B22EE12971002AA53C /* ToolboxesWidgets */,
995E876E2C9E8E5300FA5AC4 /* Products */, 995E876E2C9E8E5300FA5AC4 /* Products */,
D5DC3EFE629256BC2563A442 /* Pods */, D5DC3EFE629256BC2563A442 /* Pods */,
F2719230EE60F3484425F0C6 /* Frameworks */, F2719230EE60F3484425F0C6 /* Frameworks */,
...@@ -229,123 +173,6 @@ ...@@ -229,123 +173,6 @@
name = Products; name = Products;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
995E876F2C9E8E5300FA5AC4 /* Toolboxes */ = {
isa = PBXGroup;
children = (
9901294C2CA6B70500C19D27 /* extension */,
99FF65882CA52D080014179A /* Toolboxes.entitlements */,
99FF65872CA528670014179A /* Info.plist */,
99CF63722CA2C01C00F22059 /* widgets */,
99CF636B2CA2909A00F22059 /* view */,
99A9E5172CA15A8B00217BE2 /* tools */,
995E879C2C9E981800FA5AC4 /* pages */,
995E87702C9E8E5300FA5AC4 /* ToolboxesApp.swift */,
995E87AD2C9EAB6A00FA5AC4 /* AppDelegate.swift */,
995E87722C9E8E5300FA5AC4 /* ContentView.swift */,
99D553EC2CB529DD001224EF /* wuqiong.gif */,
995E87A72C9E9D8800FA5AC4 /* Localizable.strings */,
995E87AB2C9E9DC000FA5AC4 /* Const.swift */,
995E87762C9E8E5500FA5AC4 /* Assets.xcassets */,
99D553CB2CB4D79A001224EF /* LaunchScreen.storyboard */,
995E87782C9E8E5500FA5AC4 /* Preview Content */,
);
path = Toolboxes;
sourceTree = "<group>";
};
995E87782C9E8E5500FA5AC4 /* Preview Content */ = {
isa = PBXGroup;
children = (
995E87792C9E8E5500FA5AC4 /* Preview Assets.xcassets */,
);
path = "Preview Content";
sourceTree = "<group>";
};
995E87822C9E8E5500FA5AC4 /* ToolboxesTests */ = {
isa = PBXGroup;
children = (
995E87832C9E8E5500FA5AC4 /* ToolboxesTests.swift */,
);
path = ToolboxesTests;
sourceTree = "<group>";
};
995E878C2C9E8E5500FA5AC4 /* ToolboxesUITests */ = {
isa = PBXGroup;
children = (
995E878D2C9E8E5500FA5AC4 /* ToolboxesUITests.swift */,
995E878F2C9E8E5500FA5AC4 /* ToolboxesUITestsLaunchTests.swift */,
);
path = ToolboxesUITests;
sourceTree = "<group>";
};
995E879C2C9E981800FA5AC4 /* pages */ = {
isa = PBXGroup;
children = (
995E879D2C9E983400FA5AC4 /* CompassView.swift */,
99A9E5152CA1140900217BE2 /* HomeCenterView.swift */,
995E879F2C9E98B700FA5AC4 /* DataView.swift */,
995E87A12C9E99AD00FA5AC4 /* LocationView.swift */,
995E87A32C9E99F600FA5AC4 /* MoreView.swift */,
995E87A52C9E9C0B00FA5AC4 /* MapLayerView.swift */,
99955E9D2C9EBAC400D079C6 /* MapView.swift */,
99CF63702CA2B90D00F22059 /* WidgetListView.swift */,
9969F6D42CA3EDA3003CAB53 /* FlashlightView.swift */,
);
path = pages;
sourceTree = "<group>";
};
9969F6C12CA3B944003CAB53 /* ToolboxesWidgets */ = {
isa = PBXGroup;
children = (
9969F6C22CA3B944003CAB53 /* ToolboxesWidgetsBundle.swift */,
9969F6C42CA3B944003CAB53 /* ToolboxesWidgetsLiveActivity.swift */,
9969F6C62CA3B944003CAB53 /* ToolboxesWidgets.swift */,
9969F6C82CA3B944003CAB53 /* AppIntent.swift */,
9969F6CA2CA3B946003CAB53 /* Assets.xcassets */,
9969F6CC2CA3B946003CAB53 /* Info.plist */,
);
path = ToolboxesWidgets;
sourceTree = "<group>";
};
999FC5D42CB6089D00B4A5C0 /* GifImage */ = {
isa = PBXGroup;
children = (
999FC5D02CB6089D00B4A5C0 /* AsyncGifImage.swift */,
999FC5D12CB6089D00B4A5C0 /* GifDefined.swift */,
999FC5D22CB6089D00B4A5C0 /* GifImage.swift */,
999FC5D32CB6089D00B4A5C0 /* UIImage.Gif.swift */,
);
path = GifImage;
sourceTree = "<group>";
};
99A9E5172CA15A8B00217BE2 /* tools */ = {
isa = PBXGroup;
children = (
999FC5D42CB6089D00B4A5C0 /* GifImage */,
99A9E5182CA15A9F00217BE2 /* CompassManager.swift */,
);
path = tools;
sourceTree = "<group>";
};
99CF636B2CA2909A00F22059 /* view */ = {
isa = PBXGroup;
children = (
99CF636C2CA290A600F22059 /* InfinityPopupView.swift */,
99CF636E2CA2B32F00F22059 /* CustomNavigationView.swift */,
99FF65892CA53B590014179A /* BarChartView.swift */,
99D76BD72CAA4D8B00EAD9E0 /* InfoView.swift */,
);
path = view;
sourceTree = "<group>";
};
99CF63722CA2C01C00F22059 /* widgets */ = {
isa = PBXGroup;
children = (
99CF63732CA2C07400F22059 /* AltitudeSmallView.swift */,
99A414662CB3E44C00EFC06E /* AltitudeMediumView.swift */,
);
path = widgets;
sourceTree = "<group>";
};
D5DC3EFE629256BC2563A442 /* Pods */ = { D5DC3EFE629256BC2563A442 /* Pods */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
...@@ -385,6 +212,9 @@ ...@@ -385,6 +212,9 @@
dependencies = ( dependencies = (
9969F6CE2CA3B946003CAB53 /* PBXTargetDependency */, 9969F6CE2CA3B946003CAB53 /* PBXTargetDependency */,
); );
fileSystemSynchronizedGroups = (
9992A5762EE12963002AA53C /* Toolboxes */,
);
name = Toolboxes; name = Toolboxes;
productName = Toolboxes; productName = Toolboxes;
productReference = 995E876D2C9E8E5300FA5AC4 /* Toolboxes.app */; productReference = 995E876D2C9E8E5300FA5AC4 /* Toolboxes.app */;
...@@ -403,6 +233,9 @@ ...@@ -403,6 +233,9 @@
dependencies = ( dependencies = (
995E87812C9E8E5500FA5AC4 /* PBXTargetDependency */, 995E87812C9E8E5500FA5AC4 /* PBXTargetDependency */,
); );
fileSystemSynchronizedGroups = (
9992A5A52EE1296A002AA53C /* ToolboxesTests */,
);
name = ToolboxesTests; name = ToolboxesTests;
productName = ToolboxesTests; productName = ToolboxesTests;
productReference = 995E877F2C9E8E5500FA5AC4 /* ToolboxesTests.xctest */; productReference = 995E877F2C9E8E5500FA5AC4 /* ToolboxesTests.xctest */;
...@@ -421,6 +254,9 @@ ...@@ -421,6 +254,9 @@
dependencies = ( dependencies = (
995E878B2C9E8E5500FA5AC4 /* PBXTargetDependency */, 995E878B2C9E8E5500FA5AC4 /* PBXTargetDependency */,
); );
fileSystemSynchronizedGroups = (
9992A5A92EE1296D002AA53C /* ToolboxesUITests */,
);
name = ToolboxesUITests; name = ToolboxesUITests;
productName = ToolboxesUITests; productName = ToolboxesUITests;
productReference = 995E87892C9E8E5500FA5AC4 /* ToolboxesUITests.xctest */; productReference = 995E87892C9E8E5500FA5AC4 /* ToolboxesUITests.xctest */;
...@@ -438,6 +274,9 @@ ...@@ -438,6 +274,9 @@
); );
dependencies = ( dependencies = (
); );
fileSystemSynchronizedGroups = (
9992A5B22EE12971002AA53C /* ToolboxesWidgets */,
);
name = ToolboxesWidgetsExtension; name = ToolboxesWidgetsExtension;
productName = ToolboxesWidgetsExtension; productName = ToolboxesWidgetsExtension;
productReference = 9969F6BC2CA3B944003CAB53 /* ToolboxesWidgetsExtension.appex */; productReference = 9969F6BC2CA3B944003CAB53 /* ToolboxesWidgetsExtension.appex */;
...@@ -470,7 +309,6 @@ ...@@ -470,7 +309,6 @@
}; };
}; };
buildConfigurationList = 995E87682C9E8E5300FA5AC4 /* Build configuration list for PBXProject "Toolboxes" */; buildConfigurationList = 995E87682C9E8E5300FA5AC4 /* Build configuration list for PBXProject "Toolboxes" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en; developmentRegion = en;
hasScannedForEncodings = 0; hasScannedForEncodings = 0;
knownRegions = ( knownRegions = (
...@@ -479,6 +317,12 @@ ...@@ -479,6 +317,12 @@
"zh-Hans", "zh-Hans",
); );
mainGroup = 995E87642C9E8E5300FA5AC4; mainGroup = 995E87642C9E8E5300FA5AC4;
packageReferences = (
9992A5CF2EE1309F002AA53C /* XCRemoteSwiftPackageReference "Alamofire" */,
9992A5D82EE13375002AA53C /* XCRemoteSwiftPackageReference "ObjectMapper" */,
9992A5E82EE13557002AA53C /* XCRemoteSwiftPackageReference "CryptoSwift" */,
);
preferredProjectObjectVersion = 56;
productRefGroup = 995E876E2C9E8E5300FA5AC4 /* Products */; productRefGroup = 995E876E2C9E8E5300FA5AC4 /* Products */;
projectDirPath = ""; projectDirPath = "";
projectRoot = ""; projectRoot = "";
...@@ -496,11 +340,6 @@ ...@@ -496,11 +340,6 @@
isa = PBXResourcesBuildPhase; isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
995E877A2C9E8E5500FA5AC4 /* Preview Assets.xcassets in Resources */,
99D553CC2CB4D79A001224EF /* LaunchScreen.storyboard in Resources */,
99D553ED2CB529DD001224EF /* wuqiong.gif in Resources */,
995E87A92C9E9D8800FA5AC4 /* Localizable.strings in Resources */,
995E87772C9E8E5500FA5AC4 /* Assets.xcassets in Resources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
...@@ -522,9 +361,6 @@ ...@@ -522,9 +361,6 @@
isa = PBXResourcesBuildPhase; isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
99A414642CB37C5B00EFC06E /* Assets.xcassets in Resources */,
99A414652CB37C6C00EFC06E /* Assets.xcassets in Resources */,
99C84D1C2CA8F3E800F269E0 /* Localizable.strings in Resources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
...@@ -594,34 +430,6 @@ ...@@ -594,34 +430,6 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
995E87A42C9E99F600FA5AC4 /* MoreView.swift in Sources */,
99FF658A2CA53B590014179A /* BarChartView.swift in Sources */,
999FC5D72CB6089D00B4A5C0 /* GifImage.swift in Sources */,
999FC5D62CB6089D00B4A5C0 /* GifDefined.swift in Sources */,
995E87732C9E8E5300FA5AC4 /* ContentView.swift in Sources */,
995E87A22C9E99AD00FA5AC4 /* LocationView.swift in Sources */,
99955E9E2C9EBAC400D079C6 /* MapView.swift in Sources */,
99CF63742CA2C07400F22059 /* AltitudeSmallView.swift in Sources */,
99A9E5162CA1140900217BE2 /* HomeCenterView.swift in Sources */,
990129502CA6B7B200C19D27 /* Date+.swift in Sources */,
9969F6D52CA3EDA3003CAB53 /* FlashlightView.swift in Sources */,
99A414672CB3E44C00EFC06E /* AltitudeMediumView.swift in Sources */,
995E87A62C9E9C0B00FA5AC4 /* MapLayerView.swift in Sources */,
999FC5D82CB6089D00B4A5C0 /* UIImage.Gif.swift in Sources */,
995E879E2C9E983400FA5AC4 /* CompassView.swift in Sources */,
995E87A02C9E98B700FA5AC4 /* DataView.swift in Sources */,
999FC5D52CB6089D00B4A5C0 /* AsyncGifImage.swift in Sources */,
99D76BD82CAA4D8B00EAD9E0 /* InfoView.swift in Sources */,
99CF636D2CA290A600F22059 /* InfinityPopupView.swift in Sources */,
9901294E2CA6B71200C19D27 /* Color+.swift in Sources */,
99CF63712CA2B90D00F22059 /* WidgetListView.swift in Sources */,
995E87712C9E8E5300FA5AC4 /* ToolboxesApp.swift in Sources */,
995E87AE2C9EAB6A00FA5AC4 /* AppDelegate.swift in Sources */,
99CF636F2CA2B32F00F22059 /* CustomNavigationView.swift in Sources */,
99C84D182CA8EF1900F269E0 /* VIew+.swift in Sources */,
99A9E5192CA15A9F00217BE2 /* CompassManager.swift in Sources */,
999B660D2CB8C1850098422D /* String+.swift in Sources */,
995E87AC2C9E9DC000FA5AC4 /* Const.swift in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
...@@ -629,7 +437,6 @@ ...@@ -629,7 +437,6 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
995E87842C9E8E5500FA5AC4 /* ToolboxesTests.swift in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
...@@ -637,8 +444,6 @@ ...@@ -637,8 +444,6 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
995E87902C9E8E5500FA5AC4 /* ToolboxesUITestsLaunchTests.swift in Sources */,
995E878E2C9E8E5500FA5AC4 /* ToolboxesUITests.swift in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
...@@ -646,16 +451,6 @@ ...@@ -646,16 +451,6 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
99ACC9332CB36AB4004CDC15 /* AltitudeSmallView.swift in Sources */,
99A414682CB3E44C00EFC06E /* AltitudeMediumView.swift in Sources */,
99C84D1D2CA8F75D00F269E0 /* CompassManager.swift in Sources */,
99C84D1A2CA8F28500F269E0 /* VIew+.swift in Sources */,
9969F6C72CA3B944003CAB53 /* ToolboxesWidgets.swift in Sources */,
99C84D192CA8F27F00F269E0 /* Color+.swift in Sources */,
9969F6C92CA3B944003CAB53 /* AppIntent.swift in Sources */,
9969F6C52CA3B944003CAB53 /* ToolboxesWidgetsLiveActivity.swift in Sources */,
9969F6C32CA3B944003CAB53 /* ToolboxesWidgetsBundle.swift in Sources */,
99C84D1B2CA8F3CF00F269E0 /* Const.swift in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
...@@ -679,18 +474,6 @@ ...@@ -679,18 +474,6 @@
}; };
/* End PBXTargetDependency section */ /* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
995E87A72C9E9D8800FA5AC4 /* Localizable.strings */ = {
isa = PBXVariantGroup;
children = (
995E87A82C9E9D8800FA5AC4 /* en */,
995E87AA2C9E9DA100FA5AC4 /* zh-Hans */,
);
name = Localizable.strings;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */ /* Begin XCBuildConfiguration section */
995E87912C9E8E5500FA5AC4 /* Debug */ = { 995E87912C9E8E5500FA5AC4 /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
...@@ -817,7 +600,6 @@ ...@@ -817,7 +600,6 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = 9068DA139C0D41DBDF1A5C60 /* Pods-Toolboxes.debug.xcconfig */; baseConfigurationReference = 9068DA139C0D41DBDF1A5C60 /* Pods-Toolboxes.debug.xcconfig */;
buildSettings = { buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = Toolboxes/Toolboxes.entitlements; CODE_SIGN_ENTITLEMENTS = Toolboxes/Toolboxes.entitlements;
...@@ -848,7 +630,7 @@ ...@@ -848,7 +630,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.2; MARKETING_VERSION = 1.0.3;
PRODUCT_BUNDLE_IDENTIFIER = com.yhgc.Toolboxes; PRODUCT_BUNDLE_IDENTIFIER = com.yhgc.Toolboxes;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
...@@ -865,7 +647,6 @@ ...@@ -865,7 +647,6 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = 968EE969DC07BCD2F5A5230E /* Pods-Toolboxes.release.xcconfig */; baseConfigurationReference = 968EE969DC07BCD2F5A5230E /* Pods-Toolboxes.release.xcconfig */;
buildSettings = { buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = Toolboxes/Toolboxes.entitlements; CODE_SIGN_ENTITLEMENTS = Toolboxes/Toolboxes.entitlements;
...@@ -896,7 +677,7 @@ ...@@ -896,7 +677,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.2; MARKETING_VERSION = 1.0.3;
PRODUCT_BUNDLE_IDENTIFIER = com.yhgc.Toolboxes; PRODUCT_BUNDLE_IDENTIFIER = com.yhgc.Toolboxes;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
...@@ -912,7 +693,6 @@ ...@@ -912,7 +693,6 @@
995E87972C9E8E5500FA5AC4 /* Debug */ = { 995E87972C9E8E5500FA5AC4 /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1; CURRENT_PROJECT_VERSION = 1;
...@@ -932,7 +712,6 @@ ...@@ -932,7 +712,6 @@
995E87982C9E8E5500FA5AC4 /* Release */ = { 995E87982C9E8E5500FA5AC4 /* Release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1; CURRENT_PROJECT_VERSION = 1;
...@@ -952,7 +731,6 @@ ...@@ -952,7 +731,6 @@
995E879A2C9E8E5500FA5AC4 /* Debug */ = { 995E879A2C9E8E5500FA5AC4 /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1; CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = VJ9R5T686C; DEVELOPMENT_TEAM = VJ9R5T686C;
...@@ -970,7 +748,6 @@ ...@@ -970,7 +748,6 @@
995E879B2C9E8E5500FA5AC4 /* Release */ = { 995E879B2C9E8E5500FA5AC4 /* Release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1; CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = VJ9R5T686C; DEVELOPMENT_TEAM = VJ9R5T686C;
...@@ -1104,6 +881,51 @@ ...@@ -1104,6 +881,51 @@
defaultConfigurationName = Release; defaultConfigurationName = Release;
}; };
/* End XCConfigurationList section */ /* End XCConfigurationList section */
/* Begin XCRemoteSwiftPackageReference section */
9992A5CF2EE1309F002AA53C /* XCRemoteSwiftPackageReference "Alamofire" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/Alamofire/Alamofire.git";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 5.10.2;
};
};
9992A5D82EE13375002AA53C /* XCRemoteSwiftPackageReference "ObjectMapper" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/Hearst-DD/ObjectMapper.git";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 4.4.3;
};
};
9992A5E82EE13557002AA53C /* XCRemoteSwiftPackageReference "CryptoSwift" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/krzyzanowskim/CryptoSwift.git";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 1.9.0;
};
};
/* End XCRemoteSwiftPackageReference section */
/* Begin XCSwiftPackageProductDependency section */
9992A5D02EE1309F002AA53C /* Alamofire */ = {
isa = XCSwiftPackageProductDependency;
package = 9992A5CF2EE1309F002AA53C /* XCRemoteSwiftPackageReference "Alamofire" */;
productName = Alamofire;
};
9992A5D92EE13375002AA53C /* ObjectMapper */ = {
isa = XCSwiftPackageProductDependency;
package = 9992A5D82EE13375002AA53C /* XCRemoteSwiftPackageReference "ObjectMapper" */;
productName = ObjectMapper;
};
9992A5E92EE13591002AA53C /* CryptoSwift */ = {
isa = XCSwiftPackageProductDependency;
package = 9992A5E82EE13557002AA53C /* XCRemoteSwiftPackageReference "CryptoSwift" */;
productName = CryptoSwift;
};
/* End XCSwiftPackageProductDependency section */
}; };
rootObject = 995E87652C9E8E5300FA5AC4 /* Project object */; rootObject = 995E87652C9E8E5300FA5AC4 /* Project object */;
} }
{
"originHash" : "e06cc7db9b9551175f0dfeb86241ef403abd4de96001d5f30f1a7735f60b6bfa",
"pins" : [
{
"identity" : "alamofire",
"kind" : "remoteSourceControl",
"location" : "https://github.com/Alamofire/Alamofire.git",
"state" : {
"revision" : "513364f870f6bfc468f9d2ff0a95caccc10044c5",
"version" : "5.10.2"
}
},
{
"identity" : "cryptoswift",
"kind" : "remoteSourceControl",
"location" : "https://github.com/krzyzanowskim/CryptoSwift.git",
"state" : {
"revision" : "e45a26384239e028ec87fbcc788f513b67e10d8f",
"version" : "1.9.0"
}
},
{
"identity" : "objectmapper",
"kind" : "remoteSourceControl",
"location" : "https://github.com/Hearst-DD/ObjectMapper.git",
"state" : {
"revision" : "6021c6035e83a306047348666f6400dc61445d3b",
"version" : "4.4.3"
}
}
],
"version" : 3
}
...@@ -14,10 +14,10 @@ ...@@ -14,10 +14,10 @@
filePath = "Toolboxes/ContentView.swift" filePath = "Toolboxes/ContentView.swift"
startingColumnNumber = "9223372036854775807" startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807"
startingLineNumber = "150" startingLineNumber = "179"
endingLineNumber = "150" endingLineNumber = "179"
landmarkName = "previews" landmarkName = "unknown"
landmarkType = "24"> landmarkType = "0">
</BreakpointContent> </BreakpointContent>
</BreakpointProxy> </BreakpointProxy>
</Breakpoints> </Breakpoints>
......
{
"images" : [
{
"filename" : "haoping.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "haoping@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "haoping@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
...@@ -12,6 +12,7 @@ struct ContentView: View { ...@@ -12,6 +12,7 @@ struct ContentView: View {
@State private var showOverlay = false @State private var showOverlay = false
@State private var selectedTab: Int = 0 @State private var selectedTab: Int = 0
@State private var showRatingAlert = false
// @State private var _showHorizontalGlobe = State<Bool>(initialValue: { // @State private var _showHorizontalGlobe = State<Bool>(initialValue: {
// if let show = UserDefaults.standard.object(forKey: "showHorizontalGlobe") as? Bool { // if let show = UserDefaults.standard.object(forKey: "showHorizontalGlobe") as? Bool {
// return show // return show
...@@ -85,6 +86,14 @@ struct ContentView: View { ...@@ -85,6 +86,14 @@ struct ContentView: View {
.navigationViewStyle(StackNavigationViewStyle()) // 无论设备如何,都保持一致 .navigationViewStyle(StackNavigationViewStyle()) // 无论设备如何,都保持一致
.navigationBarTitle("") .navigationBarTitle("")
.onAppear(){ .onAppear(){
RateTool.check { isSuccess in
RateTool.fetchConfig { success in
if success {
showRateAlert()
}
}
}
MapViewManager.shared.load() MapViewManager.shared.load()
} }
.overlay{ .overlay{
...@@ -94,10 +103,30 @@ struct ContentView: View { ...@@ -94,10 +103,30 @@ struct ContentView: View {
PopupView(isShowing: $showOverlay) PopupView(isShowing: $showOverlay)
.ignoresSafeArea() .ignoresSafeArea()
} }
if showRatingAlert{
RatingAlertView(isPresented: $showRatingAlert)
}
} }
} }
} }
/// 执行第二天的方法(显示评价弹窗)
private func executeMethodOnSecondDay() {
// 显示评价弹窗
showRatingAlert = true;
}
/// 显示评价弹窗(带判断逻辑)
private func showRateAlert() {
// 检查是否已经显示过评价弹窗
if UserDefaults.standard.bool(forKey: "eva_isshowed") {
return
}
executeMethodOnSecondDay()
}
} }
// 自定义 TabBar 项目 // 自定义 TabBar 项目
......
//
// Config.swift
// Toolboxes
//
// Created by 研发2组 on 2025/12/4.
//
import Foundation
import ObjectMapper
/// Pub配置项
struct PubItem {
var event: String = ""
var chance: String = ""
}
extension PubItem: Mappable {
init?(map: Map) {
}
mutating func mapping(map: Map) {
event <- map["event"]
chance <- map["chance"]
}
}
/// 配置模型
struct Config {
var code: Int = 0
var msg: String = ""
var pub: [PubItem] = []
var isSuccess:Bool{
code == 1
}
}
extension Config: Mappable {
init?(map: Map) {
}
mutating func mapping(map: Map) {
code <- map["code"]
msg <- map["msg"]
pub <- map["pub"]
}
}
extension Config: Parsable {
static func parse(json: [String: Any]) -> Config? {
return Mapper<Config>().map(JSON: json)
}
}
...@@ -5,10 +5,17 @@ ...@@ -5,10 +5,17 @@
// Created by 研发2组 on 2024/10/11. // Created by 研发2组 on 2024/10/11.
// //
import SwiftUI
extension String {
import Foundation
import Security
extension String {
/// 尝试解密响应数据
var decrypt: String? {
guard let aesData = AES.dataWithBase64EncodedString(base64EncodedString: self),
let decryptedString = AES.aes256DecryptWithData(data: aesData, key: SecretKey.primary.encryptKey) else {
return nil
}
return decryptedString
}
} }
import SwiftUI import SwiftUI
struct CompassView: View { struct CompassView: View {
@Binding var showPopup: Bool @Binding var showPopup: Bool
...@@ -17,6 +16,7 @@ struct CompassView: View { ...@@ -17,6 +16,7 @@ struct CompassView: View {
@State private var currentHeading: Double = 0.0 @State private var currentHeading: Double = 0.0
@State private var previousHeading: Double = 0.0 @State private var previousHeading: Double = 0.0
var body: some View { var body: some View {
ZStack{
VStack(spacing: 40) { VStack(spacing: 40) {
HStack { HStack {
...@@ -152,8 +152,15 @@ struct CompassView: View { ...@@ -152,8 +152,15 @@ struct CompassView: View {
Spacer() Spacer()
} }
}
.gradientBackground() .gradientBackground()
.onAppear { .onAppear {
showHorizontalGlobe = UserDefaults.standard.bool(forKey: "showHorizontalGlobe") showHorizontalGlobe = UserDefaults.standard.bool(forKey: "showHorizontalGlobe")
showAuxiliaryLine = UserDefaults.standard.bool(forKey: "showAuxiliaryLine") showAuxiliaryLine = UserDefaults.standard.bool(forKey: "showAuxiliaryLine")
currentHeading = compassManager.heading currentHeading = compassManager.heading
......
//
// SecretKey.swift
// HYVvppn
//
// Created by Mr. Liu on 2025/7/31.
//
import Foundation
// 定义密钥类型枚举
enum KeyType {
case encryption // 加密密钥
case decrypt // 解密密钥
case salt // 解密密钥
}
// 密钥管理枚举
enum SecretKey {
case primary
// 获取对应类型的密钥值
func value(for type: KeyType) -> String {
switch self {
case .primary:
switch type {
case .encryption:
return "Q8bkWigT"
case .decrypt:
return "ljda_dj@.dv?sjdf"
case .salt:
return "2513Lii%$nash(ee)66"
}
}
}
// 便捷属性:直接获取加密密钥
var encryptKey: String {
value(for: .encryption)
}
// 便捷属性:直接获取解密密钥
var decryptKey: String {
value(for: .decrypt)
}
// 便捷属性:直接获取salt
var saltKey: String {
value(for: .salt)
}
}
import Foundation
import CommonCrypto
class AES {
static func aes256EncryptWithData(data: Data, key: String) -> Data? {
guard !key.isEmpty else { return nil }
var keyPtr = Array<CChar>(repeating: 0, count: kCCKeySizeAES256)
key.getCString(&keyPtr, maxLength: keyPtr.count, encoding: .utf8)
let dataLength = data.count
let bufferSize = dataLength + kCCBlockSizeAES128
var buffer = [UInt8](repeating: 0, count: bufferSize)
var numBytesEncrypted: size_t = 0
let cryptStatus = CCCrypt(
CCOperation(kCCEncrypt),
CCAlgorithm(kCCAlgorithmAES),
CCOptions(kCCOptionPKCS7Padding | kCCOptionECBMode),
keyPtr, kCCKeySizeAES256,
nil,
[UInt8](data), dataLength,
&buffer, bufferSize,
&numBytesEncrypted
)
guard cryptStatus == kCCSuccess else { return nil }
return Data(bytes: buffer, count: numBytesEncrypted)
}
static func aes256DecryptWithData(data: Data, key: String) -> String? {
guard !key.isEmpty else { return nil }
var keyPtr = Array<CChar>(repeating: 0, count: kCCKeySizeAES256)
key.getCString(&keyPtr, maxLength: keyPtr.count, encoding: .utf8)
let dataLength = data.count
let bufferSize = dataLength + kCCBlockSizeAES128
var buffer = [UInt8](repeating: 0, count: bufferSize)
var numBytesDecrypted: size_t = 0
let cryptStatus = CCCrypt(
CCOperation(kCCDecrypt),
CCAlgorithm(kCCAlgorithmAES),
CCOptions(kCCOptionPKCS7Padding | kCCOptionECBMode),
keyPtr, kCCKeySizeAES256,
nil,
[UInt8](data), dataLength,
&buffer, bufferSize,
&numBytesDecrypted
)
guard cryptStatus == kCCSuccess else { return nil }
let decryptedData = Data(bytes: buffer, count: numBytesDecrypted)
return String(data: decryptedData, encoding: .utf8)
}
static func aes256EncryptWithString(string: String, key: String) -> Data? {
guard !key.isEmpty else { return nil }
let data = string.data(using: .utf8)!
return aes256EncryptWithData(data: data, key: key)
}
static func AES256Encrypt(content: String, key: String) -> String? {
guard let resultData = aes256EncryptWithString(string: content, key: key) else { return nil }
return resultData.base64EncodedString()
}
static func base64EncodedStringWithData(data: Data) -> String {
return data.base64EncodedString()
}
static func dataWithBase64EncodedString(base64EncodedString: String) -> Data? {
return Data(base64Encoded: base64EncodedString)
}
static func base64EncodedStringWithString(str: String) -> String {
let data = str.data(using: .utf8)!
return base64EncodedStringWithData(data: data)
}
static func stringWithBase64EncodedString(base64EncodedString: String) -> String? {
guard let data = dataWithBase64EncodedString(base64EncodedString: base64EncodedString) else { return nil }
return String(data: data, encoding: .utf8)
}
/// 解密 Base64 编码的加密字符串为 Data
static func aes256DecryptBase64ToData(base64EncodedString: String, key: String) -> Data? {
// 将 Base64 编码的字符串转换为 Data
guard let encryptedData = vpn_Base64Decoder.dataWithBase64EncodedString(base64EncodedString) else {
return nil
}
// 解密 Data 并返回
guard let decryptedString = aes256DecryptWithData(data: encryptedData, key: key) else {
return nil
}
return decryptedString.data(using: .utf8)
}
}
//
// vpn_Base64Decoder.swift
// HYVvppn
//
// Created by Mr. Liu on 2025/1/18.
//
import Foundation
class vpn_Base64Decoder {
// Base64解码表
static let base64DecodingTable: [Int8] = {
var table = [Int8](repeating: -2, count: 256)
for (index, char) in "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".utf8.enumerated() {
table[Int(char)] = Int8(index)
}
table[61] = -1 // '=' ASCII值为61
return table
}()
/// 解码Base64字符串为Data
static func dataWithBase64EncodedString(_ base64EncodedString: String) -> Data? {
let length = base64EncodedString.count
let utf8String = Array(base64EncodedString.utf8)
guard !utf8String.isEmpty else {
return nil
}
// 去掉尾部的 '='
var trimmedLength = length
while trimmedLength > 0 && utf8String[trimmedLength - 1] == 61 { // '=' 的 ASCII 值是 61
trimmedLength -= 1
}
let outputLength = trimmedLength * 3 / 4
var output = [UInt8](repeating: 0, count: outputLength)
var inputPoint = 0
var outputPoint = 0
while inputPoint < trimmedLength {
guard let i0 = decodeCharacter(utf8String[inputPoint]),
let i1 = decodeCharacter(utf8String[inputPoint + 1]) else {
return nil
}
let i2 = inputPoint + 2 < trimmedLength ? decodeCharacter(utf8String[inputPoint + 2]) ?? 0 : 0
let i3 = inputPoint + 3 < trimmedLength ? decodeCharacter(utf8String[inputPoint + 3]) ?? 0 : 0
// 修复负值的问题,确保使用UInt8来处理
output[outputPoint] = UInt8((Int(i0) << 2) | (Int(i1) >> 4))
outputPoint += 1
if outputPoint < outputLength {
output[outputPoint] = UInt8(((Int(i1) & 0xF) << 4) | (Int(i2) >> 2))
outputPoint += 1
}
if outputPoint < outputLength {
output[outputPoint] = UInt8(((Int(i2) & 0x3) << 6) | Int(i3))
outputPoint += 1
}
inputPoint += 4
}
return Data(output)
}
/// 解码单个字符为对应的值
private static func decodeCharacter(_ char: UInt8) -> Int8? {
let decoded = base64DecodingTable[Int(char)]
return decoded >= 0 ? decoded : nil
}
}
import CryptoSwift
import Foundation
class MD5 {
// MD5 加密字符串
static func encrypt(string: String) -> String {
let data = string.data(using: .utf8)!
return data.md5().toHexString()
}
}
//
// RateTool.swift
// Toolboxes
//
// Created by 研发2组 on 2025/12/4.
//
import SwiftUI
import Foundation
import Alamofire
class RateTool:NSObject{
//检查网络
static func check(complation: @escaping (Bool) -> ()){
NetworkReachabilityManager.default?.startListening(onUpdatePerforming: { status in
if status == .reachable(.cellular) || status == .reachable(.ethernetOrWiFi){
complation(true)
}
else {
complation(false)
}
})
}
static func fetchConfig(complation: @escaping (Bool) -> ()){
let client = AlamofireClient()
client.config { config in
if let appconfig = config , appconfig.isSuccess {
// 检查pub数组中是否有event为"app_evaluate"且chance为"1"的项
let hasEvaluate = appconfig.pub.contains { item in
item.event == "app_evaluate" && item.chance == "1"
}
complation(hasEvaluate)
}
}
}
}
import Foundation
import Alamofire
public protocol Request {
var path: String { get }
var method: HTTPMethod { get }
var parameters: [String: Any] { get set }
associatedtype Response: Parsable
}
public enum AlamofireError: Error {
case jsonMapping
case errorCode
case connectionFaild
}
protocol Client {
var host: String { get }
func config(handler: @escaping (Config?) -> ())
}
struct AlamofireClient: Client {
let host = "http://common.yhlongtime.top/"
let key = "Q8bkWigT"
func config(handler: @escaping (Config?) -> ()) {
let urlString = "https://common.yhlongtime.top/pubv3/cSearchConfig.php"
let url = URL(string: urlString)!
let headers:HTTPHeaders = ["Content-type":"application/x-www-form-urlencoded",
"Accept":"application/json"]
AF.request(url, method: .post, parameters: ["user_pkname":"com.yhgc.Toolboxes"], headers: headers )
.responseString { (response) in
if response.value == nil{
return
}
if let json = response.value?.decrypt,
let decryptedData = json.data(using: .utf8) {
let jsonString = String(data: decryptedData, encoding: .utf8)
switch response.result {
case .success:
if jsonString == nil {
handler(nil)
return
}
if let jsonData = jsonString!.data(using: .utf8) {
do {
if let dictionary = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any] {
print("\n---------config dictionary---------\n\(dictionary)")
// 使用Config的parse方法解析
if let config = Config.parse(json: dictionary) {
handler(config)
} else {
handler(nil)
}
} else {
handler(nil)
}
} catch {
print("解析错误:", error)
handler(nil)
}
} else {
handler(nil)
}
case .failure:
handler(nil)
}
return
}
}
}
}
import Foundation
public protocol Parsable {
static func parse(json: [String: Any]) -> Self?
}
//
// RatingAlertView.swift
// Toolboxes
//
// Created by 研发2组 on 2025/12/4.
//
import SwiftUI
import StoreKit
struct RatingAlertView: View {
// 控制弹窗显示状态
@Binding var isPresented: Bool
var body: some View {
ZStack {
// 背景(可选)
Color.gray.opacity(0.2)
.ignoresSafeArea()
VStack(spacing: 24) {
// 提示文字
Text("您的鼓励是我们最大的动力")
.font(.system(size: 17))
.foregroundColor(.black)
.padding(.horizontal, 20)
// 按钮区域
HStack(spacing: 20) {
// 拒绝评价按钮
Button(action: {
isPresented = false
UserDefaults.standard.set(true, forKey: "eva_isshowed")
UserDefaults.standard.synchronize()
}) {
Text("拒绝评价")
.font(.system(size: 16, weight: .medium))
.foregroundColor(.white)
.frame(height: 48)
.frame(maxWidth: .infinity)
.background(Color(hex: "#BBBCBE"))
.cornerRadius(8)
}
// 马上评价按钮
Button(action: {
isPresented = false
// 在这里添加评价逻辑
UserDefaults.standard.set(true, forKey: "eva_isshowed")
UserDefaults.standard.synchronize()
// 可以在这里跳转到App Store评价页面
self.openAppStoreForRating()
}) {
Text("马上评价")
.font(.system(size: 16, weight: .medium))
.foregroundColor(.white)
.frame(height: 48)
.frame(maxWidth: .infinity)
.background(Color.blue)
.cornerRadius(8)
}
}
.padding(.horizontal, 20)
}
.padding(.top, 80)
.padding(.vertical, 30)
.background(Color.white)
.cornerRadius(16)
.shadow(radius: 10)
.frame(maxWidth: 300)
.frame(height: 224)
// 占位图标(可替换为实际图片)
Image("rating.alert.person.circle.fill") // 系统图标占位
.resizable()
.scaledToFit()
.frame(width: 122, height: 120)
.offset(y: -112)
}
}
/// 显示系统原生评价弹窗
private func openAppStoreForRating() {
// 检查 SKStoreReviewController 是否可用(iOS 10.3+)
if #available(iOS 10.3, *) {
// 收起键盘
UIApplication.shared.keyWindow?.endEditing(true)
// 显示系统原生评价弹窗
SKStoreReviewController.requestReview()
}
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论