From 49132879152b3b5b6b0bced63623f18b608ab264 Mon Sep 17 00:00:00 2001 From: Daniel Saidi Date: Wed, 7 Jun 2023 16:06:00 +0200 Subject: [PATCH] Remove demo folder --- Demo/.swiftlint.yml | 12 - Demo/Demo.xcodeproj/project.pbxproj | 888 ------------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/swiftpm/Package.resolved | 68 -- .../UserInterfaceState.xcuserstate | Bin 258861 -> 0 bytes .../xcschemes/Demo (iOS).xcscheme | 78 -- .../xcdebugger/Breakpoints_v2.xcbkptlist | 6 - .../xcschemes/xcschememanagement.plist | 27 - .../Authentication/AuthenticationScreen.swift | 40 - ...BiometricAuthenticationServiceScreen.swift | 63 -- ...chedAuthenticationServiceProxyScreen.swift | 74 -- .../Shared/Data/Base64StringCoderScreen.swift | 46 - Demo/Shared/Data/DataScreen.swift | 38 - Demo/Shared/Data/Persons.csv | 5 - .../Shared/Data/StandardCsvParserScreen.swift | 60 -- Demo/Shared/Date/DateScreen.swift | 65 -- Demo/Shared/Demo/ContentView.swift | 90 -- Demo/Shared/Demo/DemoApp.swift | 19 - .../Device/DeviceIdentifierScreen.swift | 58 -- Demo/Shared/Device/DeviceScreen.swift | 35 - Demo/Shared/Extensions/ExtensionsScreen.swift | 31 - .../Shared/Files/DirectoryServiceScreen.swift | 91 -- Demo/Shared/Files/FileFinderScreen.swift | 58 -- Demo/Shared/Files/FilesScreen.swift | 38 - .../Geo/ExternalMapServicesScreen.swift | 74 -- Demo/Shared/Geo/GeoScreen.swift | 38 - Demo/Shared/Geo/WorldCoordinateScreen.swift | 52 - Demo/Shared/Keychain/KeychainScreen.swift | 35 - .../Keychain/KeychainServiceScreen.swift | 131 --- .../Localization/LocalizationScreen.swift | 38 - .../LocalizationServiceScreen.swift | 73 -- .../Localization/TranslatorScreen.swift | 52 - Demo/Shared/Network/NetworkScreen.swift | 31 - .../AccentColor.colorset/Contents.json | 20 - .../AppIcon.appiconset/Contents.json | 176 ---- .../AppIcon.appiconset/Icon-1024.png | Bin 556185 -> 0 bytes .../AppIcon.appiconset/Icon-120.png | Bin 18404 -> 0 bytes .../AppIcon.appiconset/Icon-128.png | Bin 20740 -> 0 bytes .../AppIcon.appiconset/Icon-152.png | Bin 26736 -> 0 bytes .../AppIcon.appiconset/Icon-16.png | Bin 814 -> 0 bytes .../AppIcon.appiconset/Icon-167.png | Bin 31152 -> 0 bytes .../AppIcon.appiconset/Icon-180.png | Bin 35400 -> 0 bytes .../AppIcon.appiconset/Icon-20.png | Bin 1118 -> 0 bytes .../AppIcon.appiconset/Icon-256.png | Bin 60722 -> 0 bytes .../AppIcon.appiconset/Icon-29.png | Bin 1925 -> 0 bytes .../AppIcon.appiconset/Icon-32.png | Bin 2235 -> 0 bytes .../AppIcon.appiconset/Icon-40.png | Bin 3146 -> 0 bytes .../AppIcon.appiconset/Icon-512.png | Bin 179042 -> 0 bytes .../AppIcon.appiconset/Icon-58.png | Bin 5863 -> 0 bytes .../AppIcon.appiconset/Icon-60.png | Bin 6180 -> 0 bytes .../AppIcon.appiconset/Icon-64.png | Bin 6965 -> 0 bytes .../AppIcon.appiconset/Icon-76.png | Bin 8940 -> 0 bytes .../AppIcon.appiconset/Icon-80.png | Bin 9787 -> 0 bytes .../AppIcon.appiconset/Icon-87.png | Bin 11053 -> 0 bytes Demo/Shared/Resources/Color+Demo.swift | 18 - Demo/Shared/Resources/Files/File1.txt | 1 - Demo/Shared/Resources/Files/File2.pdf | 1 - Demo/Shared/Resources/Files/File3.gif | 1 - Demo/Shared/Resources/Files/File4.txt | 1 - Demo/Shared/Resources/Files/File5.jpg | 1 - Demo/Shared/Resources/Image+Demo.swift | 39 - Demo/Shared/Services/ServicesScreen.swift | 31 - Demo/Shared/en.lproj/Localizable.strings | 10 - Demo/Shared/sv.lproj/Localizable.strings | 10 - Demo/iOS/Info.plist | 54 -- Demo/macOS/Info.plist | 28 - Demo/macOS/macOS.entitlements | 10 - Release Notes.md | 8 +- Resources/Icon.sketch | Bin 677154 -> 0 bytes Resources/Logo_solid.png | Bin 0 -> 385529 bytes .../Authentication/Authentication.swift | 2 +- .../Authentication/LAContext+Async.swift | 2 +- .../Extensions/String/String+UrlEncode.swift | 28 +- Sources/SwiftKit/Network/ApiEnvironment.swift | 18 - Sources/SwiftKit/Network/ApiService.swift | 5 +- .../_Deprecated/Network/ApiEnvironment.swift | 7 + .../{ => _Deprecated}/Network/ApiRoute.swift | 20 +- .../Network/HttpMethod.swift | 13 +- .../SwiftKitTests/Network/ApiRouteTests.swift | 88 -- .../Network/HttpMethodTests.swift | 35 - 81 files changed, 45 insertions(+), 3011 deletions(-) delete mode 100644 Demo/.swiftlint.yml delete mode 100644 Demo/Demo.xcodeproj/project.pbxproj delete mode 100644 Demo/Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 Demo/Demo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 Demo/Demo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved delete mode 100644 Demo/Demo.xcodeproj/project.xcworkspace/xcuserdata/danielsaidi.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 Demo/Demo.xcodeproj/xcshareddata/xcschemes/Demo (iOS).xcscheme delete mode 100644 Demo/Demo.xcodeproj/xcuserdata/danielsaidi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist delete mode 100644 Demo/Demo.xcodeproj/xcuserdata/danielsaidi.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 Demo/Shared/Authentication/AuthenticationScreen.swift delete mode 100644 Demo/Shared/Authentication/BiometricAuthenticationServiceScreen.swift delete mode 100644 Demo/Shared/Authentication/CachedAuthenticationServiceProxyScreen.swift delete mode 100644 Demo/Shared/Data/Base64StringCoderScreen.swift delete mode 100644 Demo/Shared/Data/DataScreen.swift delete mode 100644 Demo/Shared/Data/Persons.csv delete mode 100644 Demo/Shared/Data/StandardCsvParserScreen.swift delete mode 100644 Demo/Shared/Date/DateScreen.swift delete mode 100644 Demo/Shared/Demo/ContentView.swift delete mode 100644 Demo/Shared/Demo/DemoApp.swift delete mode 100644 Demo/Shared/Device/DeviceIdentifierScreen.swift delete mode 100644 Demo/Shared/Device/DeviceScreen.swift delete mode 100644 Demo/Shared/Extensions/ExtensionsScreen.swift delete mode 100644 Demo/Shared/Files/DirectoryServiceScreen.swift delete mode 100644 Demo/Shared/Files/FileFinderScreen.swift delete mode 100644 Demo/Shared/Files/FilesScreen.swift delete mode 100644 Demo/Shared/Geo/ExternalMapServicesScreen.swift delete mode 100644 Demo/Shared/Geo/GeoScreen.swift delete mode 100644 Demo/Shared/Geo/WorldCoordinateScreen.swift delete mode 100644 Demo/Shared/Keychain/KeychainScreen.swift delete mode 100644 Demo/Shared/Keychain/KeychainServiceScreen.swift delete mode 100644 Demo/Shared/Localization/LocalizationScreen.swift delete mode 100644 Demo/Shared/Localization/LocalizationServiceScreen.swift delete mode 100644 Demo/Shared/Localization/TranslatorScreen.swift delete mode 100644 Demo/Shared/Network/NetworkScreen.swift delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AccentColor.colorset/Contents.json delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-1024.png delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-120.png delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-128.png delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-152.png delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-16.png delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-167.png delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-180.png delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-20.png delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-256.png delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-29.png delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-32.png delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-40.png delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-512.png delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-58.png delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-60.png delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-64.png delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-76.png delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-80.png delete mode 100644 Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-87.png delete mode 100644 Demo/Shared/Resources/Color+Demo.swift delete mode 100644 Demo/Shared/Resources/Files/File1.txt delete mode 100644 Demo/Shared/Resources/Files/File2.pdf delete mode 100644 Demo/Shared/Resources/Files/File3.gif delete mode 100644 Demo/Shared/Resources/Files/File4.txt delete mode 100644 Demo/Shared/Resources/Files/File5.jpg delete mode 100644 Demo/Shared/Resources/Image+Demo.swift delete mode 100644 Demo/Shared/Services/ServicesScreen.swift delete mode 100644 Demo/Shared/en.lproj/Localizable.strings delete mode 100644 Demo/Shared/sv.lproj/Localizable.strings delete mode 100644 Demo/iOS/Info.plist delete mode 100644 Demo/macOS/Info.plist delete mode 100644 Demo/macOS/macOS.entitlements delete mode 100644 Resources/Icon.sketch create mode 100644 Resources/Logo_solid.png delete mode 100644 Sources/SwiftKit/Network/ApiEnvironment.swift create mode 100644 Sources/SwiftKit/_Deprecated/Network/ApiEnvironment.swift rename Sources/SwiftKit/{ => _Deprecated}/Network/ApiRoute.swift (90%) rename Sources/SwiftKit/{ => _Deprecated}/Network/HttpMethod.swift (51%) delete mode 100644 Tests/SwiftKitTests/Network/ApiRouteTests.swift delete mode 100644 Tests/SwiftKitTests/Network/HttpMethodTests.swift diff --git a/Demo/.swiftlint.yml b/Demo/.swiftlint.yml deleted file mode 100644 index 2b13475..0000000 --- a/Demo/.swiftlint.yml +++ /dev/null @@ -1,12 +0,0 @@ -disabled_rules: - - identifier_name - - line_length - - nesting - - todo - - trailing_whitespace - - type_name - - vertical_whitespace - -included: - - ../Sources - - ../Tests diff --git a/Demo/Demo.xcodeproj/project.pbxproj b/Demo/Demo.xcodeproj/project.pbxproj deleted file mode 100644 index 62bd4ce..0000000 --- a/Demo/Demo.xcodeproj/project.pbxproj +++ /dev/null @@ -1,888 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 52; - objects = { - -/* Begin PBXBuildFile section */ - A90CD6A3257E2403008A1749 /* DateScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A90CD6A2257E2403008A1749 /* DateScreen.swift */; }; - A90CD6A8257E2412008A1749 /* DateScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A90CD6A2257E2403008A1749 /* DateScreen.swift */; }; - A90CD6AB257E241B008A1749 /* Persons.csv in Resources */ = {isa = PBXBuildFile; fileRef = A9544D772574CAFC00522141 /* Persons.csv */; }; - A90CD6AC257E241B008A1749 /* DataScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9544D5E2574C51A00522141 /* DataScreen.swift */; }; - A90CD6AD257E241B008A1749 /* Base64StringCoderScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9544D6F2574C81700522141 /* Base64StringCoderScreen.swift */; }; - A90CD6AE257E241B008A1749 /* StandardCsvParserScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9544D732574C82300522141 /* StandardCsvParserScreen.swift */; }; - A90CD6B3257E2E6E008A1749 /* DeviceScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A90CD6B2257E2E6E008A1749 /* DeviceScreen.swift */; }; - A90CD6B7257E3343008A1749 /* DeviceIdentifierScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A90CD6B6257E3343008A1749 /* DeviceIdentifierScreen.swift */; }; - A90CD6BA257E334A008A1749 /* DeviceIdentifierScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A90CD6B6257E3343008A1749 /* DeviceIdentifierScreen.swift */; }; - A9544BD62571CBC900522141 /* DemoApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9544BC32571CBC800522141 /* DemoApp.swift */; }; - A9544BD72571CBC900522141 /* DemoApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9544BC32571CBC800522141 /* DemoApp.swift */; }; - A9544BD82571CBC900522141 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9544BC42571CBC800522141 /* ContentView.swift */; }; - A9544BD92571CBC900522141 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9544BC42571CBC800522141 /* ContentView.swift */; }; - A9544BDA2571CBC900522141 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A9544BC52571CBC900522141 /* Assets.xcassets */; }; - A9544BDB2571CBC900522141 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A9544BC52571CBC900522141 /* Assets.xcassets */; }; - A9544C0F2571CD6B00522141 /* Image+Demo.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9544C0E2571CD6B00522141 /* Image+Demo.swift */; }; - A9544C102571CD6B00522141 /* Image+Demo.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9544C0E2571CD6B00522141 /* Image+Demo.swift */; }; - A9544D3B2574446A00522141 /* AuthenticationScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9544D3A2574446A00522141 /* AuthenticationScreen.swift */; }; - A9544D3C2574446A00522141 /* AuthenticationScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9544D3A2574446A00522141 /* AuthenticationScreen.swift */; }; - A9544D42257444DE00522141 /* BiometricAuthenticationServiceScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9544D41257444DE00522141 /* BiometricAuthenticationServiceScreen.swift */; }; - A9544D43257444DE00522141 /* BiometricAuthenticationServiceScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9544D41257444DE00522141 /* BiometricAuthenticationServiceScreen.swift */; }; - A9544D492574450600522141 /* CachedAuthenticationServiceProxyScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9544D482574450600522141 /* CachedAuthenticationServiceProxyScreen.swift */; }; - A9544D4A2574450600522141 /* CachedAuthenticationServiceProxyScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9544D482574450600522141 /* CachedAuthenticationServiceProxyScreen.swift */; }; - A9544D53257455CA00522141 /* SwiftUIKit in Frameworks */ = {isa = PBXBuildFile; productRef = A9544D52257455CA00522141 /* SwiftUIKit */; }; - A9544D58257455DA00522141 /* SwiftUIKit in Frameworks */ = {isa = PBXBuildFile; productRef = A9544D57257455DA00522141 /* SwiftUIKit */; }; - A9544D5F2574C51A00522141 /* DataScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9544D5E2574C51A00522141 /* DataScreen.swift */; }; - A9544D702574C81700522141 /* Base64StringCoderScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9544D6F2574C81700522141 /* Base64StringCoderScreen.swift */; }; - A9544D742574C82300522141 /* StandardCsvParserScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9544D732574C82300522141 /* StandardCsvParserScreen.swift */; }; - A9544D782574CAFC00522141 /* Persons.csv in Resources */ = {isa = PBXBuildFile; fileRef = A9544D772574CAFC00522141 /* Persons.csv */; }; - A971DC532860ABEE00F30DEF /* SwiftKit in Frameworks */ = {isa = PBXBuildFile; productRef = A971DC522860ABEE00F30DEF /* SwiftKit */; }; - A971DC552860ABF200F30DEF /* SwiftKit in Frameworks */ = {isa = PBXBuildFile; productRef = A971DC542860ABF200F30DEF /* SwiftKit */; }; - A982781B257E523B0006D64F /* ExtensionsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A982781A257E523B0006D64F /* ExtensionsScreen.swift */; }; - A982781E257E52680006D64F /* ExtensionsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A982781A257E523B0006D64F /* ExtensionsScreen.swift */; }; - A9827825257E53510006D64F /* FilesScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9827824257E53510006D64F /* FilesScreen.swift */; }; - A9827835257E54EA0006D64F /* FilesScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9827824257E53510006D64F /* FilesScreen.swift */; }; - A982783B257E55000006D64F /* FileFinderScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A982783A257E55000006D64F /* FileFinderScreen.swift */; }; - A982783C257E55000006D64F /* FileFinderScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A982783A257E55000006D64F /* FileFinderScreen.swift */; }; - A9827840257E550B0006D64F /* DirectoryServiceScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A982783F257E550B0006D64F /* DirectoryServiceScreen.swift */; }; - A9827841257E550B0006D64F /* DirectoryServiceScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A982783F257E550B0006D64F /* DirectoryServiceScreen.swift */; }; - A9827848257E5B060006D64F /* File1.txt in Resources */ = {isa = PBXBuildFile; fileRef = A9827847257E5B060006D64F /* File1.txt */; }; - A9827849257E5B060006D64F /* File1.txt in Resources */ = {isa = PBXBuildFile; fileRef = A9827847257E5B060006D64F /* File1.txt */; }; - A9827850257E5B2A0006D64F /* File5.jpg in Resources */ = {isa = PBXBuildFile; fileRef = A982784C257E5B290006D64F /* File5.jpg */; }; - A9827851257E5B2A0006D64F /* File5.jpg in Resources */ = {isa = PBXBuildFile; fileRef = A982784C257E5B290006D64F /* File5.jpg */; }; - A9827852257E5B2A0006D64F /* File4.txt in Resources */ = {isa = PBXBuildFile; fileRef = A982784D257E5B290006D64F /* File4.txt */; }; - A9827853257E5B2A0006D64F /* File4.txt in Resources */ = {isa = PBXBuildFile; fileRef = A982784D257E5B290006D64F /* File4.txt */; }; - A9827854257E5B2A0006D64F /* File2.pdf in Resources */ = {isa = PBXBuildFile; fileRef = A982784E257E5B290006D64F /* File2.pdf */; }; - A9827855257E5B2A0006D64F /* File2.pdf in Resources */ = {isa = PBXBuildFile; fileRef = A982784E257E5B290006D64F /* File2.pdf */; }; - A9827856257E5B2A0006D64F /* File3.gif in Resources */ = {isa = PBXBuildFile; fileRef = A982784F257E5B2A0006D64F /* File3.gif */; }; - A9827857257E5B2A0006D64F /* File3.gif in Resources */ = {isa = PBXBuildFile; fileRef = A982784F257E5B2A0006D64F /* File3.gif */; }; - A982786A257E5D550006D64F /* GeoScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9827869257E5D550006D64F /* GeoScreen.swift */; }; - A982786B257E5D550006D64F /* GeoScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9827869257E5D550006D64F /* GeoScreen.swift */; }; - A9827871257E5DE80006D64F /* WorldCoordinateScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9827870257E5DE80006D64F /* WorldCoordinateScreen.swift */; }; - A9827872257E5DE80006D64F /* WorldCoordinateScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9827870257E5DE80006D64F /* WorldCoordinateScreen.swift */; }; - A9827876257E5E0E0006D64F /* ExternalMapServicesScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9827875257E5E0E0006D64F /* ExternalMapServicesScreen.swift */; }; - A9827877257E5E0E0006D64F /* ExternalMapServicesScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9827875257E5E0E0006D64F /* ExternalMapServicesScreen.swift */; }; - A9827885257E67080006D64F /* KeychainScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9827884257E67080006D64F /* KeychainScreen.swift */; }; - A9827886257E67080006D64F /* KeychainScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9827884257E67080006D64F /* KeychainScreen.swift */; }; - A982788C257E67660006D64F /* KeychainServiceScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A982788B257E67660006D64F /* KeychainServiceScreen.swift */; }; - A982788D257E67660006D64F /* KeychainServiceScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A982788B257E67660006D64F /* KeychainServiceScreen.swift */; }; - A9827892257E73D40006D64F /* LocalizationScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9827891257E73D40006D64F /* LocalizationScreen.swift */; }; - A9827893257E73D40006D64F /* LocalizationScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9827891257E73D40006D64F /* LocalizationScreen.swift */; }; - A9827897257E74040006D64F /* LocalizationServiceScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9827896257E74040006D64F /* LocalizationServiceScreen.swift */; }; - A9827898257E74040006D64F /* LocalizationServiceScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9827896257E74040006D64F /* LocalizationServiceScreen.swift */; }; - A982789C257E740E0006D64F /* TranslatorScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A982789B257E740E0006D64F /* TranslatorScreen.swift */; }; - A982789D257E740E0006D64F /* TranslatorScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A982789B257E740E0006D64F /* TranslatorScreen.swift */; }; - A98278A0257E74440006D64F /* DeviceScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A90CD6B2257E2E6E008A1749 /* DeviceScreen.swift */; }; - A98278A8257E76940006D64F /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = A98278AB257E76940006D64F /* Localizable.strings */; }; - A98278A9257E76940006D64F /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = A98278AB257E76940006D64F /* Localizable.strings */; }; - A98278B6257E7AC20006D64F /* NetworkScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A98278B5257E7AC20006D64F /* NetworkScreen.swift */; }; - A98278B7257E7AC20006D64F /* NetworkScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A98278B5257E7AC20006D64F /* NetworkScreen.swift */; }; - A98278BC257E7B3D0006D64F /* ServicesScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A98278BB257E7B3D0006D64F /* ServicesScreen.swift */; }; - A98278BD257E7B3D0006D64F /* ServicesScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A98278BB257E7B3D0006D64F /* ServicesScreen.swift */; }; - A98278D3257E83250006D64F /* Color+Demo.swift in Sources */ = {isa = PBXBuildFile; fileRef = A98278D2257E83250006D64F /* Color+Demo.swift */; }; - A98278D4257E83250006D64F /* Color+Demo.swift in Sources */ = {isa = PBXBuildFile; fileRef = A98278D2257E83250006D64F /* Color+Demo.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - A90CD6A2257E2403008A1749 /* DateScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateScreen.swift; sourceTree = ""; }; - A90CD6B2257E2E6E008A1749 /* DeviceScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceScreen.swift; sourceTree = ""; }; - A90CD6B6257E3343008A1749 /* DeviceIdentifierScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceIdentifierScreen.swift; sourceTree = ""; }; - A9544BC32571CBC800522141 /* DemoApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DemoApp.swift; sourceTree = ""; }; - A9544BC42571CBC800522141 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; - A9544BC52571CBC900522141 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - A9544BCA2571CBC900522141 /* Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Demo.app; sourceTree = BUILT_PRODUCTS_DIR; }; - A9544BCD2571CBC900522141 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A9544BD22571CBC900522141 /* Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Demo.app; sourceTree = BUILT_PRODUCTS_DIR; }; - A9544BD42571CBC900522141 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A9544BD52571CBC900522141 /* macOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = macOS.entitlements; sourceTree = ""; }; - A9544BEB2571CC4900522141 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; - A9544BEC2571CC4900522141 /* Package.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Package.swift; path = ../Package.swift; sourceTree = ""; }; - A9544BED2571CC4900522141 /* Release Notes.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = "Release Notes.md"; path = "../Release Notes.md"; sourceTree = ""; }; - A9544BEE2571CC4900522141 /* Package.resolved */ = {isa = PBXFileReference; lastKnownFileType = text; name = Package.resolved; path = ../Package.resolved; sourceTree = ""; }; - A9544BEF2571CC4900522141 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; - A9544BF02571CC4900522141 /* DSSwiftKit.podspec */ = {isa = PBXFileReference; lastKnownFileType = text; name = DSSwiftKit.podspec; path = ../DSSwiftKit.podspec; sourceTree = ""; }; - A9544BF12571CC5800522141 /* .swiftlint.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; name = .swiftlint.yml; path = ../.swiftlint.yml; sourceTree = ""; }; - A9544BF22571CC5800522141 /* .gitignore */ = {isa = PBXFileReference; lastKnownFileType = text; name = .gitignore; path = ../.gitignore; sourceTree = ""; }; - A9544C0E2571CD6B00522141 /* Image+Demo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Image+Demo.swift"; sourceTree = ""; }; - A9544D3A2574446A00522141 /* AuthenticationScreen.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthenticationScreen.swift; sourceTree = ""; }; - A9544D41257444DE00522141 /* BiometricAuthenticationServiceScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BiometricAuthenticationServiceScreen.swift; sourceTree = ""; }; - A9544D482574450600522141 /* CachedAuthenticationServiceProxyScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CachedAuthenticationServiceProxyScreen.swift; sourceTree = ""; }; - A9544D5E2574C51A00522141 /* DataScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataScreen.swift; sourceTree = ""; }; - A9544D6F2574C81700522141 /* Base64StringCoderScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Base64StringCoderScreen.swift; sourceTree = ""; }; - A9544D732574C82300522141 /* StandardCsvParserScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StandardCsvParserScreen.swift; sourceTree = ""; }; - A9544D772574CAFC00522141 /* Persons.csv */ = {isa = PBXFileReference; lastKnownFileType = text; path = Persons.csv; sourceTree = ""; }; - A971DC512860ABD600F30DEF /* swiftkit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = swiftkit; path = ..; sourceTree = ""; }; - A982781A257E523B0006D64F /* ExtensionsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionsScreen.swift; sourceTree = ""; }; - A9827824257E53510006D64F /* FilesScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilesScreen.swift; sourceTree = ""; }; - A982783A257E55000006D64F /* FileFinderScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileFinderScreen.swift; sourceTree = ""; }; - A982783F257E550B0006D64F /* DirectoryServiceScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DirectoryServiceScreen.swift; sourceTree = ""; }; - A9827847257E5B060006D64F /* File1.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = File1.txt; sourceTree = ""; }; - A982784C257E5B290006D64F /* File5.jpg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = image.jpeg; path = File5.jpg; sourceTree = ""; }; - A982784D257E5B290006D64F /* File4.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = File4.txt; sourceTree = ""; }; - A982784E257E5B290006D64F /* File2.pdf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = image.pdf; path = File2.pdf; sourceTree = ""; }; - A982784F257E5B2A0006D64F /* File3.gif */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = image.gif; path = File3.gif; sourceTree = ""; }; - A9827869257E5D550006D64F /* GeoScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeoScreen.swift; sourceTree = ""; }; - A9827870257E5DE80006D64F /* WorldCoordinateScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorldCoordinateScreen.swift; sourceTree = ""; }; - A9827875257E5E0E0006D64F /* ExternalMapServicesScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExternalMapServicesScreen.swift; sourceTree = ""; }; - A9827884257E67080006D64F /* KeychainScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainScreen.swift; sourceTree = ""; }; - A982788B257E67660006D64F /* KeychainServiceScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainServiceScreen.swift; sourceTree = ""; }; - A9827891257E73D40006D64F /* LocalizationScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalizationScreen.swift; sourceTree = ""; }; - A9827896257E74040006D64F /* LocalizationServiceScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalizationServiceScreen.swift; sourceTree = ""; }; - A982789B257E740E0006D64F /* TranslatorScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TranslatorScreen.swift; sourceTree = ""; }; - A98278AA257E76940006D64F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - A98278AE257E76A50006D64F /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; - A98278B5257E7AC20006D64F /* NetworkScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkScreen.swift; sourceTree = ""; }; - A98278BB257E7B3D0006D64F /* ServicesScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServicesScreen.swift; sourceTree = ""; }; - A98278D2257E83250006D64F /* Color+Demo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Color+Demo.swift"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - A9544BC72571CBC900522141 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - A9544D53257455CA00522141 /* SwiftUIKit in Frameworks */, - A971DC532860ABEE00F30DEF /* SwiftKit in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A9544BCF2571CBC900522141 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - A9544D58257455DA00522141 /* SwiftUIKit in Frameworks */, - A971DC552860ABF200F30DEF /* SwiftKit in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - A90CD6A1257E23F7008A1749 /* Date */ = { - isa = PBXGroup; - children = ( - A90CD6A2257E2403008A1749 /* DateScreen.swift */, - ); - path = Date; - sourceTree = ""; - }; - A90CD6B1257E2E5E008A1749 /* Device */ = { - isa = PBXGroup; - children = ( - A90CD6B2257E2E6E008A1749 /* DeviceScreen.swift */, - A90CD6B6257E3343008A1749 /* DeviceIdentifierScreen.swift */, - ); - path = Device; - sourceTree = ""; - }; - A9544BBD2571CBC800522141 = { - isa = PBXGroup; - children = ( - A971DC502860ABD600F30DEF /* Packages */, - A9544BCC2571CBC900522141 /* iOS */, - A9544BD32571CBC900522141 /* macOS */, - A9544BC22571CBC800522141 /* Shared */, - A9544BCB2571CBC900522141 /* Products */, - A9544BEA2571CC3200522141 /* Project Files */, - A9544D56257455DA00522141 /* Frameworks */, - ); - sourceTree = ""; - }; - A9544BC22571CBC800522141 /* Shared */ = { - isa = PBXGroup; - children = ( - A9544D392574445900522141 /* Authentication */, - A9544D5D2574C50700522141 /* Data */, - A90CD6A1257E23F7008A1749 /* Date */, - A9544BF32571CCB600522141 /* Demo */, - A90CD6B1257E2E5E008A1749 /* Device */, - A9827819257E522E0006D64F /* Extensions */, - A9827823257E53440006D64F /* Files */, - A9827868257E5D4B0006D64F /* Geo */, - A9827882257E66F20006D64F /* Keychain */, - A9827890257E73C80006D64F /* Localization */, - A98278B4257E7AB50006D64F /* Network */, - A9544BF82571CCC800522141 /* Resources */, - A98278BA257E7B310006D64F /* Services */, - A98278B1257E79690006D64F /* Supporting Files */, - ); - path = Shared; - sourceTree = ""; - }; - A9544BCB2571CBC900522141 /* Products */ = { - isa = PBXGroup; - children = ( - A9544BCA2571CBC900522141 /* Demo.app */, - A9544BD22571CBC900522141 /* Demo.app */, - ); - name = Products; - sourceTree = ""; - }; - A9544BCC2571CBC900522141 /* iOS */ = { - isa = PBXGroup; - children = ( - A9544BCD2571CBC900522141 /* Info.plist */, - ); - path = iOS; - sourceTree = ""; - }; - A9544BD32571CBC900522141 /* macOS */ = { - isa = PBXGroup; - children = ( - A9544BD42571CBC900522141 /* Info.plist */, - A9544BD52571CBC900522141 /* macOS.entitlements */, - ); - path = macOS; - sourceTree = ""; - }; - A9544BEA2571CC3200522141 /* Project Files */ = { - isa = PBXGroup; - children = ( - A9544BF22571CC5800522141 /* .gitignore */, - A9544BF12571CC5800522141 /* .swiftlint.yml */, - A9544BF02571CC4900522141 /* DSSwiftKit.podspec */, - A9544BEB2571CC4900522141 /* LICENSE */, - A9544BEE2571CC4900522141 /* Package.resolved */, - A9544BEC2571CC4900522141 /* Package.swift */, - A9544BEF2571CC4900522141 /* README.md */, - A9544BED2571CC4900522141 /* Release Notes.md */, - ); - name = "Project Files"; - sourceTree = ""; - }; - A9544BF32571CCB600522141 /* Demo */ = { - isa = PBXGroup; - children = ( - A9544BC42571CBC800522141 /* ContentView.swift */, - A9544BC32571CBC800522141 /* DemoApp.swift */, - ); - path = Demo; - sourceTree = ""; - }; - A9544BF82571CCC800522141 /* Resources */ = { - isa = PBXGroup; - children = ( - A9544BC52571CBC900522141 /* Assets.xcassets */, - A9827846257E5AE30006D64F /* Files */, - A9544C0E2571CD6B00522141 /* Image+Demo.swift */, - A98278D2257E83250006D64F /* Color+Demo.swift */, - ); - path = Resources; - sourceTree = ""; - }; - A9544D392574445900522141 /* Authentication */ = { - isa = PBXGroup; - children = ( - A9544D3A2574446A00522141 /* AuthenticationScreen.swift */, - A9544D41257444DE00522141 /* BiometricAuthenticationServiceScreen.swift */, - A9544D482574450600522141 /* CachedAuthenticationServiceProxyScreen.swift */, - ); - path = Authentication; - sourceTree = ""; - }; - A9544D56257455DA00522141 /* Frameworks */ = { - isa = PBXGroup; - children = ( - ); - name = Frameworks; - sourceTree = ""; - }; - A9544D5D2574C50700522141 /* Data */ = { - isa = PBXGroup; - children = ( - A9544D5E2574C51A00522141 /* DataScreen.swift */, - A9544D6F2574C81700522141 /* Base64StringCoderScreen.swift */, - A9544D732574C82300522141 /* StandardCsvParserScreen.swift */, - A9544D772574CAFC00522141 /* Persons.csv */, - ); - path = Data; - sourceTree = ""; - }; - A971DC502860ABD600F30DEF /* Packages */ = { - isa = PBXGroup; - children = ( - A971DC512860ABD600F30DEF /* swiftkit */, - ); - name = Packages; - sourceTree = ""; - }; - A9827819257E522E0006D64F /* Extensions */ = { - isa = PBXGroup; - children = ( - A982781A257E523B0006D64F /* ExtensionsScreen.swift */, - ); - path = Extensions; - sourceTree = ""; - }; - A9827823257E53440006D64F /* Files */ = { - isa = PBXGroup; - children = ( - A9827824257E53510006D64F /* FilesScreen.swift */, - A982783F257E550B0006D64F /* DirectoryServiceScreen.swift */, - A982783A257E55000006D64F /* FileFinderScreen.swift */, - ); - path = Files; - sourceTree = ""; - }; - A9827846257E5AE30006D64F /* Files */ = { - isa = PBXGroup; - children = ( - A9827847257E5B060006D64F /* File1.txt */, - A982784E257E5B290006D64F /* File2.pdf */, - A982784F257E5B2A0006D64F /* File3.gif */, - A982784D257E5B290006D64F /* File4.txt */, - A982784C257E5B290006D64F /* File5.jpg */, - ); - path = Files; - sourceTree = ""; - }; - A9827868257E5D4B0006D64F /* Geo */ = { - isa = PBXGroup; - children = ( - A9827869257E5D550006D64F /* GeoScreen.swift */, - A9827870257E5DE80006D64F /* WorldCoordinateScreen.swift */, - A9827875257E5E0E0006D64F /* ExternalMapServicesScreen.swift */, - ); - path = Geo; - sourceTree = ""; - }; - A9827882257E66F20006D64F /* Keychain */ = { - isa = PBXGroup; - children = ( - A9827884257E67080006D64F /* KeychainScreen.swift */, - A982788B257E67660006D64F /* KeychainServiceScreen.swift */, - ); - path = Keychain; - sourceTree = ""; - }; - A9827890257E73C80006D64F /* Localization */ = { - isa = PBXGroup; - children = ( - A9827891257E73D40006D64F /* LocalizationScreen.swift */, - A9827896257E74040006D64F /* LocalizationServiceScreen.swift */, - A982789B257E740E0006D64F /* TranslatorScreen.swift */, - ); - path = Localization; - sourceTree = ""; - }; - A98278B1257E79690006D64F /* Supporting Files */ = { - isa = PBXGroup; - children = ( - A98278AB257E76940006D64F /* Localizable.strings */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - A98278B4257E7AB50006D64F /* Network */ = { - isa = PBXGroup; - children = ( - A98278B5257E7AC20006D64F /* NetworkScreen.swift */, - ); - path = Network; - sourceTree = ""; - }; - A98278BA257E7B310006D64F /* Services */ = { - isa = PBXGroup; - children = ( - A98278BB257E7B3D0006D64F /* ServicesScreen.swift */, - ); - path = Services; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - A9544BC92571CBC900522141 /* Demo (iOS) */ = { - isa = PBXNativeTarget; - buildConfigurationList = A9544BDE2571CBC900522141 /* Build configuration list for PBXNativeTarget "Demo (iOS)" */; - buildPhases = ( - A98278E9257ECDAE0006D64F /* [SwiftLint] */, - A9544BC62571CBC900522141 /* Sources */, - A9544BC72571CBC900522141 /* Frameworks */, - A9544BC82571CBC900522141 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Demo (iOS)"; - packageProductDependencies = ( - A9544D52257455CA00522141 /* SwiftUIKit */, - A971DC522860ABEE00F30DEF /* SwiftKit */, - ); - productName = "Demo (iOS)"; - productReference = A9544BCA2571CBC900522141 /* Demo.app */; - productType = "com.apple.product-type.application"; - }; - A9544BD12571CBC900522141 /* Demo (macOS) */ = { - isa = PBXNativeTarget; - buildConfigurationList = A9544BE12571CBC900522141 /* Build configuration list for PBXNativeTarget "Demo (macOS)" */; - buildPhases = ( - A9544BCE2571CBC900522141 /* Sources */, - A9544BCF2571CBC900522141 /* Frameworks */, - A9544BD02571CBC900522141 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Demo (macOS)"; - packageProductDependencies = ( - A9544D57257455DA00522141 /* SwiftUIKit */, - A971DC542860ABF200F30DEF /* SwiftKit */, - ); - productName = "Demo (macOS)"; - productReference = A9544BD22571CBC900522141 /* Demo.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - A9544BBE2571CBC800522141 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1220; - LastUpgradeCheck = 1220; - ORGANIZATIONNAME = "Daniel Saidi"; - TargetAttributes = { - A9544BC92571CBC900522141 = { - CreatedOnToolsVersion = 12.2; - }; - A9544BD12571CBC900522141 = { - CreatedOnToolsVersion = 12.2; - }; - }; - }; - buildConfigurationList = A9544BC12571CBC800522141 /* Build configuration list for PBXProject "Demo" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - sv, - ); - mainGroup = A9544BBD2571CBC800522141; - packageReferences = ( - A9544D51257455CA00522141 /* XCRemoteSwiftPackageReference "SwiftUIKit" */, - ); - productRefGroup = A9544BCB2571CBC900522141 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - A9544BC92571CBC900522141 /* Demo (iOS) */, - A9544BD12571CBC900522141 /* Demo (macOS) */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - A9544BC82571CBC900522141 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A9827850257E5B2A0006D64F /* File5.jpg in Resources */, - A9827854257E5B2A0006D64F /* File2.pdf in Resources */, - A9827852257E5B2A0006D64F /* File4.txt in Resources */, - A9544BDA2571CBC900522141 /* Assets.xcassets in Resources */, - A9827848257E5B060006D64F /* File1.txt in Resources */, - A98278A8257E76940006D64F /* Localizable.strings in Resources */, - A9544D782574CAFC00522141 /* Persons.csv in Resources */, - A9827856257E5B2A0006D64F /* File3.gif in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A9544BD02571CBC900522141 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A9827851257E5B2A0006D64F /* File5.jpg in Resources */, - A9827855257E5B2A0006D64F /* File2.pdf in Resources */, - A9827853257E5B2A0006D64F /* File4.txt in Resources */, - A9544BDB2571CBC900522141 /* Assets.xcassets in Resources */, - A9827849257E5B060006D64F /* File1.txt in Resources */, - A98278A9257E76940006D64F /* Localizable.strings in Resources */, - A90CD6AB257E241B008A1749 /* Persons.csv in Resources */, - A9827857257E5B2A0006D64F /* File3.gif in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - A98278E9257ECDAE0006D64F /* [SwiftLint] */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "[SwiftLint]"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "if which swiftlint >/dev/null; then\n swiftlint\nfi\n"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - A9544BC62571CBC900522141 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A9827876257E5E0E0006D64F /* ExternalMapServicesScreen.swift in Sources */, - A9544D742574C82300522141 /* StandardCsvParserScreen.swift in Sources */, - A982789C257E740E0006D64F /* TranslatorScreen.swift in Sources */, - A9544D42257444DE00522141 /* BiometricAuthenticationServiceScreen.swift in Sources */, - A9544BD82571CBC900522141 /* ContentView.swift in Sources */, - A90CD6B3257E2E6E008A1749 /* DeviceScreen.swift in Sources */, - A9827840257E550B0006D64F /* DirectoryServiceScreen.swift in Sources */, - A90CD6B7257E3343008A1749 /* DeviceIdentifierScreen.swift in Sources */, - A98278BC257E7B3D0006D64F /* ServicesScreen.swift in Sources */, - A9827825257E53510006D64F /* FilesScreen.swift in Sources */, - A9827871257E5DE80006D64F /* WorldCoordinateScreen.swift in Sources */, - A9544D5F2574C51A00522141 /* DataScreen.swift in Sources */, - A9827892257E73D40006D64F /* LocalizationScreen.swift in Sources */, - A90CD6A3257E2403008A1749 /* DateScreen.swift in Sources */, - A982788C257E67660006D64F /* KeychainServiceScreen.swift in Sources */, - A982781B257E523B0006D64F /* ExtensionsScreen.swift in Sources */, - A9827897257E74040006D64F /* LocalizationServiceScreen.swift in Sources */, - A9544D492574450600522141 /* CachedAuthenticationServiceProxyScreen.swift in Sources */, - A982786A257E5D550006D64F /* GeoScreen.swift in Sources */, - A9827885257E67080006D64F /* KeychainScreen.swift in Sources */, - A9544D3B2574446A00522141 /* AuthenticationScreen.swift in Sources */, - A9544C0F2571CD6B00522141 /* Image+Demo.swift in Sources */, - A98278D3257E83250006D64F /* Color+Demo.swift in Sources */, - A9544D702574C81700522141 /* Base64StringCoderScreen.swift in Sources */, - A98278B6257E7AC20006D64F /* NetworkScreen.swift in Sources */, - A982783B257E55000006D64F /* FileFinderScreen.swift in Sources */, - A9544BD62571CBC900522141 /* DemoApp.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A9544BCE2571CBC900522141 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A98278B7257E7AC20006D64F /* NetworkScreen.swift in Sources */, - A9544D43257444DE00522141 /* BiometricAuthenticationServiceScreen.swift in Sources */, - A9544BD92571CBC900522141 /* ContentView.swift in Sources */, - A982786B257E5D550006D64F /* GeoScreen.swift in Sources */, - A982788D257E67660006D64F /* KeychainServiceScreen.swift in Sources */, - A98278D4257E83250006D64F /* Color+Demo.swift in Sources */, - A982781E257E52680006D64F /* ExtensionsScreen.swift in Sources */, - A982783C257E55000006D64F /* FileFinderScreen.swift in Sources */, - A9827835257E54EA0006D64F /* FilesScreen.swift in Sources */, - A98278BD257E7B3D0006D64F /* ServicesScreen.swift in Sources */, - A9827893257E73D40006D64F /* LocalizationScreen.swift in Sources */, - A9544D4A2574450600522141 /* CachedAuthenticationServiceProxyScreen.swift in Sources */, - A9827872257E5DE80006D64F /* WorldCoordinateScreen.swift in Sources */, - A90CD6BA257E334A008A1749 /* DeviceIdentifierScreen.swift in Sources */, - A9827886257E67080006D64F /* KeychainScreen.swift in Sources */, - A982789D257E740E0006D64F /* TranslatorScreen.swift in Sources */, - A98278A0257E74440006D64F /* DeviceScreen.swift in Sources */, - A90CD6AC257E241B008A1749 /* DataScreen.swift in Sources */, - A9827841257E550B0006D64F /* DirectoryServiceScreen.swift in Sources */, - A90CD6AE257E241B008A1749 /* StandardCsvParserScreen.swift in Sources */, - A9544D3C2574446A00522141 /* AuthenticationScreen.swift in Sources */, - A90CD6AD257E241B008A1749 /* Base64StringCoderScreen.swift in Sources */, - A9827877257E5E0E0006D64F /* ExternalMapServicesScreen.swift in Sources */, - A9544C102571CD6B00522141 /* Image+Demo.swift in Sources */, - A9827898257E74040006D64F /* LocalizationServiceScreen.swift in Sources */, - A90CD6A8257E2412008A1749 /* DateScreen.swift in Sources */, - A9544BD72571CBC900522141 /* DemoApp.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - A98278AB257E76940006D64F /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - A98278AA257E76940006D64F /* en */, - A98278AE257E76A50006D64F /* sv */, - ); - name = Localizable.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - A9544BDC2571CBC900522141 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - A9544BDD2571CBC900522141 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - }; - name = Release; - }; - A9544BDF2571CBC900522141 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = PMEDFW438U; - ENABLE_PREVIEWS = YES; - INFOPLIST_FILE = iOS/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.danielsaidi.swiftkit.demo; - PRODUCT_NAME = Demo; - SDKROOT = iphoneos; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - A9544BE02571CBC900522141 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = PMEDFW438U; - ENABLE_PREVIEWS = YES; - INFOPLIST_FILE = iOS/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.danielsaidi.swiftkit.demo; - PRODUCT_NAME = Demo; - SDKROOT = iphoneos; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - A9544BE22571CBC900522141 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_ENTITLEMENTS = macOS/macOS.entitlements; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = PMEDFW438U; - ENABLE_HARDENED_RUNTIME = YES; - ENABLE_PREVIEWS = YES; - INFOPLIST_FILE = macOS/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 11.0; - PRODUCT_BUNDLE_IDENTIFIER = com.danielsaidi.swiftkit.demo; - PRODUCT_NAME = Demo; - SDKROOT = macosx; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - A9544BE32571CBC900522141 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_ENTITLEMENTS = macOS/macOS.entitlements; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = PMEDFW438U; - ENABLE_HARDENED_RUNTIME = YES; - ENABLE_PREVIEWS = YES; - INFOPLIST_FILE = macOS/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 11.0; - PRODUCT_BUNDLE_IDENTIFIER = com.danielsaidi.swiftkit.demo; - PRODUCT_NAME = Demo; - SDKROOT = macosx; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - A9544BC12571CBC800522141 /* Build configuration list for PBXProject "Demo" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A9544BDC2571CBC900522141 /* Debug */, - A9544BDD2571CBC900522141 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - A9544BDE2571CBC900522141 /* Build configuration list for PBXNativeTarget "Demo (iOS)" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A9544BDF2571CBC900522141 /* Debug */, - A9544BE02571CBC900522141 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - A9544BE12571CBC900522141 /* Build configuration list for PBXNativeTarget "Demo (macOS)" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A9544BE22571CBC900522141 /* Debug */, - A9544BE32571CBC900522141 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCRemoteSwiftPackageReference section */ - A9544D51257455CA00522141 /* XCRemoteSwiftPackageReference "SwiftUIKit" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/danielsaidi/SwiftUIKit.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 2.7.0; - }; - }; -/* End XCRemoteSwiftPackageReference section */ - -/* Begin XCSwiftPackageProductDependency section */ - A9544D52257455CA00522141 /* SwiftUIKit */ = { - isa = XCSwiftPackageProductDependency; - package = A9544D51257455CA00522141 /* XCRemoteSwiftPackageReference "SwiftUIKit" */; - productName = SwiftUIKit; - }; - A9544D57257455DA00522141 /* SwiftUIKit */ = { - isa = XCSwiftPackageProductDependency; - package = A9544D51257455CA00522141 /* XCRemoteSwiftPackageReference "SwiftUIKit" */; - productName = SwiftUIKit; - }; - A971DC522860ABEE00F30DEF /* SwiftKit */ = { - isa = XCSwiftPackageProductDependency; - productName = SwiftKit; - }; - A971DC542860ABF200F30DEF /* SwiftKit */ = { - isa = XCSwiftPackageProductDependency; - productName = SwiftKit; - }; -/* End XCSwiftPackageProductDependency section */ - }; - rootObject = A9544BBE2571CBC800522141 /* Project object */; -} diff --git a/Demo/Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Demo/Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/Demo/Demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/Demo/Demo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Demo/Demo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/Demo/Demo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/Demo/Demo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Demo/Demo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved deleted file mode 100644 index b23c967..0000000 --- a/Demo/Demo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ /dev/null @@ -1,68 +0,0 @@ -{ - "pins" : [ - { - "identity" : "cwlcatchexception", - "kind" : "remoteSourceControl", - "location" : "https://github.com/mattgallagher/CwlCatchException.git", - "state" : { - "revision" : "35f9e770f54ce62dd8526470f14c6e137cef3eea", - "version" : "2.1.1" - } - }, - { - "identity" : "cwlpreconditiontesting", - "kind" : "remoteSourceControl", - "location" : "https://github.com/mattgallagher/CwlPreconditionTesting.git", - "state" : { - "revision" : "c21f7bab5ca8eee0a9998bbd17ca1d0eb45d4688", - "version" : "2.1.0" - } - }, - { - "identity" : "mockingkit", - "kind" : "remoteSourceControl", - "location" : "https://github.com/danielsaidi/MockingKit.git", - "state" : { - "revision" : "3e51adb1a3922cdccbe84a3088b7fa4d67ae236d", - "version" : "1.1.0" - } - }, - { - "identity" : "nimble", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Quick/Nimble.git", - "state" : { - "revision" : "1f3bde57bde12f5e7b07909848c071e9b73d6edc", - "version" : "10.0.0" - } - }, - { - "identity" : "quick", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Quick/Quick.git", - "state" : { - "revision" : "f9d519828bb03dfc8125467d8f7b93131951124c", - "version" : "5.0.1" - } - }, - { - "identity" : "swift-docc-plugin", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-docc-plugin", - "state" : { - "revision" : "3303b164430d9a7055ba484c8ead67a52f7b74f6", - "version" : "1.0.0" - } - }, - { - "identity" : "swiftuikit", - "kind" : "remoteSourceControl", - "location" : "https://github.com/danielsaidi/SwiftUIKit.git", - "state" : { - "revision" : "ab6ef570c7c8100b98693394417a9905c925ccae", - "version" : "2.7.0" - } - } - ], - "version" : 2 -} diff --git a/Demo/Demo.xcodeproj/project.xcworkspace/xcuserdata/danielsaidi.xcuserdatad/UserInterfaceState.xcuserstate b/Demo/Demo.xcodeproj/project.xcworkspace/xcuserdata/danielsaidi.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 833fbc4c0e23ba01a1b77ab596acb240422ff47c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 258861 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 z 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 diff --git a/Demo/Demo.xcodeproj/xcshareddata/xcschemes/Demo (iOS).xcscheme b/Demo/Demo.xcodeproj/xcshareddata/xcschemes/Demo (iOS).xcscheme deleted file mode 100644 index 6efcc53..0000000 --- a/Demo/Demo.xcodeproj/xcshareddata/xcschemes/Demo (iOS).xcscheme +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Demo/Demo.xcodeproj/xcuserdata/danielsaidi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Demo/Demo.xcodeproj/xcuserdata/danielsaidi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist deleted file mode 100644 index 85307c8..0000000 --- a/Demo/Demo.xcodeproj/xcuserdata/danielsaidi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ /dev/null @@ -1,6 +0,0 @@ - - - diff --git a/Demo/Demo.xcodeproj/xcuserdata/danielsaidi.xcuserdatad/xcschemes/xcschememanagement.plist b/Demo/Demo.xcodeproj/xcuserdata/danielsaidi.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index e757904..0000000 --- a/Demo/Demo.xcodeproj/xcuserdata/danielsaidi.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,27 +0,0 @@ - - - - - SchemeUserState - - Demo (iOS).xcscheme_^#shared#^_ - - orderHint - 0 - - Demo (macOS).xcscheme_^#shared#^_ - - orderHint - 1 - - - SuppressBuildableAutocreation - - A9544BC92571CBC900522141 - - primary - - - - - diff --git a/Demo/Shared/Authentication/AuthenticationScreen.swift b/Demo/Shared/Authentication/AuthenticationScreen.swift deleted file mode 100644 index ebd4585..0000000 --- a/Demo/Shared/Authentication/AuthenticationScreen.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// AuthenticationScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-11-29. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -#if os(iOS) || os(macOS) -import SwiftUI -import SwiftUIKit - -struct AuthenticationScreen: View { - - var body: some View { - List { - Section { - ListText("SwiftKit has auth services that simplifies using biometric authentication.") - } - - Section(header: Text("Services")) { - ListNavigationLink(destination: BiometricAuthenticationServiceScreen()) { - Label("Biometric Authentication", image: .authentication) - } - ListNavigationLink(destination: CachedAuthenticationServiceProxyScreen()) { - Label("Cached Authentication", image: .data) - } - } - }.navigationTitle("Authentication") - } -} - -struct AuthenticationScreen_Previews: PreviewProvider { - static var previews: some View { - NavigationView { - AuthenticationScreen() - } - } -} -#endif diff --git a/Demo/Shared/Authentication/BiometricAuthenticationServiceScreen.swift b/Demo/Shared/Authentication/BiometricAuthenticationServiceScreen.swift deleted file mode 100644 index fac4c98..0000000 --- a/Demo/Shared/Authentication/BiometricAuthenticationServiceScreen.swift +++ /dev/null @@ -1,63 +0,0 @@ -// -// BiometricAuthenticationServiceScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-11-29. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -#if os(iOS) || os(macOS) -import SwiftKit -import SwiftUI -import SwiftUIKit - -struct BiometricAuthenticationServiceScreen: View { - - private let service: AuthenticationService = BiometricAuthenticationService() - - @StateObject private var alertContext = AlertContext() - - var body: some View { - List { - Section { - ListText("BiometricAuthenticationService can be used to identify the user with FaceID or TouchID.") - } - - Section(header: Text("Actions")) { - ListButton(action: performAuthentication) { - Label("Perform authentication", image: .authentication) - } - } - }.alert(alertContext) - } -} - -private extension BiometricAuthenticationServiceScreen { - - func alert(_ text: String) { - let alert = Alert(title: Text(text)) - DispatchQueue.main.asyncAfter(seconds: 1.0) { - alertContext.present(alert) - } - } - - func handleAuthResult(_ result: AuthenticationService.AuthResult) { - switch result { - case .failure(let error): alert("Authentication failed with error .\(error)!") - case .success: alert("Authentication succeeded!") - } - } - - func performAuthentication() { - service.authenticateUser(for: .standard, reason: "Test purposes", completion: handleAuthResult) - } -} - -struct BiometricAuthenticationServiceScreen_Previews: PreviewProvider { - static var previews: some View { - NavigationView { - BiometricAuthenticationServiceScreen() - } - } -} -#endif diff --git a/Demo/Shared/Authentication/CachedAuthenticationServiceProxyScreen.swift b/Demo/Shared/Authentication/CachedAuthenticationServiceProxyScreen.swift deleted file mode 100644 index 86b678b..0000000 --- a/Demo/Shared/Authentication/CachedAuthenticationServiceProxyScreen.swift +++ /dev/null @@ -1,74 +0,0 @@ -// -// CachedAuthenticationServiceProxyScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-11-29. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -#if os(iOS) || os(macOS) -import SwiftKit -import SwiftUI -import SwiftUIKit - -struct CachedAuthenticationServiceProxyScreen: View { - - private let service: CachedAuthenticationService = CachedAuthenticationServiceProxy( - baseService: BiometricAuthenticationService()) - - @StateObject private var alertContext = AlertContext() - - var body: some View { - List { - Section { - ListText("CachedAuthenticationServiceProxy wraps another service and stores its latest result.") - } - - Section(header: Text("Actions")) { - ListButton(action: performAuthentication) { - Label("Perform authentication", image: .authentication) - } - ListButton(action: resetAuthentication) { - Label("Clear authentication", image: .clear) - } - } - } - .alert(alertContext) - .navigationTitle("Cached Authentication") - } -} - -private extension CachedAuthenticationServiceProxyScreen { - - func alert(_ text: String) { - let alert = Alert(title: Text(text)) - DispatchQueue.main.asyncAfter(seconds: 1.0) { - alertContext.present(alert) - } - } - - func handleAuthResult(_ result: AuthenticationService.AuthResult) { - switch result { - case .failure(let error): alert("Authentication failed with error .\(error)!") - case .success: alert("Authentication succeeded!") - } - } - - func performAuthentication() { - service.authenticateUser(for: .standard, reason: "Test purposes", completion: handleAuthResult) - } - - func resetAuthentication() { - service.resetUserAuthentication(for: .standard) - alert("Authentication has been reset. You now have to perform a new authentication.") - } -} - -struct CachedAuthenticationServiceProxyScreen_Previews: PreviewProvider { - static var previews: some View { - NavigationView { - CachedAuthenticationServiceProxyScreen() - } - } -} -#endif diff --git a/Demo/Shared/Data/Base64StringCoderScreen.swift b/Demo/Shared/Data/Base64StringCoderScreen.swift deleted file mode 100644 index 2cbed08..0000000 --- a/Demo/Shared/Data/Base64StringCoderScreen.swift +++ /dev/null @@ -1,46 +0,0 @@ -// -// Base64StringCoderScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-11-30. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -import SwiftKit -import SwiftUI -import SwiftUIKit - -struct Base64StringCoderScreen: View { - - private let service: StringCoder = Base64StringCoder() - - @State private var text = "" - - private var encoded: String { service.encode(text) ?? "-" } - private var decoded: String { service.decode(encoded) ?? "-" } - - var body: some View { - List { - Section { - ListText("Base64StringCoder can encode and decode base64. Type text below to encode it.") - } - - Section(header: Text("Text")) { - TextField("Enter text", text: $text) - } - - Section(header: Text("Result")) { - Text("Encoded: \(encoded)") - Text("Decoded: \(decoded)") - } - }.navigationTitle("Base64StringCoder") - } -} - -struct Base64StringCoderScreen_Previews: PreviewProvider { - static var previews: some View { - NavigationView { - Base64StringCoderScreen() - } - } -} diff --git a/Demo/Shared/Data/DataScreen.swift b/Demo/Shared/Data/DataScreen.swift deleted file mode 100644 index 23891a4..0000000 --- a/Demo/Shared/Data/DataScreen.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// DataScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-11-29. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -import SwiftUI -import SwiftUIKit - -struct DataScreen: View { - - var body: some View { - List { - Section { - ListText("SwiftKit has data utils for encoding and decoding strings, parse csv files etc.") - } - - Section(header: Text("Services")) { - ListNavigationLink(destination: Base64StringCoderScreen()) { - Label("Base64 String Coder", image: .base64) - } - ListNavigationLink(destination: StandardCsvParserScreen()) { - Label("CSV Parser", image: .file) - } - } - }.navigationTitle("Data") - } -} - -struct DataScreen_Previews: PreviewProvider { - static var previews: some View { - NavigationView { - DataScreen() - } - } -} diff --git a/Demo/Shared/Data/Persons.csv b/Demo/Shared/Data/Persons.csv deleted file mode 100644 index 7c1b78c..0000000 --- a/Demo/Shared/Data/Persons.csv +++ /dev/null @@ -1,5 +0,0 @@ -Aaron A. Aaronson;31 -Baron B. Baronson;28 -Carol C. Carolson;35 -Daryl D. Darylson;21 -Eagle E. Eagleson;90 diff --git a/Demo/Shared/Data/StandardCsvParserScreen.swift b/Demo/Shared/Data/StandardCsvParserScreen.swift deleted file mode 100644 index e27a5b0..0000000 --- a/Demo/Shared/Data/StandardCsvParserScreen.swift +++ /dev/null @@ -1,60 +0,0 @@ -// -// StandardCsvParserScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-11-30. -// Copyright © 2020-2022 Daniel Saidi. All rights reserved. -// - -import SwiftKit -import SwiftUI -import SwiftUIKit - -struct StandardCsvParserScreen: View { - - private let parser: CsvParser = StandardCsvParser() - - @State private var result = [[String]]() - - var body: some View { - List { - Section { - ListText("A CsvParser can parse CSV strings. This demo uses StandardCsvParser to parse a demo file.") - } - - ConditionalView(result.hasContent) { - Section(header: Text("Result")) { - ForEach(result, id: \.[0]) { person in - Text("\(person[0]) (age \(person[1]))") - } - } - } - - Section(header: Text("Result")) { - ListButton(action: parseFile) { - Label("Parse CSV file", image: .file) - } - } - }.navigationTitle("StandardCsvParser") - } -} - -private extension StandardCsvParserScreen { - - func parseFile() { - guard - let path = Bundle.main.path(forResource: "Persons", ofType: "csv"), - let data = FileManager.default.contents(atPath: path), - let string = String(data: data, encoding: .utf8) - else { return } - result = parser.parseCsvString(string, componentSeparator: ";") - } -} - -struct StandardCsvParserScreen_Previews: PreviewProvider { - static var previews: some View { - NavigationView { - StandardCsvParserScreen() - } - } -} diff --git a/Demo/Shared/Date/DateScreen.swift b/Demo/Shared/Date/DateScreen.swift deleted file mode 100644 index 689c682..0000000 --- a/Demo/Shared/Date/DateScreen.swift +++ /dev/null @@ -1,65 +0,0 @@ -// -// DateScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-12-07. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -import SwiftKit -import SwiftUI -import SwiftUIKit - -struct DateScreen: View { - - init(formatter: DateFormatter = DateFormatter()) { - self.formatter = formatter - formatter.dateStyle = .medium - formatter.timeStyle = .short - } - - @State private var date = Date() - - private let formatter: DateFormatter - - var body: some View { - List { - Section { - ListText("SwiftKit contains Date utils and extensions. For now, they're all in this one, single screen.") - } - - Section(header: Text("Date")) { - DatePicker("Select date", selection: $date) - } - - Section(header: Text("Difference")) { - ListText("Date is \(date.months(from: Date())) months from now") - ListText("Date is \(date.weeks(from: Date())) weeks from now") - ListText("Date is \(date.days(from: Date())) days from now") - ListText("Date is \(date.hours(from: Date())) hours from now") - } - - Section(header: Text("Adding to selected date")) { - ListText("1000 seconds: \(formatter.string(from: date.adding(seconds: 1000)))") - ListText("2000 minutes: \(formatter.string(from: date.adding(minutes: 2000)))") - ListText("3000 hours: \(formatter.string(from: date.adding(hours: 3000)))") - ListText("4000 days: \(formatter.string(from: date.adding(days: 4000)))") - } - - Section(header: Text("Removing from selected date")) { - ListText("1000 seconds: \(formatter.string(from: date.removing(seconds: 1000)))") - ListText("2000 minutes: \(formatter.string(from: date.removing(minutes: 2000)))") - ListText("3000 hours: \(formatter.string(from: date.removing(hours: 3000)))") - ListText("4000 days: \(formatter.string(from: date.removing(days: 4000)))") - } - }.navigationTitle("Date") - } -} - -struct DateScreen_Previews: PreviewProvider { - static var previews: some View { - NavigationView { - DateScreen() - } - } -} diff --git a/Demo/Shared/Demo/ContentView.swift b/Demo/Shared/Demo/ContentView.swift deleted file mode 100644 index 6efabd7..0000000 --- a/Demo/Shared/Demo/ContentView.swift +++ /dev/null @@ -1,90 +0,0 @@ -// -// ContentView.swift -// Demo -// -// Created by Daniel Saidi on 2020-11-27. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -import SwiftUI -import SwiftUIKit - -struct ContentView: View { - - var body: some View { - NavigationView { - List { - Section(header: Text("Sections")) { - list1 - list2 - } - } - .navigationTitle("SwiftKit") - }.withPlatformSpecificNavigationStyle() - } -} - -private extension ContentView { - - var list1: some View { - Group { - #if os(iOS) || os(macOS) - ListNavigationLink(destination: AuthenticationScreen()) { - Label("Authentication", image: .authentication) - } - #endif - ListNavigationLink(destination: DataScreen()) { - Label("Data", image: .data) - } - ListNavigationLink(destination: DateScreen()) { - Label("Date", image: .date) - } - ListNavigationLink(destination: DeviceScreen()) { - Label("Device", image: .device) - } - ListNavigationLink(destination: ExtensionsScreen()) { - Label("Extensions", image: .extensions) - } - ListNavigationLink(destination: FilesScreen()) { - Label("Files", image: .files) - } - ListNavigationLink(destination: GeoScreen()) { - Label("Geo", image: .globe) - } - ListNavigationLink(destination: KeychainScreen()) { - Label("Keychain", image: .key) - } - ListNavigationLink(destination: LocalizationScreen()) { - Label("Localization", image: .flag) - } - } - } - - var list2: some View { - Group { - ListNavigationLink(destination: NetworkScreen()) { - Label("Network", image: .cloud) - } - ListNavigationLink(destination: ServicesScreen()) { - Label("Services", image: .service) - } - } - } -} - -private extension View { - - func withPlatformSpecificNavigationStyle() -> some View { - #if os(iOS) - return self.navigationViewStyle(StackNavigationViewStyle()) - #else - return self - #endif - } -} - -struct ContentView_Previews: PreviewProvider { - static var previews: some View { - ContentView() - } -} diff --git a/Demo/Shared/Demo/DemoApp.swift b/Demo/Shared/Demo/DemoApp.swift deleted file mode 100644 index 9e76d11..0000000 --- a/Demo/Shared/Demo/DemoApp.swift +++ /dev/null @@ -1,19 +0,0 @@ -// -// DemoApp.swift -// Demo -// -// Created by Daniel Saidi on 2020-11-27. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -import SwiftUI - -@main -struct DemoApp: App { - - var body: some Scene { - WindowGroup { - ContentView() - } - } -} diff --git a/Demo/Shared/Device/DeviceIdentifierScreen.swift b/Demo/Shared/Device/DeviceIdentifierScreen.swift deleted file mode 100644 index 1efb2d5..0000000 --- a/Demo/Shared/Device/DeviceIdentifierScreen.swift +++ /dev/null @@ -1,58 +0,0 @@ -// -// DeviceIdentifierScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-12-07. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -import SwiftKit -import SwiftUI -import SwiftUIKit - -struct DeviceIdentifierScreen: View { - - enum IdentifierType: String, Identifiable { - case keychain, userDefaults - - var id: String { rawValue } - } - - private var identifier: DeviceIdentifier { - switch identifierType { - case .keychain: return KeychainBasedDeviceIdentifier( - keychainService: StandardKeychainService(), - backupIdentifier: UserDefaultsBasedDeviceIdentifier()) - case .userDefaults: return UserDefaultsBasedDeviceIdentifier() - } - } - - @State private var identifierType = IdentifierType.keychain - - var body: some View { - List { - Section { - ListText("SwiftKit contains device identifiers. The keychain-based one remembers the unique id even if you delete the app, while the user defaults-based one does not. Here, the two identifiers are kept in sync.") - } - - Section(header: Text("identifier")) { - Picker("Select identifier", selection: $identifierType) { - Text("Keychain").tag(IdentifierType.keychain) - Text("User Defaults").tag(IdentifierType.userDefaults) - }.pickerStyle(SegmentedPickerStyle()) - } - - Section(header: Text("Device identifier")) { - ListText(identifier.getDeviceIdentifier()) - } - }.navigationTitle("DeviceIdentifier") - } -} - -struct DeviceIdentifierScreen_Previews: PreviewProvider { - static var previews: some View { - NavigationView { - DeviceIdentifierScreen() - } - } -} diff --git a/Demo/Shared/Device/DeviceScreen.swift b/Demo/Shared/Device/DeviceScreen.swift deleted file mode 100644 index 19cadde..0000000 --- a/Demo/Shared/Device/DeviceScreen.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// DeviceScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-12-07. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -import SwiftUI -import SwiftUIKit - -struct DeviceScreen: View { - - var body: some View { - List { - Section { - ListText("SwiftKit has device utils for e.g. generating a unique id for the current device.") - } - - Section(header: Text("Services")) { - ListNavigationLink(destination: DeviceIdentifierScreen()) { - Label("Device Identifier", image: .device) - } - } - }.navigationTitle("Device") - } -} - -struct DeviceScreen_Previews: PreviewProvider { - static var previews: some View { - NavigationView { - DeviceScreen() - } - } -} diff --git a/Demo/Shared/Extensions/ExtensionsScreen.swift b/Demo/Shared/Extensions/ExtensionsScreen.swift deleted file mode 100644 index fdca1ae..0000000 --- a/Demo/Shared/Extensions/ExtensionsScreen.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// ExtensionsScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-12-07. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -import SwiftUI -import SwiftUIKit - -struct ExtensionsScreen: View { - - var body: some View { - List { - Section { - ListText(""" -SwiftKit contains a bunch of extensions that aim at making it easier to work with SwiftUI. - -Since this namespace contains a lot will grow over time, extensions are not demonstrated. Instead, checkout the source code. -""") - } - }.navigationTitle("Extension") - } -} - -struct ExtensionsScreen_Previews: PreviewProvider { - static var previews: some View { - ExtensionsScreen() - } -} diff --git a/Demo/Shared/Files/DirectoryServiceScreen.swift b/Demo/Shared/Files/DirectoryServiceScreen.swift deleted file mode 100644 index 4ac0ce9..0000000 --- a/Demo/Shared/Files/DirectoryServiceScreen.swift +++ /dev/null @@ -1,91 +0,0 @@ -// -// DirectoryServiceScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-12-07. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -import SwiftKit -import SwiftUI -import SwiftUIKit - -struct DirectoryServiceScreen: View { - - init(service: DirectoryService = StandardDirectoryService(directory: .cachesDirectory)!) { - self.service = service - refreshFiles() - } - - private let service: DirectoryService - - @State private var files: [String] = [] - @State private var isFilterEnabled = false - - var body: some View { - List { - Section { - ListText("SwiftKit has services that lets you handle files within local directoriers. This demo uses a StandardDirectoryService that targets the local cache directory.") - } - - if files.hasContent { - Section(header: Text("Files")) { - ForEach(files, id: \.self) { - ListText("\($0) (\(service.getSizeOfFile(named: $0) ?? 0) bytes)") - } - } - } - - Section(header: Text("Total")) { - ListText("\(files.count) files (\(service.getSizeOfAllFiles()) bytes)") - } - - Section(header: Text("Actions")) { - ListButton(action: createRandomFile) { - Label("Create file with random name", image: .fileAdd) - } - ListButton(action: deleteRandomFile) { - Label("Delete random file", image: .trash) - } - ListButton(action: toggleFileFilter) { - Label("Show only files that start with \"1\"", image: isFilterEnabled ? .circleFilled : .circle) - } - } - } - .onAppear(perform: refreshFiles) - .navigationTitle("Directory Service") - } -} - -private extension DirectoryServiceScreen { - - func createRandomFile() { - let fileName = "\(Int.random(in: 1...10_000)).txt" - let data = "Hello, world!".data(using: .utf8) - _ = service.createFile(named: fileName, contents: data) - refreshFiles() - } - - func deleteRandomFile() { - guard let fileName = files.randomElement() else { return } - try? service.removeFile(named: fileName) - refreshFiles() - } - - func toggleFileFilter() { - isFilterEnabled.toggle() - refreshFiles() - } - - func refreshFiles() { - self.files = service.getFileNames() - guard isFilterEnabled else { return } - self.files = files.filter { $0.hasPrefix("1") } - } -} - -struct DirectoryServiceScreen_Previews: PreviewProvider { - static var previews: some View { - DirectoryServiceScreen() - } -} diff --git a/Demo/Shared/Files/FileFinderScreen.swift b/Demo/Shared/Files/FileFinderScreen.swift deleted file mode 100644 index f958975..0000000 --- a/Demo/Shared/Files/FileFinderScreen.swift +++ /dev/null @@ -1,58 +0,0 @@ -// -// FileFinderScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-12-07. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -import SwiftKit -import SwiftUI -import SwiftUIKit - -struct FileFinderScreen: View { - - init(finder: FileFinder = BundleFileFinder()) { - self.finder = finder - } - - private let finder: FileFinder - - private var fileFiles: [String] { finder.findFilesWithFileNamePrefix("File").sorted() } - private var textFiles: [String] { finder.findFilesWithFileNameSuffix(".txt").sorted() } - - - var body: some View { - List { - Section { - ListText("SwiftKit has file finders that let you get files in various ways. This demo uses a BundleFileFinder that looks for files in a certain bundle.") - } - - Section(header: Text("Files that start with \"File\"")) { - if fileFiles.hasContent { - ForEach(fileFiles, id: \.self) { - ListText("\($0)") - } - } else { - ListText("No files") - } - } - - Section(header: Text("Files that end with \".txt\"")) { - if textFiles.hasContent { - ForEach(textFiles, id: \.self) { - ListText("\($0)") - } - } else { - ListText("No files") - } - } - }.navigationTitle("File Finder") - } -} - -struct FileFinderScreen_Previews: PreviewProvider { - static var previews: some View { - FileFinderScreen() - } -} diff --git a/Demo/Shared/Files/FilesScreen.swift b/Demo/Shared/Files/FilesScreen.swift deleted file mode 100644 index 1a26328..0000000 --- a/Demo/Shared/Files/FilesScreen.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// FilesScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-12-07. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -import SwiftUI -import SwiftUIKit - -struct FilesScreen: View { - - var body: some View { - List { - Section { - ListText(""" -SwiftKit contains services that aim at making it easier to work with files. -""") - } - - Section(header: Text("Services")) { - ListNavigationLink(destination: DirectoryServiceScreen()) { - Label("Directory Service", image: .folder) - } - ListNavigationLink(destination: FileFinderScreen()) { - Label("File Finder", image: .fileSearch) - } - } - }.navigationTitle("Files") - } -} - -struct FilesScreen_Previews: PreviewProvider { - static var previews: some View { - FilesScreen() - } -} diff --git a/Demo/Shared/Geo/ExternalMapServicesScreen.swift b/Demo/Shared/Geo/ExternalMapServicesScreen.swift deleted file mode 100644 index 0191f7d..0000000 --- a/Demo/Shared/Geo/ExternalMapServicesScreen.swift +++ /dev/null @@ -1,74 +0,0 @@ -// -// ExternalMapServicesScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-12-07. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -import SwiftKit -import SwiftUI -import SwiftUIKit - -struct ExternalMapServicesScreen: View { - - @State private var coordinate = WorldCoordinate.manhattan - - private let appleMaps = AppleMapsService() - private let googleMaps = GoogleMapsService() - - private var coordinates: [WorldCoordinate] { - [.manhattan,.newYork, .sanFrancisco, .tokyo] - } - - var body: some View { - List { - Section { - ListText("SwiftKit has external maps services that let you show a coordinate or trigger a navigation in an external map app.") - } - - Section(header: Text("Coordinate")) { - Picker("Pick Coordinate", selection: $coordinate) { - ForEach(coordinates) { - Text($0.name).tag($0) - } - } - } - - Section(header: Text("Actions")) { - ListButton(action: showInAppleMaps) { - Label("Open in Apple Maps", image: .pin) - } - ListButton(action: showInGoogleMaps) { - Label("Open in Google Maps", image: .pin) - } - } - }.navigationTitle("External Maps") - } -} - -private extension ExternalMapServicesScreen { - - func showInAppleMaps() { - open(appleMaps.getUrl(for: coordinate.coordinate)) - } - - func showInGoogleMaps() { - open(googleMaps.getUrl(for: coordinate.coordinate)) - } - - func open(_ url: URL?) { - guard let url = url else { return } - #if os(iOS) || os(tvOS) - UIApplication.shared.open(url, options: [:], completionHandler: nil) - #elseif os(macOS) - NSWorkspace.shared.open(url) - #endif - } -} - -struct ExternalMapServicesScreen_Previews: PreviewProvider { - static var previews: some View { - ExternalMapServicesScreen() - } -} diff --git a/Demo/Shared/Geo/GeoScreen.swift b/Demo/Shared/Geo/GeoScreen.swift deleted file mode 100644 index 21c5a79..0000000 --- a/Demo/Shared/Geo/GeoScreen.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// GeoScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-12-07. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -import SwiftUI -import SwiftUIKit - -struct GeoScreen: View { - - var body: some View { - List { - Section { - ListText("SwiftKit has geo utils that simplifies working with maps and coordinates.") - } - - Section(header: Text("Utils")) { - ListNavigationLink(destination: ExternalMapServicesScreen()) { - Label("External Map Services", image: .map) - } - ListNavigationLink(destination: WorldCoordinateScreen()) { - Label("World Coordinates", image: .pin) - } - } - }.navigationTitle("Geo") - } -} - -struct GeoScreen_Previews: PreviewProvider { - static var previews: some View { - NavigationView { - GeoScreen() - } - } -} diff --git a/Demo/Shared/Geo/WorldCoordinateScreen.swift b/Demo/Shared/Geo/WorldCoordinateScreen.swift deleted file mode 100644 index 4e8d18f..0000000 --- a/Demo/Shared/Geo/WorldCoordinateScreen.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// WorldCoordinateScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-12-07. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -import MapKit -import SwiftKit -import SwiftUI -import SwiftUIKit - -struct WorldCoordinateScreen: View { - - @State private var coordinate = WorldCoordinate.manhattan - - private var mapRegion: MKCoordinateRegion { - MKCoordinateRegion(center: coordinate.coordinate, latitudinalMeters: 10_000, longitudinalMeters: 10_000) - } - - private var coordinates: [WorldCoordinate] { - [.manhattan,.newYork, .sanFrancisco, .tokyo] - } - - var body: some View { - List { - Section { - ListText("SwiftKit has a world coordinate struct with static coordinate properties.") - } - - Section(header: Text("Coordinate")) { - Picker("Pick Coordinate", selection: $coordinate) { - ForEach(coordinates) { - Text($0.name).tag($0) - } - } - } - - Section(header: Text("Result")) { - Map(coordinateRegion: .constant(mapRegion)) - .frame(height: 250) - } - }.navigationTitle("World Coordinate") - } -} - -struct WorldCoordinateScreen_Previews: PreviewProvider { - static var previews: some View { - WorldCoordinateScreen() - } -} diff --git a/Demo/Shared/Keychain/KeychainScreen.swift b/Demo/Shared/Keychain/KeychainScreen.swift deleted file mode 100644 index 0a74d09..0000000 --- a/Demo/Shared/Keychain/KeychainScreen.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// KeychainScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-12-07. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -import SwiftUI -import SwiftUIKit - -struct KeychainScreen: View { - - var body: some View { - List { - Section { - ListText("SwiftKit has utils that simplify working with the device keychain.") - } - - Section(header: Text("Services")) { - ListNavigationLink(destination: KeychainServiceScreen()) { - Label("Keychain Service", image: .key) - } - } - }.navigationTitle("Keychain") - } -} - -struct KeychainScreen_Previews: PreviewProvider { - static var previews: some View { - NavigationView { - KeychainScreen() - } - } -} diff --git a/Demo/Shared/Keychain/KeychainServiceScreen.swift b/Demo/Shared/Keychain/KeychainServiceScreen.swift deleted file mode 100644 index 0c2e7f7..0000000 --- a/Demo/Shared/Keychain/KeychainServiceScreen.swift +++ /dev/null @@ -1,131 +0,0 @@ -// -// KeychainServiceScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-12-07. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -import SwiftKit -import SwiftUI -import SwiftUIKit - -struct KeychainServiceScreen: View { - - init(service: KeychainService = StandardKeychainService()) { - self.service = service - } - - private let service: KeychainService - - @State private var boolText = "" - @State private var doubleText = "" - @State private var intText = "" - @State private var stringText = "" - - var body: some View { - List { - Section { - ListText("SwiftKit has services that let you use the keychain like UserDefaults, but where the data is still around if the user deletes the app.") - } - - Section(header: Text("Persisted Data")) { - ListText("Bool: \(boolText)") - ListText("Double: \(doubleText)") - ListText("Int: \(intText)") - ListText("String: \(stringText)") - } - - Section(header: Text("Actions")) { - ListButton(action: storeRandomBool) { - Label("Store Random Bool", image: .data) - } - ListButton(action: storeRandomDouble) { - Label("Store Random Double", image: .data) - } - ListButton(action: storeRandomInt) { - Label("Store Random Int", image: .data) - } - ListButton(action: storeRandomString) { - Label("Store Random String", image: .data) - } - } - } - .onAppear(perform: refresh) - .navigationTitle("Keychain Services") - } -} - -private extension KeychainServiceScreen { - - func key(for type: String) -> String { - "com.swiftkit.demo.keychain.\(type)" - } - - func storeRandomBool() { - service.set(Bool.random(), for: key(for: "bool"), with: nil) - refresh() - } - - func storeRandomDouble() { - service.set(Double.random(in: 0...10_000), for: key(for: "double"), with: nil) - refresh() - } - - func storeRandomInt() { - service.set(Int.random(in: 0...10_000), for: key(for: "int"), with: nil) - refresh() - } - - func storeRandomString() { - service.set("\(Int.random(in: 0...10_000))", for: key(for: "string"), with: nil) - refresh() - } - - func refresh() { - refreshBool() - refreshDouble() - refreshInteger() - refreshString() - } - - func refreshBool() { - if let bool = service.bool(for: key(for: "bool"), with: nil) { - boolText = "\(bool)" - } else { - boolText = "-" - } - } - - func refreshDouble() { - if let double = service.double(for: key(for: "double"), with: nil) { - doubleText = "\(double)" - } else { - doubleText = "-" - } - } - - func refreshInteger() { - if let int = service.integer(for: key(for: "int"), with: nil) { - intText = "\(int)" - } else { - intText = "-" - } - } - - func refreshString() { - if let string = service.string(for: key(for: "string"), with: nil) { - stringText = "\(string)" - } else { - stringText = "-" - } - } -} - -struct KeychainServiceScreen_Previews: PreviewProvider { - static var previews: some View { - NavigationView { - KeychainServiceScreen() - } - } -} diff --git a/Demo/Shared/Localization/LocalizationScreen.swift b/Demo/Shared/Localization/LocalizationScreen.swift deleted file mode 100644 index 931cbac..0000000 --- a/Demo/Shared/Localization/LocalizationScreen.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// LocalizationScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-12-07. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -import SwiftUI -import SwiftUIKit - -struct LocalizationScreen: View { - - var body: some View { - List { - Section { - ListText("SwiftKit has utils for working with localized content.") - } - - Section(header: Text("Services")) { - ListNavigationLink(destination: LocalizationServiceScreen()) { - Label("Localization Service", image: .service) - } - ListNavigationLink(destination: TranslatorScreen()) { - Label("Translator", image: .flag) - } - } - }.navigationTitle("Keychain") - } -} - -struct LocalizationScreen_Previews: PreviewProvider { - static var previews: some View { - NavigationView { - LocalizationScreen() - } - } -} diff --git a/Demo/Shared/Localization/LocalizationServiceScreen.swift b/Demo/Shared/Localization/LocalizationServiceScreen.swift deleted file mode 100644 index a5c3eb1..0000000 --- a/Demo/Shared/Localization/LocalizationServiceScreen.swift +++ /dev/null @@ -1,73 +0,0 @@ -// -// LocalizationServiceScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-12-07. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -import SwiftKit -import SwiftUI -import SwiftUIKit - -struct LocalizationServiceScreen: View { - - init(service: LocalizationService = StandardLocalizationService()) { - self.service = service - } - - class ViewModel: ObservableObject { - - @Published var locale = Locale(identifier: "en") - } - - private let service: LocalizationService - private let english = Locale(identifier: "en") - private let swedish = Locale(identifier: "sv") - - @State private var title = "" - @State private var text = "" - @StateObject private var state = ViewModel() - - var body: some View { - List { - Section { - ListText("SwiftKit has services for working with localized content and changing locale without restarting the app. This demo uses a StandardLocalizationService.") - } - - Section(header: Text("Locales")) { - Picker("Select locale", selection: $state.locale) { - Text("English").tag(english) - Text("Swedish").tag(swedish) - }.pickerStyle(SegmentedPickerStyle()) - } - - Section(header: Text("Translations")) { - ListText(title).font(.headline) - ListText(text) - } - } - .onAppear(perform: refresh) - .onReceive(state.$locale, perform: { _ in refreshAsync() }) - .navigationTitle("Localization Service") - } -} - -extension LocalizationServiceScreen { - - func refresh() { - try? service.setLocale(state.locale) - title = service.translate("localization_service_title") - text = service.translate("localization_service_text") - } - - func refreshAsync() { - DispatchQueue.main.async(execute: refresh) - } -} - -struct LocalizationServiceScreen_Previews: PreviewProvider { - static var previews: some View { - LocalizationServiceScreen() - } -} diff --git a/Demo/Shared/Localization/TranslatorScreen.swift b/Demo/Shared/Localization/TranslatorScreen.swift deleted file mode 100644 index e13fa9c..0000000 --- a/Demo/Shared/Localization/TranslatorScreen.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// TranslatorScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-12-07. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -import SwiftKit -import SwiftUI -import SwiftUIKit - -struct TranslatorScreen: View { - - init(service: Translator = StandardTranslator()) { - self.service = service - } - - private let service: Translator - - @State private var title = "" - @State private var text = "" - - var body: some View { - List { - Section { - ListText("SwiftKit has translators that can be used to abstract how localized strings are translated. This demo uses a StandardTranslator, which uses the latest locale set for this app.") - } - - Section(header: Text("Translations")) { - ListText(title).font(.headline) - ListText(text) - } - } - .onAppear(perform: refresh) - .navigationTitle("Translator") - } -} - -extension TranslatorScreen { - - func refresh() { - title = service.translate("localization_service_title") - text = service.translate("localization_service_text") - } -} - -struct TranslatorScreen_Previews: PreviewProvider { - static var previews: some View { - TranslatorScreen() - } -} diff --git a/Demo/Shared/Network/NetworkScreen.swift b/Demo/Shared/Network/NetworkScreen.swift deleted file mode 100644 index 1e225a2..0000000 --- a/Demo/Shared/Network/NetworkScreen.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// NetworkScreen.swift -// Demo -// -// Created by Daniel Saidi on 2020-12-07. -// Copyright © 2020 Daniel Saidi. All rights reserved. -// - -import SwiftUI -import SwiftUIKit - -struct NetworkScreen: View { - - var body: some View { - List { - Section { - ListText(""" -SwiftKit contains a bunch of utils for working with network and api-related operations, like requesting and parsing data from an external api. - -This namespace is currently not available as a demo. Instead, checkout the source code. -""") - } - }.navigationTitle("Network") - } -} - -struct NetworkScreen_Previews: PreviewProvider { - static var previews: some View { - NetworkScreen() - } -} diff --git a/Demo/Shared/Resources/Assets.xcassets/AccentColor.colorset/Contents.json b/Demo/Shared/Resources/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index d385e1b..0000000 --- a/Demo/Shared/Resources/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "display-p3", - "components" : { - "alpha" : "1.000", - "blue" : "0x32", - "green" : "0x6A", - "red" : "0xFF" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index e814d9b..0000000 --- a/Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "images" : [ - { - "filename" : "Icon-40.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "20x20" - }, - { - "filename" : "Icon-60.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "20x20" - }, - { - "filename" : "Icon-58.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "29x29" - }, - { - "filename" : "Icon-87.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "29x29" - }, - { - "filename" : "Icon-80.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "40x40" - }, - { - "filename" : "Icon-120.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "40x40" - }, - { - "filename" : "Icon-120.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "60x60" - }, - { - "filename" : "Icon-180.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "60x60" - }, - { - "filename" : "Icon-20.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "20x20" - }, - { - "filename" : "Icon-40.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "20x20" - }, - { - "filename" : "Icon-29.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "29x29" - }, - { - "filename" : "Icon-58.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "29x29" - }, - { - "filename" : "Icon-40.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "40x40" - }, - { - "filename" : "Icon-80.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "40x40" - }, - { - "filename" : "Icon-76.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "76x76" - }, - { - "filename" : "Icon-152.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "76x76" - }, - { - "filename" : "Icon-167.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "83.5x83.5" - }, - { - "filename" : "Icon-1024.png", - "idiom" : "ios-marketing", - "scale" : "1x", - "size" : "1024x1024" - }, - { - "filename" : "Icon-16.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "16x16" - }, - { - "filename" : "Icon-32.png", - "idiom" : "mac", - "scale" : "2x", - "size" : "16x16" - }, - { - "filename" : "Icon-32.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "32x32" - }, - { - "filename" : "Icon-64.png", - "idiom" : "mac", - "scale" : "2x", - "size" : "32x32" - }, - { - "filename" : "Icon-128.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "128x128" - }, - { - "filename" : "Icon-256.png", - "idiom" : "mac", - "scale" : "2x", - "size" : "128x128" - }, - { - "filename" : "Icon-256.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "256x256" - }, - { - "filename" : "Icon-512.png", - "idiom" : "mac", - "scale" : "2x", - "size" : "256x256" - }, - { - "filename" : "Icon-512.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "512x512" - }, - { - "filename" : "Icon-1024.png", - "idiom" : "mac", - "scale" : "2x", - "size" : "512x512" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-1024.png b/Demo/Shared/Resources/Assets.xcassets/AppIcon.appiconset/Icon-1024.png deleted file mode 100644 index 9e3e3047c7ca8aaf0a6069d98998d502165d3a5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 556185 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