From 7d8bf9fc49bfef62708e2b0e6b9632de2a0ecd7f Mon Sep 17 00:00:00 2001 From: Alexander Cyon Date: Thu, 21 May 2026 08:09:36 +0200 Subject: [PATCH 1/4] Enforce mutual exclusivity of SPI navigation handlers `navigationHandler` and `modalNavigationHandler` docstrings on NanoViewController claim each is nil when the other is set, but the helpers only set one half and left the other untouched. If the same scene instance were ever re-subscribed through the inverse helper, a stale handler would silently outlive the contract. Each subscribe helper now clears the inverse hook. Adds two tests that exercise the re-subscribe path to lock the invariant in. Co-Authored-By: Claude Opus 4.7 --- ...NanoViewController+NavigationHelpers.swift | 10 +++++ .../NavigationHandlerSPITests.swift | 40 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/Sources/NanoViewControllerController/Coordinating+NanoViewController+NavigationHelpers.swift b/Sources/NanoViewControllerController/Coordinating+NanoViewController+NavigationHelpers.swift index 1461640..c6e131a 100644 --- a/Sources/NanoViewControllerController/Coordinating+NanoViewController+NavigationHelpers.swift +++ b/Sources/NanoViewControllerController/Coordinating+NanoViewController+NavigationHelpers.swift @@ -17,11 +17,16 @@ extension Coordinating { /// tests can invoke coordinator routing directly without driving the /// view-model's Combine pipeline. Production callers don't see this /// property unless they opt in via `@_spi(Testing) import`. + /// + /// Clears ``NanoViewController/modalNavigationHandler`` to keep the two + /// SPI hooks mutually exclusive — the live handler is whichever helper + /// last subscribed. func subscribeToNavigation, V: ContentView>( of scene: S, handler: @escaping (V.ViewModel.NavigationStep) -> Void ) { scene.navigationHandler = handler + scene.modalNavigationHandler = nil scene.navigation .sinkOnMain { handler($0) } .store(in: &cancellables) @@ -37,11 +42,16 @@ extension Coordinating { /// ``NanoViewController/modalNavigationHandler`` (an `@_spi(Testing)` hook). /// Tests pass a spy ``DismissScene`` when invoking the handler so the /// dismissal side-effect is observable without a real modal presentation. + /// + /// Clears ``NanoViewController/navigationHandler`` to keep the two SPI + /// hooks mutually exclusive — the live handler is whichever helper last + /// subscribed. func subscribeToModalNavigation, V: ContentView>( of scene: S, handler: @escaping ModalNavigationHandler ) { scene.modalNavigationHandler = handler + scene.navigationHandler = nil scene.navigation .sinkOnMain { [weak scene] step in handler(step) { animated, completion in diff --git a/Tests/NanoViewControllerControllerTests/NavigationHandlerSPITests.swift b/Tests/NanoViewControllerControllerTests/NavigationHandlerSPITests.swift index 962ddb4..065ea10 100644 --- a/Tests/NanoViewControllerControllerTests/NavigationHandlerSPITests.swift +++ b/Tests/NanoViewControllerControllerTests/NavigationHandlerSPITests.swift @@ -101,6 +101,46 @@ final class NavigationHandlerSPITests: XCTestCase { ) } + // MARK: - Mutual exclusivity of the two SPI hooks + + func test_resubscribingModalAfterPush_clearsThePushHandler() throws { + // Arrange — wire up a scene through the push helper first. + let coordinator = TestCoordinator(navigationController: UINavigationController()) + let viewModel = SPITestViewModel() + coordinator.push(scene: SPITestScene.self, viewModel: viewModel, animated: false) { _ in } + let scene = try XCTUnwrap(coordinator.navigationController.viewControllers.last as? SPITestScene) + XCTAssertNotNil(scene.navigationHandler) + XCTAssertNil(scene.modalNavigationHandler) + + // Act — re-subscribe the same instance through the modal helper. + coordinator.subscribeToModalNavigation(of: scene) { _, _ in } + + // Assert — the docs claim mutual exclusivity; the implementation now + // honours it instead of leaving a stale push handler alongside the + // freshly-installed modal one. + XCTAssertNotNil(scene.modalNavigationHandler) + XCTAssertNil(scene.navigationHandler) + } + + func test_resubscribingPushAfterModal_clearsTheModalHandler() throws { + // Arrange — wire up via modal first. + let nav = ModalPresentCapturingNavigationController() + let coordinator = TestCoordinator(navigationController: nav) + let viewModel = SPITestViewModel() + coordinator.modallyPresent(scene: SPITestScene.self, viewModel: viewModel, animated: false) { _, _ in } + let presented = try XCTUnwrap(nav.presentedViewControllerCapture as? UINavigationController) + let scene = try XCTUnwrap(presented.viewControllers.first as? SPITestScene) + XCTAssertNotNil(scene.modalNavigationHandler) + XCTAssertNil(scene.navigationHandler) + + // Act — re-subscribe the same instance through the push helper. + coordinator.subscribeToNavigation(of: scene) { _ in } + + // Assert + XCTAssertNotNil(scene.navigationHandler) + XCTAssertNil(scene.modalNavigationHandler) + } + func test_modalNavigationHandler_dismissForwardsAnimatedFlagAndCompletion() { // Arrange let nav = ModalPresentCapturingNavigationController() From bab82291abb93b3488e267ae12fadfe06c2d8ecb Mon Sep 17 00:00:00 2001 From: Alexander Cyon Date: Thu, 21 May 2026 11:42:21 +0200 Subject: [PATCH 2/4] Cancel prior navigation sink on re-subscribe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous commit nil-ed the inverse SPI property when re-subscribing a scene through the opposite helper, but left the previous Combine sink alive in the coordinator's bag. A subsequent `NavigationStep` emission would then route through *both* handler closures — the old subscription held the old closure by capture even after the SPI property went nil. Move the navigation cancellable onto the scene as `navigationSubscription`. Assigning a fresh `AnyCancellable` to the optional property releases (and cancels) the previous one, so re-subscribe genuinely yields "last subscriber wins" on the Combine route. Bonus: the subscription now dies with the scene instead of outliving it in the coordinator's bag. Strengthen the two re-subscribe tests to emit a step through the VM after re-subscribe and assert the previous handler never runs. Co-Authored-By: Claude Opus 4.7 --- ...NanoViewController+NavigationHelpers.swift | 23 ++++++---- .../NanoViewController.swift | 12 +++++ .../NavigationHandlerSPITests.swift | 46 +++++++++++++++---- 3 files changed, 63 insertions(+), 18 deletions(-) diff --git a/Sources/NanoViewControllerController/Coordinating+NanoViewController+NavigationHelpers.swift b/Sources/NanoViewControllerController/Coordinating+NanoViewController+NavigationHelpers.swift index c6e131a..5ab00b5 100644 --- a/Sources/NanoViewControllerController/Coordinating+NanoViewController+NavigationHelpers.swift +++ b/Sources/NanoViewControllerController/Coordinating+NanoViewController+NavigationHelpers.swift @@ -6,8 +6,10 @@ import NanoViewControllerCore import NanoViewControllerNavigation extension Coordinating { - /// Subscribes the coordinator to the controller's navigation publisher and - /// stores the resulting cancellable on the coordinator's bag. + /// Subscribes to the controller's navigation publisher and stashes the + /// cancellable on the scene itself, so re-subscribing through the inverse + /// helper (see ``subscribeToModalNavigation(of:handler:)``) cancels this + /// subscription instead of letting both sinks fire on every emission. /// /// Used by the push-style hookup in /// ``Coordinating/pushSceneInstance(_:animated:navigationPresentationCompletion:navigationHandler:)``. @@ -27,17 +29,21 @@ extension Coordinating { ) { scene.navigationHandler = handler scene.modalNavigationHandler = nil - scene.navigation + scene.navigationSubscription = scene.navigation .sinkOnMain { handler($0) } - .store(in: &cancellables) } - /// Subscribes the coordinator to the controller's navigation publisher and - /// hands the caller's handler a `DismissScene` callback that dismisses - /// the controller with optional animation. Used by the modal-style hookups in + /// Subscribes to the controller's navigation publisher and hands the + /// caller's handler a `DismissScene` callback that dismisses the + /// controller with optional animation. Used by the modal-style hookups in /// ``Coordinating/modallyPresent(scene:animated:presentationCompletion:navigationHandler:)`` /// and ``Coordinating/replaceAllScenes(with:animated:whenReplacingFinished:navigationHandler:)``. /// + /// Like the push-style variant, the cancellable lives on the scene so + /// that re-subscribing through ``subscribeToNavigation(of:handler:)`` + /// cancels this subscription rather than leaving two live sinks routing + /// every emission to both handlers. + /// /// Side effect: stashes `handler` on /// ``NanoViewController/modalNavigationHandler`` (an `@_spi(Testing)` hook). /// Tests pass a spy ``DismissScene`` when invoking the handler so the @@ -52,12 +58,11 @@ extension Coordinating { ) { scene.modalNavigationHandler = handler scene.navigationHandler = nil - scene.navigation + scene.navigationSubscription = scene.navigation .sinkOnMain { [weak scene] step in handler(step) { animated, completion in scene?.dismiss(animated: animated, completion: completion) } } - .store(in: &cancellables) } } diff --git a/Sources/NanoViewControllerController/NanoViewController.swift b/Sources/NanoViewControllerController/NanoViewController.swift index c789512..1278462 100644 --- a/Sources/NanoViewControllerController/NanoViewController.swift +++ b/Sources/NanoViewControllerController/NanoViewController.swift @@ -205,6 +205,18 @@ open class NanoViewController: UIViewController { @_spi(Testing) public internal(set) var modalNavigationHandler: ((ViewModel.NavigationStep, @escaping DismissScene) -> Void)? + /// The Combine subscription forwarding ``navigation`` into the + /// coordinator's routing closure (either ``navigationHandler`` or + /// ``modalNavigationHandler``). + /// + /// Lives on the scene rather than the coordinator's bag so that + /// re-subscribing through the inverse helper (push ↔ modal) cancels the + /// previous subscription — assigning a fresh `AnyCancellable` releases + /// (and cancels) the old one. This enforces "last subscriber wins" on + /// the Combine route, matching the mutual-exclusivity invariant the SPI + /// hook properties already promise. + var navigationSubscription: AnyCancellable? + /// Clock used to auto-dismiss toasts emitted via /// ``InputFromController/toastSubject``. /// diff --git a/Tests/NanoViewControllerControllerTests/NavigationHandlerSPITests.swift b/Tests/NanoViewControllerControllerTests/NavigationHandlerSPITests.swift index 065ea10..6f93d4e 100644 --- a/Tests/NanoViewControllerControllerTests/NavigationHandlerSPITests.swift +++ b/Tests/NanoViewControllerControllerTests/NavigationHandlerSPITests.swift @@ -104,22 +104,37 @@ final class NavigationHandlerSPITests: XCTestCase { // MARK: - Mutual exclusivity of the two SPI hooks func test_resubscribingModalAfterPush_clearsThePushHandler() throws { - // Arrange — wire up a scene through the push helper first. + // Arrange — wire up a scene through the push helper first, capturing + // both push and modal handler invocations so we can assert that only + // the most-recent subscription receives emissions. let coordinator = TestCoordinator(navigationController: UINavigationController()) let viewModel = SPITestViewModel() - coordinator.push(scene: SPITestScene.self, viewModel: viewModel, animated: false) { _ in } + var pushRouted = [SPITestStep]() + var modalRouted = [SPITestStep]() + + coordinator.push(scene: SPITestScene.self, viewModel: viewModel, animated: false) { + pushRouted.append($0) + } let scene = try XCTUnwrap(coordinator.navigationController.viewControllers.last as? SPITestScene) XCTAssertNotNil(scene.navigationHandler) XCTAssertNil(scene.modalNavigationHandler) // Act — re-subscribe the same instance through the modal helper. - coordinator.subscribeToModalNavigation(of: scene) { _, _ in } + coordinator.subscribeToModalNavigation(of: scene) { step, _ in + modalRouted.append(step) + } - // Assert — the docs claim mutual exclusivity; the implementation now - // honours it instead of leaving a stale push handler alongside the - // freshly-installed modal one. + // Assert — SPI hook properties flipped. XCTAssertNotNil(scene.modalNavigationHandler) XCTAssertNil(scene.navigationHandler) + + // Assert — Combine route also flipped. Emitting through the VM should + // hit only the latest subscription, not both. (Without cancelling the + // prior sink, this would land in `pushRouted` as well.) + viewModel.trigger.send(.alpha) + pumpMainRunLoop() + XCTAssertEqual(pushRouted, [], "previous push subscription must be cancelled on re-subscribe") + XCTAssertEqual(modalRouted, [.alpha]) } func test_resubscribingPushAfterModal_clearsTheModalHandler() throws { @@ -127,18 +142,31 @@ final class NavigationHandlerSPITests: XCTestCase { let nav = ModalPresentCapturingNavigationController() let coordinator = TestCoordinator(navigationController: nav) let viewModel = SPITestViewModel() - coordinator.modallyPresent(scene: SPITestScene.self, viewModel: viewModel, animated: false) { _, _ in } + var modalRouted = [SPITestStep]() + var pushRouted = [SPITestStep]() + + coordinator.modallyPresent(scene: SPITestScene.self, viewModel: viewModel, animated: false) { step, _ in + modalRouted.append(step) + } let presented = try XCTUnwrap(nav.presentedViewControllerCapture as? UINavigationController) let scene = try XCTUnwrap(presented.viewControllers.first as? SPITestScene) XCTAssertNotNil(scene.modalNavigationHandler) XCTAssertNil(scene.navigationHandler) // Act — re-subscribe the same instance through the push helper. - coordinator.subscribeToNavigation(of: scene) { _ in } + coordinator.subscribeToNavigation(of: scene) { + pushRouted.append($0) + } - // Assert + // Assert — SPI hook properties flipped. XCTAssertNotNil(scene.navigationHandler) XCTAssertNil(scene.modalNavigationHandler) + + // Assert — Combine route also flipped. + viewModel.trigger.send(.alpha) + pumpMainRunLoop() + XCTAssertEqual(modalRouted, [], "previous modal subscription must be cancelled on re-subscribe") + XCTAssertEqual(pushRouted, [.alpha]) } func test_modalNavigationHandler_dismissForwardsAnimatedFlagAndCompletion() { From c27716871e1bc8b2d5a1b7b2864c8707e3bf4a52 Mon Sep 17 00:00:00 2001 From: Alexander Cyon Date: Sat, 23 May 2026 07:11:24 +0200 Subject: [PATCH 3/4] Use full URL in MIT license header Replace bare `github.com/sajjon` parenthetical with explicit `https://github.com/sajjon` link across all 102 source/test/example files. Header-only change, no functional diff. --- Examples/SignUpDemo/App/AppDelegate.swift | 2 +- Examples/SignUpDemo/App/SceneDelegate.swift | 2 +- Examples/SignUpDemo/Sources/AppCoordinator.swift | 2 +- Examples/SignUpDemo/Sources/Home/HomeCoordinator.swift | 2 +- Examples/SignUpDemo/Sources/Home/HomeScene.swift | 2 +- Examples/SignUpDemo/Sources/Home/HomeView.swift | 2 +- Examples/SignUpDemo/Sources/Home/HomeViewModel.swift | 2 +- Examples/SignUpDemo/Sources/Models/SignedUpUser.swift | 2 +- .../SignUpDemo/Sources/Onboarding/OnboardingCoordinator.swift | 2 +- Examples/SignUpDemo/Sources/Onboarding/SignUpScene.swift | 2 +- Examples/SignUpDemo/Sources/Onboarding/SignUpView.swift | 2 +- Examples/SignUpDemo/Sources/Onboarding/SignUpViewModel.swift | 2 +- Examples/SignUpDemo/Sources/Services/DummySignUpService.swift | 2 +- Examples/SignUpDemo/Sources/Services/SignUpServicing.swift | 2 +- Sources/NanoViewControllerCombine/Binder.swift | 2 +- Sources/NanoViewControllerCombine/Publisher+Extras.swift | 2 +- Sources/NanoViewControllerCombine/Publisher+Helpers.swift | 2 +- Sources/NanoViewControllerCombine/Publisher+Operators.swift | 2 +- Sources/NanoViewControllerCombine/UIControl+Publisher.swift | 2 +- Sources/NanoViewControllerCombine/UIControl+Publishers.swift | 2 +- Sources/NanoViewControllerCombine/UITextField+Publishers.swift | 2 +- Sources/NanoViewControllerCombine/UIView+Publishers.swift | 2 +- Sources/NanoViewControllerController/AbstractController.swift | 2 +- Sources/NanoViewControllerController/AbstractViewModel.swift | 2 +- Sources/NanoViewControllerController/BarButtonContent.swift | 2 +- Sources/NanoViewControllerController/ContentView.swift | 2 +- Sources/NanoViewControllerController/ControllerConfig.swift | 2 +- .../Coordinating+Child+ModalPresent.swift | 2 +- .../NanoViewControllerController/Coordinating+Child+Start.swift | 2 +- .../Coordinating+NanoViewController+NavigationHelpers.swift | 2 +- .../Coordinating+NanoViewController+Present.swift | 2 +- .../Coordinating+NanoViewController+Push.swift | 2 +- .../Coordinating+NanoViewController+Replace.swift | 2 +- .../Coordinating+NavigationStack.swift | 2 +- Sources/NanoViewControllerController/Coordinating+Stack.swift | 2 +- Sources/NanoViewControllerController/InputFromController.swift | 2 +- Sources/NanoViewControllerController/InputType.swift | 2 +- .../NanoViewController+BarButtonContent.swift | 2 +- Sources/NanoViewControllerController/NanoViewController.swift | 2 +- .../NanoViewControllerWithoutVM.swift | 2 +- Sources/NanoViewControllerController/NavigationBarLayout.swift | 2 +- .../NavigationBarLayoutingNavigationController.swift | 2 +- Sources/NanoViewControllerController/Toast.swift | 2 +- Sources/NanoViewControllerController/ViewModelType.swift | 2 +- Sources/NanoViewControllerController/ViewModelled.swift | 2 +- Sources/NanoViewControllerCore/AbstractTarget.swift | 2 +- Sources/NanoViewControllerCore/ActivityIndicator.swift | 2 +- Sources/NanoViewControllerCore/BindingsBuilder.swift | 2 +- Sources/NanoViewControllerCore/EmptyInitializable.swift | 2 +- Sources/NanoViewControllerCore/ErrorTracker.swift | 2 +- Sources/NanoViewControllerCore/Never+Helpers.swift | 2 +- Sources/NanoViewControllerCore/Output.swift | 2 +- Sources/NanoViewControllerDIPrimitives/Clock.swift | 2 +- Sources/NanoViewControllerDIPrimitives/DateProvider.swift | 2 +- Sources/NanoViewControllerDIPrimitives/HapticFeedback.swift | 2 +- Sources/NanoViewControllerDIPrimitives/MainScheduler.swift | 2 +- Sources/NanoViewControllerDIPrimitives/Pasteboard.swift | 2 +- Sources/NanoViewControllerDIPrimitives/UrlOpener.swift | 2 +- Sources/NanoViewControllerNavigation/BaseCoordinator.swift | 2 +- Sources/NanoViewControllerNavigation/Coordinating.swift | 2 +- .../NanoViewControllerNavigation/CoordinatorTransition.swift | 2 +- Sources/NanoViewControllerNavigation/Navigating.swift | 2 +- Sources/NanoViewControllerNavigation/Navigator.swift | 2 +- Sources/NanoViewControllerSceneViews/AbstractSceneView.swift | 2 +- .../BaseScrollableStackViewOwner.swift | 2 +- Sources/NanoViewControllerSceneViews/BaseTableViewOwner.swift | 2 +- Sources/NanoViewControllerSceneViews/CellConfigurable.swift | 2 +- Sources/NanoViewControllerSceneViews/ClassIdentifiable.swift | 2 +- Sources/NanoViewControllerSceneViews/ContentViewProvider.swift | 2 +- Sources/NanoViewControllerSceneViews/PullToRefreshCapable.swift | 2 +- Sources/NanoViewControllerSceneViews/ScrollViewOwner.swift | 2 +- Sources/NanoViewControllerSceneViews/SelectionPublishing.swift | 2 +- .../NanoViewControllerSceneViews/SingleCellTypeTableView.swift | 2 +- Sources/NanoViewControllerSceneViews/TableViewOwner.swift | 2 +- Tests/NanoViewControllerCombineTests/BinderTests.swift | 2 +- Tests/NanoViewControllerCombineTests/PublisherExtrasTests.swift | 2 +- .../NanoViewControllerCombineTests/PublisherHelpersTests.swift | 2 +- Tests/NanoViewControllerCombineTests/SinkOnMainTests.swift | 2 +- .../NanoViewControllerCombineTests/UIControlBindersTests.swift | 2 +- .../UIControlPublisherDeadControlTests.swift | 2 +- .../UIControlPublisherTests.swift | 2 +- .../UITextFieldPublishersTests.swift | 2 +- Tests/NanoViewControllerCombineTests/UIViewBindersTests.swift | 2 +- .../WithLatestFromCompletionTests.swift | 2 +- .../AbstractViewModelTests.swift | 2 +- .../CoordinatorHelperTests.swift | 2 +- .../NanoViewControllerBehaviorTests.swift | 2 +- .../NanoViewControllerConfigTests.swift | 2 +- .../NavigationBarAndToastTests.swift | 2 +- .../NavigationHandlerSPITests.swift | 2 +- Tests/NanoViewControllerControllerTests/TestSupport.swift | 2 +- Tests/NanoViewControllerCoreTests/AbstractTargetTests.swift | 2 +- Tests/NanoViewControllerCoreTests/ActivityIndicatorTests.swift | 2 +- Tests/NanoViewControllerCoreTests/BindingsBuilderTests.swift | 2 +- .../ErrorTrackerCompactMapTests.swift | 2 +- Tests/NanoViewControllerCoreTests/ErrorTrackerTests.swift | 2 +- .../NanoViewControllerCoreSmokeTests.swift | 2 +- Tests/NanoViewControllerDIPrimitivesTests/ClockTests.swift | 2 +- .../NanoViewControllerDIPrimitivesTests/DateProviderTests.swift | 2 +- .../HapticFeedbackTests.swift | 2 +- .../MainSchedulerTests.swift | 2 +- Tests/NanoViewControllerDIPrimitivesTests/PasteboardTests.swift | 2 +- 102 files changed, 102 insertions(+), 102 deletions(-) diff --git a/Examples/SignUpDemo/App/AppDelegate.swift b/Examples/SignUpDemo/App/AppDelegate.swift index 09bdda1..5ac5bcf 100644 --- a/Examples/SignUpDemo/App/AppDelegate.swift +++ b/Examples/SignUpDemo/App/AppDelegate.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import UIKit diff --git a/Examples/SignUpDemo/App/SceneDelegate.swift b/Examples/SignUpDemo/App/SceneDelegate.swift index fbb4ac6..8ac4919 100644 --- a/Examples/SignUpDemo/App/SceneDelegate.swift +++ b/Examples/SignUpDemo/App/SceneDelegate.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import NanoViewControllerController import UIKit diff --git a/Examples/SignUpDemo/Sources/AppCoordinator.swift b/Examples/SignUpDemo/Sources/AppCoordinator.swift index e77e28e..23b0841 100644 --- a/Examples/SignUpDemo/Sources/AppCoordinator.swift +++ b/Examples/SignUpDemo/Sources/AppCoordinator.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import NanoViewControllerController import NanoViewControllerNavigation diff --git a/Examples/SignUpDemo/Sources/Home/HomeCoordinator.swift b/Examples/SignUpDemo/Sources/Home/HomeCoordinator.swift index 8076526..3a688a3 100644 --- a/Examples/SignUpDemo/Sources/Home/HomeCoordinator.swift +++ b/Examples/SignUpDemo/Sources/Home/HomeCoordinator.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import NanoViewControllerController import NanoViewControllerNavigation diff --git a/Examples/SignUpDemo/Sources/Home/HomeScene.swift b/Examples/SignUpDemo/Sources/Home/HomeScene.swift index 9c568d8..b91a3d1 100644 --- a/Examples/SignUpDemo/Sources/Home/HomeScene.swift +++ b/Examples/SignUpDemo/Sources/Home/HomeScene.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import NanoViewControllerController diff --git a/Examples/SignUpDemo/Sources/Home/HomeView.swift b/Examples/SignUpDemo/Sources/Home/HomeView.swift index 448a5e9..bdc3a59 100644 --- a/Examples/SignUpDemo/Sources/Home/HomeView.swift +++ b/Examples/SignUpDemo/Sources/Home/HomeView.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import NanoViewControllerCombine diff --git a/Examples/SignUpDemo/Sources/Home/HomeViewModel.swift b/Examples/SignUpDemo/Sources/Home/HomeViewModel.swift index 3a5e91c..9b6e714 100644 --- a/Examples/SignUpDemo/Sources/Home/HomeViewModel.swift +++ b/Examples/SignUpDemo/Sources/Home/HomeViewModel.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import NanoViewControllerController diff --git a/Examples/SignUpDemo/Sources/Models/SignedUpUser.swift b/Examples/SignUpDemo/Sources/Models/SignedUpUser.swift index 9fe08f6..3ae734b 100644 --- a/Examples/SignUpDemo/Sources/Models/SignedUpUser.swift +++ b/Examples/SignUpDemo/Sources/Models/SignedUpUser.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Foundation diff --git a/Examples/SignUpDemo/Sources/Onboarding/OnboardingCoordinator.swift b/Examples/SignUpDemo/Sources/Onboarding/OnboardingCoordinator.swift index bbd711e..88fef35 100644 --- a/Examples/SignUpDemo/Sources/Onboarding/OnboardingCoordinator.swift +++ b/Examples/SignUpDemo/Sources/Onboarding/OnboardingCoordinator.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import NanoViewControllerController import NanoViewControllerNavigation diff --git a/Examples/SignUpDemo/Sources/Onboarding/SignUpScene.swift b/Examples/SignUpDemo/Sources/Onboarding/SignUpScene.swift index 8592034..e7b1c6f 100644 --- a/Examples/SignUpDemo/Sources/Onboarding/SignUpScene.swift +++ b/Examples/SignUpDemo/Sources/Onboarding/SignUpScene.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import NanoViewControllerController diff --git a/Examples/SignUpDemo/Sources/Onboarding/SignUpView.swift b/Examples/SignUpDemo/Sources/Onboarding/SignUpView.swift index b20cc39..9052e45 100644 --- a/Examples/SignUpDemo/Sources/Onboarding/SignUpView.swift +++ b/Examples/SignUpDemo/Sources/Onboarding/SignUpView.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import NanoViewControllerCombine diff --git a/Examples/SignUpDemo/Sources/Onboarding/SignUpViewModel.swift b/Examples/SignUpDemo/Sources/Onboarding/SignUpViewModel.swift index 3a93450..d97a83b 100644 --- a/Examples/SignUpDemo/Sources/Onboarding/SignUpViewModel.swift +++ b/Examples/SignUpDemo/Sources/Onboarding/SignUpViewModel.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import Foundation diff --git a/Examples/SignUpDemo/Sources/Services/DummySignUpService.swift b/Examples/SignUpDemo/Sources/Services/DummySignUpService.swift index fd0910e..e8d0068 100644 --- a/Examples/SignUpDemo/Sources/Services/DummySignUpService.swift +++ b/Examples/SignUpDemo/Sources/Services/DummySignUpService.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import Foundation diff --git a/Examples/SignUpDemo/Sources/Services/SignUpServicing.swift b/Examples/SignUpDemo/Sources/Services/SignUpServicing.swift index 45f3f29..ecd36d2 100644 --- a/Examples/SignUpDemo/Sources/Services/SignUpServicing.swift +++ b/Examples/SignUpDemo/Sources/Services/SignUpServicing.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine diff --git a/Sources/NanoViewControllerCombine/Binder.swift b/Sources/NanoViewControllerCombine/Binder.swift index e73b3e2..43bb27a 100644 --- a/Sources/NanoViewControllerCombine/Binder.swift +++ b/Sources/NanoViewControllerCombine/Binder.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Foundation diff --git a/Sources/NanoViewControllerCombine/Publisher+Extras.swift b/Sources/NanoViewControllerCombine/Publisher+Extras.swift index b395454..f72435e 100644 --- a/Sources/NanoViewControllerCombine/Publisher+Extras.swift +++ b/Sources/NanoViewControllerCombine/Publisher+Extras.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import Foundation diff --git a/Sources/NanoViewControllerCombine/Publisher+Helpers.swift b/Sources/NanoViewControllerCombine/Publisher+Helpers.swift index e518ab0..3fecf08 100644 --- a/Sources/NanoViewControllerCombine/Publisher+Helpers.swift +++ b/Sources/NanoViewControllerCombine/Publisher+Helpers.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import Foundation diff --git a/Sources/NanoViewControllerCombine/Publisher+Operators.swift b/Sources/NanoViewControllerCombine/Publisher+Operators.swift index a107d0f..4b5675e 100644 --- a/Sources/NanoViewControllerCombine/Publisher+Operators.swift +++ b/Sources/NanoViewControllerCombine/Publisher+Operators.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import UIKit diff --git a/Sources/NanoViewControllerCombine/UIControl+Publisher.swift b/Sources/NanoViewControllerCombine/UIControl+Publisher.swift index 2bc1978..bab6880 100644 --- a/Sources/NanoViewControllerCombine/UIControl+Publisher.swift +++ b/Sources/NanoViewControllerCombine/UIControl+Publisher.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import UIKit diff --git a/Sources/NanoViewControllerCombine/UIControl+Publishers.swift b/Sources/NanoViewControllerCombine/UIControl+Publishers.swift index f688892..29beda6 100644 --- a/Sources/NanoViewControllerCombine/UIControl+Publishers.swift +++ b/Sources/NanoViewControllerCombine/UIControl+Publishers.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import UIKit diff --git a/Sources/NanoViewControllerCombine/UITextField+Publishers.swift b/Sources/NanoViewControllerCombine/UITextField+Publishers.swift index 0b42550..f20dd99 100644 --- a/Sources/NanoViewControllerCombine/UITextField+Publishers.swift +++ b/Sources/NanoViewControllerCombine/UITextField+Publishers.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import UIKit diff --git a/Sources/NanoViewControllerCombine/UIView+Publishers.swift b/Sources/NanoViewControllerCombine/UIView+Publishers.swift index 525ec56..fa7e303 100644 --- a/Sources/NanoViewControllerCombine/UIView+Publishers.swift +++ b/Sources/NanoViewControllerCombine/UIView+Publishers.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import UIKit diff --git a/Sources/NanoViewControllerController/AbstractController.swift b/Sources/NanoViewControllerController/AbstractController.swift index 6f81b50..86a363e 100644 --- a/Sources/NanoViewControllerController/AbstractController.swift +++ b/Sources/NanoViewControllerController/AbstractController.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import UIKit diff --git a/Sources/NanoViewControllerController/AbstractViewModel.swift b/Sources/NanoViewControllerController/AbstractViewModel.swift index f06ece1..12c1933 100644 --- a/Sources/NanoViewControllerController/AbstractViewModel.swift +++ b/Sources/NanoViewControllerController/AbstractViewModel.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import Foundation diff --git a/Sources/NanoViewControllerController/BarButtonContent.swift b/Sources/NanoViewControllerController/BarButtonContent.swift index 64b132b..0e39636 100644 --- a/Sources/NanoViewControllerController/BarButtonContent.swift +++ b/Sources/NanoViewControllerController/BarButtonContent.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import UIKit diff --git a/Sources/NanoViewControllerController/ContentView.swift b/Sources/NanoViewControllerController/ContentView.swift index f122986..f631293 100644 --- a/Sources/NanoViewControllerController/ContentView.swift +++ b/Sources/NanoViewControllerController/ContentView.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import NanoViewControllerCore import UIKit diff --git a/Sources/NanoViewControllerController/ControllerConfig.swift b/Sources/NanoViewControllerController/ControllerConfig.swift index d184510..1ec6add 100644 --- a/Sources/NanoViewControllerController/ControllerConfig.swift +++ b/Sources/NanoViewControllerController/ControllerConfig.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Foundation diff --git a/Sources/NanoViewControllerController/Coordinating+Child+ModalPresent.swift b/Sources/NanoViewControllerController/Coordinating+Child+ModalPresent.swift index c29ec15..f587f31 100644 --- a/Sources/NanoViewControllerController/Coordinating+Child+ModalPresent.swift +++ b/Sources/NanoViewControllerController/Coordinating+Child+ModalPresent.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import NanoViewControllerCombine diff --git a/Sources/NanoViewControllerController/Coordinating+Child+Start.swift b/Sources/NanoViewControllerController/Coordinating+Child+Start.swift index f05dd84..b4623c9 100644 --- a/Sources/NanoViewControllerController/Coordinating+Child+Start.swift +++ b/Sources/NanoViewControllerController/Coordinating+Child+Start.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import NanoViewControllerCombine diff --git a/Sources/NanoViewControllerController/Coordinating+NanoViewController+NavigationHelpers.swift b/Sources/NanoViewControllerController/Coordinating+NanoViewController+NavigationHelpers.swift index 5ab00b5..628e179 100644 --- a/Sources/NanoViewControllerController/Coordinating+NanoViewController+NavigationHelpers.swift +++ b/Sources/NanoViewControllerController/Coordinating+NanoViewController+NavigationHelpers.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import NanoViewControllerCombine diff --git a/Sources/NanoViewControllerController/Coordinating+NanoViewController+Present.swift b/Sources/NanoViewControllerController/Coordinating+NanoViewController+Present.swift index 717c108..d4f5a1a 100644 --- a/Sources/NanoViewControllerController/Coordinating+NanoViewController+Present.swift +++ b/Sources/NanoViewControllerController/Coordinating+NanoViewController+Present.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import NanoViewControllerCombine diff --git a/Sources/NanoViewControllerController/Coordinating+NanoViewController+Push.swift b/Sources/NanoViewControllerController/Coordinating+NanoViewController+Push.swift index c927351..bb38537 100644 --- a/Sources/NanoViewControllerController/Coordinating+NanoViewController+Push.swift +++ b/Sources/NanoViewControllerController/Coordinating+NanoViewController+Push.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import NanoViewControllerCombine diff --git a/Sources/NanoViewControllerController/Coordinating+NanoViewController+Replace.swift b/Sources/NanoViewControllerController/Coordinating+NanoViewController+Replace.swift index a584aa0..4ab9771 100644 --- a/Sources/NanoViewControllerController/Coordinating+NanoViewController+Replace.swift +++ b/Sources/NanoViewControllerController/Coordinating+NanoViewController+Replace.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import NanoViewControllerCombine diff --git a/Sources/NanoViewControllerController/Coordinating+NavigationStack.swift b/Sources/NanoViewControllerController/Coordinating+NavigationStack.swift index 0c65032..825ff95 100644 --- a/Sources/NanoViewControllerController/Coordinating+NavigationStack.swift +++ b/Sources/NanoViewControllerController/Coordinating+NavigationStack.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import NanoViewControllerNavigation import UIKit diff --git a/Sources/NanoViewControllerController/Coordinating+Stack.swift b/Sources/NanoViewControllerController/Coordinating+Stack.swift index 6a15c34..c7628c6 100644 --- a/Sources/NanoViewControllerController/Coordinating+Stack.swift +++ b/Sources/NanoViewControllerController/Coordinating+Stack.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import NanoViewControllerCore import NanoViewControllerNavigation diff --git a/Sources/NanoViewControllerController/InputFromController.swift b/Sources/NanoViewControllerController/InputFromController.swift index 1075dd2..61ec9a3 100644 --- a/Sources/NanoViewControllerController/InputFromController.swift +++ b/Sources/NanoViewControllerController/InputFromController.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import Foundation diff --git a/Sources/NanoViewControllerController/InputType.swift b/Sources/NanoViewControllerController/InputType.swift index 26f3c3f..99952fc 100644 --- a/Sources/NanoViewControllerController/InputType.swift +++ b/Sources/NanoViewControllerController/InputType.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Foundation diff --git a/Sources/NanoViewControllerController/NanoViewController+BarButtonContent.swift b/Sources/NanoViewControllerController/NanoViewController+BarButtonContent.swift index f949730..c2f10cf 100644 --- a/Sources/NanoViewControllerController/NanoViewController+BarButtonContent.swift +++ b/Sources/NanoViewControllerController/NanoViewController+BarButtonContent.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import NanoViewControllerCore import UIKit diff --git a/Sources/NanoViewControllerController/NanoViewController.swift b/Sources/NanoViewControllerController/NanoViewController.swift index 1278462..6798023 100644 --- a/Sources/NanoViewControllerController/NanoViewController.swift +++ b/Sources/NanoViewControllerController/NanoViewController.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import NanoViewControllerCore diff --git a/Sources/NanoViewControllerController/NanoViewControllerWithoutVM.swift b/Sources/NanoViewControllerController/NanoViewControllerWithoutVM.swift index f17a2e1..6b24549 100644 --- a/Sources/NanoViewControllerController/NanoViewControllerWithoutVM.swift +++ b/Sources/NanoViewControllerController/NanoViewControllerWithoutVM.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import NanoViewControllerCore import UIKit diff --git a/Sources/NanoViewControllerController/NavigationBarLayout.swift b/Sources/NanoViewControllerController/NavigationBarLayout.swift index e850548..15c3410 100644 --- a/Sources/NanoViewControllerController/NavigationBarLayout.swift +++ b/Sources/NanoViewControllerController/NavigationBarLayout.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import UIKit diff --git a/Sources/NanoViewControllerController/NavigationBarLayoutingNavigationController.swift b/Sources/NanoViewControllerController/NavigationBarLayoutingNavigationController.swift index 4de3962..15b5e34 100644 --- a/Sources/NanoViewControllerController/NavigationBarLayoutingNavigationController.swift +++ b/Sources/NanoViewControllerController/NavigationBarLayoutingNavigationController.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import UIKit diff --git a/Sources/NanoViewControllerController/Toast.swift b/Sources/NanoViewControllerController/Toast.swift index d64e411..a41d46d 100644 --- a/Sources/NanoViewControllerController/Toast.swift +++ b/Sources/NanoViewControllerController/Toast.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import NanoViewControllerDIPrimitives import NanoViewControllerNavigation diff --git a/Sources/NanoViewControllerController/ViewModelType.swift b/Sources/NanoViewControllerController/ViewModelType.swift index effb199..e2a21c5 100644 --- a/Sources/NanoViewControllerController/ViewModelType.swift +++ b/Sources/NanoViewControllerController/ViewModelType.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Foundation import NanoViewControllerCore diff --git a/Sources/NanoViewControllerController/ViewModelled.swift b/Sources/NanoViewControllerController/ViewModelled.swift index 07bb8be..fec0d3a 100644 --- a/Sources/NanoViewControllerController/ViewModelled.swift +++ b/Sources/NanoViewControllerController/ViewModelled.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import NanoViewControllerCombine diff --git a/Sources/NanoViewControllerCore/AbstractTarget.swift b/Sources/NanoViewControllerCore/AbstractTarget.swift index 9395c59..2f6877d 100644 --- a/Sources/NanoViewControllerCore/AbstractTarget.swift +++ b/Sources/NanoViewControllerCore/AbstractTarget.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import Foundation diff --git a/Sources/NanoViewControllerCore/ActivityIndicator.swift b/Sources/NanoViewControllerCore/ActivityIndicator.swift index febd432..96cea8e 100644 --- a/Sources/NanoViewControllerCore/ActivityIndicator.swift +++ b/Sources/NanoViewControllerCore/ActivityIndicator.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import Foundation diff --git a/Sources/NanoViewControllerCore/BindingsBuilder.swift b/Sources/NanoViewControllerCore/BindingsBuilder.swift index 8c36d1c..b802243 100644 --- a/Sources/NanoViewControllerCore/BindingsBuilder.swift +++ b/Sources/NanoViewControllerCore/BindingsBuilder.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine diff --git a/Sources/NanoViewControllerCore/EmptyInitializable.swift b/Sources/NanoViewControllerCore/EmptyInitializable.swift index e8e7fc7..38b1180 100644 --- a/Sources/NanoViewControllerCore/EmptyInitializable.swift +++ b/Sources/NanoViewControllerCore/EmptyInitializable.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Foundation diff --git a/Sources/NanoViewControllerCore/ErrorTracker.swift b/Sources/NanoViewControllerCore/ErrorTracker.swift index 2eea8f3..1a89a31 100644 --- a/Sources/NanoViewControllerCore/ErrorTracker.swift +++ b/Sources/NanoViewControllerCore/ErrorTracker.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import Foundation diff --git a/Sources/NanoViewControllerCore/Never+Helpers.swift b/Sources/NanoViewControllerCore/Never+Helpers.swift index 6080e80..e1bb487 100644 --- a/Sources/NanoViewControllerCore/Never+Helpers.swift +++ b/Sources/NanoViewControllerCore/Never+Helpers.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Foundation diff --git a/Sources/NanoViewControllerCore/Output.swift b/Sources/NanoViewControllerCore/Output.swift index c388534..35f113d 100644 --- a/Sources/NanoViewControllerCore/Output.swift +++ b/Sources/NanoViewControllerCore/Output.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine diff --git a/Sources/NanoViewControllerDIPrimitives/Clock.swift b/Sources/NanoViewControllerDIPrimitives/Clock.swift index 88bcb19..2076e1a 100644 --- a/Sources/NanoViewControllerDIPrimitives/Clock.swift +++ b/Sources/NanoViewControllerDIPrimitives/Clock.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Foundation diff --git a/Sources/NanoViewControllerDIPrimitives/DateProvider.swift b/Sources/NanoViewControllerDIPrimitives/DateProvider.swift index af6f458..1cd8d95 100644 --- a/Sources/NanoViewControllerDIPrimitives/DateProvider.swift +++ b/Sources/NanoViewControllerDIPrimitives/DateProvider.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Foundation diff --git a/Sources/NanoViewControllerDIPrimitives/HapticFeedback.swift b/Sources/NanoViewControllerDIPrimitives/HapticFeedback.swift index 358b57d..bb5faf0 100644 --- a/Sources/NanoViewControllerDIPrimitives/HapticFeedback.swift +++ b/Sources/NanoViewControllerDIPrimitives/HapticFeedback.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import UIKit diff --git a/Sources/NanoViewControllerDIPrimitives/MainScheduler.swift b/Sources/NanoViewControllerDIPrimitives/MainScheduler.swift index d92f09d..4203d97 100644 --- a/Sources/NanoViewControllerDIPrimitives/MainScheduler.swift +++ b/Sources/NanoViewControllerDIPrimitives/MainScheduler.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Foundation diff --git a/Sources/NanoViewControllerDIPrimitives/Pasteboard.swift b/Sources/NanoViewControllerDIPrimitives/Pasteboard.swift index eb17707..8697f06 100644 --- a/Sources/NanoViewControllerDIPrimitives/Pasteboard.swift +++ b/Sources/NanoViewControllerDIPrimitives/Pasteboard.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import UIKit diff --git a/Sources/NanoViewControllerDIPrimitives/UrlOpener.swift b/Sources/NanoViewControllerDIPrimitives/UrlOpener.swift index 657ff40..394ebab 100644 --- a/Sources/NanoViewControllerDIPrimitives/UrlOpener.swift +++ b/Sources/NanoViewControllerDIPrimitives/UrlOpener.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import UIKit diff --git a/Sources/NanoViewControllerNavigation/BaseCoordinator.swift b/Sources/NanoViewControllerNavigation/BaseCoordinator.swift index e2e0509..3dade6f 100644 --- a/Sources/NanoViewControllerNavigation/BaseCoordinator.swift +++ b/Sources/NanoViewControllerNavigation/BaseCoordinator.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import NanoViewControllerCore diff --git a/Sources/NanoViewControllerNavigation/Coordinating.swift b/Sources/NanoViewControllerNavigation/Coordinating.swift index 060418b..40d8bf3 100644 --- a/Sources/NanoViewControllerNavigation/Coordinating.swift +++ b/Sources/NanoViewControllerNavigation/Coordinating.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import UIKit diff --git a/Sources/NanoViewControllerNavigation/CoordinatorTransition.swift b/Sources/NanoViewControllerNavigation/CoordinatorTransition.swift index e91e195..baa2800 100644 --- a/Sources/NanoViewControllerNavigation/CoordinatorTransition.swift +++ b/Sources/NanoViewControllerNavigation/CoordinatorTransition.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Foundation diff --git a/Sources/NanoViewControllerNavigation/Navigating.swift b/Sources/NanoViewControllerNavigation/Navigating.swift index 2f79f4f..e8b404f 100644 --- a/Sources/NanoViewControllerNavigation/Navigating.swift +++ b/Sources/NanoViewControllerNavigation/Navigating.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon /// Type capable of navigating — declares which navigation steps it can emit. /// diff --git a/Sources/NanoViewControllerNavigation/Navigator.swift b/Sources/NanoViewControllerNavigation/Navigator.swift index 4ed7bac..606cfd7 100644 --- a/Sources/NanoViewControllerNavigation/Navigator.swift +++ b/Sources/NanoViewControllerNavigation/Navigator.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import Foundation diff --git a/Sources/NanoViewControllerSceneViews/AbstractSceneView.swift b/Sources/NanoViewControllerSceneViews/AbstractSceneView.swift index bdaef3d..bd2a3f7 100644 --- a/Sources/NanoViewControllerSceneViews/AbstractSceneView.swift +++ b/Sources/NanoViewControllerSceneViews/AbstractSceneView.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import NanoViewControllerCombine diff --git a/Sources/NanoViewControllerSceneViews/BaseScrollableStackViewOwner.swift b/Sources/NanoViewControllerSceneViews/BaseScrollableStackViewOwner.swift index 6ca3166..2b9d054 100644 --- a/Sources/NanoViewControllerSceneViews/BaseScrollableStackViewOwner.swift +++ b/Sources/NanoViewControllerSceneViews/BaseScrollableStackViewOwner.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import NanoViewControllerCore import UIKit diff --git a/Sources/NanoViewControllerSceneViews/BaseTableViewOwner.swift b/Sources/NanoViewControllerSceneViews/BaseTableViewOwner.swift index 5e95809..49bffc6 100644 --- a/Sources/NanoViewControllerSceneViews/BaseTableViewOwner.swift +++ b/Sources/NanoViewControllerSceneViews/BaseTableViewOwner.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import NanoViewControllerCore import UIKit diff --git a/Sources/NanoViewControllerSceneViews/CellConfigurable.swift b/Sources/NanoViewControllerSceneViews/CellConfigurable.swift index da28bf3..693d419 100644 --- a/Sources/NanoViewControllerSceneViews/CellConfigurable.swift +++ b/Sources/NanoViewControllerSceneViews/CellConfigurable.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import UIKit diff --git a/Sources/NanoViewControllerSceneViews/ClassIdentifiable.swift b/Sources/NanoViewControllerSceneViews/ClassIdentifiable.swift index 65a4716..f41b4d5 100644 --- a/Sources/NanoViewControllerSceneViews/ClassIdentifiable.swift +++ b/Sources/NanoViewControllerSceneViews/ClassIdentifiable.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import UIKit diff --git a/Sources/NanoViewControllerSceneViews/ContentViewProvider.swift b/Sources/NanoViewControllerSceneViews/ContentViewProvider.swift index adbcfd1..83a686c 100644 --- a/Sources/NanoViewControllerSceneViews/ContentViewProvider.swift +++ b/Sources/NanoViewControllerSceneViews/ContentViewProvider.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import UIKit diff --git a/Sources/NanoViewControllerSceneViews/PullToRefreshCapable.swift b/Sources/NanoViewControllerSceneViews/PullToRefreshCapable.swift index 41786ea..48b9277 100644 --- a/Sources/NanoViewControllerSceneViews/PullToRefreshCapable.swift +++ b/Sources/NanoViewControllerSceneViews/PullToRefreshCapable.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Foundation diff --git a/Sources/NanoViewControllerSceneViews/ScrollViewOwner.swift b/Sources/NanoViewControllerSceneViews/ScrollViewOwner.swift index 485d41a..a62b54c 100644 --- a/Sources/NanoViewControllerSceneViews/ScrollViewOwner.swift +++ b/Sources/NanoViewControllerSceneViews/ScrollViewOwner.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import UIKit diff --git a/Sources/NanoViewControllerSceneViews/SelectionPublishing.swift b/Sources/NanoViewControllerSceneViews/SelectionPublishing.swift index 83a34e8..66f9045 100644 --- a/Sources/NanoViewControllerSceneViews/SelectionPublishing.swift +++ b/Sources/NanoViewControllerSceneViews/SelectionPublishing.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import UIKit diff --git a/Sources/NanoViewControllerSceneViews/SingleCellTypeTableView.swift b/Sources/NanoViewControllerSceneViews/SingleCellTypeTableView.swift index a8007f0..bed6d4b 100644 --- a/Sources/NanoViewControllerSceneViews/SingleCellTypeTableView.swift +++ b/Sources/NanoViewControllerSceneViews/SingleCellTypeTableView.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine import NanoViewControllerCombine diff --git a/Sources/NanoViewControllerSceneViews/TableViewOwner.swift b/Sources/NanoViewControllerSceneViews/TableViewOwner.swift index dad666d..43e789a 100644 --- a/Sources/NanoViewControllerSceneViews/TableViewOwner.swift +++ b/Sources/NanoViewControllerSceneViews/TableViewOwner.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Foundation diff --git a/Tests/NanoViewControllerCombineTests/BinderTests.swift b/Tests/NanoViewControllerCombineTests/BinderTests.swift index 7051c04..6b6c626 100644 --- a/Tests/NanoViewControllerCombineTests/BinderTests.swift +++ b/Tests/NanoViewControllerCombineTests/BinderTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine @testable import NanoViewControllerCombine diff --git a/Tests/NanoViewControllerCombineTests/PublisherExtrasTests.swift b/Tests/NanoViewControllerCombineTests/PublisherExtrasTests.swift index e6d7f1a..815f060 100644 --- a/Tests/NanoViewControllerCombineTests/PublisherExtrasTests.swift +++ b/Tests/NanoViewControllerCombineTests/PublisherExtrasTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine @testable import NanoViewControllerCombine diff --git a/Tests/NanoViewControllerCombineTests/PublisherHelpersTests.swift b/Tests/NanoViewControllerCombineTests/PublisherHelpersTests.swift index af80236..b977f84 100644 --- a/Tests/NanoViewControllerCombineTests/PublisherHelpersTests.swift +++ b/Tests/NanoViewControllerCombineTests/PublisherHelpersTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine @testable import NanoViewControllerCombine diff --git a/Tests/NanoViewControllerCombineTests/SinkOnMainTests.swift b/Tests/NanoViewControllerCombineTests/SinkOnMainTests.swift index 9fd65a9..1e80147 100644 --- a/Tests/NanoViewControllerCombineTests/SinkOnMainTests.swift +++ b/Tests/NanoViewControllerCombineTests/SinkOnMainTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine @testable import NanoViewControllerCombine diff --git a/Tests/NanoViewControllerCombineTests/UIControlBindersTests.swift b/Tests/NanoViewControllerCombineTests/UIControlBindersTests.swift index e03a7b7..4e09e04 100644 --- a/Tests/NanoViewControllerCombineTests/UIControlBindersTests.swift +++ b/Tests/NanoViewControllerCombineTests/UIControlBindersTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine @testable import NanoViewControllerCombine diff --git a/Tests/NanoViewControllerCombineTests/UIControlPublisherDeadControlTests.swift b/Tests/NanoViewControllerCombineTests/UIControlPublisherDeadControlTests.swift index d38dd50..70b8002 100644 --- a/Tests/NanoViewControllerCombineTests/UIControlPublisherDeadControlTests.swift +++ b/Tests/NanoViewControllerCombineTests/UIControlPublisherDeadControlTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine @testable import NanoViewControllerCombine diff --git a/Tests/NanoViewControllerCombineTests/UIControlPublisherTests.swift b/Tests/NanoViewControllerCombineTests/UIControlPublisherTests.swift index 5be8360..ea92cf7 100644 --- a/Tests/NanoViewControllerCombineTests/UIControlPublisherTests.swift +++ b/Tests/NanoViewControllerCombineTests/UIControlPublisherTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine @testable import NanoViewControllerCombine diff --git a/Tests/NanoViewControllerCombineTests/UITextFieldPublishersTests.swift b/Tests/NanoViewControllerCombineTests/UITextFieldPublishersTests.swift index 9cbf5d5..def2265 100644 --- a/Tests/NanoViewControllerCombineTests/UITextFieldPublishersTests.swift +++ b/Tests/NanoViewControllerCombineTests/UITextFieldPublishersTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine @testable import NanoViewControllerCombine diff --git a/Tests/NanoViewControllerCombineTests/UIViewBindersTests.swift b/Tests/NanoViewControllerCombineTests/UIViewBindersTests.swift index 5eb0c67..e04035a 100644 --- a/Tests/NanoViewControllerCombineTests/UIViewBindersTests.swift +++ b/Tests/NanoViewControllerCombineTests/UIViewBindersTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon @testable import NanoViewControllerCombine import UIKit diff --git a/Tests/NanoViewControllerCombineTests/WithLatestFromCompletionTests.swift b/Tests/NanoViewControllerCombineTests/WithLatestFromCompletionTests.swift index d1932c6..94d6d8b 100644 --- a/Tests/NanoViewControllerCombineTests/WithLatestFromCompletionTests.swift +++ b/Tests/NanoViewControllerCombineTests/WithLatestFromCompletionTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine @testable import NanoViewControllerCombine diff --git a/Tests/NanoViewControllerControllerTests/AbstractViewModelTests.swift b/Tests/NanoViewControllerControllerTests/AbstractViewModelTests.swift index ea73517..0b7679d 100644 --- a/Tests/NanoViewControllerControllerTests/AbstractViewModelTests.swift +++ b/Tests/NanoViewControllerControllerTests/AbstractViewModelTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine @testable import NanoViewControllerController diff --git a/Tests/NanoViewControllerControllerTests/CoordinatorHelperTests.swift b/Tests/NanoViewControllerControllerTests/CoordinatorHelperTests.swift index 1cb68c7..5c866f7 100644 --- a/Tests/NanoViewControllerControllerTests/CoordinatorHelperTests.swift +++ b/Tests/NanoViewControllerControllerTests/CoordinatorHelperTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine @testable import NanoViewControllerController diff --git a/Tests/NanoViewControllerControllerTests/NanoViewControllerBehaviorTests.swift b/Tests/NanoViewControllerControllerTests/NanoViewControllerBehaviorTests.swift index 6d8bca2..e76004b 100644 --- a/Tests/NanoViewControllerControllerTests/NanoViewControllerBehaviorTests.swift +++ b/Tests/NanoViewControllerControllerTests/NanoViewControllerBehaviorTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine @testable import NanoViewControllerController diff --git a/Tests/NanoViewControllerControllerTests/NanoViewControllerConfigTests.swift b/Tests/NanoViewControllerControllerTests/NanoViewControllerConfigTests.swift index 9f5d0e3..2e3c72e 100644 --- a/Tests/NanoViewControllerControllerTests/NanoViewControllerConfigTests.swift +++ b/Tests/NanoViewControllerControllerTests/NanoViewControllerConfigTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine @testable import NanoViewControllerController diff --git a/Tests/NanoViewControllerControllerTests/NavigationBarAndToastTests.swift b/Tests/NanoViewControllerControllerTests/NavigationBarAndToastTests.swift index 09f7c49..a2bb8c0 100644 --- a/Tests/NanoViewControllerControllerTests/NavigationBarAndToastTests.swift +++ b/Tests/NanoViewControllerControllerTests/NavigationBarAndToastTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon @testable import NanoViewControllerController import NanoViewControllerCore diff --git a/Tests/NanoViewControllerControllerTests/NavigationHandlerSPITests.swift b/Tests/NanoViewControllerControllerTests/NavigationHandlerSPITests.swift index 6f93d4e..44cc8fe 100644 --- a/Tests/NanoViewControllerControllerTests/NavigationHandlerSPITests.swift +++ b/Tests/NanoViewControllerControllerTests/NavigationHandlerSPITests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine @_spi(Testing) @testable import NanoViewControllerController diff --git a/Tests/NanoViewControllerControllerTests/TestSupport.swift b/Tests/NanoViewControllerControllerTests/TestSupport.swift index 4be297a..553ee5a 100644 --- a/Tests/NanoViewControllerControllerTests/TestSupport.swift +++ b/Tests/NanoViewControllerControllerTests/TestSupport.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Foundation diff --git a/Tests/NanoViewControllerCoreTests/AbstractTargetTests.swift b/Tests/NanoViewControllerCoreTests/AbstractTargetTests.swift index 90a71ab..b2a2741 100644 --- a/Tests/NanoViewControllerCoreTests/AbstractTargetTests.swift +++ b/Tests/NanoViewControllerCoreTests/AbstractTargetTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine @testable import NanoViewControllerCore diff --git a/Tests/NanoViewControllerCoreTests/ActivityIndicatorTests.swift b/Tests/NanoViewControllerCoreTests/ActivityIndicatorTests.swift index 22f7e5d..37f5204 100644 --- a/Tests/NanoViewControllerCoreTests/ActivityIndicatorTests.swift +++ b/Tests/NanoViewControllerCoreTests/ActivityIndicatorTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine @testable import NanoViewControllerCore diff --git a/Tests/NanoViewControllerCoreTests/BindingsBuilderTests.swift b/Tests/NanoViewControllerCoreTests/BindingsBuilderTests.swift index e80597e..fa62b58 100644 --- a/Tests/NanoViewControllerCoreTests/BindingsBuilderTests.swift +++ b/Tests/NanoViewControllerCoreTests/BindingsBuilderTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine @testable import NanoViewControllerCore diff --git a/Tests/NanoViewControllerCoreTests/ErrorTrackerCompactMapTests.swift b/Tests/NanoViewControllerCoreTests/ErrorTrackerCompactMapTests.swift index 5314b37..dd2997b 100644 --- a/Tests/NanoViewControllerCoreTests/ErrorTrackerCompactMapTests.swift +++ b/Tests/NanoViewControllerCoreTests/ErrorTrackerCompactMapTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine @testable import NanoViewControllerCore diff --git a/Tests/NanoViewControllerCoreTests/ErrorTrackerTests.swift b/Tests/NanoViewControllerCoreTests/ErrorTrackerTests.swift index 77316af..3af32a1 100644 --- a/Tests/NanoViewControllerCoreTests/ErrorTrackerTests.swift +++ b/Tests/NanoViewControllerCoreTests/ErrorTrackerTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine @testable import NanoViewControllerCore diff --git a/Tests/NanoViewControllerCoreTests/NanoViewControllerCoreSmokeTests.swift b/Tests/NanoViewControllerCoreTests/NanoViewControllerCoreSmokeTests.swift index 88fdd95..2c444b5 100644 --- a/Tests/NanoViewControllerCoreTests/NanoViewControllerCoreSmokeTests.swift +++ b/Tests/NanoViewControllerCoreTests/NanoViewControllerCoreSmokeTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Combine @testable import NanoViewControllerCore diff --git a/Tests/NanoViewControllerDIPrimitivesTests/ClockTests.swift b/Tests/NanoViewControllerDIPrimitivesTests/ClockTests.swift index a74aa5b..dee2989 100644 --- a/Tests/NanoViewControllerDIPrimitivesTests/ClockTests.swift +++ b/Tests/NanoViewControllerDIPrimitivesTests/ClockTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon @testable import NanoViewControllerDIPrimitives import XCTest diff --git a/Tests/NanoViewControllerDIPrimitivesTests/DateProviderTests.swift b/Tests/NanoViewControllerDIPrimitivesTests/DateProviderTests.swift index dc3f6e4..cfea8c7 100644 --- a/Tests/NanoViewControllerDIPrimitivesTests/DateProviderTests.swift +++ b/Tests/NanoViewControllerDIPrimitivesTests/DateProviderTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon @testable import NanoViewControllerDIPrimitives import XCTest diff --git a/Tests/NanoViewControllerDIPrimitivesTests/HapticFeedbackTests.swift b/Tests/NanoViewControllerDIPrimitivesTests/HapticFeedbackTests.swift index 2006d2f..e193735 100644 --- a/Tests/NanoViewControllerDIPrimitivesTests/HapticFeedbackTests.swift +++ b/Tests/NanoViewControllerDIPrimitivesTests/HapticFeedbackTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon @testable import NanoViewControllerDIPrimitives import UIKit diff --git a/Tests/NanoViewControllerDIPrimitivesTests/MainSchedulerTests.swift b/Tests/NanoViewControllerDIPrimitivesTests/MainSchedulerTests.swift index 749cd68..e6021d6 100644 --- a/Tests/NanoViewControllerDIPrimitivesTests/MainSchedulerTests.swift +++ b/Tests/NanoViewControllerDIPrimitivesTests/MainSchedulerTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon @testable import NanoViewControllerDIPrimitives import XCTest diff --git a/Tests/NanoViewControllerDIPrimitivesTests/PasteboardTests.swift b/Tests/NanoViewControllerDIPrimitivesTests/PasteboardTests.swift index 54c3679..aa8a82b 100644 --- a/Tests/NanoViewControllerDIPrimitivesTests/PasteboardTests.swift +++ b/Tests/NanoViewControllerDIPrimitivesTests/PasteboardTests.swift @@ -1,4 +1,4 @@ -// MIT License — Copyright (c) 2018-2026 Alexander Cyon (github.com/sajjon) +// MIT License — Copyright (c) 2018-2026 Alexander Cyon - https://github.com/sajjon import Foundation @testable import NanoViewControllerDIPrimitives From 651d9218acd4416d8b9463702d33c83734797059 Mon Sep 17 00:00:00 2001 From: Alexander Cyon Date: Sun, 24 May 2026 08:51:11 +0200 Subject: [PATCH 4/4] Bump CI sim pin to iOS 26.2 / Xcode 26.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The macos-26 runner image dropped iOS 26.1 and Xcode 26.1.1; available sim runtimes are now 26.2/26.4/26.5. Pin both the workflow and the justfile default to 26.2 — the lowest version that exists on both the runner and a local machine that ran the previous 26.1 pin successfully. Local override still works: SIM_OS=26.x just test --- .github/workflows/ci.yml | 10 +++++----- justfile | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6f16a6f..fec0264 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ env: SIM_DEVICE: iPhone 17 # Keep in sync with justfile's sim_os default. The Validate / Build & test # steps below interpolate $SIM_OS into the xcodebuild -destination string. - SIM_OS: "26.1" + SIM_OS: "26.2" jobs: ci: @@ -58,8 +58,8 @@ jobs: - name: Install xcresultparser run: brew install xcresultparser - - name: Select Xcode 26.1.1 - run: sudo xcode-select -s /Applications/Xcode_26.1.1.app/Contents/Developer + - name: Select Xcode 26.2 + run: sudo xcode-select -s /Applications/Xcode_26.2.app/Contents/Developer # Cache only the SPM source packages, not the whole DerivedData tree. # Caching DerivedData also caches Clang's ModuleCache.noindex (.pcm @@ -73,8 +73,8 @@ jobs: uses: actions/cache@v4 with: path: ~/Library/Developer/Xcode/DerivedData/NanoViewController-*/SourcePackages - key: spm-${{ runner.os }}-xcode-26.1.1-${{ hashFiles('**/Package.resolved') }} - restore-keys: spm-${{ runner.os }}-xcode-26.1.1- + key: spm-${{ runner.os }}-xcode-26.2-${{ hashFiles('**/Package.resolved') }} + restore-keys: spm-${{ runner.os }}-xcode-26.2- - name: Runner info run: | diff --git a/justfile b/justfile index 5b37f32..dc50530 100644 --- a/justfile +++ b/justfile @@ -11,7 +11,7 @@ result_dir := ".build" result := result_dir + "/TestResults.xcresult" cov_json := result_dir + "/coverage.json" sim_device := env_var_or_default("SIM_DEVICE", "iPhone 17") -sim_os := env_var_or_default("SIM_OS", "26.1") +sim_os := env_var_or_default("SIM_OS", "26.2") # Keep in sync with .github/workflows/ci.yml to ensure local and CI use # the same Apple Silicon simulator destination.