From bbaef15acbb98cf86d79e94a9a1bbe20ad5f4b30 Mon Sep 17 00:00:00 2001 From: Selim Mustafaev Date: Wed, 30 Apr 2025 16:54:11 +0300 Subject: [PATCH] Adding native macOS run destination --- AutoCat.xcodeproj/project.pbxproj | 95 +++++++----------- .../xcshareddata/swiftpm/Package.resolved | 29 +----- .../Contents.json | 34 +++++++ AutoCat/Assets.xcassets/Contents.json | 6 +- AutoCat/Assets.xcassets/TabBar/Contents.json | 6 -- .../check-compact.imageset/Contents.json | 25 ----- .../check-compact.imageset/check-37.png | Bin 967 -> 0 bytes .../check-compact.imageset/check-54.png | Bin 1453 -> 0 bytes .../TabBar/check.imageset/Contents.json | 25 ----- .../TabBar/check.imageset/check-51.png | Bin 1368 -> 0 bytes .../TabBar/check.imageset/check-75.png | Bin 2046 -> 0 bytes .../record-compact.imageset/Contents.json | 25 ----- .../record-compact.imageset/record-47.png | Bin 924 -> 0 bytes .../record-compact.imageset/record-69.png | Bin 1426 -> 0 bytes .../TabBar/record.imageset/Contents.json | 25 ----- .../TabBar/record.imageset/record-63.png | Bin 1232 -> 0 bytes .../TabBar/record.imageset/record-93.png | Bin 1846 -> 0 bytes .../search-compact.imageset/Contents.json | 25 ----- .../search-compact.imageset/search-35.png | Bin 870 -> 0 bytes .../search-compact.imageset/search-51.png | Bin 1204 -> 0 bytes .../TabBar/search.imageset/Contents.json | 25 ----- .../TabBar/search.imageset/search-47.png | Bin 1108 -> 0 bytes .../TabBar/search.imageset/search-69.png | Bin 1670 -> 0 bytes .../settings-compact.imageset/Contents.json | 25 ----- .../settings-compact.imageset/settings-37.png | Bin 1205 -> 0 bytes .../settings-compact.imageset/settings-54.png | Bin 1921 -> 0 bytes .../TabBar/settings.imageset/Contents.json | 25 ----- .../TabBar/settings.imageset/settings-51.png | Bin 1846 -> 0 bytes .../TabBar/settings.imageset/settings-75.png | Bin 2831 -> 0 bytes AutoCat/AutoCatApp.swift | 2 +- AutoCat/Extensions/UIDevice.swift | 11 +- AutoCat/Screens/AdsScreen/AdsScreen.swift | 2 + AutoCat/Screens/AuthScreen/AuthScreen.swift | 4 + .../EventsScreen/EventsViewModel.swift | 41 ++++++-- .../Screens/FiltersScreen/FiltersScreen.swift | 10 +- .../Screens/GalleryScreen/GalleryScreen.swift | 2 + .../Screens/GoogleAuthScreen/WebView.swift | 59 ++++++++--- .../Screens/HistoryScreen/HistoryScreen.swift | 7 +- .../HistoryScreen/HistoryViewModel.swift | 4 +- .../Screens/MainScreen/MainSplitScreen.swift | 2 +- .../Screens/MainScreen/MainTabScreen.swift | 2 - AutoCat/Screens/MapScreen/MapScreen.swift | 6 +- AutoCat/Screens/NotesScreen/NotesScreen.swift | 2 +- .../Screens/NotesScreen/NotesViewModel.swift | 13 ++- .../Screens/RecordsScreen/RecordsScreen.swift | 2 +- .../Screens/ReportScreen/ReportScreen.swift | 2 +- .../Screens/SearchScreen/SearchScreen.swift | 9 +- .../SettingsScreen/SettingsScreen.swift | 2 +- AutoCat/SwiftUI/CustomHostingController.swift | 27 ----- .../Modifiers/HideTabBarModifier.swift | 30 ++++++ .../Modifiers/TextFieldDumbModifier.swift | 32 ++++++ .../Modifiers/TitleModeInlineModifier.swift | 30 ++++++ .../NumberEditView/NumberEditView.swift | 1 - AutoCat/SwiftUI/UISearchTextField+Dumb.swift | 10 ++ AutoCat/SwiftUI/VehicleCellView.swift | 4 +- .../AudioRecordService.swift | 2 + .../RecordPlayerService.swift | 10 ++ 57 files changed, 321 insertions(+), 377 deletions(-) create mode 100644 AutoCat/Assets.xcassets/Colors/PlateForegroundGray.colorset/Contents.json delete mode 100644 AutoCat/Assets.xcassets/TabBar/Contents.json delete mode 100644 AutoCat/Assets.xcassets/TabBar/check-compact.imageset/Contents.json delete mode 100644 AutoCat/Assets.xcassets/TabBar/check-compact.imageset/check-37.png delete mode 100644 AutoCat/Assets.xcassets/TabBar/check-compact.imageset/check-54.png delete mode 100644 AutoCat/Assets.xcassets/TabBar/check.imageset/Contents.json delete mode 100644 AutoCat/Assets.xcassets/TabBar/check.imageset/check-51.png delete mode 100644 AutoCat/Assets.xcassets/TabBar/check.imageset/check-75.png delete mode 100644 AutoCat/Assets.xcassets/TabBar/record-compact.imageset/Contents.json delete mode 100644 AutoCat/Assets.xcassets/TabBar/record-compact.imageset/record-47.png delete mode 100644 AutoCat/Assets.xcassets/TabBar/record-compact.imageset/record-69.png delete mode 100644 AutoCat/Assets.xcassets/TabBar/record.imageset/Contents.json delete mode 100644 AutoCat/Assets.xcassets/TabBar/record.imageset/record-63.png delete mode 100644 AutoCat/Assets.xcassets/TabBar/record.imageset/record-93.png delete mode 100644 AutoCat/Assets.xcassets/TabBar/search-compact.imageset/Contents.json delete mode 100644 AutoCat/Assets.xcassets/TabBar/search-compact.imageset/search-35.png delete mode 100644 AutoCat/Assets.xcassets/TabBar/search-compact.imageset/search-51.png delete mode 100644 AutoCat/Assets.xcassets/TabBar/search.imageset/Contents.json delete mode 100644 AutoCat/Assets.xcassets/TabBar/search.imageset/search-47.png delete mode 100644 AutoCat/Assets.xcassets/TabBar/search.imageset/search-69.png delete mode 100644 AutoCat/Assets.xcassets/TabBar/settings-compact.imageset/Contents.json delete mode 100644 AutoCat/Assets.xcassets/TabBar/settings-compact.imageset/settings-37.png delete mode 100644 AutoCat/Assets.xcassets/TabBar/settings-compact.imageset/settings-54.png delete mode 100644 AutoCat/Assets.xcassets/TabBar/settings.imageset/Contents.json delete mode 100644 AutoCat/Assets.xcassets/TabBar/settings.imageset/settings-51.png delete mode 100644 AutoCat/Assets.xcassets/TabBar/settings.imageset/settings-75.png delete mode 100644 AutoCat/SwiftUI/CustomHostingController.swift create mode 100644 AutoCat/SwiftUI/Modifiers/HideTabBarModifier.swift create mode 100644 AutoCat/SwiftUI/Modifiers/TextFieldDumbModifier.swift create mode 100644 AutoCat/SwiftUI/Modifiers/TitleModeInlineModifier.swift diff --git a/AutoCat.xcodeproj/project.pbxproj b/AutoCat.xcodeproj/project.pbxproj index e6baaef..c82e350 100644 --- a/AutoCat.xcodeproj/project.pbxproj +++ b/AutoCat.xcodeproj/project.pbxproj @@ -13,7 +13,6 @@ 7A06E0B52C707E2B005731AC /* SettingsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A06E0B42C707E2B005731AC /* SettingsService.swift */; }; 7A10226C2C551EC500B84627 /* LocationEditScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A10226B2C551EC500B84627 /* LocationEditScreen.swift */; }; 7A10226E2C551EE000B84627 /* LocationEditViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A10226D2C551EE000B84627 /* LocationEditViewModel.swift */; }; - 7A1022722C554A1300B84627 /* CustomHostingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A1022712C554A1300B84627 /* CustomHostingController.swift */; }; 7A1022772C557EC400B84627 /* LocationPickerScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A1022762C557EC400B84627 /* LocationPickerScreen.swift */; }; 7A1022792C557ED600B84627 /* LocationPickerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A1022782C557ED600B84627 /* LocationPickerViewModel.swift */; }; 7A11470A23FDE7E600B424AF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7A11470923FDE7E600B424AF /* Assets.xcassets */; }; @@ -98,6 +97,9 @@ 7A809F392D66755B00CF1B3C /* Error+Canceled.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A809F382D66755B00CF1B3C /* Error+Canceled.swift */; }; 7A8AB76525A0DB8F00ECF2C1 /* BundleVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A8AB76425A0DB8F00ECF2C1 /* BundleVersion.swift */; }; 7A912F372D381B7400002938 /* LicensePlateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A912F362D381B7400002938 /* LicensePlateView.swift */; }; + 7A91CE952DC2422B00DBA953 /* HideTabBarModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A91CE942DC2422B00DBA953 /* HideTabBarModifier.swift */; }; + 7A91CE982DC243AD00DBA953 /* TitleModeInlineModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A91CE972DC243AD00DBA953 /* TitleModeInlineModifier.swift */; }; + 7A91CE9A2DC2470F00DBA953 /* TextFieldDumbModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A91CE992DC2470F00DBA953 /* TextFieldDumbModifier.swift */; }; 7A9519792D80B3E800E69883 /* AudioRecordService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A9519782D80B3E800E69883 /* AudioRecordService.swift */; }; 7A95197B2D80B41600E69883 /* AudioRecordServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A95197A2D80B41600E69883 /* AudioRecordServiceProtocol.swift */; }; 7A95197D2D80B43D00E69883 /* AudioRecordError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A95197C2D80B43D00E69883 /* AudioRecordError.swift */; }; @@ -110,11 +112,9 @@ 7AA515D02D9ABCC800EB3418 /* RecordPlayerService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AA515CF2D9ABCC800EB3418 /* RecordPlayerService.swift */; }; 7AA515D22D9ABCE600EB3418 /* RecordPlayerServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AA515D12D9ABCE600EB3418 /* RecordPlayerServiceProtocol.swift */; }; 7AA515DA2D9ADEF000EB3418 /* StorageError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AA515D92D9ADEF000EB3418 /* StorageError.swift */; }; - 7AA7BC3525A5DFB80053A5D5 /* ExceptionCatcher in Frameworks */ = {isa = PBXBuildFile; productRef = 7A813DC02508C4D900CC93B9 /* ExceptionCatcher */; }; - 7AA7BC3625A5DFB80053A5D5 /* PKHUD in Frameworks */ = {isa = PBXBuildFile; productRef = 7AABDE1C2532F3EB0041AFC6 /* PKHUD */; }; - 7AAAFAD32C4D0FD00050410D /* ACImageSliderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AAAFAD22C4D0FD00050410D /* ACImageSliderView.swift */; }; + 7AAAFAD32C4D0FD00050410D /* ACImageSliderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AAAFAD22C4D0FD00050410D /* ACImageSliderView.swift */; platformFilter = ios; }; 7AAAFADA2C4D1AFE0050410D /* Zoomable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AAAFAD92C4D1AFE0050410D /* Zoomable.swift */; }; - 7AAAFADC2C4D1E130050410D /* ACImageSliderView+Modifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AAAFADB2C4D1E130050410D /* ACImageSliderView+Modifier.swift */; }; + 7AAAFADC2C4D1E130050410D /* ACImageSliderView+Modifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AAAFADB2C4D1E130050410D /* ACImageSliderView+Modifier.swift */; platformFilter = ios; }; 7AAAFADE2C4D23620050410D /* ACImageSliderModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AAAFADD2C4D23620050410D /* ACImageSliderModel.swift */; }; 7AABB1F2267E9CC800D7AB32 /* SwiftDate in Frameworks */ = {isa = PBXBuildFile; productRef = 7AABB1F1267E9CC800D7AB32 /* SwiftDate */; }; 7AABBE3B2CF9F85600346588 /* Binding+Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AABBE3A2CF9F85600346588 /* Binding+Map.swift */; }; @@ -142,7 +142,6 @@ 7ABDA80B2D8715DC0083C715 /* VehicleRecordError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ABDA80A2D8715DC0083C715 /* VehicleRecordError.swift */; }; 7ABDA80D2D8721B10083C715 /* Substrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ABDA80C2D8721B10083C715 /* Substrings.swift */; }; 7ABDA80F2D8723F90083C715 /* StorageService+AudioRecords.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ABDA80E2D8723F90083C715 /* StorageService+AudioRecords.swift */; }; - 7AC3554A2969652F00889457 /* SwiftEntryKit in Frameworks */ = {isa = PBXBuildFile; productRef = 7AC355492969652F00889457 /* SwiftEntryKit */; }; 7AC44B822DB390B900ADC026 /* MainTabScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AC44B812DB390B900ADC026 /* MainTabScreen.swift */; }; 7AC44B8A2DB4395300ADC026 /* SearchSplitScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AC44B892DB4395300ADC026 /* SearchSplitScreen.swift */; }; 7AC8B2762D6A01C700190706 /* UISearchTextField+Dumb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AC8B2752D6A01C700190706 /* UISearchTextField+Dumb.swift */; }; @@ -249,7 +248,6 @@ 7A06E0B42C707E2B005731AC /* SettingsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsService.swift; sourceTree = ""; }; 7A10226B2C551EC500B84627 /* LocationEditScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationEditScreen.swift; sourceTree = ""; }; 7A10226D2C551EE000B84627 /* LocationEditViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationEditViewModel.swift; sourceTree = ""; }; - 7A1022712C554A1300B84627 /* CustomHostingController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomHostingController.swift; sourceTree = ""; }; 7A1022762C557EC400B84627 /* LocationPickerScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationPickerScreen.swift; sourceTree = ""; }; 7A1022782C557ED600B84627 /* LocationPickerViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationPickerViewModel.swift; sourceTree = ""; }; 7A1146FD23FDE7E500B424AF /* AutoCat.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AutoCat.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -344,6 +342,9 @@ 7A8AB76425A0DB8F00ECF2C1 /* BundleVersion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BundleVersion.swift; sourceTree = ""; }; 7A8AB76725A0DC8200ECF2C1 /* DebugInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DebugInfo.swift; sourceTree = ""; }; 7A912F362D381B7400002938 /* LicensePlateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LicensePlateView.swift; sourceTree = ""; }; + 7A91CE942DC2422B00DBA953 /* HideTabBarModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HideTabBarModifier.swift; sourceTree = ""; }; + 7A91CE972DC243AD00DBA953 /* TitleModeInlineModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleModeInlineModifier.swift; sourceTree = ""; }; + 7A91CE992DC2470F00DBA953 /* TextFieldDumbModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFieldDumbModifier.swift; sourceTree = ""; }; 7A92D0AB240425B100EF3B77 /* ATGMediaBrowser.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ATGMediaBrowser.framework; path = Carthage/Build/iOS/ATGMediaBrowser.framework; sourceTree = ""; }; 7A9519782D80B3E800E69883 /* AudioRecordService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioRecordService.swift; sourceTree = ""; }; 7A95197A2D80B41600E69883 /* AudioRecordServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioRecordServiceProtocol.swift; sourceTree = ""; }; @@ -443,12 +444,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7AA7BC3525A5DFB80053A5D5 /* ExceptionCatcher in Frameworks */, - 7AA7BC3625A5DFB80053A5D5 /* PKHUD in Frameworks */, 7A386A4B2DAC35F10051676A /* ClusterMap in Frameworks */, 7A7AA2CA2DA2C85100276D83 /* RealmSwift in Frameworks */, 7A386A4D2DAC35F10051676A /* ClusterMapSwiftUI in Frameworks */, - 7AC3554A2969652F00889457 /* SwiftEntryKit in Frameworks */, 7ACBB91E2CB9B155005A5168 /* Mockable in Frameworks */, 7AF6D2042677C03B0086EA64 /* AutoCatCore.framework in Frameworks */, 7A96AE2F246B2BCD00297C33 /* WebKit.framework in Frameworks */, @@ -851,6 +849,16 @@ path = ThirdParty; sourceTree = ""; }; + 7A91CE962DC2436D00DBA953 /* Modifiers */ = { + isa = PBXGroup; + children = ( + 7A91CE942DC2422B00DBA953 /* HideTabBarModifier.swift */, + 7A91CE972DC243AD00DBA953 /* TitleModeInlineModifier.swift */, + 7A91CE992DC2470F00DBA953 /* TextFieldDumbModifier.swift */, + ); + path = Modifiers; + sourceTree = ""; + }; 7A9519772D80B3B200E69883 /* AudioRecordService */ = { isa = PBXGroup; children = ( @@ -1045,13 +1053,13 @@ 7AFBE8C52C30812E003C491D /* SwiftUI */ = { isa = PBXGroup; children = ( + 7A91CE962DC2436D00DBA953 /* Modifiers */, 7AD176AE2DC127290023049D /* NumberEditView */, 7AAAFAD12C4D0FB00050410D /* ACImageSlider */, 7AFBE8C62C30814E003C491D /* ACProgressHud */, 7A961C6B2C4C3C8600CE2211 /* TextRowView.swift */, 7A961C6D2C4C3C9E00CE2211 /* LinkRowView.swift */, 7AAAFAD92C4D1AFE0050410D /* Zoomable.swift */, - 7A1022712C554A1300B84627 /* CustomHostingController.swift */, 7A5D7E0B2C71EB25002C17E7 /* ToggleRowView.swift */, 7AF8606F2CBAA24500954D2F /* NavigationLink.swift */, 7A2E11282CCE395300E5CA17 /* OptionalDatePicker.swift */, @@ -1106,9 +1114,6 @@ ); name = AutoCat; packageProductDependencies = ( - 7A813DC02508C4D900CC93B9 /* ExceptionCatcher */, - 7AABDE1C2532F3EB0041AFC6 /* PKHUD */, - 7AC355492969652F00889457 /* SwiftEntryKit */, 7ACBB91D2CB9B155005A5168 /* Mockable */, 7A7AA2C92DA2C85100276D83 /* RealmSwift */, 7A386A4A2DAC35F10051676A /* ClusterMap */, @@ -1229,9 +1234,6 @@ mainGroup = 7A1146F423FDE7E500B424AF; packageReferences = ( 7A05160F241412CA00FC55AC /* XCRemoteSwiftPackageReference "SwiftDate" */, - 7A813DBF2508C4D900CC93B9 /* XCRemoteSwiftPackageReference "ExceptionCatcher" */, - 7AABDE1B2532F3EB0041AFC6 /* XCRemoteSwiftPackageReference "PKHUD" */, - 7AC355482969652F00889457 /* XCRemoteSwiftPackageReference "SwiftEntryKit" */, 7A1CF7FD29A41C2F007962DA /* XCRemoteSwiftPackageReference "realm-swift" */, 7A6C4D9C2C56BCA600982597 /* XCRemoteSwiftPackageReference "SwiftLocation" */, 7ACBB91C2CB9B155005A5168 /* XCRemoteSwiftPackageReference "Mockable" */, @@ -1316,6 +1318,7 @@ 7A6C65222D999325001240C2 /* AudioRecordViewModel.swift in Sources */, 7A06E0AE2C7065C7005731AC /* SettingsViewModel.swift in Sources */, 7AB4E42C2D397D8E0006D052 /* VehicleCellView.swift in Sources */, + 7A91CE9A2DC2470F00DBA953 /* TextFieldDumbModifier.swift in Sources */, 7A961C6E2C4C3C9E00CE2211 /* LinkRowView.swift in Sources */, 7ADF6CA12512244400F237B2 /* MapExt.swift in Sources */, 7AC44B822DB390B900ADC026 /* MainTabScreen.swift in Sources */, @@ -1338,7 +1341,6 @@ 7A7DADAC2D99738300F52F6C /* AudioRecordView.swift in Sources */, 7AB9FE2A2D08CF35005DE374 /* EventsScreenMode.swift in Sources */, 7AB490292D6B1217002F39C6 /* ACKeyboardView.swift in Sources */, - 7A1022722C554A1300B84627 /* CustomHostingController.swift in Sources */, 7A1022792C557ED600B84627 /* LocationPickerViewModel.swift in Sources */, 7AF231932DA1C28100AE5EB3 /* AuthScreen.swift in Sources */, 7A1E78F82CE900440004B740 /* ReportViewModel.swift in Sources */, @@ -1354,6 +1356,7 @@ 7AFBE8C42C302561003C491D /* ACHudContainer.swift in Sources */, 7A06E0AC2C7065AC005731AC /* SettingsScreen.swift in Sources */, 7AF231992DA27C1B00AE5EB3 /* ACButtonView.swift in Sources */, + 7A91CE952DC2422B00DBA953 /* HideTabBarModifier.swift in Sources */, 7A7158002C43EA6900852088 /* OwnersScreen.swift in Sources */, 7A4955822D58CCF900912E66 /* HistoryFilter.swift in Sources */, 7A4322912CB2CC8A00085CF6 /* FiltersScreen.swift in Sources */, @@ -1366,6 +1369,7 @@ 7AB9FE222D08C2A5005DE374 /* EventsScreen.swift in Sources */, 7A5911F02D63266B00EC51BA /* SearchViewModel.swift in Sources */, 7A589E0F2D6B6E8E00EF3FBE /* NumberEditView.swift in Sources */, + 7A91CE982DC243AD00DBA953 /* TitleModeInlineModifier.swift in Sources */, 7A9519802D80B6C100E69883 /* RecordsScreen.swift in Sources */, 7A131FD52D37B76A00DC7755 /* HistoryViewModel.swift in Sources */, ); @@ -1659,7 +1663,9 @@ MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = pro.aliencat.AutoCat; PRODUCT_NAME = "$(TARGET_NAME)"; - SUPPORTS_MACCATALYST = YES; + REGISTER_APP_GROUPS = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_VERSION = 6.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1686,7 +1692,9 @@ MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = pro.aliencat.AutoCat; PRODUCT_NAME = "$(TARGET_NAME)"; - SUPPORTS_MACCATALYST = YES; + REGISTER_APP_GROUPS = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_VERSION = 6.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1821,7 +1829,11 @@ MACOSX_DEPLOYMENT_TARGET = 14.6; PRODUCT_BUNDLE_IDENTIFIER = pro.aliencat.AutoCatCore; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + REGISTER_APP_GROUPS = YES; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG MOCKING"; SWIFT_UPCOMING_FEATURE_DISABLE_OUTWARD_ACTOR_ISOLATION = YES; SWIFT_VERSION = 6.0; @@ -1853,7 +1865,11 @@ MACOSX_DEPLOYMENT_TARGET = 14.6; PRODUCT_BUNDLE_IDENTIFIER = pro.aliencat.AutoCatCore; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + REGISTER_APP_GROUPS = YES; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_UPCOMING_FEATURE_DISABLE_OUTWARD_ACTOR_ISOLATION = YES; SWIFT_VERSION = 6.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1945,30 +1961,6 @@ minimumVersion = 6.0.0; }; }; - 7A813DBF2508C4D900CC93B9 /* XCRemoteSwiftPackageReference "ExceptionCatcher" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/sindresorhus/ExceptionCatcher"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 1.1.0; - }; - }; - 7AABDE1B2532F3EB0041AFC6 /* XCRemoteSwiftPackageReference "PKHUD" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/pkluz/PKHUD.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 5.4.0; - }; - }; - 7AC355482969652F00889457 /* XCRemoteSwiftPackageReference "SwiftEntryKit" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/huri000/SwiftEntryKit"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 2.0.0; - }; - }; 7ACBB91C2CB9B155005A5168 /* XCRemoteSwiftPackageReference "Mockable" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/Kolos65/Mockable"; @@ -2005,31 +1997,16 @@ package = 7A1CF7FD29A41C2F007962DA /* XCRemoteSwiftPackageReference "realm-swift" */; productName = RealmSwift; }; - 7A813DC02508C4D900CC93B9 /* ExceptionCatcher */ = { - isa = XCSwiftPackageProductDependency; - package = 7A813DBF2508C4D900CC93B9 /* XCRemoteSwiftPackageReference "ExceptionCatcher" */; - productName = ExceptionCatcher; - }; 7AABB1F1267E9CC800D7AB32 /* SwiftDate */ = { isa = XCSwiftPackageProductDependency; package = 7A05160F241412CA00FC55AC /* XCRemoteSwiftPackageReference "SwiftDate" */; productName = SwiftDate; }; - 7AABDE1C2532F3EB0041AFC6 /* PKHUD */ = { - isa = XCSwiftPackageProductDependency; - package = 7AABDE1B2532F3EB0041AFC6 /* XCRemoteSwiftPackageReference "PKHUD" */; - productName = PKHUD; - }; 7AB5871C2C42C1CF00FA7B66 /* RealmSwift */ = { isa = XCSwiftPackageProductDependency; package = 7A1CF7FD29A41C2F007962DA /* XCRemoteSwiftPackageReference "realm-swift" */; productName = RealmSwift; }; - 7AC355492969652F00889457 /* SwiftEntryKit */ = { - isa = XCSwiftPackageProductDependency; - package = 7AC355482969652F00889457 /* XCRemoteSwiftPackageReference "SwiftEntryKit" */; - productName = SwiftEntryKit; - }; 7ACBB91D2CB9B155005A5168 /* Mockable */ = { isa = XCSwiftPackageProductDependency; package = 7ACBB91C2CB9B155005A5168 /* XCRemoteSwiftPackageReference "Mockable" */; diff --git a/AutoCat.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/AutoCat.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 86269e4..22ec17b 100644 --- a/AutoCat.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/AutoCat.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "9a7838ec160dde976fc2028176dc43038769553e6d8eb4d7d117f851f899baaf", + "originHash" : "b26032c73d0741690e860809b31156025c85a200a7d53a64391683433e6a82a4", "pins" : [ { "identity" : "clustermap", @@ -10,15 +10,6 @@ "version" : "2.1.1" } }, - { - "identity" : "exceptioncatcher", - "kind" : "remoteSourceControl", - "location" : "https://github.com/sindresorhus/ExceptionCatcher", - "state" : { - "revision" : "3787f25119e1406b4c5e47fc654626a9d5d7e111", - "version" : "1.1.0" - } - }, { "identity" : "mockable", "kind" : "remoteSourceControl", @@ -28,15 +19,6 @@ "version" : "0.3.1" } }, - { - "identity" : "pkhud", - "kind" : "remoteSourceControl", - "location" : "https://github.com/pkluz/PKHUD.git", - "state" : { - "revision" : "8fd26f23057c6bebd6695524b1c3e05e93aba571", - "version" : "5.4.0" - } - }, { "identity" : "realm-core", "kind" : "remoteSourceControl", @@ -73,15 +55,6 @@ "version" : "6.3.1" } }, - { - "identity" : "swiftentrykit", - "kind" : "remoteSourceControl", - "location" : "https://github.com/huri000/SwiftEntryKit", - "state" : { - "revision" : "5ad36cccf0c4b9fea32f4e9b17a8e38f07563ef0", - "version" : "2.0.0" - } - }, { "identity" : "swiftlocation", "kind" : "remoteSourceControl", diff --git a/AutoCat/Assets.xcassets/Colors/PlateForegroundGray.colorset/Contents.json b/AutoCat/Assets.xcassets/Colors/PlateForegroundGray.colorset/Contents.json new file mode 100644 index 0000000..e96b2a6 --- /dev/null +++ b/AutoCat/Assets.xcassets/Colors/PlateForegroundGray.colorset/Contents.json @@ -0,0 +1,34 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-gray", + "components" : { + "alpha" : "1.000", + "white" : "124" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "extended-gray", + "components" : { + "alpha" : "1.000", + "white" : "81" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/AutoCat/Assets.xcassets/Contents.json b/AutoCat/Assets.xcassets/Contents.json index da4a164..73c0059 100644 --- a/AutoCat/Assets.xcassets/Contents.json +++ b/AutoCat/Assets.xcassets/Contents.json @@ -1,6 +1,6 @@ { "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/AutoCat/Assets.xcassets/TabBar/Contents.json b/AutoCat/Assets.xcassets/TabBar/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/AutoCat/Assets.xcassets/TabBar/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/AutoCat/Assets.xcassets/TabBar/check-compact.imageset/Contents.json b/AutoCat/Assets.xcassets/TabBar/check-compact.imageset/Contents.json deleted file mode 100644 index 2343e1d..0000000 --- a/AutoCat/Assets.xcassets/TabBar/check-compact.imageset/Contents.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "check-37.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "check-54.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "template-rendering-intent" : "template" - } -} diff --git a/AutoCat/Assets.xcassets/TabBar/check-compact.imageset/check-37.png b/AutoCat/Assets.xcassets/TabBar/check-compact.imageset/check-37.png deleted file mode 100644 index 70741a20b07455eafed89391017a197796b05fb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 967 zcmV;&133JNP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91B%lKT1ONa40RR91Bme*a04fgS`~Uz0F-b&0R9Fe^mrHC;K@`Woq8=ep zRrQRfB^DAQgv4v3y6whFih7HU2x23_#)>Wwu@f7MhAxN*A@N9vCKVD<@rpFGBA)dq z(iXq}*L!44=HBnN+Qj1fC%?|jnKS2}d*;r)Uo)A!@)gKeU|=gy(8utDSvM0VMNFhs ztXI$$(M;O~1E$eLUJ0k*9sJ6{N9OBc4HQGasf0)epdI`qRDqY!2shv>=a%kV-Xpxp#G&@oaCU9_mf-2rOx9A7k4L@^Lkm!3i+GPWphI147z4<)6O7^g8zw18qC zlas2V!5Iw_RLPv5kgDQK)$;wcHc1@R)YbuByq^Rrf8^0nYsMi*`Z^Ls{LzbaBmzgOy@8!UiItP|;f zFw3#2Fmj@sj(O7~iNuC9X{tdsFI*bU1;zpaa41Sp{;umMg(JGg5b z8EefyOXa=@ZpGXSCH3{;yb4v&?Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91HlPCl1ONa40RR91HUIzs0P{mGqyPW~7fD1xRA>e5m|3V*RT#&uEGxS= z8z^!J(lRTM-Xf#CVKxv&14L;N6k#A4G+7X2;6o8bb5PVnB%0DwlS*?*k_j0-=r#08 z*D@{3tW0hC{o?FeE!LjSxmOGJAAX!QeczhDz4sY1q*1d1%?dOt(5yhS0?i8i=T=~! zK^{>z{>MO93%lFiVk5ubTQC?J$cYVSfM-AtOo9n;G!$tIm1|%*ybJHcHrVSL$_Orl zh43@{(IGpre;KC3fw0GQ06ortbh6S7pst+gl`szsD5*X+ zQ+_!Nm=4C1tMxm?9sWky0+$MPf;Dnxo@sKA&{WO>l ztH2dE3VsSN!qspn*Fr5B@qUGHAiK!l3r55|8Bjig(5^~)1vc6i=`1RHA@=9ORMOqFij57u zMZ2V92bMZEv9G-R7ub)~QGvYgiy-##K!MF)Ro5kqR#G;)#L%Pkal$qpKv~|MD>{}A z!$;H{h>zwh%91*pQjc5M`77joc9qF6AKG=2_I_58j|cBr)|Xf3g4pm_3gXMYlrjTB znGC&o&z`K)I==>#qG%b8XBrtJbmrd&_}H+);-Jz-A3&9z(#JKBIZpk$s*l3Oa1lHL z;Yz1$rqiaXuBTz>LdRj+2~4(8BqLnW$da5FLT;wK~1^CnSK20(aV!{ zar-Q<&$_xDgUo*WzGMsv+&;_u`BGIwY4{;z zwmV4wy?eI=6*lOHCp+Dcaq+Wui<5#w(8@^`Ud6u#kO4(7-qvk^^!j!ZkWj57}ZWf>_>YSm zyr&@a?Y~_HzodM%idWyLd2X`xKZTxiS1atOo%B2S&{vTh{89-0e@nh}118X@FEaE_ z+y+G<`f%!9wXnlF>9yD%2}PPnrR_q$Zp5iYMq!<=RPnLY*)ljeY#61T+}jX#TqXS; zHbs*fM*Upa75R3OW1*IO!+s0mf$gMh4%k^r9;KOJ5QuH#yl)t@V1LL{4;87Cu!8cV z@{G#Ly`*=6lZglQC1rj)bwf%2fwEdfjmv6!Z-D}Uq4gshoZkI zsIDf@wu6g1G4Hq7eJ~C>m5Xr|tb|lw9=%C0pz^rf1KS|gsb#C-A(#SHSM+$=dK{O) zFOc%>+k}3dcqJ7@xjYAkTL*G8n9h@fbcK7tW9V1JZt(bx05AQCP;^gx)q4sagiWwV z)I~3|p&wGK+)0^taV{JIdriKMO@=4H-D!71eb_z==Yf&6BeioB%Q_rM124D_`tdLZ z++9%~$sb`OtZA{F-wn{HS%GE+niXhPpjm-t1)3H3AFjZk;>NlMi3yhj00000NkvXX Hu0mjf&BUcH diff --git a/AutoCat/Assets.xcassets/TabBar/check.imageset/Contents.json b/AutoCat/Assets.xcassets/TabBar/check.imageset/Contents.json deleted file mode 100644 index c1899ab..0000000 --- a/AutoCat/Assets.xcassets/TabBar/check.imageset/Contents.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "check-51.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "check-75.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "template-rendering-intent" : "template" - } -} diff --git a/AutoCat/Assets.xcassets/TabBar/check.imageset/check-51.png b/AutoCat/Assets.xcassets/TabBar/check.imageset/check-51.png deleted file mode 100644 index 68f43eea1d5b63484d9fd28af295bd27d2bab05f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1368 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 Gm-G+&JI*rz diff --git a/AutoCat/Assets.xcassets/TabBar/record-compact.imageset/Contents.json b/AutoCat/Assets.xcassets/TabBar/record-compact.imageset/Contents.json deleted file mode 100644 index 9edc098..0000000 --- a/AutoCat/Assets.xcassets/TabBar/record-compact.imageset/Contents.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "record-47.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "record-69.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "template-rendering-intent" : "template" - } -} diff --git a/AutoCat/Assets.xcassets/TabBar/record-compact.imageset/record-47.png b/AutoCat/Assets.xcassets/TabBar/record-compact.imageset/record-47.png deleted file mode 100644 index 0d9e4c0e1ee68780bff784f620420cbfef2a67be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 924 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 GxW56?lyk}e diff --git a/AutoCat/Assets.xcassets/TabBar/search-compact.imageset/Contents.json b/AutoCat/Assets.xcassets/TabBar/search-compact.imageset/Contents.json deleted file mode 100644 index d26fb9c..0000000 --- a/AutoCat/Assets.xcassets/TabBar/search-compact.imageset/Contents.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "search-35.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "search-51.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "template-rendering-intent" : "template" - } -} diff --git a/AutoCat/Assets.xcassets/TabBar/search-compact.imageset/search-35.png b/AutoCat/Assets.xcassets/TabBar/search-compact.imageset/search-35.png deleted file mode 100644 index 56e0a501b1bc942501cb7137fa4568388721a1eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmV-s1DX7ZP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91BA^2R1ONa40RR91A^-pY00MfUQ~&@1&`Cr=R9Fecmpf<`Q4of`Dk6f4 z2)=?ZR8rZ9T8PRG1Qabqixd{Iv=LDPb`~+|0=6M2VqvKuh^A3UB~g4J62%0fLGghW zJ_s5W_4^YBW|w`OldLxb-`%r!9%t^Hvvc;==9EhflkIQ_c0&`afnV?zUc()@4#QBn zD1kN@fxm&=#cmH&CL4(~2zd#Nqfg&E0Syg!1UL?!P8EzuH?%!O5;CA$nt z&ig#)eltu6dzpSPX!5Mx_{Fz=+*K5l=5C38Nh&cEC5oIW$&ly4fW>2NW%+#5nX?>VP4Ar1jH z+RRT~+zVws+6Pub?U99L4iWmpF7_wJg`57QGwzF+B*b(9Mqge0dY+TYx5FuKx^Wf5 zp9IlEVB+Vp?R1tC(aZlGVU}p=^ZXiV(4T3 zNNC)R646m^(qw}QuRf-Zj7(7?ubf5)Ue)4bJ}U~Yc5Hp*VUgi9bX#3)&7q!^D|*(y zfF;wKYZC9ykqY(OM6~JJ9Qbn$w!%%J5ZX4nVZ1I_=O86OfmPUY7MwPtDO+LQ9(V$xOyO;ZrD!(W*CS zIdq)sY0z8O2;2viK1-C$*_1**O3S4E*iZ?sOe3=DWRjp|n$2YDg>TjWA+rHuYG2mD wM182a(TQmC0Z1qFQi|DPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91GoS+i1ONa40RR91GXMYp0M89gSO5S79!W$&RA>e5nOn$BK@`W&=Uxc8 z<(5No7v)}vyigJzM7~mZQalhM;z21diZ|o|k>o*MT%w3_FG{5J9rtTdNaXhW*GIe6 zI(wfvdpp}FtNxumYu5bNS~Ig}X3wcBq?6G!pA80qo)LWJ`B?d!Toy7Z?xvfH>Jf`D^#a5t^ z@c5)V2|9qxWiX8IfamxudIeXFw4>1$@Bw(-SJAftnMo&@?gQ)W6T140ylDDeaeT<< zp^SVKT0nHhaiVu&TvkpRc{BoA9c`znyrI!1)z3PI{1v)lD%SYMyQ#Jb>75)C-z>hi zGu8Gz(MmNbzFF#8E&b<#P3T-2W-X7FaCsWSfVSEKG?lIYnE@QXO|=i$P4PCmX1^`| z{KGO_*ko>1<93xpG@}}#6m6Q*_Kp+B@KDYRhD4{_JVZ;s9i5FKfpo=K$A~D&`VfK) zZFK_pVqyvESRM4DiRgI<$V*P)*v3=QCxc$_qKR4u#k)pV%c71;R*F{Pm6c3SQ}Ni8 zYhCpG+Zf%LykxZA=P925ij(PXB7bAbwJv)8D}HBmgo%odHF=8XU!M$#qG@J_Rmbx@ z#q*Ss&O6G~NQqK%Dx>^>eInM4mI#;C&JiAG)buItAQuhh=z}pb& zR-0rrq06BJ8QCu|aVVyJq1@XXlIfu&DeX1ob>xqBs-EYC^6Iw5lH5R77fO`Eez6ln z37tL-g5?A)Y(h(eS*mN$k!Cu^SpTc5qbn4K(eSGw{6snHTNxXldj7QWtE66nRF{H# z9a3$o-rA2k6WIxi9TAo1r)AfN+Czt2x{+zgO?%zS>;YaP`Y$IFQPAG?sdT|BOPPq& zY3G5Lh;)a6R<}%KE-bo;^PFj+7+R$l-C}A(ehWPAsO|tZnI*IYvM*(vYN3#`SwI0M zi9W+OfJY!2aME*7LP`6`WSr}-3r&l1@{tPNK9;~!@B-*qq7N#a^Co~aXFc6VF9w<^ zsiiLr*FaJ)R#UG4)%!^!7BoWe#fnC-9+W^eL3?d(!!-#=`h%J#B&V&xDqs($Ua+1{ zBcTm)4rmUdl1oCr0?>P)mFXhTm!KECblS;}f)!u@h!Z8GJ*^y<^qEe%a>2BsqA!>T z#)5vJ9S9Y*OG;=zHqAnb^RoY+P+mP>so#Hcgi2%|w$r diff --git a/AutoCat/Assets.xcassets/TabBar/search.imageset/Contents.json b/AutoCat/Assets.xcassets/TabBar/search.imageset/Contents.json deleted file mode 100644 index ef7dde8..0000000 --- a/AutoCat/Assets.xcassets/TabBar/search.imageset/Contents.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "search-47.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "search-69.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "template-rendering-intent" : "template" - } -} diff --git a/AutoCat/Assets.xcassets/TabBar/search.imageset/search-47.png b/AutoCat/Assets.xcassets/TabBar/search.imageset/search-47.png deleted file mode 100644 index 95889f9765212539ca107f212320904bb3501e98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1108 zcmV-a1grarP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91E}#Pd1ONa40RR91E&u=k08)}91ONa7zDYzuRA>d=nOlfXQ5c429A=tv z%wfh1%{W}iu_O#3MTit-~0+}h|LM|ktT!_?MI5v(= z&ZpTKR1O z&7d80o0XG!E4T}OMu2YS0$2<(wVq^a0P4vog1vmN!Z8)(-A0okY!83I*GsHz`+?tK z&f#?FtwKQnl5vdG+9P+Bbrd2-&9L zdkuKqz$4m+gH)^zme0T@+DlvC1R0hR`_hB=7HxV`iL8d`7r+($k-DBh8a5J=d%)#a z`7B6e*NJvX)$?-_F?J5tQ&TUyc~sUAjAhG-vSjOHF$D){T-)VUPdf5Y)Y4>EfMdb= z6M4)c+IG~AsElh2$$RP*QAuL>YizsXwKeD$h3C8>*d8S~fv?tlyX>wE%hv}-tsJ>K z*PCrv*x(fWE;+fS;Z#^oJ1K934NS?e0iIl^>Gv(@9mL%Ohe^gsJGm^)<{Lor+8_ZE zUTvK88qU(RENZB_W;MCjewV$3izsWeIYSAz%U)a7s>x?_T1}lKsmI@#)*+^zMb+kP z4@xTGksnhKX^iW3XlNJNrFjY0OCd|EB3YS9sC`S9CgBf_#}ZS|ch%<8;aXeYK+{C{ z4stI6l`8|I(sQ`z`hc|_eOy;QXGhaZi)AYM73gs3PtliMbI z>);Y;pQP8U)>4<`DD`|=9pu{3xj9e7Nw~?7h;VHjq7X4!NuB^#^jGTRLd14*DWT;t zaLF{oby7*ww2i(A+&n7pN|IzI!5U{S=?CidNl2a88p?No%dfJQQ;ftO&nEj96*N%qYr;cMDYf)!va z(5fWUJgEhAJ@CY~Hcyr{m=j aQ2Gm)>dx7L1D*>20000FF diff --git a/AutoCat/Assets.xcassets/TabBar/search.imageset/search-69.png b/AutoCat/Assets.xcassets/TabBar/search.imageset/search-69.png deleted file mode 100644 index 5093cf5288be42221613fad318708c9516a2830d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1670 zcmV;126_33P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91MW6!!1ONa40RR91MF0Q*0D2!GOaK4{@JU2LRCodHn{9{|RTRhFG+fM5 zdJ`?ews4EuGJ2Cp5|YSRiu@E3EkR*HQqYH9=u6axBItvLY4xR7dcn%5AfpHb%_PVY z)I!#Z)Uq_&qO`1j|JaFPx##YkJ9Fom=h;2*=b1hC-gExv%$>Ps?#y;gNF!%rb^+)E zy`Tq71IL1+!LMKl>;>Dw4zLky0DpjvkxPi=3Gfa0ClX4?``~7v1h%a#hWSJ!f_X=ptthom=M*;)-lYSq9yTCPIE;t!<4dX<9&jX9VGVmTy!bT?1`ukJ*o(ftf z-FSW;SOoKW1vdbW2Sr6o_7dAN}CfaA#z~lscd<1-4zMwsM zv9}N>x>;I8UZhR;nz}@n@oHf4kzV(rqd*c-1-Tzs1RhJ`HO#1rIE$C`_lB7%-fM-& z@td@zx_^W+eb&QIHB{w~1$w%*>V?l~n+jSjlOf=HywFLlR9?lJYkK~Ses-mv${Cx% zaBVxdxay?p z-cOWFWRzAH*EF0TWwG8t+JbO#m+rP$D(4$Ue?Xtjq*&W^jnk##O3Vu}1Qhhy#z1Wu zH2u=asISWoM*N;N;_sk8m6Tqi=hue5iE4|h6`MB(CB@p-(?)T-h{aWpCDV%rp`=** z5SF8&KI-W2<7&lc^718Rk2$J&4L+_>NwIFG$22c?laY_BD)mC5nKERIm}TgjsP=JH zX;Da&6m877#OKJ>zm+(_^ait(OkuQT{JBz=(+*ya zc~?TDyR!<{&lnDL!<}1&gNkjOfxW}Pm6U_%3zzpUem*DbTmxFHv))lDNl~kg6;JZ% zXgMyZAE3W$hDfIy>}*h(=*Fd~=W-}#S5@XI-q2+XwO+@F_sV$F_Q?BbawSE&1EAL) zn!H6Tp=v6N-?y}tT86C%v=V*galDJRK2W#ljo)@)B}DrEl%%woZCyrkt|!krtKBQ{ zw;%WtvWE8LvIq}ajx8c;yASAbAf+tBxbLf~jNgy+tEF_f8%LQ_>-RJIq__dk$L_}g z{`0(QOU$Z3Vya~>1ZCx146FtDV2d2rmKc4X;=7dcq_scu2$%=DK!_-r4}q;9Z!7k= zRANF&E3kg>5-3tWYkyQL+3sQJyITc1YZ%%wQzbnUR4qSYa3Rp;om9@j`c4pg2Fs4q zY~5VIf2kRRpI}jO^f1srDU}Vf$oNn2r^`&U`{@F{l^AQglBQ}!m%vj%<$sajiuU~; z`%6K7>2Gvm;QHTJ3orAl*9k=f_VwR@y&J(~;1VT9C&gzY-&X64$p}y9KxgzFFa+|1 zLXK6SsV;dGTmV8ONn&I)g-pVzuKzxu2gn{U4QS<>2z1s2y_eAnrJLtQp!-x&Q4FiW zt$_ozD(SIdOJM)D?Up4bWJan_OD?5WWOqCbV?ba|HmXMl?W0#yNea4aN6xlm&CS;@uvV-z_sR+6GTgeGRwC`s$M zX5D;O0^dF6rjCm`ARr}Xg^`%`=<{0?0p>cZ%k_k#?FoH?vJGfoxf@LQ7j;10XMvmR QYXATM07*qoM6N<$f+6)6O#lD@ diff --git a/AutoCat/Assets.xcassets/TabBar/settings-compact.imageset/Contents.json b/AutoCat/Assets.xcassets/TabBar/settings-compact.imageset/Contents.json deleted file mode 100644 index 5eee694..0000000 --- a/AutoCat/Assets.xcassets/TabBar/settings-compact.imageset/Contents.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "settings-37.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "settings-54.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "template-rendering-intent" : "template" - } -} diff --git a/AutoCat/Assets.xcassets/TabBar/settings-compact.imageset/settings-37.png b/AutoCat/Assets.xcassets/TabBar/settings-compact.imageset/settings-37.png deleted file mode 100644 index 309bbdfcb2719ad03b57355516d1e235e9c33da1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1205 zcmV;m1WNmfP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91B%lKT1ONa40RR91Bme*a04fgS`~Uz1A4x<(R9FeMmRYDyQ546G58}Zr zFS@Rw%tOeOOv#wBNW=r>fhZ3WUS!CNBBVUHc_5OhT(g9fT#_L}3T4Qc%rn3Lb=GH{ z-FLq4oO@aIJA3W5*IsL%bM{{6)UHu=S-{j`a6SmJoPHO$6xjcJ_ca-QL0^}te`I^* zZ2w$sOT=wZ>LNEo*J8vKSQ8=L?2XV(^2M;R%@%SmLDi9zH8!61<4~ zXVF$$dJ`cjsq7!%He7?}@Dq~!doWgQnLq@e;0yf&Fa;VzDD^OmhRyH>{M<40Gs_-k zl!IQ+68Hf=Xc_&qqJ5>M;1M>R}ZIYY{*gG?3d91zY{dLzTos%kSUGEU+wdmVT z976939iY%0hGSy$wV-355)qU3^lY^oVk7xG{V?mK*c`P_U@D}Mr8wE#+*8(_nshXU zw!-O2>O%%}8ojinvlGU7V}kB$ke+Z%^mJ6AZN+KogFYYfKMn07q|0^}N{XNymQR~p zYp9gtTy4PGl0QRuZYdb)jWU7ZaH^-vxX9s9V_&&d`vTlK=6^{=u$8c$mAU(fv7sA#@& zY|QTxx9SPl51QIeZrF~hYL~Y=mx5|3qt8H#c?YRpw~nkmA+o%|@@b==X9fw04nH8Z3DQx{8{R zZg&5VY%xk0|8HWir;p3f7hMZ_>1>(QLLbm#fj;7(YOP;i6CG`xq@!@jj9J>>kNtk@ TnqZ&{00000NkvXXu0mjfY^pE} diff --git a/AutoCat/Assets.xcassets/TabBar/settings-compact.imageset/settings-54.png b/AutoCat/Assets.xcassets/TabBar/settings-compact.imageset/settings-54.png deleted file mode 100644 index 51f27d334f6e83beb496247a74a60bb71c742c90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1921 zcmV-{2Y&d8P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91HlPCl1ONa40RR91HUIzs0P{mGqyPX0>q$gGRA>d&n0d%nRS?EAjWoq2 z7hJ-nC?lk_BGVMVQbcH1uq+W=N}|FnO~VNPC@KFnh=dkXN?L`i)Tm4?D{Qe+BT}?n z(#)kSEzSBpct^(b-u->QFCBO|bLPxEGw0rWmiKLZTK&km&`tuo!LEc9mtemOYzF(l zDIv?K@?WqOG>fUYIkp`@K1*Z9Pg>L7sAv^FHKxkxZv5An@&C;_ zpuz`(>mo?s18iJv8xTrU40nU8!-4whw}bcyP(dqzFRCs5nZOsFN1sMaD`27=9|Ohy z4g470`VkfHi`_tf3|ItIgdZ!SA0+lwAg=En&r$T2ph09KS&9^0jjtYDVQEr0;#k0E zG}_XWUC5bp1LsC<H_5T2UCTuGPMe5t zpT^!Oj`tpnhl8Lu;~X<=a~y{*#5aH&!7$JrR4d_2(8HgYMfw&F{wYkz3WynRjcr%J z<2hF|HZUeGuW3lYt#d9@!h*VGM#MYlXT6_HsOxjRIX*Pgst4!!v;(J#7P=4Eo9dlB zcqT)i23(%kbbUf6>|)836(jy=(L<`(>V3puI+j%JDnD32pYC{+^f7QgxFFK~=JFc0 zGV(4#zE;(KT(pDeBB>jNK8s6%mqm2Sd@fsv>lzWwqMZ@x*68>!n~GZuj@n?(whw-m z!$Q75(KS%JW9otTyc`OO9+ZEQdQ+ju=6!0df1~qDm)9gI`V_^Z_2or5LW#45KGpP( zG$HyLFag{I`T~EzmH9t!2ORr>#g0Rt2E2@Q9c>^>TtBZGeu{btI!3g7o(V|?Vep^D z^3Wk?|0&0#1NsS|jYD`G$Yyz-L@y)Z=5bXTNjnBDq1s>4oKwcM&h+LySDdbk_cw?==n0QR8t7>ho^#HE|Fd5lqJ@$-dn*`Fdp;=)$WS(;4pr*`V=RD3TcdG zA@I(oYaO(yh)6c{WJo)m#ZOLlEj7}dDE;?h{Jx!!U2{1uqtLuVsE6D2@xU16eaH0` z`U#0*{EM2#IR3Cs^+$Tb-gNY4;v8kuhSC;fiPocW=v?WS6;NfAKvl4B1O=WAL`Utff3R_&TYrVPZxlSm()66FtN zoqyVrYbo6z^Iw&|h`wbLXh-yu(;Lwt9?BIM{B6QtnL^((eQg+PfUjji86u0(7VXKT zD?xj6pw*|Kp9|)<65Zc7=~g9L7HEZr&y%SOPCA2($hY5N?;4RPfsN@rsaU*` zUztXedJY)BZ}(#FScWwG3_YpzpTJv!Xp4<|ntH3c!_@(;jl9wd$C2O-pe;O{)K+YlfkIMt_tL%6o?u+UeHcFg zYr%T38|c&4%|UBN(1AK2LfV6vkIxv;AhL-p;ghYe{)Psb5lM7s^pp6S{s^EQ%HIsU zPaa+OycZ&_b+i_v&r?^XdKYaZI{J^4`d^I{v2&ysNPWbXH%xS8Ohlp=dYKHXD%N)P=9<#s<%xw2MA00000NkvXX Hu0mjf8tH{v diff --git a/AutoCat/Assets.xcassets/TabBar/settings.imageset/Contents.json b/AutoCat/Assets.xcassets/TabBar/settings.imageset/Contents.json deleted file mode 100644 index 55204ff..0000000 --- a/AutoCat/Assets.xcassets/TabBar/settings.imageset/Contents.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "settings-51.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "settings-75.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "template-rendering-intent" : "template" - } -} diff --git a/AutoCat/Assets.xcassets/TabBar/settings.imageset/settings-51.png b/AutoCat/Assets.xcassets/TabBar/settings.imageset/settings-51.png deleted file mode 100644 index b8609083953f73723774dc230194924bd940bbf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1846 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 diff --git a/AutoCat/AutoCatApp.swift b/AutoCat/AutoCatApp.swift index d199390..42a2566 100644 --- a/AutoCat/AutoCatApp.swift +++ b/AutoCat/AutoCatApp.swift @@ -37,7 +37,7 @@ struct AutoCatApp: App { @ViewBuilder var mainScreen: some View { - if UIDevice.isIPhone { + if Device.isIPhone { MainTabScreen() } else { MainSplitScreen() diff --git a/AutoCat/Extensions/UIDevice.swift b/AutoCat/Extensions/UIDevice.swift index 74d0aa5..58b56d2 100644 --- a/AutoCat/Extensions/UIDevice.swift +++ b/AutoCat/Extensions/UIDevice.swift @@ -6,12 +6,19 @@ // Copyright © 2025 Selim Mustafaev. All rights reserved. // +#if canImport(UIKit) import UIKit +#endif -extension UIDevice { +@MainActor +struct Device { static var isIPhone: Bool { - current.userInterfaceIdiom == .phone +#if os(macOS) + false +#else + UIDevice.current.userInterfaceIdiom == .phone +#endif } } diff --git a/AutoCat/Screens/AdsScreen/AdsScreen.swift b/AutoCat/Screens/AdsScreen/AdsScreen.swift index 6b782cb..62615ba 100644 --- a/AutoCat/Screens/AdsScreen/AdsScreen.swift +++ b/AutoCat/Screens/AdsScreen/AdsScreen.swift @@ -45,7 +45,9 @@ struct AdsScreen: View { } } .navigationTitle("Ads") +#if !os(macOS) .imageSlider($galleryModel) +#endif } func imageGrid(links: [String]) -> some View { diff --git a/AutoCat/Screens/AuthScreen/AuthScreen.swift b/AutoCat/Screens/AuthScreen/AuthScreen.swift index b6ce6b5..0a0f5e4 100644 --- a/AutoCat/Screens/AuthScreen/AuthScreen.swift +++ b/AutoCat/Screens/AuthScreen/AuthScreen.swift @@ -28,11 +28,15 @@ struct AuthScreen: View { VStack(spacing: 16) { Group { TextField("Email", text: $viewModel.email, prompt: Text("Email")) +#if !os(macOS) .keyboardType(.emailAddress) +#endif SecureField("Password", text: $viewModel.password, prompt: Text("Password")) } .disableAutocorrection(true) +#if !os(macOS) .autocapitalization(.none) +#endif .padding(8) .background { RoundedRectangle(cornerRadius: 8) diff --git a/AutoCat/Screens/EventsScreen/EventsViewModel.swift b/AutoCat/Screens/EventsScreen/EventsViewModel.swift index 472f14e..5b4c749 100644 --- a/AutoCat/Screens/EventsScreen/EventsViewModel.swift +++ b/AutoCat/Screens/EventsScreen/EventsViewModel.swift @@ -10,7 +10,7 @@ import SwiftUI import AutoCatCore import CoreLocation import UniformTypeIdentifiers -import MobileCoreServices +//import MobileCoreServices import MapKit extension UTType { @@ -42,7 +42,11 @@ class EventsViewModel: ACHudContainer { var onUpdate: (VehicleDto) -> Void var isPasteAvailable: Bool { +#if os(macOS) + NSPasteboard.general.data(forType: .init(UTType.vehicleEvent.identifier)) != nil +#else UIPasteboard.general.data(forPasteboardType: UTType.vehicleEvent.identifier) != nil +#endif } var shouldDisplayEventAuthors: Bool { @@ -174,14 +178,26 @@ class EventsViewModel: ACHudContainer { let items = sharedData.compactMapValues { $0 } if !items.isEmpty { +#if os(macOS) + NSPasteboard.general.setData(try? JSONEncoder().encode(eventDto), forType: .init(UTType.vehicleEvent.identifier)) + if let urlString = getMapLink(for: event)?.absoluteString { + NSPasteboard.general.setString(urlString, forType: .string) + } +#else UIPasteboard.general.items = [items] +#endif } } func confirmPaste() { - guard let data = UIPasteboard.general.data(forPasteboardType: UTType.vehicleEvent.identifier), - var eventDto = try? JSONDecoder().decode(VehicleEventDto.self, from: data) - else { + +#if os(macOS) + let data = NSPasteboard.general.data(forType: .init(UTType.vehicleEvent.identifier)) +#else + let data = UIPasteboard.general.data(forPasteboardType: UTType.vehicleEvent.identifier) +#endif + + guard let data, var eventDto = try? JSONDecoder().decode(VehicleEventDto.self, from: data) else { return } @@ -202,13 +218,22 @@ class EventsViewModel: ACHudContainer { return } +#if os(macOS) + openInMaps(event) +#else if UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url) } else { - let placemark = MKPlacemark(coordinate: event.coordinate) - let mapItem = MKMapItem(placemark: placemark) - mapItem.name = event.date - mapItem.openInMaps() + openInMaps(event) } +#endif + } + + func openInMaps(_ event: EventModel) { + + let placemark = MKPlacemark(coordinate: event.coordinate) + let mapItem = MKMapItem(placemark: placemark) + mapItem.name = event.date + mapItem.openInMaps() } } diff --git a/AutoCat/Screens/FiltersScreen/FiltersScreen.swift b/AutoCat/Screens/FiltersScreen/FiltersScreen.swift index ffd36a3..f2ee5a5 100644 --- a/AutoCat/Screens/FiltersScreen/FiltersScreen.swift +++ b/AutoCat/Screens/FiltersScreen/FiltersScreen.swift @@ -51,7 +51,7 @@ struct FiltersScreen: View { ForEach(viewModel.years, id: \.self) { Text($0.text) } } } - .pickerStyle(.navigationLink) + .pickerStyle(.automatic) Section { Picker("Added by", selection: $viewModel.filter.addedBy) { @@ -114,9 +114,9 @@ struct FiltersScreen: View { } } .navigationTitle("Filters") - .navigationBarTitleDisplayMode(.inline) + .titleModeInline() .toolbar { - ToolbarItem(placement: .topBarTrailing) { + ToolbarItem(placement: .primaryAction) { Button("Done") { viewModel.applyFilters() dismiss() @@ -124,7 +124,7 @@ struct FiltersScreen: View { } if horizontalSizeClass == .regular { - ToolbarItem(placement: .topBarLeading) { + ToolbarItem(placement: .cancellationAction) { Button("Close") { dismiss() } @@ -134,6 +134,6 @@ struct FiltersScreen: View { .task { await viewModel.loadData() } - .toolbar(.hidden, for: .tabBar) + .hideTabBar() } } diff --git a/AutoCat/Screens/GalleryScreen/GalleryScreen.swift b/AutoCat/Screens/GalleryScreen/GalleryScreen.swift index 63fb451..5eebaa5 100644 --- a/AutoCat/Screens/GalleryScreen/GalleryScreen.swift +++ b/AutoCat/Screens/GalleryScreen/GalleryScreen.swift @@ -55,7 +55,9 @@ struct GalleryScreen: View { } } } +#if !os(macOS) .imageSlider($galleryModel) +#endif } var columns: [GridItem] { diff --git a/AutoCat/Screens/GoogleAuthScreen/WebView.swift b/AutoCat/Screens/GoogleAuthScreen/WebView.swift index fb9f9a9..dadd454 100644 --- a/AutoCat/Screens/GoogleAuthScreen/WebView.swift +++ b/AutoCat/Screens/GoogleAuthScreen/WebView.swift @@ -9,25 +9,57 @@ import WebKit import SwiftUI -struct WebView: UIViewRepresentable { +class WebViewCoordinator: NSObject, WKNavigationDelegate { - class Coordinator: NSObject, WKNavigationDelegate { - - var decidePolicyClosure: ((WKNavigationAction) async -> WKNavigationActionPolicy)? - - func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction) async -> WKNavigationActionPolicy { - if let decidePolicyClosure { - return await decidePolicyClosure(navigationAction) - } else { - return .allow - } + var decidePolicyClosure: ((WKNavigationAction) async -> WKNavigationActionPolicy)? + + func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction) async -> WKNavigationActionPolicy { + if let decidePolicyClosure { + return await decidePolicyClosure(navigationAction) + } else { + return .allow } } +} + +#if os(macOS) + +struct WebView: NSViewRepresentable { let url: URL let userAgent: String? - @State private var delegate = Coordinator() + @State private var delegate = WebViewCoordinator() + + func makeNSView(context: Context) -> WKWebView { + + let webView = WKWebView() + webView.navigationDelegate = context.coordinator + return webView + } + + func updateNSView(_ webView: WKWebView, context: Context) { + + webView.customUserAgent = userAgent + webView.navigationDelegate = context.coordinator + + let request = URLRequest(url: url) + webView.load(request) + } + + func makeCoordinator() -> WebViewCoordinator { + + delegate + } +} + +#else +struct WebView: UIViewRepresentable { + + let url: URL + let userAgent: String? + + @State private var delegate = WebViewCoordinator() func makeUIView(context: Context) -> WKWebView { @@ -45,11 +77,12 @@ struct WebView: UIViewRepresentable { webView.load(request) } - func makeCoordinator() -> Coordinator { + func makeCoordinator() -> WebViewCoordinator { delegate } } +#endif extension WebView { diff --git a/AutoCat/Screens/HistoryScreen/HistoryScreen.swift b/AutoCat/Screens/HistoryScreen/HistoryScreen.swift index 8588c7f..053febc 100644 --- a/AutoCat/Screens/HistoryScreen/HistoryScreen.swift +++ b/AutoCat/Screens/HistoryScreen/HistoryScreen.swift @@ -26,7 +26,7 @@ struct HistoryScreen: View { ForEach(viewModel.vehicleSections) { section in Section(header: Text(section.header)) { ForEach(section.elements) { vehicle in - if UIDevice.isIPhone { + if Device.isIPhone { NavigationLink(value: HistoryRoute.localReport(vehicle)) { vehicleCell(vehicle) } @@ -42,13 +42,12 @@ struct HistoryScreen: View { } .hud($viewModel.hud) .listStyle(.plain) - .navigationBarTitleDisplayMode(.inline) + .titleModeInline() .navigationTitle(String.localizedStringWithFormat(NSLocalizedString("vehicles found", comment: ""), viewModel.vehiclesCount)) .searchable(text: $viewModel.searchText, prompt: "Search plate numbers") .searchPresentationToolbarBehavior(.avoidHidingContent) - .autocorrectionDisabled() - .textInputAutocapitalization(.never) + .makeTextFieldDumb() .toolbar { ToolbarItem(placement: .primaryAction) { Button("", systemImage: "square.and.arrow.up") { diff --git a/AutoCat/Screens/HistoryScreen/HistoryViewModel.swift b/AutoCat/Screens/HistoryScreen/HistoryViewModel.swift index 62534eb..ab4cd6a 100644 --- a/AutoCat/Screens/HistoryScreen/HistoryViewModel.swift +++ b/AutoCat/Screens/HistoryScreen/HistoryViewModel.swift @@ -145,7 +145,7 @@ final class HistoryViewModel: ACHudContainer { if errors.isEmpty { hud = nil if !vehicle.unrecognized { - if UIDevice.isIPhone { + if Device.isIPhone { Router.shared.openLocalReport(vehicle: vehicle) } else { selectedVehicleId = vehicle.id @@ -204,7 +204,7 @@ final class HistoryViewModel: ACHudContainer { guard let self else { return } let vehicle = try await apiService.getReport(for: number) - if UIDevice.isIPhone { + if Device.isIPhone { Router.shared.openSharedReport(vehicle: vehicle) } else { vehicleToOpen = vehicle diff --git a/AutoCat/Screens/MainScreen/MainSplitScreen.swift b/AutoCat/Screens/MainScreen/MainSplitScreen.swift index b16767f..70035af 100644 --- a/AutoCat/Screens/MainScreen/MainSplitScreen.swift +++ b/AutoCat/Screens/MainScreen/MainSplitScreen.swift @@ -112,7 +112,7 @@ struct MainSplitScreen: View { } } } - .toolbar(.visible, for: .navigationBar) + //.toolbar(.visible, for: .navigationBar) } @ViewBuilder diff --git a/AutoCat/Screens/MainScreen/MainTabScreen.swift b/AutoCat/Screens/MainScreen/MainTabScreen.swift index 8afcb90..b3ff087 100644 --- a/AutoCat/Screens/MainScreen/MainTabScreen.swift +++ b/AutoCat/Screens/MainScreen/MainTabScreen.swift @@ -7,8 +7,6 @@ // import SwiftUI -import UIKit -import SwiftEntryKit import AutoCatCore struct MainTabScreen: View { diff --git a/AutoCat/Screens/MapScreen/MapScreen.swift b/AutoCat/Screens/MapScreen/MapScreen.swift index ae90ca6..b6adc02 100644 --- a/AutoCat/Screens/MapScreen/MapScreen.swift +++ b/AutoCat/Screens/MapScreen/MapScreen.swift @@ -40,7 +40,7 @@ struct MapScreen: View { } .hud($viewModel.hud) .navigationTitle(viewModel.title) - .navigationBarTitleDisplayMode(.inline) + .titleModeInline() .readSize { newValue in viewModel.mapSize = newValue } @@ -54,13 +54,13 @@ struct MapScreen: View { } .toolbar { if horizontalSizeClass == .regular { - ToolbarItem(placement: .topBarLeading) { + ToolbarItem(placement: .cancellationAction) { Button("Close") { dismiss() } } } } - .toolbar(.hidden, for: .tabBar) + .hideTabBar() } } diff --git a/AutoCat/Screens/NotesScreen/NotesScreen.swift b/AutoCat/Screens/NotesScreen/NotesScreen.swift index a4c749d..407a9ff 100644 --- a/AutoCat/Screens/NotesScreen/NotesScreen.swift +++ b/AutoCat/Screens/NotesScreen/NotesScreen.swift @@ -50,7 +50,7 @@ struct NotesScreen: View { } .listStyle(.inset) .navigationTitle("Notes") - .navigationBarTitleDisplayMode(.inline) + .titleModeInline() .toolbar { ToolbarItem(placement: .primaryAction) { Button { diff --git a/AutoCat/Screens/NotesScreen/NotesViewModel.swift b/AutoCat/Screens/NotesScreen/NotesViewModel.swift index a4e1cf0..f59f0ed 100644 --- a/AutoCat/Screens/NotesScreen/NotesViewModel.swift +++ b/AutoCat/Screens/NotesScreen/NotesViewModel.swift @@ -8,9 +8,16 @@ import Foundation import AutoCatCore -import UIKit import UniformTypeIdentifiers +#if canImport(UIKit) +import UIKit +#endif + +#if canImport(AppKit) +import AppKit +#endif + @MainActor @Observable class NotesViewModel: ACHudContainer { @@ -89,7 +96,11 @@ class NotesViewModel: ACHudContainer { func copyNote(_ note: VehicleNoteDto) { +#if !os(macOS) UIPasteboard.general.setValue(note.text, forPasteboardType: UTType.plainText.identifier) +#else + NSPasteboard.general.setString(note.text, forType: .string) +#endif } } diff --git a/AutoCat/Screens/RecordsScreen/RecordsScreen.swift b/AutoCat/Screens/RecordsScreen/RecordsScreen.swift index 1baaf1e..bc84e85 100644 --- a/AutoCat/Screens/RecordsScreen/RecordsScreen.swift +++ b/AutoCat/Screens/RecordsScreen/RecordsScreen.swift @@ -47,7 +47,7 @@ struct RecordsScreen: View { .listStyle(.inset) .hud($viewModel.hud) .navigationTitle("Voice records") - .navigationBarTitleDisplayMode(.inline) + .titleModeInline() .onAppear { Task { await viewModel.onAppear() } } diff --git a/AutoCat/Screens/ReportScreen/ReportScreen.swift b/AutoCat/Screens/ReportScreen/ReportScreen.swift index 3b79bf8..0328172 100644 --- a/AutoCat/Screens/ReportScreen/ReportScreen.swift +++ b/AutoCat/Screens/ReportScreen/ReportScreen.swift @@ -148,7 +148,7 @@ struct ReportScreen: View { GalleryScreen(photos: viewModel.vehicle.photos) } } - .toolbar(.hidden, for: .tabBar) + .hideTabBar() } @ViewBuilder diff --git a/AutoCat/Screens/SearchScreen/SearchScreen.swift b/AutoCat/Screens/SearchScreen/SearchScreen.swift index 27e0aed..73b9a6b 100644 --- a/AutoCat/Screens/SearchScreen/SearchScreen.swift +++ b/AutoCat/Screens/SearchScreen/SearchScreen.swift @@ -35,9 +35,8 @@ struct SearchScreen: View { .hud($viewModel.hud) .searchable(text: $viewModel.searchText, prompt: "Search plate numbers") .searchPresentationToolbarBehavior(.avoidHidingContent) - .disableAutocorrection(true) - .autocapitalization(.none) - .navigationBarTitleDisplayMode(.inline) + .makeTextFieldDumb() + .titleModeInline() .navigationTitle(String.localizedStringWithFormat(NSLocalizedString("vehicles found", comment: ""), viewModel.vehiclesCount)) .onAppear { @@ -47,7 +46,7 @@ struct SearchScreen: View { Task { await viewModel.reloadData() } } .toolbar { - ToolbarItem(placement: .topBarTrailing) { + ToolbarItem(placement: .primaryAction) { toolbarMenu } } @@ -68,7 +67,7 @@ struct SearchScreen: View { ForEach(viewModel.vehicleSections) { section in Section(header: Text(section.header)) { ForEach(section.elements) { vehicle in - if UIDevice.isIPhone { + if Device.isIPhone { NavigationLink(value: vehicle) { vehicleCell(vehicle) } diff --git a/AutoCat/Screens/SettingsScreen/SettingsScreen.swift b/AutoCat/Screens/SettingsScreen/SettingsScreen.swift index 6f45db8..7fe5364 100644 --- a/AutoCat/Screens/SettingsScreen/SettingsScreen.swift +++ b/AutoCat/Screens/SettingsScreen/SettingsScreen.swift @@ -80,7 +80,7 @@ struct SettingsScreen: View { } } .navigationTitle("Settings") - .navigationBarTitleDisplayMode(.inline) + .titleModeInline() .confirmationDialog(viewModel.googleUsername ?? "", isPresented: $googleSheetOpened, titleVisibility: .visible) { diff --git a/AutoCat/SwiftUI/CustomHostingController.swift b/AutoCat/SwiftUI/CustomHostingController.swift deleted file mode 100644 index 42ba917..0000000 --- a/AutoCat/SwiftUI/CustomHostingController.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// CustomHostingController.swift -// AutoCat -// -// Created by Selim Mustafaev on 27.07.2024. -// Copyright © 2024 Selim Mustafaev. All rights reserved. -// - -import UIKit -import SwiftUI - -final class CustomHostingController: UIHostingController { - - var continuation: CheckedContinuation? - - override func viewDidDisappear(_ animated: Bool) { - super.viewDidDisappear(animated) - - if isMovingFromParent || isBeingDismissed { - continuation?.resume() - } - } - - func waitForDisappear() async { - await withCheckedContinuation { continuation = $0 } - } -} diff --git a/AutoCat/SwiftUI/Modifiers/HideTabBarModifier.swift b/AutoCat/SwiftUI/Modifiers/HideTabBarModifier.swift new file mode 100644 index 0000000..f1cf528 --- /dev/null +++ b/AutoCat/SwiftUI/Modifiers/HideTabBarModifier.swift @@ -0,0 +1,30 @@ +// +// HideTabBarModifier.swift +// AutoCat +// +// Created by Selim Mustafaev on 30.04.2025. +// Copyright © 2025 Selim Mustafaev. All rights reserved. +// + +import SwiftUI + +struct HideTabBarModifier: ViewModifier { + + func body(content: Content) -> some View { + +#if os(macOS) + content +#else + content + .toolbar(.hidden, for: .tabBar) +#endif + } +} + +extension View { + + func hideTabBar() -> some View { + + modifier(HideTabBarModifier()) + } +} diff --git a/AutoCat/SwiftUI/Modifiers/TextFieldDumbModifier.swift b/AutoCat/SwiftUI/Modifiers/TextFieldDumbModifier.swift new file mode 100644 index 0000000..01ec542 --- /dev/null +++ b/AutoCat/SwiftUI/Modifiers/TextFieldDumbModifier.swift @@ -0,0 +1,32 @@ +// +// TextFieldDumbModifier.swift +// AutoCat +// +// Created by Selim Mustafaev on 30.04.2025. +// Copyright © 2025 Selim Mustafaev. All rights reserved. +// + +import SwiftUI + +struct TextFieldDumbModifier: ViewModifier { + + func body(content: Content) -> some View { + +#if os(macOS) + content + .disableAutocorrection(true) +#else + content + .disableAutocorrection(true) + .autocapitalization(.none) +#endif + } +} + +extension View { + + func makeTextFieldDumb() -> some View { + + modifier(TextFieldDumbModifier()) + } +} diff --git a/AutoCat/SwiftUI/Modifiers/TitleModeInlineModifier.swift b/AutoCat/SwiftUI/Modifiers/TitleModeInlineModifier.swift new file mode 100644 index 0000000..cb2e7eb --- /dev/null +++ b/AutoCat/SwiftUI/Modifiers/TitleModeInlineModifier.swift @@ -0,0 +1,30 @@ +// +// TitleModeInlineModifier.swift +// AutoCat +// +// Created by Selim Mustafaev on 30.04.2025. +// Copyright © 2025 Selim Mustafaev. All rights reserved. +// + +import SwiftUI + +struct TitleModeInlineModifier: ViewModifier { + + func body(content: Content) -> some View { + +#if os(macOS) + content +#else + content + .navigationBarTitleDisplayMode(.inline) +#endif + } +} + +extension View { + + func titleModeInline() -> some View { + + modifier(TitleModeInlineModifier()) + } +} diff --git a/AutoCat/SwiftUI/NumberEditView/NumberEditView.swift b/AutoCat/SwiftUI/NumberEditView/NumberEditView.swift index 435aadb..9a171a8 100644 --- a/AutoCat/SwiftUI/NumberEditView/NumberEditView.swift +++ b/AutoCat/SwiftUI/NumberEditView/NumberEditView.swift @@ -19,7 +19,6 @@ struct NumberEditView: View { VStack(spacing: 16) { Text("Check number") .font(.headline) - //.padding(.top, 24) HStack(spacing: 16) { LicensePlateView(number: number, foreground: .primary) diff --git a/AutoCat/SwiftUI/UISearchTextField+Dumb.swift b/AutoCat/SwiftUI/UISearchTextField+Dumb.swift index 4ca2b23..7436a80 100644 --- a/AutoCat/SwiftUI/UISearchTextField+Dumb.swift +++ b/AutoCat/SwiftUI/UISearchTextField+Dumb.swift @@ -6,7 +6,15 @@ // Copyright © 2025 Selim Mustafaev. All rights reserved. // +#if canImport(UIKit) import UIKit +#endif + +#if canImport(AppKit) +import AppKit +#endif + +#if !os(macOS) extension UISearchTextField { @@ -22,3 +30,5 @@ extension UISearchTextField { } } } + +#endif diff --git a/AutoCat/SwiftUI/VehicleCellView.swift b/AutoCat/SwiftUI/VehicleCellView.swift index b4cfabb..383718c 100644 --- a/AutoCat/SwiftUI/VehicleCellView.swift +++ b/AutoCat/SwiftUI/VehicleCellView.swift @@ -61,9 +61,9 @@ struct VehicleCellView: View { func getForegroundColor() -> Color { if vehicle.unrecognized { - Color(UIColor.systemRed) + .red } else if vehicle.outdated { - Color(UIColor.systemGray3) + Color("PlateForegroundGray") } else { Color("PlateForeground") } diff --git a/AutoCatCore/Services/AudioRecordService/AudioRecordService.swift b/AutoCatCore/Services/AudioRecordService/AudioRecordService.swift index ec7a6f2..f642bb8 100644 --- a/AutoCatCore/Services/AudioRecordService/AudioRecordService.swift +++ b/AutoCatCore/Services/AudioRecordService/AudioRecordService.swift @@ -66,8 +66,10 @@ extension AudioRecordService: AudioRecordServiceProtocol { throw AudioRecordError.unknown } +#if !os(macOS) try AVAudioSession.sharedInstance().setCategory(.playAndRecord) try AVAudioSession.sharedInstance().setActive(true) +#endif recorder = try AVAudioRecorder(url: url, settings: audioFileSettings) recorder?.record() diff --git a/AutoCatCore/Services/RecordPlayerService/RecordPlayerService.swift b/AutoCatCore/Services/RecordPlayerService/RecordPlayerService.swift index 0271f01..2612568 100644 --- a/AutoCatCore/Services/RecordPlayerService/RecordPlayerService.swift +++ b/AutoCatCore/Services/RecordPlayerService/RecordPlayerService.swift @@ -33,11 +33,14 @@ public final class RecordPlayerService: NSObject { activateProgressTimer() self.onProgress = onProgress +#if !os(macOS) try activateSession() +#endif player?.play() } +#if !os(macOS) func activateSession() throws { try AVAudioSession.sharedInstance().setCategory( .playback, @@ -53,6 +56,7 @@ public final class RecordPlayerService: NSObject { options: .notifyOthersOnDeactivation ) } +#endif func activateProgressTimer() { @@ -87,9 +91,13 @@ extension RecordPlayerService: RecordPlayerServiceProtocol { if player.isPlaying { player.pause() deactivateProgressTimer() +#if !os(macOS) try deactivateSession() +#endif } else { +#if !os(macOS) try activateSession() +#endif activateProgressTimer() player.play() } @@ -131,6 +139,8 @@ extension RecordPlayerService: AVAudioPlayerDelegate { record = nil deactivateProgressTimer() +#if !os(macOS) try? deactivateSession() +#endif } }