Skip to content
Snippets Groups Projects
Commit bf2ad583 authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Refactor example-app Package.swift

parent aca2d706
No related branches found
No related tags found
1 merge request!102Release 1.0.0
// swift-tools-version: 5.6 // swift-tools-version: 5.6
import PackageDescription import PackageDescription
// MARK: - Helpers let swiftSettings: [SwiftSetting] = [
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( .unsafeFlags(
[ [
"-Xfrontend", "-Xfrontend",
...@@ -23,158 +12,110 @@ struct Feature { ...@@ -23,158 +12,110 @@ struct Feature {
.when(configuration: .debug) .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( let package = Package(
name: "example-app",
platforms: [.iOS(.v15)],
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", url: "https://github.com/pointfreeco/swift-composable-architecture.git",
version: .upToNextMajor(from: "0.38.3"), .upToNextMajor(from: "0.38.3")
name: "ComposableArchitecture", ),
package: "swift-composable-architecture" .package(
)
static let composablePresentation = Dependency.external(
url: "https://github.com/darrarski/swift-composable-presentation.git", url: "https://github.com/darrarski/swift-composable-presentation.git",
version: .upToNextMajor(from: "0.5.2"), .upToNextMajor(from: "0.5.2")
name: "ComposablePresentation", ),
package: "swift-composable-presentation" .package( // ElixxirDAppsSDK
) path: "../../"
),
static let elixxirDAppsSDK = Dependency.local( .package(
path: "../../",
name: "ElixxirDAppsSDK",
package: "elixxir-dapps-sdk-swift"
)
static let keychainAccess = Dependency.external(
url: "https://github.com/kishikawakatsumi/KeychainAccess.git", url: "https://github.com/kishikawakatsumi/KeychainAccess.git",
version: .upToNextMajor(from: "4.2.2"), .upToNextMajor(from: "4.2.2")
name: "KeychainAccess", ),
package: "KeychainAccess" .package(
)
static let xcTestDynamicOverlay = Dependency.external(
url: "https://github.com/pointfreeco/xctest-dynamic-overlay.git", url: "https://github.com/pointfreeco/xctest-dynamic-overlay.git",
version: .upToNextMajor(from: "0.3.3"), .upToNextMajor(from: "0.3.3")
name: "XCTestDynamicOverlay", ),
package: "xctest-dynamic-overlay" ],
) targets: [
} .target(
extension Feature {
static let all: [Feature] = [
.app,
.error,
.landing,
.session,
]
static let app = Feature.library(
name: "AppFeature", name: "AppFeature",
dependencies: [ dependencies: [
Feature.error.targetDependency, .target(name: "ErrorFeature"),
Feature.landing.targetDependency, .target(name: "LandingFeature"),
Feature.session.targetDependency, .target(name: "SessionFeature"),
Dependency.composableArchitecture.targetDependency, .product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
Dependency.composablePresentation.targetDependency, .product(name: "ComposablePresentation", package: "swift-composable-presentation"),
Dependency.elixxirDAppsSDK.targetDependency, .product(name: "ElixxirDAppsSDK", package: "elixxir-dapps-sdk-swift"),
Dependency.keychainAccess.targetDependency, .product(name: "KeychainAccess", package: "KeychainAccess"),
Dependency.xcTestDynamicOverlay.targetDependency, .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"),
] ],
) swiftSettings: swiftSettings
),
static let error = Feature.library( .testTarget(
name: "AppFeatureTests",
dependencies: [
.target(name: "AppFeature"),
],
swiftSettings: swiftSettings
),
.target(
name: "ErrorFeature", name: "ErrorFeature",
dependencies: [ dependencies: [
Dependency.composableArchitecture.targetDependency, .product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
Dependency.elixxirDAppsSDK.targetDependency, .product(name: "ElixxirDAppsSDK", package: "elixxir-dapps-sdk-swift"),
Dependency.xcTestDynamicOverlay.targetDependency, .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"),
] ],
) swiftSettings: swiftSettings
),
static let landing = Feature.library( .testTarget(
name: "ErrorFeatureTests",
dependencies: [
.target(name: "ErrorFeature"),
],
swiftSettings: swiftSettings
),
.target(
name: "LandingFeature", name: "LandingFeature",
dependencies: [ dependencies: [
Feature.error.targetDependency, .target(name: "ErrorFeature"),
Dependency.composableArchitecture.targetDependency, .product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
Dependency.composablePresentation.targetDependency, .product(name: "ComposablePresentation", package: "swift-composable-presentation"),
Dependency.elixxirDAppsSDK.targetDependency, .product(name: "ElixxirDAppsSDK", package: "elixxir-dapps-sdk-swift"),
Dependency.xcTestDynamicOverlay.targetDependency, .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"),
] ],
) swiftSettings: swiftSettings
),
static let session = Feature.library( .testTarget(
name: "LandingFeatureTests",
dependencies: [
.target(name: "LandingFeature"),
],
swiftSettings: swiftSettings
),
.target(
name: "SessionFeature", name: "SessionFeature",
dependencies: [ dependencies: [
Feature.error.targetDependency, .target(name: "ErrorFeature"),
Dependency.composableArchitecture.targetDependency, .product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
Dependency.composablePresentation.targetDependency, .product(name: "ComposablePresentation", package: "swift-composable-presentation"),
Dependency.elixxirDAppsSDK.targetDependency, .product(name: "ElixxirDAppsSDK", package: "elixxir-dapps-sdk-swift"),
Dependency.xcTestDynamicOverlay.targetDependency, .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"),
],
swiftSettings: swiftSettings
),
.testTarget(
name: "SessionFeatureTests",
dependencies: [
.target(name: "SessionFeature"),
],
swiftSettings: swiftSettings
),
] ]
) )
}
let package = Package(
name: "example-app",
platforms: [.iOS(.v15)],
products: Feature.all.map(\.product),
dependencies: Dependency.all.map(\.packageDependency),
targets: Feature.all.flatMap(\.targets)
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment