Combined Swift packages
If we want to distribute a Swift package as both a library that other tools can import, and as a command line tool, all we have to do is to define two separate targets and products.
Here’s an example
Package.swift file in which we’re doing exactly that:
// swift-tools-version:5.0 import PackageDescription let package = Package( name: "Plot", products: [ // If we want to distribute a Swift package as both a // library and a command line tool, one way to do that // is to simply use lower case characters for the CLI. .library(name: "Plot", targets: ["Plot"]), .executable(name: "plot", targets: ["PlotCLI"]) ], dependencies: [ .package(url: "https://github.com/johnsundell/files.git", from: "3.1.0"), .package(url: "https://github.com/johnsundell/sweep.git", from: "0.2.1"), .package(url: "https://github.com/johnsundell/codextended.git", from: "0.2.0") ], targets: [ .target( name: "Plot", dependencies: ["Files", "Sweep", "Codextended"] ), .target( // We can still name our target "CLI", to make it // easier to see the difference between our CLI // and our library in Xcode. name: "PlotCLI", dependencies: ["Plot"] ), .testTarget( name: "PlotTests", dependencies: ["Plot", "Codextended"] ) ] )
Support Swift by Sundell by checking out this sponsor:
Architecting SwiftUI apps with MVC and MVVM: Although you can create an app simply by throwing some code together, without best practices and a robust architecture, you’ll soon end up with unmanageable spaghetti code. Learn how to create solid and maintainable apps with fewer bugs using this free guide.