diff --git a/.github/workflows/docc.yml b/.github/workflows/docc.yml index 71cc681f..5896c83b 100644 --- a/.github/workflows/docc.yml +++ b/.github/workflows/docc.yml @@ -13,7 +13,7 @@ concurrency: jobs: build: - runs-on: macos-13 + runs-on: macos-latest steps: - name: Checkout Repository uses: actions/checkout@v4 @@ -21,7 +21,7 @@ jobs: fetch-depth: 0 - uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: latest + xcode-version: latest-stable - name: Setup Config file run: | cp Basic-Car-Maintenance.xcconfig.template Basic-Car-Maintenance.xcconfig diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index 3adf497b..adfcf4fe 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -30,12 +30,18 @@ jobs: uses: maxim-lobanov/setup-xcode@v1 with: xcode-version: latest-stable + + - name: Install packages + run: xcodebuild -resolvePackageDependencies + + - name: Enable Build Tools + run: cp fastlane/enable-build-tool-plugins.json ~/Library/org.swift.swiftpm/security/plugins.json - - name: Update dependencies + - name: Install dependencies run: bundle install - name: Install build log formatter run: brew install xcbeautify - name: Run Unit Tests - run: bundle exec fastlane unit_tests + run: FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=60 bundle exec fastlane unit_tests diff --git a/.swiftlint.yml b/.swiftlint.yml index 8ff29ad8..f9e43d30 100644 --- a/.swiftlint.yml +++ b/.swiftlint.yml @@ -4,16 +4,54 @@ disabled_rules: # rule identifiers turned on by default to exclude from running - empty_parentheses_with_trailing_closure opt_in_rules: # some rules are turned off by default, so you need to opt-in - closure_parameter_position - - closing_brace - - comma + - closure_spacing + - collection_alignment - colon + - comma + - compiler_protocol_init + - contains_over_filter_count + - contains_over_filter_is_empty + - contains_over_first_not_nil + - contains_over_range_nil_comparison + - control_statement + - convenience_type - cyclomatic_complexity - duplicate_imports + - dynamic_inline - empty_collection_literal - empty_count + - empty_enum_arguments + - empty_parameters + - empty_parentheses_with_trailing_closure + - empty_xctest_method + - explicit_init - for_where - force_try + - leading_whitespace + - local_doc_comment + - lower_acl_than_parent + - nslocalizedstring_key + - opening_brace + - operator_usage_whitespace + - operator_whitespace + - overridden_super_call + - period_spacing - private_over_fileprivate + - private_swiftui_state + - syntactic_sugar + - test_case_accessibility + - trailing_comma + - trailing_newline + - trailing_semicolon + - unavailable_function + - unused_closure_parameter + - unused_control_flow_label + - unused_enumerated + - unused_optional_binding + - unused_setter_value + - weak_delegate + - xctfail_message + - yoda_condition # Alternatively, specify all rules explicitly by uncommenting this option: # only_rules: # delete `disabled_rules` & `opt_in_rules` if using this diff --git a/Basic-Car-Maintenance-Tests/Shared/Models/ContributorTests.swift b/Basic-Car-Maintenance-Tests/Shared/Models/ContributorTests.swift index 0154751e..80ca1a25 100644 --- a/Basic-Car-Maintenance-Tests/Shared/Models/ContributorTests.swift +++ b/Basic-Car-Maintenance-Tests/Shared/Models/ContributorTests.swift @@ -2,66 +2,69 @@ // ContributorTests.swift // Basic-Car-Maintenance-Tests // -// Created by Drag0ndust on 07.10.23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // -import XCTest +import Foundation +import Testing @testable import Basic_Car_Maintenance -final class ContributorTests: XCTestCase { - private var jsonDecoder: JSONDecoder! - private var jsonEncoder: JSONEncoder! - private let testContributorJson = """ -{ - "login": "Drag0ndust", - "id": 12915108, - "node_id": "MDQ6VXNlcjEyOTE1MTA4", - "avatar_url": "https://avatars.githubusercontent.com/u/12915108?v=4", - "url": "https://api.github.com/users/Drag0ndust", - "html_url": "https://github.com/Drag0ndust", - "contributions": 0 -} -""" - - override func setUpWithError() throws { - jsonDecoder = JSONDecoder() +struct ContributorTests { + private let jsonDecoder = { + let jsonDecoder = JSONDecoder() jsonDecoder.keyDecodingStrategy = .convertFromSnakeCase - - jsonEncoder = JSONEncoder() + return jsonDecoder + }() + + private let jsonEncoder = { + let jsonEncoder = JSONEncoder() jsonEncoder.keyEncodingStrategy = .convertToSnakeCase + return jsonEncoder + }() + + @Test() + func contributorDecoding() throws { + let testContributorJson = """ + { + "login": "Drag0ndust", + "id": 12915108, + "node_id": "MDQ6VXNlcjEyOTE1MTA4", + "avatar_url": "https://avatars.githubusercontent.com/u/12915108?v=4", + "url": "https://api.github.com/users/Drag0ndust", + "html_url": "https://github.com/Drag0ndust", + "contributions": 0 } - - func testContributorDecoding() throws { - guard let data = testContributorJson.data(using: .utf8) else { - XCTFail("Can't decode JSON string") - return - } - +""" + let data = try #require(testContributorJson.data(using: .utf8)) let sut = try jsonDecoder.decode(Contributor.self, from: data) - - XCTAssertEqual(sut.login, "Drag0ndust") - XCTAssertEqual(sut.id, 12915108) - XCTAssertEqual(sut.nodeID, "MDQ6VXNlcjEyOTE1MTA4") - XCTAssertEqual(sut.avatarURL, "https://avatars.githubusercontent.com/u/12915108?v=4") - XCTAssertEqual(sut.url, "https://api.github.com/users/Drag0ndust") - XCTAssertEqual(sut.htmlURL, "https://github.com/Drag0ndust") - XCTAssertEqual(sut.contributions, 0) + + #expect(sut.login == "Drag0ndust") + #expect(sut.id == 12915108) + #expect(sut.nodeID == "MDQ6VXNlcjEyOTE1MTA4") + #expect(sut.avatarURL == "https://avatars.githubusercontent.com/u/12915108?v=4") + #expect(sut.url == "https://api.github.com/users/Drag0ndust") + #expect(sut.htmlURL == "https://github.com/Drag0ndust") + #expect(sut.contributions == 0) } - func testContributorEncoding() throws { - let contributor = Contributor(login: "Drag0ndust", - id: 12915108, - nodeID: "MDQ6VXNlcjEyOTE1MTA4", - avatarURL: "https://avatars.githubusercontent.com/u/12915108?v=4", - url: "https://api.github.com/users/Drag0ndust", - htmlURL: "https://github.com/Drag0ndust", - contributions: 0) + @Test() + func contributorEncoding() throws { + let contributor = Contributor( + login: "Drag0ndust", + id: 12915108, + nodeID: "MDQ6VXNlcjEyOTE1MTA4", + avatarURL: "https://avatars.githubusercontent.com/u/12915108?v=4", + url: "https://api.github.com/users/Drag0ndust", + htmlURL: "https://github.com/Drag0ndust", + contributions: 0 + ) let contributorData = try jsonEncoder.encode(contributor) - // now decode it again and check if the objects are equal + // now decode it again and check if the objects are equal let decodedContributor = try jsonDecoder.decode(Contributor.self, from: contributorData) - XCTAssertEqual(contributor, decodedContributor) + #expect(contributor == decodedContributor) } } diff --git a/Basic-Car-Maintenance-UITests/BasicCarMaintenanceUITests.swift b/Basic-Car-Maintenance-UITests/BasicCarMaintenanceUITests.swift index a13045b2..49045609 100644 --- a/Basic-Car-Maintenance-UITests/BasicCarMaintenanceUITests.swift +++ b/Basic-Car-Maintenance-UITests/BasicCarMaintenanceUITests.swift @@ -2,14 +2,15 @@ // Basic_Car_Maintenance-UITests.swift // Basic-Car-Maintenance-UITests // -// Created by Mikaela Caron on 8/11/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import XCTest final class BasicCarMaintenanceUITests: XCTestCase { - let app = XCUIApplication() + private let app = XCUIApplication() override func setUp() { continueAfterFailure = false diff --git a/Basic-Car-Maintenance-Widget/AppIntent.swift b/Basic-Car-Maintenance-Widget/AppIntent.swift index 9d47fbde..1b9ea0fb 100644 --- a/Basic-Car-Maintenance-Widget/AppIntent.swift +++ b/Basic-Car-Maintenance-Widget/AppIntent.swift @@ -2,7 +2,8 @@ // AppIntent.swift // Basic-Car-Maintenance-Widget // -// Created by Mikaela Caron on 10/4/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import WidgetKit diff --git a/Basic-Car-Maintenance-Widget/BasicCarMaintenanceWidget.swift b/Basic-Car-Maintenance-Widget/BasicCarMaintenanceWidget.swift index 0f4c2e3e..5b638828 100644 --- a/Basic-Car-Maintenance-Widget/BasicCarMaintenanceWidget.swift +++ b/Basic-Car-Maintenance-Widget/BasicCarMaintenanceWidget.swift @@ -2,7 +2,8 @@ // Basic-Car-Maintenance-Widget.swift // Basic-Car-Maintenance-Widget // -// Created by Mikaela Caron on 10/4/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import WidgetKit diff --git a/Basic-Car-Maintenance-Widget/BasicCarMaintenanceWidgetBundle.swift b/Basic-Car-Maintenance-Widget/BasicCarMaintenanceWidgetBundle.swift index 38449de7..650c54ac 100644 --- a/Basic-Car-Maintenance-Widget/BasicCarMaintenanceWidgetBundle.swift +++ b/Basic-Car-Maintenance-Widget/BasicCarMaintenanceWidgetBundle.swift @@ -2,7 +2,8 @@ // BasicCarMaintenanceWidgetBundle.swift // Basic-Car-Maintenance-Widget // -// Created by Mikaela Caron on 10/4/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import WidgetKit diff --git a/Basic-Car-Maintenance.xcodeproj/project.pbxproj b/Basic-Car-Maintenance.xcodeproj/project.pbxproj index 68a2dd8d..4a4be555 100644 --- a/Basic-Car-Maintenance.xcodeproj/project.pbxproj +++ b/Basic-Car-Maintenance.xcodeproj/project.pbxproj @@ -3,56 +3,14 @@ archiveVersion = 1; classes = { }; - objectVersion = 56; + objectVersion = 71; objects = { /* Begin PBXBuildFile section */ - 023057F22ACFAD79006C5A73 /* EditEventDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 023057F12ACFAD79006C5A73 /* EditEventDetailView.swift */; }; - 0CA7ED092AE82BF100609019 /* ContributionTip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CA7ED082AE82BF100609019 /* ContributionTip.swift */; }; - 154984AA2AD9CAEE0015594C /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 154984A92AD9CAEE0015594C /* Constants.swift */; }; - 57CDD99E2ADC3173002EFED0 /* OdometerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57CDD99D2ADC3173002EFED0 /* OdometerViewModel.swift */; }; - 57CDD9A02ADC31A8002EFED0 /* AddOdometerReadingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57CDD99F2ADC31A8002EFED0 /* AddOdometerReadingView.swift */; }; - 57CDD9A42ADC320F002EFED0 /* OdometerReading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57CDD9A32ADC320F002EFED0 /* OdometerReading.swift */; }; - 637505482AEFFBAC00AA5D0B /* FirebaseAnalytics+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 637505472AEFFBAC00AA5D0B /* FirebaseAnalytics+Extension.swift */; }; - 8014A4CF2AD75928005B51F6 /* AppIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8014A4CE2AD75928005B51F6 /* AppIcon.swift */; }; - 8014A4D12AD76034005B51F6 /* ChooseAppIconView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8014A4D02AD76034005B51F6 /* ChooseAppIconView.swift */; }; - 8014A4D32AD77C92005B51F6 /* ChooseAppIconViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8014A4D22AD77C92005B51F6 /* ChooseAppIconViewModel.swift */; }; - 898009792AD1899700604E7C /* ContributorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 898009782AD1899700604E7C /* ContributorTests.swift */; }; - 8A3D74862AD6D9A10000FEEB /* AlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A3D74852AD6D9A10000FEEB /* AlertView.swift */; }; - 8A3D748A2AD9C3E00000FEEB /* MainTabViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A3D74892AD9C3E00000FEEB /* MainTabViewModel.swift */; }; - 8A3D748C2AD9C41D0000FEEB /* AlertItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A3D748B2AD9C41D0000FEEB /* AlertItem.swift */; }; - 8AEE816F2ACF37F800FC0C2A /* Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AEE816E2ACF37F800FC0C2A /* Action.swift */; }; - 8AEE81722ACF384D00FC0C2A /* MainTabView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AEE81712ACF384D00FC0C2A /* MainTabView.swift */; }; - E4345E622B4CDA7B0086D04B /* WelcomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4345E612B4CDA7B0086D04B /* WelcomeView.swift */; }; - E4345E642B4CE0500086D04B /* WelcomeViewAddVehicle.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4345E632B4CE0500086D04B /* WelcomeViewAddVehicle.swift */; }; - E55B630D2B079E5A006BDDDF /* EditVehicleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E55B630C2B079E5A006BDDDF /* EditVehicleView.swift */; }; - E58499662ACDDA8B00634660 /* ContributorsListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E58499652ACDDA8B00634660 /* ContributorsListView.swift */; }; - E58499682ACDDA9A00634660 /* ContributorsProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E58499672ACDDA9A00634660 /* ContributorsProfileView.swift */; }; - E584996A2ACDDAFF00634660 /* Contributor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E58499692ACDDAFF00634660 /* Contributor.swift */; }; - FF09FC912AB6FF44006BE61A /* AuthenticationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF09FC902AB6FF44006BE61A /* AuthenticationView.swift */; }; FF153AFF2B07C3E000D0BA30 /* FirebaseCrashlytics in Frameworks */ = {isa = PBXBuildFile; productRef = FF153AFE2B07C3E000D0BA30 /* FirebaseCrashlytics */; }; - FF218EF62B00865F0025A533 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF218EF52B00865F0025A533 /* AnalyticsService.swift */; }; - FF3DDF522AA4D28F009D91C4 /* DashboardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF3DDF512AA4D28F009D91C4 /* DashboardViewModel.swift */; }; FF4E82BE2AD39863004949AF /* FirebaseRemoteConfig in Frameworks */ = {isa = PBXBuildFile; productRef = FF4E82BD2AD39863004949AF /* FirebaseRemoteConfig */; }; FF4E82C02AD39863004949AF /* FirebaseRemoteConfigSwift in Frameworks */ = {isa = PBXBuildFile; productRef = FF4E82BF2AD39863004949AF /* FirebaseRemoteConfigSwift */; }; FF4E82C22AD39863004949AF /* FirebaseStorage in Frameworks */ = {isa = PBXBuildFile; productRef = FF4E82C12AD39863004949AF /* FirebaseStorage */; }; - FF50DDFB2B12944900E87362 /* EditOdometerReadingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF50DDFA2B12944900E87362 /* EditOdometerReadingView.swift */; }; - FF5D13A72A86C2D600BC9BD6 /* BasicCarMaintenanceApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF5D13A62A86C2D600BC9BD6 /* BasicCarMaintenanceApp.swift */; }; - FF5D13AB2A86C2D800BC9BD6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FF5D13AA2A86C2D800BC9BD6 /* Assets.xcassets */; }; - FF5D13AF2A86C2D800BC9BD6 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FF5D13AE2A86C2D800BC9BD6 /* Preview Assets.xcassets */; }; - FF5D13C32A86C2D800BC9BD6 /* BasicCarMaintenanceUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF5D13C22A86C2D800BC9BD6 /* BasicCarMaintenanceUITests.swift */; }; - FF748B5E2AB3589C004748A5 /* AuthenticationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF748B5D2AB3589C004748A5 /* AuthenticationViewModel.swift */; }; - FF755B3C2A908E3E00F49A13 /* DashboardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF755B3B2A908E3E00F49A13 /* DashboardView.swift */; }; - FF755B3E2A908E7A00F49A13 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF755B3D2A908E7A00F49A13 /* SettingsView.swift */; }; - FF755B432A90915E00F49A13 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = FF755B422A90915E00F49A13 /* Localizable.xcstrings */; }; - FF755B462A90969D00F49A13 /* Bundle+extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF755B452A90969D00F49A13 /* Bundle+extension.swift */; }; - FF755B492A909A0000F49A13 /* AddMaintenanceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF755B482A909A0000F49A13 /* AddMaintenanceView.swift */; }; - FFAA56ED2AC8905C000120EE /* Documentation.docc in Sources */ = {isa = PBXBuildFile; fileRef = FFAA56EC2AC8905C000120EE /* Documentation.docc */; }; - FFBFE0912A98EFEC000A9BEB /* MaintenanceEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFBFE0902A98EFEC000A9BEB /* MaintenanceEvent.swift */; }; - FFBFE0932A98F212000A9BEB /* Vehicle.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFBFE0922A98F212000A9BEB /* Vehicle.swift */; }; - FFBFE0972A98F7CB000A9BEB /* AddVehicleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFBFE0962A98F7CB000A9BEB /* AddVehicleView.swift */; }; - FFC67D1D2AAEF7920073B338 /* SettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFC67D1C2AAEF7920073B338 /* SettingsViewModel.swift */; }; - FFC8CDA42AA385E800D129A6 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = FFC8CDA32AA385E800D129A6 /* GoogleService-Info.plist */; }; FFC8CDA72AA3867A00D129A6 /* FirebaseAnalytics in Frameworks */ = {isa = PBXBuildFile; productRef = FFC8CDA62AA3867A00D129A6 /* FirebaseAnalytics */; }; FFC8CDA92AA3867A00D129A6 /* FirebaseAnalyticsSwift in Frameworks */ = {isa = PBXBuildFile; productRef = FFC8CDA82AA3867A00D129A6 /* FirebaseAnalyticsSwift */; }; FFC8CDAB2AA3867A00D129A6 /* FirebaseAuth in Frameworks */ = {isa = PBXBuildFile; productRef = FFC8CDAA2AA3867A00D129A6 /* FirebaseAuth */; }; @@ -61,12 +19,7 @@ FFC8CDB32AA4226900D129A6 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FFC8CDB22AA4226900D129A6 /* AdSupport.framework */; }; FFDADF7F2ACD35A100DDEF79 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FFDADF7E2ACD35A100DDEF79 /* WidgetKit.framework */; }; FFDADF812ACD35A100DDEF79 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FFDADF802ACD35A100DDEF79 /* SwiftUI.framework */; }; - FFDADF842ACD35A100DDEF79 /* BasicCarMaintenanceWidgetBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFDADF832ACD35A100DDEF79 /* BasicCarMaintenanceWidgetBundle.swift */; }; - FFDADF862ACD35A100DDEF79 /* BasicCarMaintenanceWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFDADF852ACD35A100DDEF79 /* BasicCarMaintenanceWidget.swift */; }; - FFDADF882ACD35A100DDEF79 /* AppIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFDADF872ACD35A100DDEF79 /* AppIntent.swift */; }; - FFDADF8A2ACD35A200DDEF79 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FFDADF892ACD35A200DDEF79 /* Assets.xcassets */; }; FFDADF8E2ACD35A200DDEF79 /* Basic-Car-Maintenance-WidgetExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = FFDADF7D2ACD35A100DDEF79 /* Basic-Car-Maintenance-WidgetExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - FFE0AF562AD66C3500AB46F8 /* OdometerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFE0AF552AD66C3500AB46F8 /* OdometerView.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -108,72 +61,43 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 023057F12ACFAD79006C5A73 /* EditEventDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditEventDetailView.swift; sourceTree = "<group>"; }; - 0CA7ED082AE82BF100609019 /* ContributionTip.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContributionTip.swift; sourceTree = "<group>"; }; - 154984A92AD9CAEE0015594C /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; }; - 57CDD99D2ADC3173002EFED0 /* OdometerViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OdometerViewModel.swift; sourceTree = "<group>"; }; - 57CDD99F2ADC31A8002EFED0 /* AddOdometerReadingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddOdometerReadingView.swift; sourceTree = "<group>"; }; - 57CDD9A32ADC320F002EFED0 /* OdometerReading.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OdometerReading.swift; sourceTree = "<group>"; }; - 637505472AEFFBAC00AA5D0B /* FirebaseAnalytics+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FirebaseAnalytics+Extension.swift"; sourceTree = "<group>"; }; - 8014A4CE2AD75928005B51F6 /* AppIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppIcon.swift; sourceTree = "<group>"; }; - 8014A4D02AD76034005B51F6 /* ChooseAppIconView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChooseAppIconView.swift; sourceTree = "<group>"; }; - 8014A4D22AD77C92005B51F6 /* ChooseAppIconViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChooseAppIconViewModel.swift; sourceTree = "<group>"; }; - 898009782AD1899700604E7C /* ContributorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContributorTests.swift; sourceTree = "<group>"; }; - 8A3D74852AD6D9A10000FEEB /* AlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertView.swift; sourceTree = "<group>"; }; - 8A3D74892AD9C3E00000FEEB /* MainTabViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTabViewModel.swift; sourceTree = "<group>"; }; - 8A3D748B2AD9C41D0000FEEB /* AlertItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertItem.swift; sourceTree = "<group>"; }; - 8AEE816E2ACF37F800FC0C2A /* Action.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Action.swift; sourceTree = "<group>"; }; - 8AEE81712ACF384D00FC0C2A /* MainTabView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTabView.swift; sourceTree = "<group>"; }; - 8AEE81732ACF394E00FC0C2A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; - E4345E612B4CDA7B0086D04B /* WelcomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeView.swift; sourceTree = "<group>"; }; - E4345E632B4CE0500086D04B /* WelcomeViewAddVehicle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeViewAddVehicle.swift; sourceTree = "<group>"; }; - E55B630C2B079E5A006BDDDF /* EditVehicleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditVehicleView.swift; sourceTree = "<group>"; }; - E58499652ACDDA8B00634660 /* ContributorsListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContributorsListView.swift; sourceTree = "<group>"; }; - E58499672ACDDA9A00634660 /* ContributorsProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContributorsProfileView.swift; sourceTree = "<group>"; }; - E58499692ACDDAFF00634660 /* Contributor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Contributor.swift; sourceTree = "<group>"; }; - FF0813562AD0A83000910EFA /* UITests.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = UITests.xcconfig; sourceTree = "<group>"; }; - FF0813572AD0A92700910EFA /* Widget.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Widget.xcconfig; sourceTree = "<group>"; }; FF098EFA2AB3424E003EC0FE /* Basic-Car-Maintenance.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Basic-Car-Maintenance.xcconfig"; sourceTree = SOURCE_ROOT; }; - FF09FC902AB6FF44006BE61A /* AuthenticationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationView.swift; sourceTree = "<group>"; }; - FF218EF52B00865F0025A533 /* AnalyticsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsService.swift; sourceTree = "<group>"; }; - FF3DDF512AA4D28F009D91C4 /* DashboardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashboardViewModel.swift; sourceTree = "<group>"; }; - FF50DDFA2B12944900E87362 /* EditOdometerReadingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditOdometerReadingView.swift; sourceTree = "<group>"; }; FF5D13A32A86C2D600BC9BD6 /* Basic-Car-Maintenance.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Basic-Car-Maintenance.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - FF5D13A62A86C2D600BC9BD6 /* BasicCarMaintenanceApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BasicCarMaintenanceApp.swift; sourceTree = "<group>"; }; - FF5D13AA2A86C2D800BC9BD6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; - FF5D13AC2A86C2D800BC9BD6 /* Basic_Car_Maintenance.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Basic_Car_Maintenance.entitlements; sourceTree = "<group>"; }; - FF5D13AE2A86C2D800BC9BD6 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; }; FF5D13B42A86C2D800BC9BD6 /* Basic-Car-Maintenance-Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Basic-Car-Maintenance-Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; FF5D13BE2A86C2D800BC9BD6 /* Basic-Car-Maintenance-UITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Basic-Car-Maintenance-UITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - FF5D13C22A86C2D800BC9BD6 /* BasicCarMaintenanceUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BasicCarMaintenanceUITests.swift; sourceTree = "<group>"; }; - FF748B5D2AB3589C004748A5 /* AuthenticationViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationViewModel.swift; sourceTree = "<group>"; }; - FF755B3B2A908E3E00F49A13 /* DashboardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashboardView.swift; sourceTree = "<group>"; }; - FF755B3D2A908E7A00F49A13 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; }; - FF755B422A90915E00F49A13 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = "<group>"; }; - FF755B452A90969D00F49A13 /* Bundle+extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Bundle+extension.swift"; sourceTree = "<group>"; }; - FF755B482A909A0000F49A13 /* AddMaintenanceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddMaintenanceView.swift; sourceTree = "<group>"; }; FFA392762C54738E00A0AD6D /* Basic-Car-Maintenance.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = "Basic-Car-Maintenance.xctestplan"; sourceTree = "<group>"; }; - FFA392772C547CA300A0AD6D /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; }; - FFAA56EC2AC8905C000120EE /* Documentation.docc */ = {isa = PBXFileReference; lastKnownFileType = folder.documentationcatalog; path = Documentation.docc; sourceTree = "<group>"; }; - FFBE79BB2AD0A57D0005524E /* UnitTests.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = UnitTests.xcconfig; sourceTree = "<group>"; }; - FFBFE0902A98EFEC000A9BEB /* MaintenanceEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MaintenanceEvent.swift; sourceTree = "<group>"; }; - FFBFE0922A98F212000A9BEB /* Vehicle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Vehicle.swift; sourceTree = "<group>"; }; - FFBFE0962A98F7CB000A9BEB /* AddVehicleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddVehicleView.swift; sourceTree = "<group>"; }; - FFC67D1C2AAEF7920073B338 /* SettingsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewModel.swift; sourceTree = "<group>"; }; - FFC8CDA32AA385E800D129A6 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; }; FFC8CDB22AA4226900D129A6 /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS17.0.sdk/System/Library/Frameworks/AdSupport.framework; sourceTree = DEVELOPER_DIR; }; - FFDADF5D2ACCE9AB00DDEF79 /* Project.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = "<group>"; }; FFDADF7D2ACD35A100DDEF79 /* Basic-Car-Maintenance-WidgetExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Basic-Car-Maintenance-WidgetExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; FFDADF7E2ACD35A100DDEF79 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; }; FFDADF802ACD35A100DDEF79 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; }; - FFDADF832ACD35A100DDEF79 /* BasicCarMaintenanceWidgetBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BasicCarMaintenanceWidgetBundle.swift; sourceTree = "<group>"; }; - FFDADF852ACD35A100DDEF79 /* BasicCarMaintenanceWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BasicCarMaintenanceWidget.swift; sourceTree = "<group>"; }; - FFDADF872ACD35A100DDEF79 /* AppIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppIntent.swift; sourceTree = "<group>"; }; - FFDADF892ACD35A200DDEF79 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; - FFDADF8B2ACD35A200DDEF79 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; - FFE0AF552AD66C3500AB46F8 /* OdometerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OdometerView.swift; sourceTree = "<group>"; }; /* End PBXFileReference section */ +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + FF52DEBC2CADE9EF0023F8DE /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Shared/Info.plist, + Shared/PrivacyInfo.xcprivacy, + ); + target = FF5D13A22A86C2D600BC9BD6 /* Basic-Car-Maintenance */; + }; + FF52DEC82CADEA000023F8DE /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Info.plist, + ); + target = FFDADF7C2ACD35A100DDEF79 /* Basic-Car-Maintenance-WidgetExtension */; + }; +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + FF52DE902CADE9EF0023F8DE /* Basic-Car-Maintenance */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (FF52DEBC2CADE9EF0023F8DE /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = "Basic-Car-Maintenance"; sourceTree = "<group>"; }; + FF52DEC22CADEA000023F8DE /* Basic-Car-Maintenance-Widget */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (FF52DEC82CADEA000023F8DE /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = "Basic-Car-Maintenance-Widget"; sourceTree = "<group>"; }; + FF52DECC2CADEA030023F8DE /* Basic-Car-Maintenance-Tests */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = "Basic-Car-Maintenance-Tests"; sourceTree = "<group>"; }; + FF52DECF2CADEA060023F8DE /* Basic-Car-Maintenance-UITests */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = "Basic-Car-Maintenance-UITests"; sourceTree = "<group>"; }; + FF52DED52CADEA150023F8DE /* Configurations */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Configurations; sourceTree = "<group>"; }; +/* End PBXFileSystemSynchronizedRootGroup section */ + /* Begin PBXFrameworksBuildPhase section */ FF5D13A02A86C2D600BC9BD6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; @@ -218,119 +142,16 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0CA7ED072AE82BD100609019 /* Tips */ = { - isa = PBXGroup; - children = ( - 0CA7ED082AE82BF100609019 /* ContributionTip.swift */, - ); - path = Tips; - sourceTree = "<group>"; - }; - 57CDD99B2ADC3150002EFED0 /* Views */ = { - isa = PBXGroup; - children = ( - FFE0AF552AD66C3500AB46F8 /* OdometerView.swift */, - 57CDD99F2ADC31A8002EFED0 /* AddOdometerReadingView.swift */, - FF50DDFA2B12944900E87362 /* EditOdometerReadingView.swift */, - ); - path = Views; - sourceTree = "<group>"; - }; - 57CDD99C2ADC3159002EFED0 /* ViewModels */ = { - isa = PBXGroup; - children = ( - 57CDD99D2ADC3173002EFED0 /* OdometerViewModel.swift */, - ); - path = ViewModels; - sourceTree = "<group>"; - }; - 898009762AD1897B00604E7C /* Shared */ = { - isa = PBXGroup; - children = ( - 898009772AD1897F00604E7C /* Models */, - ); - path = Shared; - sourceTree = "<group>"; - }; - 898009772AD1897F00604E7C /* Models */ = { - isa = PBXGroup; - children = ( - 898009782AD1899700604E7C /* ContributorTests.swift */, - ); - path = Models; - sourceTree = "<group>"; - }; - 8A3D74832AD6D9870000FEEB /* MainView */ = { - isa = PBXGroup; - children = ( - 8A3D74842AD6D9920000FEEB /* Views */, - 8A3D74882AD9C3B10000FEEB /* ViewModels */, - ); - path = MainView; - sourceTree = "<group>"; - }; - 8A3D74842AD6D9920000FEEB /* Views */ = { - isa = PBXGroup; - children = ( - 8AEE81712ACF384D00FC0C2A /* MainTabView.swift */, - 8A3D74852AD6D9A10000FEEB /* AlertView.swift */, - ); - path = Views; - sourceTree = "<group>"; - }; - 8A3D74882AD9C3B10000FEEB /* ViewModels */ = { - isa = PBXGroup; - children = ( - 8A3D74892AD9C3E00000FEEB /* MainTabViewModel.swift */, - ); - path = ViewModels; - sourceTree = "<group>"; - }; - E4345E602B4CDA4F0086D04B /* Onboarding */ = { - isa = PBXGroup; - children = ( - E474A3A12B5953A40015DF51 /* Views */, - ); - path = Onboarding; - sourceTree = "<group>"; - }; - E474A3A12B5953A40015DF51 /* Views */ = { - isa = PBXGroup; - children = ( - E4345E612B4CDA7B0086D04B /* WelcomeView.swift */, - E4345E632B4CE0500086D04B /* WelcomeViewAddVehicle.swift */, - ); - path = Views; - sourceTree = "<group>"; - }; - FF3DDF492AA4386C009D91C4 /* Views */ = { - isa = PBXGroup; - children = ( - FF755B3B2A908E3E00F49A13 /* DashboardView.swift */, - FF755B482A909A0000F49A13 /* AddMaintenanceView.swift */, - 023057F12ACFAD79006C5A73 /* EditEventDetailView.swift */, - ); - path = Views; - sourceTree = "<group>"; - }; - FF3DDF502AA4D282009D91C4 /* ViewModels */ = { - isa = PBXGroup; - children = ( - FF3DDF512AA4D28F009D91C4 /* DashboardViewModel.swift */, - ); - path = ViewModels; - sourceTree = "<group>"; - }; FF5D139A2A86C2D500BC9BD6 = { isa = PBXGroup; children = ( FFA392762C54738E00A0AD6D /* Basic-Car-Maintenance.xctestplan */, - FFBE79BA2AD0A48C0005524E /* Configurations */, + FF52DED52CADEA150023F8DE /* Configurations */, FF098EFA2AB3424E003EC0FE /* Basic-Car-Maintenance.xcconfig */, - FF5D13A52A86C2D600BC9BD6 /* Basic-Car-Maintenance */, - FFDADF822ACD35A100DDEF79 /* Basic-Car-Maintenance-Widget */, - FF5D13B72A86C2D800BC9BD6 /* Basic-Car-Maintenance-Tests */, - FF5D13C12A86C2D800BC9BD6 /* Basic-Car-Maintenance-UITests */, + FF52DE902CADE9EF0023F8DE /* Basic-Car-Maintenance */, + FF52DEC22CADEA000023F8DE /* Basic-Car-Maintenance-Widget */, + FF52DECC2CADEA030023F8DE /* Basic-Car-Maintenance-Tests */, + FF52DECF2CADEA060023F8DE /* Basic-Car-Maintenance-UITests */, FF5D13A42A86C2D600BC9BD6 /* Products */, FFC8CDB12AA4226900D129A6 /* Frameworks */, ); @@ -347,140 +168,6 @@ name = Products; sourceTree = "<group>"; }; - FF5D13A52A86C2D600BC9BD6 /* Basic-Car-Maintenance */ = { - isa = PBXGroup; - children = ( - FFAA56EC2AC8905C000120EE /* Documentation.docc */, - FF755B412A908F4100F49A13 /* Shared */, - FF5D13AA2A86C2D800BC9BD6 /* Assets.xcassets */, - FF5D13AC2A86C2D800BC9BD6 /* Basic_Car_Maintenance.entitlements */, - FF5D13AD2A86C2D800BC9BD6 /* Preview Content */, - ); - path = "Basic-Car-Maintenance"; - sourceTree = "<group>"; - }; - FF5D13AD2A86C2D800BC9BD6 /* Preview Content */ = { - isa = PBXGroup; - children = ( - FF5D13AE2A86C2D800BC9BD6 /* Preview Assets.xcassets */, - ); - path = "Preview Content"; - sourceTree = "<group>"; - }; - FF5D13B72A86C2D800BC9BD6 /* Basic-Car-Maintenance-Tests */ = { - isa = PBXGroup; - children = ( - 898009762AD1897B00604E7C /* Shared */, - ); - path = "Basic-Car-Maintenance-Tests"; - sourceTree = "<group>"; - }; - FF5D13C12A86C2D800BC9BD6 /* Basic-Car-Maintenance-UITests */ = { - isa = PBXGroup; - children = ( - FF5D13C22A86C2D800BC9BD6 /* BasicCarMaintenanceUITests.swift */, - ); - path = "Basic-Car-Maintenance-UITests"; - sourceTree = "<group>"; - }; - FF755B3F2A908EC400F49A13 /* Dashboard */ = { - isa = PBXGroup; - children = ( - FF3DDF492AA4386C009D91C4 /* Views */, - FF3DDF502AA4D282009D91C4 /* ViewModels */, - ); - path = Dashboard; - sourceTree = "<group>"; - }; - FF755B402A908EC900F49A13 /* Settings */ = { - isa = PBXGroup; - children = ( - FFC67D1E2AAEF7960073B338 /* Views */, - FFC67D1F2AAEF7A00073B338 /* ViewModels */, - ); - path = Settings; - sourceTree = "<group>"; - }; - FF755B412A908F4100F49A13 /* Shared */ = { - isa = PBXGroup; - children = ( - FF755B422A90915E00F49A13 /* Localizable.xcstrings */, - FFC8CDA32AA385E800D129A6 /* GoogleService-Info.plist */, - 8AEE81732ACF394E00FC0C2A /* Info.plist */, - FFA392772C547CA300A0AD6D /* PrivacyInfo.xcprivacy */, - FF5D13A62A86C2D600BC9BD6 /* BasicCarMaintenanceApp.swift */, - E4345E602B4CDA4F0086D04B /* Onboarding */, - 8A3D74832AD6D9870000FEEB /* MainView */, - FFBFE08F2A98EFDD000A9BEB /* Models */, - FF755B3F2A908EC400F49A13 /* Dashboard */, - FFE0AF542AD66C1E00AB46F8 /* Odometer */, - FF755B402A908EC900F49A13 /* Settings */, - 0CA7ED072AE82BD100609019 /* Tips */, - FF755B442A90968D00F49A13 /* Utilities */, - ); - path = Shared; - sourceTree = "<group>"; - }; - FF755B442A90968D00F49A13 /* Utilities */ = { - isa = PBXGroup; - children = ( - FF755B452A90969D00F49A13 /* Bundle+extension.swift */, - 154984A92AD9CAEE0015594C /* Constants.swift */, - 637505472AEFFBAC00AA5D0B /* FirebaseAnalytics+Extension.swift */, - FF218EF52B00865F0025A533 /* AnalyticsService.swift */, - ); - path = Utilities; - sourceTree = "<group>"; - }; - FFBE79BA2AD0A48C0005524E /* Configurations */ = { - isa = PBXGroup; - children = ( - FFDADF5D2ACCE9AB00DDEF79 /* Project.xcconfig */, - FFBE79BB2AD0A57D0005524E /* UnitTests.xcconfig */, - FF0813562AD0A83000910EFA /* UITests.xcconfig */, - FF0813572AD0A92700910EFA /* Widget.xcconfig */, - ); - path = Configurations; - sourceTree = "<group>"; - }; - FFBFE08F2A98EFDD000A9BEB /* Models */ = { - isa = PBXGroup; - children = ( - FFBFE0902A98EFEC000A9BEB /* MaintenanceEvent.swift */, - E58499692ACDDAFF00634660 /* Contributor.swift */, - FFBFE0922A98F212000A9BEB /* Vehicle.swift */, - 8AEE816E2ACF37F800FC0C2A /* Action.swift */, - 8014A4CE2AD75928005B51F6 /* AppIcon.swift */, - 57CDD9A32ADC320F002EFED0 /* OdometerReading.swift */, - 8A3D748B2AD9C41D0000FEEB /* AlertItem.swift */, - ); - path = Models; - sourceTree = "<group>"; - }; - FFC67D1E2AAEF7960073B338 /* Views */ = { - isa = PBXGroup; - children = ( - FF755B3D2A908E7A00F49A13 /* SettingsView.swift */, - 8014A4D02AD76034005B51F6 /* ChooseAppIconView.swift */, - FFBFE0962A98F7CB000A9BEB /* AddVehicleView.swift */, - E58499652ACDDA8B00634660 /* ContributorsListView.swift */, - E58499672ACDDA9A00634660 /* ContributorsProfileView.swift */, - FF09FC902AB6FF44006BE61A /* AuthenticationView.swift */, - E55B630C2B079E5A006BDDDF /* EditVehicleView.swift */, - ); - path = Views; - sourceTree = "<group>"; - }; - FFC67D1F2AAEF7A00073B338 /* ViewModels */ = { - isa = PBXGroup; - children = ( - FFC67D1C2AAEF7920073B338 /* SettingsViewModel.swift */, - FF748B5D2AB3589C004748A5 /* AuthenticationViewModel.swift */, - 8014A4D22AD77C92005B51F6 /* ChooseAppIconViewModel.swift */, - ); - path = ViewModels; - sourceTree = "<group>"; - }; FFC8CDB12AA4226900D129A6 /* Frameworks */ = { isa = PBXGroup; children = ( @@ -491,27 +178,6 @@ name = Frameworks; sourceTree = "<group>"; }; - FFDADF822ACD35A100DDEF79 /* Basic-Car-Maintenance-Widget */ = { - isa = PBXGroup; - children = ( - FFDADF832ACD35A100DDEF79 /* BasicCarMaintenanceWidgetBundle.swift */, - FFDADF852ACD35A100DDEF79 /* BasicCarMaintenanceWidget.swift */, - FFDADF872ACD35A100DDEF79 /* AppIntent.swift */, - FFDADF892ACD35A200DDEF79 /* Assets.xcassets */, - FFDADF8B2ACD35A200DDEF79 /* Info.plist */, - ); - path = "Basic-Car-Maintenance-Widget"; - sourceTree = "<group>"; - }; - FFE0AF542AD66C1E00AB46F8 /* Odometer */ = { - isa = PBXGroup; - children = ( - 57CDD99B2ADC3150002EFED0 /* Views */, - 57CDD99C2ADC3159002EFED0 /* ViewModels */, - ); - path = Odometer; - sourceTree = "<group>"; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -522,15 +188,18 @@ FF5D139F2A86C2D600BC9BD6 /* Sources */, FF5D13A02A86C2D600BC9BD6 /* Frameworks */, FF5D13A12A86C2D600BC9BD6 /* Resources */, - FF748B5A2AB34A61004748A5 /* SwiftLintScript */, FFDADF8F2ACD35A200DDEF79 /* Embed Foundation Extensions */, FF50DDC22B07DF0C00E87362 /* ShellScript */, ); buildRules = ( ); dependencies = ( + C90C058C2CB0FC8000046C42 /* PBXTargetDependency */, FFDADF8D2ACD35A200DDEF79 /* PBXTargetDependency */, ); + fileSystemSynchronizedGroups = ( + FF52DE902CADE9EF0023F8DE /* Basic-Car-Maintenance */, + ); name = "Basic-Car-Maintenance"; packageProductDependencies = ( FFC8CDA62AA3867A00D129A6 /* FirebaseAnalytics */, @@ -560,6 +229,9 @@ dependencies = ( FF5D13B62A86C2D800BC9BD6 /* PBXTargetDependency */, ); + fileSystemSynchronizedGroups = ( + FF52DECC2CADEA030023F8DE /* Basic-Car-Maintenance-Tests */, + ); name = "Basic-Car-Maintenance-Tests"; productName = "Basic-Car-MaintenanceTests"; productReference = FF5D13B42A86C2D800BC9BD6 /* Basic-Car-Maintenance-Tests.xctest */; @@ -578,6 +250,9 @@ dependencies = ( FF5D13C02A86C2D800BC9BD6 /* PBXTargetDependency */, ); + fileSystemSynchronizedGroups = ( + FF52DECF2CADEA060023F8DE /* Basic-Car-Maintenance-UITests */, + ); name = "Basic-Car-Maintenance-UITests"; productName = "Basic-Car-MaintenanceUITests"; productReference = FF5D13BE2A86C2D800BC9BD6 /* Basic-Car-Maintenance-UITests.xctest */; @@ -595,6 +270,9 @@ ); dependencies = ( ); + fileSystemSynchronizedGroups = ( + FF52DEC22CADEA000023F8DE /* Basic-Car-Maintenance-Widget */, + ); name = "Basic-Car-Maintenance-WidgetExtension"; productName = "Basic-Car-Maintenance-WidgetExtension"; productReference = FFDADF7D2ACD35A100DDEF79 /* Basic-Car-Maintenance-WidgetExtension.appex */; @@ -647,6 +325,7 @@ mainGroup = FF5D139A2A86C2D500BC9BD6; packageReferences = ( FFC8CDA52AA3867A00D129A6 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */, + C90C058A2CB0FC5800046C42 /* XCRemoteSwiftPackageReference "SwiftLintPlugins" */, ); productRefGroup = FF5D13A42A86C2D600BC9BD6 /* Products */; projectDirPath = ""; @@ -665,10 +344,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - FF5D13AF2A86C2D800BC9BD6 /* Preview Assets.xcassets in Resources */, - FFC8CDA42AA385E800D129A6 /* GoogleService-Info.plist in Resources */, - FF5D13AB2A86C2D800BC9BD6 /* Assets.xcassets in Resources */, - FF755B432A90915E00F49A13 /* Localizable.xcstrings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -690,7 +365,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - FFDADF8A2ACD35A200DDEF79 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -720,25 +394,6 @@ shellPath = /bin/sh; shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\n\"${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run\"\n"; }; - FF748B5A2AB34A61004748A5 /* SwiftLintScript */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = SwiftLintScript; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\nif [[ \"$(uname -m)\" == arm64 ]]; then\n export PATH=\"/opt/homebrew/bin:$PATH\"\nfi\n\nif which swiftlint > /dev/null; then\n swiftlint\nelse\n echo \"warning: SwiftLint not installed\"\nfi\n"; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -746,43 +401,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 154984AA2AD9CAEE0015594C /* Constants.swift in Sources */, - FFBFE0912A98EFEC000A9BEB /* MaintenanceEvent.swift in Sources */, - 57CDD9A42ADC320F002EFED0 /* OdometerReading.swift in Sources */, - E58499682ACDDA9A00634660 /* ContributorsProfileView.swift in Sources */, - FF755B492A909A0000F49A13 /* AddMaintenanceView.swift in Sources */, - FF09FC912AB6FF44006BE61A /* AuthenticationView.swift in Sources */, - FF50DDFB2B12944900E87362 /* EditOdometerReadingView.swift in Sources */, - 023057F22ACFAD79006C5A73 /* EditEventDetailView.swift in Sources */, - 637505482AEFFBAC00AA5D0B /* FirebaseAnalytics+Extension.swift in Sources */, - 8A3D74862AD6D9A10000FEEB /* AlertView.swift in Sources */, - 57CDD9A02ADC31A8002EFED0 /* AddOdometerReadingView.swift in Sources */, - 57CDD99E2ADC3173002EFED0 /* OdometerViewModel.swift in Sources */, - E4345E642B4CE0500086D04B /* WelcomeViewAddVehicle.swift in Sources */, - E55B630D2B079E5A006BDDDF /* EditVehicleView.swift in Sources */, - FF755B3E2A908E7A00F49A13 /* SettingsView.swift in Sources */, - FF3DDF522AA4D28F009D91C4 /* DashboardViewModel.swift in Sources */, - FFE0AF562AD66C3500AB46F8 /* OdometerView.swift in Sources */, - 8AEE816F2ACF37F800FC0C2A /* Action.swift in Sources */, - 0CA7ED092AE82BF100609019 /* ContributionTip.swift in Sources */, - FFBFE0972A98F7CB000A9BEB /* AddVehicleView.swift in Sources */, - 8A3D748C2AD9C41D0000FEEB /* AlertItem.swift in Sources */, - 8A3D748A2AD9C3E00000FEEB /* MainTabViewModel.swift in Sources */, - E584996A2ACDDAFF00634660 /* Contributor.swift in Sources */, - 8014A4D32AD77C92005B51F6 /* ChooseAppIconViewModel.swift in Sources */, - 8014A4CF2AD75928005B51F6 /* AppIcon.swift in Sources */, - FFC67D1D2AAEF7920073B338 /* SettingsViewModel.swift in Sources */, - FF755B3C2A908E3E00F49A13 /* DashboardView.swift in Sources */, - 8AEE81722ACF384D00FC0C2A /* MainTabView.swift in Sources */, - E58499662ACDDA8B00634660 /* ContributorsListView.swift in Sources */, - FFBFE0932A98F212000A9BEB /* Vehicle.swift in Sources */, - FF5D13A72A86C2D600BC9BD6 /* BasicCarMaintenanceApp.swift in Sources */, - E4345E622B4CDA7B0086D04B /* WelcomeView.swift in Sources */, - 8014A4D12AD76034005B51F6 /* ChooseAppIconView.swift in Sources */, - FF218EF62B00865F0025A533 /* AnalyticsService.swift in Sources */, - FF748B5E2AB3589C004748A5 /* AuthenticationViewModel.swift in Sources */, - FF755B462A90969D00F49A13 /* Bundle+extension.swift in Sources */, - FFAA56ED2AC8905C000120EE /* Documentation.docc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -790,7 +408,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 898009792AD1899700604E7C /* ContributorTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -798,7 +415,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - FF5D13C32A86C2D800BC9BD6 /* BasicCarMaintenanceUITests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -806,15 +422,16 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - FFDADF842ACD35A100DDEF79 /* BasicCarMaintenanceWidgetBundle.swift in Sources */, - FFDADF862ACD35A100DDEF79 /* BasicCarMaintenanceWidget.swift in Sources */, - FFDADF882ACD35A100DDEF79 /* AppIntent.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + C90C058C2CB0FC8000046C42 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + productRef = C90C058B2CB0FC8000046C42 /* SwiftLintBuildToolPlugin */; + }; FF5D13B62A86C2D800BC9BD6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = FF5D13A22A86C2D600BC9BD6 /* Basic-Car-Maintenance */; @@ -835,7 +452,8 @@ /* Begin XCBuildConfiguration section */ FF5D13C62A86C2D800BC9BD6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFDADF5D2ACCE9AB00DDEF79 /* Project.xcconfig */; + baseConfigurationReferenceAnchor = FF52DED52CADEA150023F8DE /* Configurations */; + baseConfigurationReferenceRelativePath = Project.xcconfig; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -899,7 +517,8 @@ }; FF5D13C72A86C2D800BC9BD6 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFDADF5D2ACCE9AB00DDEF79 /* Project.xcconfig */; + baseConfigurationReferenceAnchor = FF52DED52CADEA150023F8DE /* Configurations */; + baseConfigurationReferenceRelativePath = Project.xcconfig; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -957,9 +576,9 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES = ""; - "ASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES[sdk=*]" = "AppIcon-car-red AppIcon-car-yellow AppIcon-car-dark AppIcon-car-orange AppIcon-car-black"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; CODE_SIGN_ENTITLEMENTS = "Basic-Car-Maintenance/Basic_Car_Maintenance.entitlements"; CODE_SIGN_STYLE = Automatic; DEAD_CODE_STRIPPING = YES; @@ -1000,6 +619,7 @@ ASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES = ""; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; CODE_SIGN_ENTITLEMENTS = "Basic-Car-Maintenance/Basic_Car_Maintenance.entitlements"; CODE_SIGN_STYLE = Automatic; DEAD_CODE_STRIPPING = YES; @@ -1035,7 +655,8 @@ }; FF5D13CC2A86C2D800BC9BD6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFBE79BB2AD0A57D0005524E /* UnitTests.xcconfig */; + baseConfigurationReferenceAnchor = FF52DED52CADEA150023F8DE /* Configurations */; + baseConfigurationReferenceRelativePath = UnitTests.xcconfig; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -1055,7 +676,8 @@ }; FF5D13CD2A86C2D800BC9BD6 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFBE79BB2AD0A57D0005524E /* UnitTests.xcconfig */; + baseConfigurationReferenceAnchor = FF52DED52CADEA150023F8DE /* Configurations */; + baseConfigurationReferenceRelativePath = UnitTests.xcconfig; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -1075,7 +697,8 @@ }; FF5D13CF2A86C2D800BC9BD6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FF0813562AD0A83000910EFA /* UITests.xcconfig */; + baseConfigurationReferenceAnchor = FF52DED52CADEA150023F8DE /* Configurations */; + baseConfigurationReferenceRelativePath = UITests.xcconfig; buildSettings = { CODE_SIGN_STYLE = Automatic; DEAD_CODE_STRIPPING = YES; @@ -1094,7 +717,8 @@ }; FF5D13D02A86C2D800BC9BD6 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FF0813562AD0A83000910EFA /* UITests.xcconfig */; + baseConfigurationReferenceAnchor = FF52DED52CADEA150023F8DE /* Configurations */; + baseConfigurationReferenceRelativePath = UITests.xcconfig; buildSettings = { CODE_SIGN_STYLE = Automatic; DEAD_CODE_STRIPPING = YES; @@ -1113,7 +737,8 @@ }; FFDADF902ACD35A200DDEF79 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FF0813572AD0A92700910EFA /* Widget.xcconfig */; + baseConfigurationReferenceAnchor = FF52DED52CADEA150023F8DE /* Configurations */; + baseConfigurationReferenceRelativePath = Widget.xcconfig; buildSettings = { ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; @@ -1140,7 +765,8 @@ }; FFDADF912ACD35A200DDEF79 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FF0813572AD0A92700910EFA /* Widget.xcconfig */; + baseConfigurationReferenceAnchor = FF52DED52CADEA150023F8DE /* Configurations */; + baseConfigurationReferenceRelativePath = Widget.xcconfig; buildSettings = { ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; @@ -1217,6 +843,14 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ + C90C058A2CB0FC5800046C42 /* XCRemoteSwiftPackageReference "SwiftLintPlugins" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/SimplyDanny/SwiftLintPlugins"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.57.0; + }; + }; FFC8CDA52AA3867A00D129A6 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/firebase/firebase-ios-sdk.git"; @@ -1228,6 +862,11 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ + C90C058B2CB0FC8000046C42 /* SwiftLintBuildToolPlugin */ = { + isa = XCSwiftPackageProductDependency; + package = C90C058A2CB0FC5800046C42 /* XCRemoteSwiftPackageReference "SwiftLintPlugins" */; + productName = "plugin:SwiftLintBuildToolPlugin"; + }; FF153AFE2B07C3E000D0BA30 /* FirebaseCrashlytics */ = { isa = XCSwiftPackageProductDependency; package = FFC8CDA52AA3867A00D129A6 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; diff --git a/Basic-Car-Maintenance.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Basic-Car-Maintenance.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index ef750a7f..51752bbf 100644 --- a/Basic-Car-Maintenance.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Basic-Car-Maintenance.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "a1569f9895aa2be8e24832f98525d5da4eb90b5d158a82691c15b47eb72a13d7", + "originHash" : "e930e24c9c553650612765cdca20ed1a1250fa5cff303bbfe41305b5b6feb700", "pins" : [ { "identity" : "abseil-cpp-binary", @@ -117,6 +117,15 @@ "revision" : "edb6ed4919f7756157fe02f2552b7e3850a538e5", "version" : "1.28.1" } + }, + { + "identity" : "swiftlintplugins", + "kind" : "remoteSourceControl", + "location" : "https://github.com/SimplyDanny/SwiftLintPlugins", + "state" : { + "revision" : "7c80ce6f142164b0201871e580b021d1b2c69804", + "version" : "0.57.0" + } } ], "version" : 3 diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-black.appiconset/AppIcon-car-black.png b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Black.appiconset/AppIcon-car-black.png similarity index 100% rename from Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-black.appiconset/AppIcon-car-black.png rename to Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Black.appiconset/AppIcon-car-black.png diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-dark.appiconset/AppIcon-car-dark.png b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Black.appiconset/AppIcon-car-dark.png similarity index 100% rename from Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-dark.appiconset/AppIcon-car-dark.png rename to Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Black.appiconset/AppIcon-car-dark.png diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Black.appiconset/Contents.json b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Black.appiconset/Contents.json new file mode 100644 index 00000000..89592454 --- /dev/null +++ b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Black.appiconset/Contents.json @@ -0,0 +1,38 @@ +{ + "images" : [ + { + "filename" : "AppIcon-car-black.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "AppIcon-car-dark.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "filename" : "Tinted.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Black.appiconset/Tinted.png b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Black.appiconset/Tinted.png new file mode 100644 index 00000000..16fb2607 Binary files /dev/null and b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Black.appiconset/Tinted.png differ diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-orange.appiconset/AppIcon-car-orange.png b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Orange.appiconset/AppIcon-car-orange.png similarity index 100% rename from Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-orange.appiconset/AppIcon-car-orange.png rename to Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Orange.appiconset/AppIcon-car-orange.png diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Orange.appiconset/Contents.json b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Orange.appiconset/Contents.json new file mode 100644 index 00000000..db95a981 --- /dev/null +++ b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Orange.appiconset/Contents.json @@ -0,0 +1,38 @@ +{ + "images" : [ + { + "filename" : "AppIcon-car-orange.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "Orange-Dark.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "filename" : "Tinted.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Orange.appiconset/Orange-Dark.png b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Orange.appiconset/Orange-Dark.png new file mode 100644 index 00000000..3ad6a4f9 Binary files /dev/null and b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Orange.appiconset/Orange-Dark.png differ diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Orange.appiconset/Tinted.png b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Orange.appiconset/Tinted.png new file mode 100644 index 00000000..16fb2607 Binary files /dev/null and b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Orange.appiconset/Tinted.png differ diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-red.appiconset/AppIcon-car-red.png b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Red.appiconset/AppIcon-car-red.png similarity index 100% rename from Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-red.appiconset/AppIcon-car-red.png rename to Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Red.appiconset/AppIcon-car-red.png diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Red.appiconset/Contents.json b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Red.appiconset/Contents.json new file mode 100644 index 00000000..800c8a06 --- /dev/null +++ b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Red.appiconset/Contents.json @@ -0,0 +1,38 @@ +{ + "images" : [ + { + "filename" : "AppIcon-car-red.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "Red-Dark.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "filename" : "Tinted.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Red.appiconset/Red-Dark.png b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Red.appiconset/Red-Dark.png new file mode 100644 index 00000000..851c033c Binary files /dev/null and b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Red.appiconset/Red-Dark.png differ diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Red.appiconset/Tinted.png b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Red.appiconset/Tinted.png new file mode 100644 index 00000000..16fb2607 Binary files /dev/null and b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Red.appiconset/Tinted.png differ diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-yellow.appiconset/AppIcon-car-yellow.png b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Yellow.appiconset/AppIcon-car-yellow.png similarity index 100% rename from Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-yellow.appiconset/AppIcon-car-yellow.png rename to Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Yellow.appiconset/AppIcon-car-yellow.png diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Yellow.appiconset/Contents.json b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Yellow.appiconset/Contents.json new file mode 100644 index 00000000..a0160e6b --- /dev/null +++ b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Yellow.appiconset/Contents.json @@ -0,0 +1,38 @@ +{ + "images" : [ + { + "filename" : "AppIcon-car-yellow.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "Yellow-Dark.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "filename" : "Tinted.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Yellow.appiconset/Tinted.png b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Yellow.appiconset/Tinted.png new file mode 100644 index 00000000..16fb2607 Binary files /dev/null and b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Yellow.appiconset/Tinted.png differ diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Yellow.appiconset/Yellow-Dark.png b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Yellow.appiconset/Yellow-Dark.png new file mode 100644 index 00000000..25b1d7f4 Binary files /dev/null and b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-Car-Yellow.appiconset/Yellow-Dark.png differ diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-black.appiconset/Contents.json b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-black.appiconset/Contents.json deleted file mode 100644 index 14d48c0f..00000000 --- a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-black.appiconset/Contents.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "images" : [ - { - "filename" : "AppIcon-car-black.png", - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "16x16" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "16x16" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "32x32" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "32x32" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "128x128" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "128x128" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "256x256" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "256x256" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "512x512" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "512x512" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-dark.appiconset/Contents.json b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-dark.appiconset/Contents.json deleted file mode 100644 index ff9d8f88..00000000 --- a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-dark.appiconset/Contents.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "images" : [ - { - "filename" : "AppIcon-car-dark.png", - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "16x16" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "16x16" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "32x32" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "32x32" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "128x128" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "128x128" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "256x256" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "256x256" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "512x512" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "512x512" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-orange.appiconset/Contents.json b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-orange.appiconset/Contents.json deleted file mode 100644 index 40c605c3..00000000 --- a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-orange.appiconset/Contents.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "images" : [ - { - "filename" : "AppIcon-car-orange.png", - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "16x16" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "16x16" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "32x32" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "32x32" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "128x128" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "128x128" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "256x256" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "256x256" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "512x512" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "512x512" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-red.appiconset/Contents.json b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-red.appiconset/Contents.json deleted file mode 100644 index 6f09510b..00000000 --- a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-red.appiconset/Contents.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "images" : [ - { - "filename" : "AppIcon-car-red.png", - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "16x16" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "16x16" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "32x32" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "32x32" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "128x128" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "128x128" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "256x256" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "256x256" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "512x512" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "512x512" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-yellow.appiconset/Contents.json b/Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-yellow.appiconset/Contents.json deleted file mode 100644 index 6c048a4b..00000000 --- a/Basic-Car-Maintenance/Assets.xcassets/AppIcon-car-yellow.appiconset/Contents.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "images" : [ - { - "filename" : "AppIcon-car-yellow.png", - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "16x16" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "16x16" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "32x32" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "32x32" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "128x128" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "128x128" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "256x256" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "256x256" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "512x512" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "512x512" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon.appiconset/AppIcon-Original-Dark.png b/Basic-Car-Maintenance/Assets.xcassets/AppIcon.appiconset/AppIcon-Original-Dark.png new file mode 100644 index 00000000..ab663b8a Binary files /dev/null and b/Basic-Car-Maintenance/Assets.xcassets/AppIcon.appiconset/AppIcon-Original-Dark.png differ diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon.appiconset/AppIcon-Original-Tinted.png b/Basic-Car-Maintenance/Assets.xcassets/AppIcon.appiconset/AppIcon-Original-Tinted.png new file mode 100644 index 00000000..ac5f4384 Binary files /dev/null and b/Basic-Car-Maintenance/Assets.xcassets/AppIcon.appiconset/AppIcon-Original-Tinted.png differ diff --git a/Basic-Car-Maintenance/Assets.xcassets/AppIcon.appiconset/Contents.json b/Basic-Car-Maintenance/Assets.xcassets/AppIcon.appiconset/Contents.json index 53e88f5a..a32b4543 100644 --- a/Basic-Car-Maintenance/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Basic-Car-Maintenance/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -7,54 +7,28 @@ "size" : "1024x1024" }, { - "idiom" : "mac", - "scale" : "1x", - "size" : "16x16" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "16x16" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "32x32" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "32x32" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "128x128" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "128x128" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "256x256" - }, - { - "idiom" : "mac", - "scale" : "2x", - "size" : "256x256" - }, - { - "idiom" : "mac", - "scale" : "1x", - "size" : "512x512" + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "AppIcon-Original-Dark.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" }, { - "idiom" : "mac", - "scale" : "2x", - "size" : "512x512" + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "filename" : "AppIcon-Original-Tinted.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" } ], "info" : { diff --git a/Basic-Car-Maintenance/Documentation.docc/App Store Listing.md b/Basic-Car-Maintenance/Documentation.docc/AppStoreListing.md similarity index 100% rename from Basic-Car-Maintenance/Documentation.docc/App Store Listing.md rename to Basic-Car-Maintenance/Documentation.docc/AppStoreListing.md diff --git a/Basic-Car-Maintenance/Documentation.docc/Documentation.md b/Basic-Car-Maintenance/Documentation.docc/Documentation.md index 9bdda04c..7edcec7c 100644 --- a/Basic-Car-Maintenance/Documentation.docc/Documentation.md +++ b/Basic-Car-Maintenance/Documentation.docc/Documentation.md @@ -4,7 +4,7 @@ A basic app to track your car's maintenance, like oil changes, tire rotation, et ## Overview -This app is open source for [Hacktoberfest 2023](https://hacktoberfest.com/)! +This app is open source for [Hacktoberfest 2024](https://hacktoberfest.com/)! Use this app to gain experience getting started in open source for iOS and macOS development using Swift and SwiftUI. @@ -14,4 +14,4 @@ More documentation to be added soon! ### Essentials - <doc:Tutorial-Table-of-Contents> -- <doc:FirestoreDetails> +- <doc:FirestoreCollections> diff --git a/Basic-Car-Maintenance/Documentation.docc/FirestoreDetails.md b/Basic-Car-Maintenance/Documentation.docc/FirestoreCollections.md similarity index 99% rename from Basic-Car-Maintenance/Documentation.docc/FirestoreDetails.md rename to Basic-Car-Maintenance/Documentation.docc/FirestoreCollections.md index efcb005e..6401104f 100644 --- a/Basic-Car-Maintenance/Documentation.docc/FirestoreDetails.md +++ b/Basic-Car-Maintenance/Documentation.docc/FirestoreCollections.md @@ -4,7 +4,7 @@ All about the Firebase Firestore data structure  -### _alerts_ +### alerts The alerts collection contains system level alerts that will be visible to all users. The alerts will only be displayed to the user once. diff --git a/Basic-Car-Maintenance/Documentation.docc/getting-started.tutorial b/Basic-Car-Maintenance/Documentation.docc/getting-started.tutorial index a1c5551d..92c483b0 100644 --- a/Basic-Car-Maintenance/Documentation.docc/getting-started.tutorial +++ b/Basic-Car-Maintenance/Documentation.docc/getting-started.tutorial @@ -1,4 +1,4 @@ -@Tutorial(time: 15) { +@Tutorial(time: 20) { @Intro(title: "How to Contribute to this Project") { Here's instructions on how to prepare, fork, clone, configure, build and contribute to this project. This tutorial uses the [GitHub CLI](https://cli.github.com/) @@ -20,7 +20,7 @@ Read the CONTRIBUTING guidelines } @Step { - Download [Xcode 15.0](https://developer.apple.com/xcode/resources/) or later. + Download [Xcode 16.0](https://developer.apple.com/xcode/resources/) or later. } @Step { @@ -88,8 +88,53 @@ } } } - - @Section(title: "Starting on an issue") { + + @Section(title: "Setting Up Firebase Local Emulator") { + @ContentAndMedia { + Follow these steps to set up the Firebase Local Emulator to load data locally and not affect production. Please do not skip this step. + } + + @Steps { + @Step { + Install Homebrew, a package manager for macOS, if you haven't already: + + `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"` + } + @Step { + Install Xcode command line tools: + + `xcode-select --install` + } + @Step { + Install Node Version Manager (NVM). You then don't need to update the system node version. + + `brew install nvm` + } + @Step { + Add the executable to the `$PATH` via `.zshrc` or `.bashrc` file as prompted after installation. Do NOT forget this! (and then restart your Terminal) + } + @Step { + Download and use the latest stable version of Node.js: + + `nvm install stable` + } + @Step { + `nvm use stable` + } + @Step { + Install OpenJDK, and add the executable to the `$PATH` via `.zshrc` or `.bashrc` file as prompted after installation. Do NOT forget this! (and then restart your Terminal) + + `brew install openjdk` + } + @Step { + Install Firebase Tools for running the emulator. + + `npm install -g firebase-tools` + } + } + } + + @Section(title: "Start Working on an Issue") { @ContentAndMedia { **BEFORE** starting on an issue, comment on the issue you want to work on. @@ -106,6 +151,31 @@ @Image(source: 8-checkout.png, alt: "Checkout issue locally") } + @Step { + Anytime you run the project, first in Terminal `cd` to `backend` in the Basic-Car-Maintenance directory. This is the directory with the `firebase.json` file, you should see that if you type `ls` + + `cd backend` + } + @Step { + Start the Firebase Emulator. Which will start the emulators, and keep your data in local-data directory. Meaning when you start and stop the emulator your data will persist. + + `firebase emulators:start --import=./local-data --export-on-exit` + } + @Step { + Run the app. You should see your anonymous user in Authentication, and once you add new data, see it in Firestore emulator UI at: http://127.0.0.1:4000/firestore + + If you don't see your user, delete the app from the simulator, and in the menu go to Device > Erase All Content and Settings (which resets your simulator), and try to run again + } + + @Step { + If you receive the following error when you launch the emulator: _'firebase-tools no longer supports Java version before 11. Please upgrade to Java version 11 or above to continue using the emulators'_ + + The openJDK install failed and you will have to install the latest JDK manually. You can download the latest version here [JDK23](https://www.oracle.com/java/technologies/downloads/#jdk23-mac) + } + + @Step { + When your feature or fix is complete, open a pull request (PR) from your feature branch to the `dev` branch. Make sure to use a descriptive PR title and fill out the entire PR template without deleting any sections. + } } } } diff --git a/Basic-Car-Maintenance/Shared/BasicCarMaintenanceApp.swift b/Basic-Car-Maintenance/Shared/BasicCarMaintenanceApp.swift index 06915ce0..77274d0e 100644 --- a/Basic-Car-Maintenance/Shared/BasicCarMaintenanceApp.swift +++ b/Basic-Car-Maintenance/Shared/BasicCarMaintenanceApp.swift @@ -2,7 +2,8 @@ // BasicCarMaintenanceApp.swift // Basic-Car-Maintenance // -// Created by Mikaela Caron on 8/11/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import FirebaseAuth diff --git a/Basic-Car-Maintenance/Shared/Dashboard/ViewModels/DashboardViewModel.swift b/Basic-Car-Maintenance/Shared/Dashboard/ViewModels/DashboardViewModel.swift index 7666f7f1..c49ba813 100644 --- a/Basic-Car-Maintenance/Shared/Dashboard/ViewModels/DashboardViewModel.swift +++ b/Basic-Car-Maintenance/Shared/Dashboard/ViewModels/DashboardViewModel.swift @@ -2,7 +2,8 @@ // DashboardViewModel.swift // Basic-Car-Maintenance // -// Created by Mikaela Caron on 9/3/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import FirebaseFirestore diff --git a/Basic-Car-Maintenance/Shared/Dashboard/Views/AddMaintenanceView.swift b/Basic-Car-Maintenance/Shared/Dashboard/Views/AddMaintenanceView.swift index ad56f790..098b6f69 100644 --- a/Basic-Car-Maintenance/Shared/Dashboard/Views/AddMaintenanceView.swift +++ b/Basic-Car-Maintenance/Shared/Dashboard/Views/AddMaintenanceView.swift @@ -2,7 +2,8 @@ // AddMaintenanceView.swift // Basic-Car-Maintenance // -// Created by Mikaela Caron on 8/19/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import SwiftUI diff --git a/Basic-Car-Maintenance/Shared/Dashboard/Views/DashboardView.swift b/Basic-Car-Maintenance/Shared/Dashboard/Views/DashboardView.swift index 02b79e92..eaa51d41 100644 --- a/Basic-Car-Maintenance/Shared/Dashboard/Views/DashboardView.swift +++ b/Basic-Car-Maintenance/Shared/Dashboard/Views/DashboardView.swift @@ -2,7 +2,8 @@ // DashboardView.swift // Basic-Car-Maintenance // -// Created by Mikaela Caron on 8/19/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import SwiftUI diff --git a/Basic-Car-Maintenance/Shared/Dashboard/Views/EditEventDetailView.swift b/Basic-Car-Maintenance/Shared/Dashboard/Views/EditEventDetailView.swift index c8d4f911..84494f6a 100644 --- a/Basic-Car-Maintenance/Shared/Dashboard/Views/EditEventDetailView.swift +++ b/Basic-Car-Maintenance/Shared/Dashboard/Views/EditEventDetailView.swift @@ -2,7 +2,8 @@ // EditMaintenanceEventView.swift // Basic-Car-Maintenance // -// Created by Aaron Wilson on 10/5/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import SwiftUI diff --git a/Basic-Car-Maintenance/Shared/MainView/ViewModels/MainTabViewModel.swift b/Basic-Car-Maintenance/Shared/MainView/ViewModels/MainTabViewModel.swift index 7ba9ac0c..ddb75d59 100644 --- a/Basic-Car-Maintenance/Shared/MainView/ViewModels/MainTabViewModel.swift +++ b/Basic-Car-Maintenance/Shared/MainView/ViewModels/MainTabViewModel.swift @@ -2,7 +2,8 @@ // MainTabViewModel.swift // Basic-Car-Maintenance // -// Created by Omar Hegazy on 13/10/2023. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import Foundation diff --git a/Basic-Car-Maintenance/Shared/MainView/Views/AlertView.swift b/Basic-Car-Maintenance/Shared/MainView/Views/AlertView.swift index 9487982c..18b6d82e 100644 --- a/Basic-Car-Maintenance/Shared/MainView/Views/AlertView.swift +++ b/Basic-Car-Maintenance/Shared/MainView/Views/AlertView.swift @@ -2,7 +2,8 @@ // AlertView.swift // Basic-Car-Maintenance // -// Created by Omar Hegazy on 11/10/2023. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import SwiftUI diff --git a/Basic-Car-Maintenance/Shared/MainView/Views/MainTabView.swift b/Basic-Car-Maintenance/Shared/MainView/Views/MainTabView.swift index 786d3333..2967873b 100644 --- a/Basic-Car-Maintenance/Shared/MainView/Views/MainTabView.swift +++ b/Basic-Car-Maintenance/Shared/MainView/Views/MainTabView.swift @@ -2,11 +2,12 @@ // MainTabView.swift // Basic-Car-Maintenance // -// Created by Omar Hegazy on 05/10/2023. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // -import SwiftUI import SwiftData +import SwiftUI enum TabSelection: Int, Identifiable, CaseIterable { var id: Self { self } @@ -53,8 +54,8 @@ struct MainTabView: View { @State private var selectedTabId: TabSelection.ID? = .dashboard @State private var columnVisibility = NavigationSplitViewVisibility.automatic - @State var authenticationViewModel = AuthenticationViewModel() - @State var viewModel = MainTabViewModel() + @State private var authenticationViewModel = AuthenticationViewModel() + @State private var viewModel = MainTabViewModel() init() { _selectedTabId = State(initialValue: selectedTab) diff --git a/Basic-Car-Maintenance/Shared/Models/Action.swift b/Basic-Car-Maintenance/Shared/Models/Action.swift index b0d7059e..248f8da8 100644 --- a/Basic-Car-Maintenance/Shared/Models/Action.swift +++ b/Basic-Car-Maintenance/Shared/Models/Action.swift @@ -2,7 +2,8 @@ // Action.swift // Basic-Car-Maintenance // -// Created by Omar Hegazy on 05/10/2023. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import UIKit diff --git a/Basic-Car-Maintenance/Shared/Models/AlertItem.swift b/Basic-Car-Maintenance/Shared/Models/AlertItem.swift index 4fa8bb7e..0b91b2e5 100644 --- a/Basic-Car-Maintenance/Shared/Models/AlertItem.swift +++ b/Basic-Car-Maintenance/Shared/Models/AlertItem.swift @@ -2,7 +2,8 @@ // AlertItem.swift // Basic-Car-Maintenance // -// Created by Omar Hegazy on 13/10/2023. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import Foundation diff --git a/Basic-Car-Maintenance/Shared/Models/AppIcon.swift b/Basic-Car-Maintenance/Shared/Models/AppIcon.swift index 85c42b46..ace59f3b 100644 --- a/Basic-Car-Maintenance/Shared/Models/AppIcon.swift +++ b/Basic-Car-Maintenance/Shared/Models/AppIcon.swift @@ -2,14 +2,14 @@ // ChooseAppIconView.swift // Basic-Car-Maintenance // -// Created by Daniel Lyons on 10/11/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import UIKit enum AppIcon: String, CaseIterable, Identifiable { case primary = "AppIcon" - case carDark = "AppIcon-car-dark" case carRed = "AppIcon-car-red" case carYellow = "AppIcon-car-yellow" case carBlack = "AppIcon-car-black" @@ -33,8 +33,6 @@ enum AppIcon: String, CaseIterable, Identifiable { switch self { case .primary: return "Default" - case .carDark: - return "Dark Mode" case .carRed: return "Red Car" case .carYellow: diff --git a/Basic-Car-Maintenance/Shared/Models/Contributor.swift b/Basic-Car-Maintenance/Shared/Models/Contributor.swift index 63553d9c..12ff317d 100644 --- a/Basic-Car-Maintenance/Shared/Models/Contributor.swift +++ b/Basic-Car-Maintenance/Shared/Models/Contributor.swift @@ -2,7 +2,8 @@ // Contributor.swift // Basic-Car-Maintenance // -// Created by Yashraj jadhav on 01/10/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import Foundation diff --git a/Basic-Car-Maintenance/Shared/Models/MaintenanceEvent.swift b/Basic-Car-Maintenance/Shared/Models/MaintenanceEvent.swift index c2a2e1c7..a6378951 100644 --- a/Basic-Car-Maintenance/Shared/Models/MaintenanceEvent.swift +++ b/Basic-Car-Maintenance/Shared/Models/MaintenanceEvent.swift @@ -2,7 +2,8 @@ // MaintenanceEvent.swift // Basic-Car-Maintenance // -// Created by Mikaela Caron on 8/25/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import FirebaseFirestoreSwift diff --git a/Basic-Car-Maintenance/Shared/Models/OdometerReading.swift b/Basic-Car-Maintenance/Shared/Models/OdometerReading.swift index 611551eb..6c40926b 100644 --- a/Basic-Car-Maintenance/Shared/Models/OdometerReading.swift +++ b/Basic-Car-Maintenance/Shared/Models/OdometerReading.swift @@ -2,7 +2,8 @@ // OdometerReading.swift // Basic-Car-Maintenance // -// Created by Nate Schaffner on 10/15/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import Foundation diff --git a/Basic-Car-Maintenance/Shared/Models/Vehicle.swift b/Basic-Car-Maintenance/Shared/Models/Vehicle.swift index c52dfd4d..0b80d06a 100644 --- a/Basic-Car-Maintenance/Shared/Models/Vehicle.swift +++ b/Basic-Car-Maintenance/Shared/Models/Vehicle.swift @@ -2,7 +2,8 @@ // Vehicle.swift // Basic-Car-Maintenance // -// Created by Mikaela Caron on 8/25/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import FirebaseFirestoreSwift diff --git a/Basic-Car-Maintenance/Shared/Odometer/ViewModels/OdometerViewModel.swift b/Basic-Car-Maintenance/Shared/Odometer/ViewModels/OdometerViewModel.swift index c11358dd..f56d1c81 100644 --- a/Basic-Car-Maintenance/Shared/Odometer/ViewModels/OdometerViewModel.swift +++ b/Basic-Car-Maintenance/Shared/Odometer/ViewModels/OdometerViewModel.swift @@ -2,7 +2,8 @@ // OdometerViewModel.swift // Basic-Car-Maintenance // -// Created by Nate Schaffner on 10/15/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import FirebaseFirestore diff --git a/Basic-Car-Maintenance/Shared/Odometer/Views/AddOdometerReadingView.swift b/Basic-Car-Maintenance/Shared/Odometer/Views/AddOdometerReadingView.swift index 5a55900e..dd07ad35 100644 --- a/Basic-Car-Maintenance/Shared/Odometer/Views/AddOdometerReadingView.swift +++ b/Basic-Car-Maintenance/Shared/Odometer/Views/AddOdometerReadingView.swift @@ -2,7 +2,8 @@ // AddOdometerReadingView.swift // Basic-Car-Maintenance // -// Created by Nate Schaffner on 10/15/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import SwiftUI diff --git a/Basic-Car-Maintenance/Shared/Odometer/Views/EditOdometerReadingView.swift b/Basic-Car-Maintenance/Shared/Odometer/Views/EditOdometerReadingView.swift index 28ab794d..69249e17 100644 --- a/Basic-Car-Maintenance/Shared/Odometer/Views/EditOdometerReadingView.swift +++ b/Basic-Car-Maintenance/Shared/Odometer/Views/EditOdometerReadingView.swift @@ -2,7 +2,8 @@ // EditOdometerReadingView.swift // Basic-Car-Maintenance // -// Created by Mikaela Caron on 11/25/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import SwiftUI diff --git a/Basic-Car-Maintenance/Shared/Odometer/Views/OdometerView.swift b/Basic-Car-Maintenance/Shared/Odometer/Views/OdometerView.swift index abdceaef..0d18e8a4 100644 --- a/Basic-Car-Maintenance/Shared/Odometer/Views/OdometerView.swift +++ b/Basic-Car-Maintenance/Shared/Odometer/Views/OdometerView.swift @@ -2,7 +2,8 @@ // OdometerView.swift // Basic-Car-Maintenance // -// Created by Mikaela Caron on 10/11/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import SwiftUI diff --git a/Basic-Car-Maintenance/Shared/Onboarding/Views/WelcomeView.swift b/Basic-Car-Maintenance/Shared/Onboarding/Views/WelcomeView.swift index 8ec1a9e2..85ceec7f 100644 --- a/Basic-Car-Maintenance/Shared/Onboarding/Views/WelcomeView.swift +++ b/Basic-Car-Maintenance/Shared/Onboarding/Views/WelcomeView.swift @@ -2,7 +2,8 @@ // WelcomeView.swift // Basic-Car-Maintenance // -// Created by Marcin Jędrzejak on 09/01/2024. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import SwiftUI diff --git a/Basic-Car-Maintenance/Shared/Onboarding/Views/WelcomeViewAddVehicle.swift b/Basic-Car-Maintenance/Shared/Onboarding/Views/WelcomeViewAddVehicle.swift index 81babd68..8261ae96 100644 --- a/Basic-Car-Maintenance/Shared/Onboarding/Views/WelcomeViewAddVehicle.swift +++ b/Basic-Car-Maintenance/Shared/Onboarding/Views/WelcomeViewAddVehicle.swift @@ -2,7 +2,8 @@ // WelcomeViewAddVehicle.swift // Basic-Car-Maintenance // -// Created by Marcin Jędrzejak on 09/01/2024. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import SwiftUI diff --git a/Basic-Car-Maintenance/Shared/Settings/ViewModels/AuthenticationViewModel.swift b/Basic-Car-Maintenance/Shared/Settings/ViewModels/AuthenticationViewModel.swift index 831f506f..3bae8b5b 100644 --- a/Basic-Car-Maintenance/Shared/Settings/ViewModels/AuthenticationViewModel.swift +++ b/Basic-Car-Maintenance/Shared/Settings/ViewModels/AuthenticationViewModel.swift @@ -2,7 +2,8 @@ // AuthenticationViewModel.swift // Basic-Car-Maintenance // -// Created by Mikaela Caron on 9/14/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import AuthenticationServices diff --git a/Basic-Car-Maintenance/Shared/Settings/ViewModels/ChooseAppIconViewModel.swift b/Basic-Car-Maintenance/Shared/Settings/ViewModels/ChooseAppIconViewModel.swift index 1e36ed4d..50019eb4 100644 --- a/Basic-Car-Maintenance/Shared/Settings/ViewModels/ChooseAppIconViewModel.swift +++ b/Basic-Car-Maintenance/Shared/Settings/ViewModels/ChooseAppIconViewModel.swift @@ -1,8 +1,9 @@ // -// ChooseAppIconView.swift +// ChooseAppIconViewModel.swift // Basic-Car-Maintenance // -// Created by Daniel Lyons on 10/11/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import UIKit diff --git a/Basic-Car-Maintenance/Shared/Settings/ViewModels/SettingsViewModel.swift b/Basic-Car-Maintenance/Shared/Settings/ViewModels/SettingsViewModel.swift index 99eac66d..2e0af72e 100644 --- a/Basic-Car-Maintenance/Shared/Settings/ViewModels/SettingsViewModel.swift +++ b/Basic-Car-Maintenance/Shared/Settings/ViewModels/SettingsViewModel.swift @@ -2,7 +2,8 @@ // SettingsViewModel.swift // Basic-Car-Maintenance // -// Created by Mikaela Caron on 9/11/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import FirebaseFirestore diff --git a/Basic-Car-Maintenance/Shared/Settings/Views/AddVehicleView.swift b/Basic-Car-Maintenance/Shared/Settings/Views/AddVehicleView.swift index a174792d..31919af0 100644 --- a/Basic-Car-Maintenance/Shared/Settings/Views/AddVehicleView.swift +++ b/Basic-Car-Maintenance/Shared/Settings/Views/AddVehicleView.swift @@ -2,7 +2,8 @@ // AddVehicleView.swift // Basic-Car-Maintenance // -// Created by Mikaela Caron on 8/25/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import SwiftUI diff --git a/Basic-Car-Maintenance/Shared/Settings/Views/AuthenticationView.swift b/Basic-Car-Maintenance/Shared/Settings/Views/AuthenticationView.swift index 41bd44cc..642c0ee0 100644 --- a/Basic-Car-Maintenance/Shared/Settings/Views/AuthenticationView.swift +++ b/Basic-Car-Maintenance/Shared/Settings/Views/AuthenticationView.swift @@ -2,7 +2,8 @@ // AuthenticationView.swift // Basic-Car-Maintenance // -// Created by Mikaela Caron on 9/17/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import AuthenticationServices diff --git a/Basic-Car-Maintenance/Shared/Settings/Views/ChooseAppIconView.swift b/Basic-Car-Maintenance/Shared/Settings/Views/ChooseAppIconView.swift index d0007365..63b96f6e 100644 --- a/Basic-Car-Maintenance/Shared/Settings/Views/ChooseAppIconView.swift +++ b/Basic-Car-Maintenance/Shared/Settings/Views/ChooseAppIconView.swift @@ -2,13 +2,14 @@ // ChooseAppIconView.swift // Basic-Car-Maintenance // -// Created by Daniel Lyons on 10/11/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import SwiftUI struct ChooseAppIconView: View { - @State var viewModel: ChooseAppIconViewModel = .init() + @State private var viewModel: ChooseAppIconViewModel = .init() private func isSelected(_ icon: AppIcon) -> Bool { return viewModel.selectedAppIcon == icon @@ -18,6 +19,7 @@ struct ChooseAppIconView: View { GridItem(.flexible(minimum: 30, maximum: 300)), GridItem(.flexible(minimum: 30, maximum: 300)) ] + var body: some View { Form { Section { @@ -71,5 +73,5 @@ extension ChooseAppIconView { } #Preview { - ChooseAppIconView(viewModel: .init()) + ChooseAppIconView() } diff --git a/Basic-Car-Maintenance/Shared/Settings/Views/ContributorsListView.swift b/Basic-Car-Maintenance/Shared/Settings/Views/ContributorsListView.swift index 08134cb7..c6eae12b 100644 --- a/Basic-Car-Maintenance/Shared/Settings/Views/ContributorsListView.swift +++ b/Basic-Car-Maintenance/Shared/Settings/Views/ContributorsListView.swift @@ -2,7 +2,8 @@ // ContributorsListView.swift // Basic-Car-Maintenance // -// Created by Yashraj jadhav on 01/10/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import SwiftUI diff --git a/Basic-Car-Maintenance/Shared/Settings/Views/ContributorsProfileView.swift b/Basic-Car-Maintenance/Shared/Settings/Views/ContributorsProfileView.swift index 7b8e3d52..2839f387 100644 --- a/Basic-Car-Maintenance/Shared/Settings/Views/ContributorsProfileView.swift +++ b/Basic-Car-Maintenance/Shared/Settings/Views/ContributorsProfileView.swift @@ -2,7 +2,8 @@ // ContributorsProfileView.swift // Basic-Car-Maintenance // -// Created by Yashraj jadhav on 01/10/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import SwiftUI diff --git a/Basic-Car-Maintenance/Shared/Settings/Views/EditVehicleView.swift b/Basic-Car-Maintenance/Shared/Settings/Views/EditVehicleView.swift index 2e3e815d..c426523d 100644 --- a/Basic-Car-Maintenance/Shared/Settings/Views/EditVehicleView.swift +++ b/Basic-Car-Maintenance/Shared/Settings/Views/EditVehicleView.swift @@ -2,7 +2,8 @@ // EditVehicleView.swift // Basic-Car-Maintenance // -// Created by Traton Gossink on 11/6/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import SwiftUI diff --git a/Basic-Car-Maintenance/Shared/Settings/Views/SettingsView.swift b/Basic-Car-Maintenance/Shared/Settings/Views/SettingsView.swift index 941b6867..9f770a7d 100644 --- a/Basic-Car-Maintenance/Shared/Settings/Views/SettingsView.swift +++ b/Basic-Car-Maintenance/Shared/Settings/Views/SettingsView.swift @@ -2,7 +2,8 @@ // SettingsView.swift // Basic-Car-Maintenance // -// Created by Mikaela Caron on 8/19/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import SwiftUI @@ -166,7 +167,7 @@ struct SettingsView: View { } NavigationLink { - ChooseAppIconView(viewModel: ChooseAppIconViewModel()) + ChooseAppIconView() } label: { Label("Change App Icon", systemImage: SFSymbol.iPhoneWithApps) } diff --git a/Basic-Car-Maintenance/Shared/Tips/ContributionTip.swift b/Basic-Car-Maintenance/Shared/Tips/ContributionTip.swift index 44b81695..9fd52249 100644 --- a/Basic-Car-Maintenance/Shared/Tips/ContributionTip.swift +++ b/Basic-Car-Maintenance/Shared/Tips/ContributionTip.swift @@ -2,7 +2,8 @@ // ContributionTip.swift // Basic-Car-Maintenance // -// Created by Sandro Dahl on 24.10.23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import TipKit diff --git a/Basic-Car-Maintenance/Shared/Utilities/AnalyticsService.swift b/Basic-Car-Maintenance/Shared/Utilities/AnalyticsService.swift index 3f1400f7..253d7376 100644 --- a/Basic-Car-Maintenance/Shared/Utilities/AnalyticsService.swift +++ b/Basic-Car-Maintenance/Shared/Utilities/AnalyticsService.swift @@ -2,7 +2,8 @@ // AnalyticsService.swift // Basic-Car-Maintenance // -// Created by Mikaela Caron on 11/11/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import Foundation diff --git a/Basic-Car-Maintenance/Shared/Utilities/Bundle+extension.swift b/Basic-Car-Maintenance/Shared/Utilities/Bundle+extension.swift index 5aa84f36..d277ce64 100644 --- a/Basic-Car-Maintenance/Shared/Utilities/Bundle+extension.swift +++ b/Basic-Car-Maintenance/Shared/Utilities/Bundle+extension.swift @@ -2,7 +2,8 @@ // Bundle+extension.swift // Basic-Car-Maintenance // -// Created by Mikaela Caron on 8/19/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import Foundation diff --git a/Basic-Car-Maintenance/Shared/Utilities/Constants.swift b/Basic-Car-Maintenance/Shared/Utilities/Constants.swift index 6d9024e2..b57a8069 100644 --- a/Basic-Car-Maintenance/Shared/Utilities/Constants.swift +++ b/Basic-Car-Maintenance/Shared/Utilities/Constants.swift @@ -2,7 +2,8 @@ // Constants.swift // Basic-Car-Maintenance // -// Created by Justin Seal on 10/13/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import Foundation diff --git a/Basic-Car-Maintenance/Shared/Utilities/FirebaseAnalytics+Extension.swift b/Basic-Car-Maintenance/Shared/Utilities/FirebaseAnalytics+Extension.swift index 28dfb648..38b47a89 100644 --- a/Basic-Car-Maintenance/Shared/Utilities/FirebaseAnalytics+Extension.swift +++ b/Basic-Car-Maintenance/Shared/Utilities/FirebaseAnalytics+Extension.swift @@ -2,7 +2,8 @@ // FirebaseAnalytics+Extension.swift // Basic-Car-Maintenance // -// Created by Jessica Linden on 10/30/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // import SwiftUI diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1a9b028e..0bd24ee7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,7 +11,7 @@ This app will be deployed on the Apple App Store, available for iOS 17.0 or late # Getting Started ## Prerequisites -* Download Xcode 15.0 or later (preferred to use Xcode 16 or later) +* Download Xcode 16.0 or later * Install [SwiftLint](https://github.com/realm/SwiftLint) onto your machine via [Homebrew](https://brew.sh/) * This is not a requirement, but is preferred. ```sh @@ -73,6 +73,7 @@ We are going to set up the Firebase emulator to be able to load the data locally * Run the app * You should see your anonymous user in Authentication, and once you add new data, see it in Firestore emulator UI at: http://127.0.0.1:4000/firestore * If you don't see your user, delete the app from the simulator, and in the menu go to Device > Erase All Content and Settings (which resets your simulator), and try to run again + * If you receive the following error when you launch the emulator: _'firebase-tools no longer supports Java version before 11. Please upgrade to Java version 11 or above to continue using the emulators.'_ The openJDK install failed and you will have to install the latest JDK manually. You can download the latest version here [JDK23](https://www.oracle.com/java/technologies/downloads/#jdk23-mac) * **Checkout** a new branch (from the `dev` branch) to work on an issue * When your feature / fix is complete open a pull request, PR, from your feature branch to the `dev` branch * Use a descriptive PR title and fill out the entire PR template, do not delete any sections. @@ -84,7 +85,7 @@ We are going to set up the Firebase emulator to be able to load the data locally ✅ **Examples of valid branch names:** * 8123-fix-title-of-issue (issue number) * 8123-feature-name (issue number) - + ❌ **Examples of invalid branch names**: * username-testing * attemptToFixAuth diff --git a/Configurations/Project.xcconfig b/Configurations/Project.xcconfig index 982cbd33..f34294cc 100644 --- a/Configurations/Project.xcconfig +++ b/Configurations/Project.xcconfig @@ -2,7 +2,8 @@ // Project.xcconfig // Basic-Car-Maintenance // -// Created by Mikaela Caron on 10/3/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // // Configuration settings file format documentation can be found at: diff --git a/Configurations/UITests.xcconfig b/Configurations/UITests.xcconfig index cda16979..f94413dd 100644 --- a/Configurations/UITests.xcconfig +++ b/Configurations/UITests.xcconfig @@ -2,7 +2,8 @@ // UITests.xcconfig // Basic-Car-Maintenance // -// Created by Mikaela Caron on 10/6/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // // Configuration settings file format documentation can be found at: diff --git a/Configurations/UnitTests.xcconfig b/Configurations/UnitTests.xcconfig index 7f94a482..a0eadff0 100644 --- a/Configurations/UnitTests.xcconfig +++ b/Configurations/UnitTests.xcconfig @@ -2,7 +2,8 @@ // UnitTests.xcconfig // Basic-Car-Maintenance // -// Created by Mikaela Caron on 10/6/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // // Configuration settings file format documentation can be found at: diff --git a/Configurations/Widget.xcconfig b/Configurations/Widget.xcconfig index f952f272..ffd4b8d6 100644 --- a/Configurations/Widget.xcconfig +++ b/Configurations/Widget.xcconfig @@ -2,7 +2,8 @@ // Widget.xcconfig // Basic-Car-Maintenance // -// Created by Mikaela Caron on 10/6/23. +// https://github.com/mikaelacaron/Basic-Car-Maintenance +// See LICENSE for license information. // // Configuration settings file format documentation can be found at: diff --git a/Gemfile.lock b/Gemfile.lock index 450871d6..8454f5ee 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,7 +10,7 @@ GEM artifactory (3.0.17) atomos (0.1.3) aws-eventstream (1.3.0) - aws-partitions (1.981.0) + aws-partitions (1.986.0) aws-sdk-core (3.209.1) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) @@ -19,7 +19,7 @@ GEM aws-sdk-kms (1.94.0) aws-sdk-core (~> 3, >= 3.207.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.166.0) + aws-sdk-s3 (1.167.0) aws-sdk-core (~> 3, >= 3.207.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) @@ -38,7 +38,7 @@ GEM domain_name (0.6.20240107) dotenv (2.8.1) emoji_regex (3.2.3) - excon (0.111.0) + excon (0.112.0) faraday (1.10.4) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) @@ -68,7 +68,7 @@ GEM faraday_middleware (1.2.1) faraday (~> 1.0) fastimage (2.3.1) - fastlane (2.223.1) + fastlane (2.224.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -152,7 +152,7 @@ GEM httpclient (2.8.3) jmespath (1.6.2) json (2.7.2) - jwt (2.9.1) + jwt (2.9.3) base64 mini_magick (4.13.2) mini_mime (1.1.5) @@ -196,13 +196,13 @@ GEM uber (0.1.0) unicode-display_width (2.6.0) word_wrap (1.0.0) - xcodeproj (1.25.0) + xcodeproj (1.25.1) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) nanaimo (~> 0.3.0) - rexml (>= 3.3.2, < 4.0) + rexml (>= 3.3.6, < 4.0) xcov (1.8.1) fastlane (>= 2.141.0, < 3.0.0) multipart-post diff --git a/README.md b/README.md index 62a25aa3..ea62fd6e 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Welcome to my open source app! It is ready for contributors for [Hacktoberfest]( # Getting Started * Read the [Code of Conduct](https://github.com/mikaelacaron/Basic-Car-Maintenance/blob/dev/CODE_OF_CONDUCT.md) * Read the [CONTRIBUTING.md](https://github.com/mikaelacaron/Basic-Car-Maintenance/blob/dev/CONTRIBUTING.md) guidelines -* Download Xcode 15 or later (preferred to use Xcode 16 or later) +* Download Xcode 16.0 or later * Browse the open [issues](https://github.com/mikaelacaron/Basic-Car-Maintenance/issues) and **comment** which you would like to work on * It is only one person per issue, except where noted. * **Fork** this repo diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 413af45e..3b456ffc 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -31,21 +31,12 @@ platform :ios do run_tests( scheme: "Basic-Car-Maintenance", only_testing: "Basic-Car-Maintenance-Tests", - clean: true, - code_coverage: true, - device: "iPhone 15 Pro", + device: "iPhone 16 Pro", skip_build: true, xcodebuild_formatter: 'xcbeautify -qq --is-ci --renderer github-actions', output_types: 'junit', output_directory: "./fastlane/UnitTestsReport" ) - - xcov( - scheme: "Basic-Car-Maintenance", - only_project_targets: true, - output_directory: "./fastlane/CodeCoverageReport" - #minimum_coverage_percentage: 80.0 - ) end end diff --git a/fastlane/enable-build-tool-plugins.json b/fastlane/enable-build-tool-plugins.json new file mode 100644 index 00000000..738e40d1 --- /dev/null +++ b/fastlane/enable-build-tool-plugins.json @@ -0,0 +1,12 @@ +[ + { + "fingerprint" : "f17a4f9dfb6a6afb0408426354e4180daaf49cee", + "packageIdentity" : "swiftlint", + "targetName" : "SwiftLintPlugin" + }, + { + "fingerprint" : "7c80ce6f142164b0201871e580b021d1b2c69804", + "packageIdentity" : "swiftlintplugins", + "targetName" : "SwiftLintBuildToolPlugin" + } +] \ No newline at end of file