Skip to content

Separate into SwiftUI and UIKit specific libraries #150

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 16 commits into from
May 10, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,14 @@ jobs:
platform: ${{ matrix.platform }}
swift: ~${{ matrix.swift }}
action: test
scheme: NavigationTransitions
workspace: SwiftUINavigationTransitions.xcworkspace
scheme: SwiftUINavigationTransitions

- name: Build Examples/Demo
uses: mxcl/xcodebuild@v3
with:
platform: ${{ matrix.platform }}
swift: ~${{ matrix.swift }}
action: build
workspace: SwiftUINavigationTransitions.xcworkspace
scheme: Demo
12 changes: 6 additions & 6 deletions .spi.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
version: 1
builder:
configs:
- platform: ios
scheme: NavigationTransitions
documentation_targets: [NavigationTransitions]
custom_documentation_parameters: [--include-extended-types]
- platform: tvos
scheme: NavigationTransitions
- platform: ios
scheme: SwiftUINavigationTransitions
documentation_targets: [SwiftUINavigationTransitions]
custom_documentation_parameters: [--include-extended-types]
- platform: tvos
scheme: SwiftUINavigationTransitions
16 changes: 8 additions & 8 deletions Examples/Demo/Demo.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@
objects = {

/* Begin PBXBuildFile section */
D52A95512DCEC08F00885069 /* SwiftUINavigationTransitions in Frameworks */ = {isa = PBXBuildFile; productRef = D52A95502DCEC08F00885069 /* SwiftUINavigationTransitions */; };
D5535823290E9692009E5D72 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D5535822290E9692009E5D72 /* Assets.xcassets */; };
D5535826290E9692009E5D72 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D5535825290E9692009E5D72 /* Preview Assets.xcassets */; };
D5535834290E9718009E5D72 /* Swing.swift in Sources */ = {isa = PBXBuildFile; fileRef = D553582C290E9718009E5D72 /* Swing.swift */; };
D5535835290E9718009E5D72 /* RootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D553582D290E9718009E5D72 /* RootView.swift */; };
D5535836290E9718009E5D72 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D553582E290E9718009E5D72 /* SceneDelegate.swift */; };
D5535837290E9718009E5D72 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D553582F290E9718009E5D72 /* LaunchScreen.storyboard */; platformFilter = ios; };
D5535839290E9718009E5D72 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5535831290E9718009E5D72 /* AppDelegate.swift */; };
D553583F290E97C5009E5D72 /* NavigationTransitions in Frameworks */ = {isa = PBXBuildFile; productRef = D553583E290E97C5009E5D72 /* NavigationTransitions */; };
D5535843290F4BEA009E5D72 /* AppView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5535842290F4BEA009E5D72 /* AppView.swift */; };
D5535845290F52F7009E5D72 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5535844290F52F7009E5D72 /* SettingsView.swift */; };
D5535847290F5E6F009E5D72 /* AppState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5535846290F5E6F009E5D72 /* AppState.swift */; };
Expand Down Expand Up @@ -49,7 +49,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
D553583F290E97C5009E5D72 /* NavigationTransitions in Frameworks */,
D52A95512DCEC08F00885069 /* SwiftUINavigationTransitions in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -136,7 +136,7 @@
);
name = Demo;
packageProductDependencies = (
D553583E290E97C5009E5D72 /* NavigationTransitions */,
D52A95502DCEC08F00885069 /* SwiftUINavigationTransitions */,
);
productName = Demo;
productReference = D553581B290E9691009E5D72 /* Demo.app */;
Expand All @@ -150,7 +150,7 @@
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1410;
LastUpgradeCheck = 1500;
LastUpgradeCheck = 1640;
TargetAttributes = {
D553581A290E9691009E5D72 = {
CreatedOnToolsVersion = 14.1;
Expand Down Expand Up @@ -248,6 +248,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = 26CPNYHDUU;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
Expand Down Expand Up @@ -311,6 +312,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 26CPNYHDUU;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
Expand Down Expand Up @@ -343,7 +345,6 @@
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"Demo/Preview Content\"";
DEVELOPMENT_TEAM = 26CPNYHDUU;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = Demo/Info.plist;
Expand Down Expand Up @@ -381,7 +382,6 @@
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"Demo/Preview Content\"";
DEVELOPMENT_TEAM = 26CPNYHDUU;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = Demo/Info.plist;
Expand Down Expand Up @@ -432,9 +432,9 @@
/* End XCConfigurationList section */

/* Begin XCSwiftPackageProductDependency section */
D553583E290E97C5009E5D72 /* NavigationTransitions */ = {
D52A95502DCEC08F00885069 /* SwiftUINavigationTransitions */ = {
isa = XCSwiftPackageProductDependency;
productName = NavigationTransitions;
productName = SwiftUINavigationTransitions;
};
/* End XCSwiftPackageProductDependency section */
};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1500"
LastUpgradeVersion = "1640"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
Expand Down
2 changes: 1 addition & 1 deletion Examples/Demo/Demo/AppState.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import Foundation
import NavigationTransitions
import SwiftUINavigationTransitions

final class AppState: ObservableObject {
enum Transition: CaseIterable, CustomStringConvertible, Hashable {
Expand Down
2 changes: 1 addition & 1 deletion Examples/Demo/Demo/Pages.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import SwiftUI
struct PageOne: View {
var body: some View {
let content = Group {
Text("**NavigationTransitions** is a library that integrates seamlessly with SwiftUI's **Navigation** views, allowing complete customization over **push and pop transitions**!")
Text("**SwiftUINavigationTransitions** is a library that integrates seamlessly with SwiftUI's **Navigation** views, allowing complete customization over **push and pop transitions**!")
}

PageView(number: 1, title: "Welcome", color: .orange) {
Expand Down
2 changes: 1 addition & 1 deletion Examples/Demo/Demo/RootView.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import NavigationTransitions
import SwiftUI
import SwiftUINavigationTransitions

struct RootView: View {
@EnvironmentObject var appState: AppState
Expand Down
2 changes: 1 addition & 1 deletion Examples/Demo/Demo/SettingsView.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import NavigationTransitions
import SwiftUI
import SwiftUINavigationTransitions

struct SettingsView: View {
@EnvironmentObject var appState: AppState
Expand Down
14 changes: 11 additions & 3 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ let package = Package(
.tvOS(.v13),
],
products: [
.library(name: "NavigationTransitions", targets: ["NavigationTransitions"]),
.library(name: "SwiftUINavigationTransitions", targets: ["SwiftUINavigationTransitions"]),
.library(name: "UIKitNavigationTransitions", targets: ["UIKitNavigationTransitions"]),
],
targets: [
.target(name: "Animation"),
Expand All @@ -35,10 +36,17 @@ let package = Package(
.product(name: "IssueReporting", package: "xctest-dynamic-overlay"),
]),

.target(name: "NavigationTransitions", dependencies: [
.target(name: "UIKitNavigationTransitions", dependencies: [
"NavigationTransition",
"RuntimeAssociation",
"RuntimeSwizzling",
]),

.target(name: "SwiftUINavigationTransitions", dependencies: [
"NavigationTransition",
"RuntimeAssociation",
"RuntimeSwizzling",
"UIKitNavigationTransitions",
.product(name: "SwiftUIIntrospect", package: "swiftui-introspect"),
]),

Expand All @@ -48,7 +56,7 @@ let package = Package(
.target(name: "TestUtils", dependencies: [
.product(name: "CustomDump", package: "swift-custom-dump"),
.product(name: "IssueReporting", package: "xctest-dynamic-overlay"),
"NavigationTransitions",
"SwiftUINavigationTransitions",
]),
]
)
Expand Down
14 changes: 11 additions & 3 deletions Package@swift-6.0.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ let package = Package(
.tvOS(.v13),
],
products: [
.library(name: "NavigationTransitions", targets: ["NavigationTransitions"]),
.library(name: "SwiftUINavigationTransitions", targets: ["SwiftUINavigationTransitions"]),
.library(name: "UIKitNavigationTransitions", targets: ["UIKitNavigationTransitions"]),
],
targets: [
.target(name: "Animation"),
Expand All @@ -35,10 +36,17 @@ let package = Package(
.product(name: "IssueReporting", package: "xctest-dynamic-overlay"),
]),

.target(name: "NavigationTransitions", dependencies: [
.target(name: "UIKitNavigationTransitions", dependencies: [
"NavigationTransition",
"RuntimeAssociation",
"RuntimeSwizzling",
]),

.target(name: "SwiftUINavigationTransitions", dependencies: [
"NavigationTransition",
"RuntimeAssociation",
"RuntimeSwizzling",
"UIKitNavigationTransitions",
.product(name: "SwiftUIIntrospect", package: "swiftui-introspect"),
]),

Expand All @@ -48,7 +56,7 @@ let package = Package(
.target(name: "TestUtils", dependencies: [
.product(name: "CustomDump", package: "swift-custom-dump"),
.product(name: "IssueReporting", package: "xctest-dynamic-overlay"),
"NavigationTransitions",
"SwiftUINavigationTransitions",
]),
],
swiftLanguageModes: [.v5]
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

## Overview

Instead of reinventing the entire navigation stack just to control its transitions, `NavigationTransitions` ships with a **simple modifier** that can be applied directly to SwiftUI's very own **first-party navigation** components.
Instead of reinventing the entire navigation stack just to control its transitions, this library ships with a **simple modifier** that can be applied directly to SwiftUI's very own **first-party navigation** components.

### The Basics

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ Next up, let's explore two ways of conforming to `NavigationTransitionProtocol`.

The simplest (and most recommended) way is by declaring our atomic transitions (if needed), and composing them via `var body: some NavigationTransitionProtocol { ... }` like we saw [previously with `Slide`](#NavigationTransitionProtocol).

Check out the [documentation](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/0.2.0/documentation/navigationtransitions/NavigationTransitionProtocol) to learn about the different `NavigationTransitionProtocol` types and how they compose.
Check out the [documentation](https://swiftpackageindex.com/davdroman/swiftui-navigation-transitions/main/documentation/swiftuinavigationtransitions/NavigationTransitionProtocol) to learn about the different `NavigationTransitionProtocol` types and how they compose.

The Demo project in the repo is also a great source of learning about different types of custom transitions and the way to implement them.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
public import UIKitNavigationTransitions
public import SwiftUI
@_spi(Advanced) import SwiftUIIntrospect
@_spi(Advanced) internal import SwiftUIIntrospect

extension View {
@MainActor
Expand Down
2 changes: 1 addition & 1 deletion Sources/TestUtils/AnimatorTransientView+Mocks.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
@testable public import Animator
public import UIKit
internal import UIKit
import IssueReporting

extension AnimatorTransientView {
Expand Down
File renamed without changes.
14 changes: 14 additions & 0 deletions Sources/UIKitNavigationTransitions/Interactivity.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
public import NavigationTransition

extension AnyNavigationTransition {
public enum Interactivity {
case disabled
case edgePan
case pan

@inlinable
public static var `default`: Self {
.edgePan
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,6 @@ import RuntimeAssociation
import RuntimeSwizzling
public import UIKit

extension AnyNavigationTransition {
public enum Interactivity {
case disabled
case edgePan
case pan

@inlinable
public static var `default`: Self {
.edgePan
}
}
}

public struct UISplitViewControllerColumns: OptionSet {
public static let primary = Self(rawValue: 1)
public static let supplementary = Self(rawValue: 1 << 1)
Expand Down
4 changes: 4 additions & 0 deletions Sources/UIKitNavigationTransitions/_Exports.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
@_exported public import Animation
@_exported public import Animator
@_exported public import AtomicTransition
@_exported public import NavigationTransition
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "NavigationTransitions"
BuildableName = "NavigationTransitions"
BlueprintName = "NavigationTransitions"
BlueprintIdentifier = "SwiftUINavigationTransitions"
BuildableName = "SwiftUINavigationTransitions"
BlueprintName = "SwiftUINavigationTransitions"
ReferencedContainer = "container:">
</BuildableReference>
</BuildActionEntry>
Expand All @@ -30,7 +30,7 @@
shouldUseLaunchSchemeArgsEnv = "YES">
<TestPlans>
<TestPlanReference
reference = "container:Tests/TestPlans/NavigationTransitions.xctestplan"
reference = "container:Tests/TestPlans/SwiftUINavigationTransitions.xctestplan"
default = "YES">
</TestPlanReference>
</TestPlans>
Expand All @@ -55,9 +55,9 @@
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "NavigationTransitions"
BuildableName = "NavigationTransitions"
BlueprintName = "NavigationTransitions"
BlueprintIdentifier = "SwiftUINavigationTransitions"
BuildableName = "SwiftUINavigationTransitions"
BlueprintName = "SwiftUINavigationTransitions"
ReferencedContainer = "container:">
</BuildableReference>
</MacroExpansion>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"configurations" : [
{
"id" : "8246DD19-912B-4BFD-B95F-A885D62913FC",
"id" : "8C608A98-3C43-44EC-9508-ECA482696F28",
"name" : "Test Scheme Action",
"options" : {

Expand All @@ -16,15 +16,15 @@
{
"target" : {
"containerPath" : "container:",
"identifier" : "AtomicTransitionTests",
"name" : "AtomicTransitionTests"
"identifier" : "AnimatorTests",
"name" : "AnimatorTests"
}
},
{
"target" : {
"containerPath" : "container:",
"identifier" : "AnimatorTests",
"name" : "AnimatorTests"
"identifier" : "AtomicTransitionTests",
"name" : "AtomicTransitionTests"
}
}
],
Expand Down
Loading