diff --git a/Example/example-app/Package.swift b/Example/example-app/Package.swift index 0c4051afd5c8d97996be45242276539f93b4c88c..d19f18b6cb6fa148ab57fa44bbaec0f57b206402 100644 --- a/Example/example-app/Package.swift +++ b/Example/example-app/Package.swift @@ -1,180 +1,121 @@ // swift-tools-version: 5.6 import PackageDescription -// MARK: - Helpers - -struct Feature { - var product: Product - var targets: [Target] - var targetDependency: Target.Dependency - - static func library( - name: String, - dependencies: [Target.Dependency] = [], - testDependencies: [Target.Dependency] = [], - swiftSettings: [SwiftSetting] = [ - .unsafeFlags( - [ - "-Xfrontend", - "-debug-time-function-bodies", - "-Xfrontend", - "-debug-time-expression-type-checking", - ], - .when(configuration: .debug) - ), - ] - ) -> Feature { - .init( - product: .library(name: name, targets: [name]), - targets: [ - .target( - name: name, - dependencies: dependencies, - swiftSettings: swiftSettings - ), - .testTarget( - name: "\(name)Tests", - dependencies: [.target(name: name)] + testDependencies, - swiftSettings: swiftSettings - ), - ], - targetDependency: .target(name: name) - ) - } -} - -struct Dependency { - var packageDependency: Package.Dependency - var targetDependency: Target.Dependency - - static func local( - path: String, - name: String, - package: String - ) -> Dependency { - .init( - packageDependency: .package(path: path), - targetDependency: .product(name: name, package: package) - ) - } - - static func external( - url: String, - version: Range<Version>, - name: String, - package: String - ) -> Dependency { - .init( - packageDependency: .package(url: url, version), - targetDependency: .product(name: name, package: package) - ) - } -} - -// MARK: - Manifest - -extension Dependency { - static let all: [Dependency] = [ - .composableArchitecture, - .composablePresentation, - .elixxirDAppsSDK, - .keychainAccess, - .xcTestDynamicOverlay, - ] - - static let composableArchitecture = Dependency.external( - url: "https://github.com/pointfreeco/swift-composable-architecture.git", - version: .upToNextMajor(from: "0.38.3"), - name: "ComposableArchitecture", - package: "swift-composable-architecture" - ) - - static let composablePresentation = Dependency.external( - url: "https://github.com/darrarski/swift-composable-presentation.git", - version: .upToNextMajor(from: "0.5.2"), - name: "ComposablePresentation", - package: "swift-composable-presentation" - ) - - static let elixxirDAppsSDK = Dependency.local( - path: "../../", - name: "ElixxirDAppsSDK", - package: "elixxir-dapps-sdk-swift" - ) - - static let keychainAccess = Dependency.external( - url: "https://github.com/kishikawakatsumi/KeychainAccess.git", - version: .upToNextMajor(from: "4.2.2"), - name: "KeychainAccess", - package: "KeychainAccess" - ) - - static let xcTestDynamicOverlay = Dependency.external( - url: "https://github.com/pointfreeco/xctest-dynamic-overlay.git", - version: .upToNextMajor(from: "0.3.3"), - name: "XCTestDynamicOverlay", - package: "xctest-dynamic-overlay" - ) -} - -extension Feature { - static let all: [Feature] = [ - .app, - .error, - .landing, - .session, - ] - - static let app = Feature.library( - name: "AppFeature", - dependencies: [ - Feature.error.targetDependency, - Feature.landing.targetDependency, - Feature.session.targetDependency, - Dependency.composableArchitecture.targetDependency, - Dependency.composablePresentation.targetDependency, - Dependency.elixxirDAppsSDK.targetDependency, - Dependency.keychainAccess.targetDependency, - Dependency.xcTestDynamicOverlay.targetDependency, - ] - ) - - static let error = Feature.library( - name: "ErrorFeature", - dependencies: [ - Dependency.composableArchitecture.targetDependency, - Dependency.elixxirDAppsSDK.targetDependency, - Dependency.xcTestDynamicOverlay.targetDependency, - ] - ) - - static let landing = Feature.library( - name: "LandingFeature", - dependencies: [ - Feature.error.targetDependency, - Dependency.composableArchitecture.targetDependency, - Dependency.composablePresentation.targetDependency, - Dependency.elixxirDAppsSDK.targetDependency, - Dependency.xcTestDynamicOverlay.targetDependency, - ] - ) - - static let session = Feature.library( - name: "SessionFeature", - dependencies: [ - Feature.error.targetDependency, - Dependency.composableArchitecture.targetDependency, - Dependency.composablePresentation.targetDependency, - Dependency.elixxirDAppsSDK.targetDependency, - Dependency.xcTestDynamicOverlay.targetDependency, - ] - ) -} +let swiftSettings: [SwiftSetting] = [ + .unsafeFlags( + [ + "-Xfrontend", + "-debug-time-function-bodies", + "-Xfrontend", + "-debug-time-expression-type-checking", + ], + .when(configuration: .debug) + ), +] let package = Package( name: "example-app", platforms: [.iOS(.v15)], - products: Feature.all.map(\.product), - dependencies: Dependency.all.map(\.packageDependency), - targets: Feature.all.flatMap(\.targets) + products: [ + .library(name: "AppFeature", targets: ["AppFeature"]), + .library(name: "ErrorFeature", targets: ["ErrorFeature"]), + .library(name: "LandingFeature", targets: ["LandingFeature"]), + .library(name: "SessionFeature", targets: ["SessionFeature"]), + ], + dependencies: [ + .package( + url: "https://github.com/pointfreeco/swift-composable-architecture.git", + .upToNextMajor(from: "0.38.3") + ), + .package( + url: "https://github.com/darrarski/swift-composable-presentation.git", + .upToNextMajor(from: "0.5.2") + ), + .package( // ElixxirDAppsSDK + path: "../../" + ), + .package( + url: "https://github.com/kishikawakatsumi/KeychainAccess.git", + .upToNextMajor(from: "4.2.2") + ), + .package( + url: "https://github.com/pointfreeco/xctest-dynamic-overlay.git", + .upToNextMajor(from: "0.3.3") + ), + ], + targets: [ + .target( + name: "AppFeature", + dependencies: [ + .target(name: "ErrorFeature"), + .target(name: "LandingFeature"), + .target(name: "SessionFeature"), + .product(name: "ComposableArchitecture", package: "swift-composable-architecture"), + .product(name: "ComposablePresentation", package: "swift-composable-presentation"), + .product(name: "ElixxirDAppsSDK", package: "elixxir-dapps-sdk-swift"), + .product(name: "KeychainAccess", package: "KeychainAccess"), + .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"), + ], + swiftSettings: swiftSettings + ), + .testTarget( + name: "AppFeatureTests", + dependencies: [ + .target(name: "AppFeature"), + ], + swiftSettings: swiftSettings + ), + .target( + name: "ErrorFeature", + dependencies: [ + .product(name: "ComposableArchitecture", package: "swift-composable-architecture"), + .product(name: "ElixxirDAppsSDK", package: "elixxir-dapps-sdk-swift"), + .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"), + ], + swiftSettings: swiftSettings + ), + .testTarget( + name: "ErrorFeatureTests", + dependencies: [ + .target(name: "ErrorFeature"), + ], + swiftSettings: swiftSettings + ), + .target( + name: "LandingFeature", + dependencies: [ + .target(name: "ErrorFeature"), + .product(name: "ComposableArchitecture", package: "swift-composable-architecture"), + .product(name: "ComposablePresentation", package: "swift-composable-presentation"), + .product(name: "ElixxirDAppsSDK", package: "elixxir-dapps-sdk-swift"), + .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"), + ], + swiftSettings: swiftSettings + ), + .testTarget( + name: "LandingFeatureTests", + dependencies: [ + .target(name: "LandingFeature"), + ], + swiftSettings: swiftSettings + ), + .target( + name: "SessionFeature", + dependencies: [ + .target(name: "ErrorFeature"), + .product(name: "ComposableArchitecture", package: "swift-composable-architecture"), + .product(name: "ComposablePresentation", package: "swift-composable-presentation"), + .product(name: "ElixxirDAppsSDK", package: "elixxir-dapps-sdk-swift"), + .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"), + ], + swiftSettings: swiftSettings + ), + .testTarget( + name: "SessionFeatureTests", + dependencies: [ + .target(name: "SessionFeature"), + ], + swiftSettings: swiftSettings + ), + ] )