Skip to content
Snippets Groups Projects

Update example app

1 file
+ 172
174
Compare changes
  • Side-by-side
  • Inline
// swift-tools-version: 5.6
// swift-tools-version: 5.6
import PackageDescription
import PackageDescription
let swiftSettings: [SwiftSetting] = [
// MARK: - Helpers
.unsafeFlags(
[
"-Xfrontend",
"-debug-time-function-bodies",
"-Xfrontend",
"-debug-time-expression-type-checking",
],
.when(configuration: .debug)
),
]
let package = Package(
struct Feature {
name: "example-app",
var product: Product
platforms: [
var targets: [Target]
.iOS(.v15),
var targetDependency: Target.Dependency
],
products: [
static func library(
.library(
name: String,
name: "AppFeature",
dependencies: [Target.Dependency] = [],
targets: ["AppFeature"]
testDependencies: [Target.Dependency] = [],
),
swiftSettings: [SwiftSetting] = [
.library(
.unsafeFlags(
name: "ErrorFeature",
[
targets: ["ErrorFeature"]
"-Xfrontend",
),
"-debug-time-function-bodies",
.library(
"-Xfrontend",
name: "LandingFeature",
"-debug-time-expression-type-checking",
targets: ["LandingFeature"]
],
),
.when(configuration: .debug)
.library(
),
name: "SessionFeature",
]
targets: ["SessionFeature"]
) -> Feature {
),
.init(
],
product: .library(name: name, targets: [name]),
dependencies: [
targets: [
.package(path: "../../"), // elixxir-dapps-sdk-swift
.target(
.package(
name: name,
url: "https://github.com/pointfreeco/swift-composable-architecture.git",
dependencies: dependencies,
.upToNextMajor(from: "0.35.0")
swiftSettings: swiftSettings
),
),
.package(
.testTarget(
url: "https://github.com/darrarski/swift-composable-presentation.git",
name: "\(name)Tests",
.upToNextMajor(from: "0.5.2")
dependencies: [.target(name: name)] + testDependencies,
),
swiftSettings: swiftSettings
.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
targetDependency: .target(name: name)
),
)
.testTarget(
}
name: "SessionFeatureTests",
}
dependencies: [
.target(name: "SessionFeature"),
struct Dependency {
],
var packageDependency: Package.Dependency
swiftSettings: swiftSettings
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 package = Package(
 
name: "example-app",
 
platforms: [.iOS(.v15)],
 
products: Feature.all.map(\.product),
 
dependencies: Dependency.all.map(\.packageDependency),
 
targets: Feature.all.flatMap(\.targets)
)
)
Loading