π§ͺ Shell
Shell is a Β΅-library written Swift to run shell tasks.
Install π
Swift Package Manager
Add the dependency in your Package.swift file:
let package = Package(
name: "myproject",
dependencies: [
.package(url: "https://github.com/tuist/shell.git", .upToNextMajor(from: "2.2.0")),
],
targets: [
.target(
name: "myproject",
dependencies: ["Shell"]),
]
)CocoaPods
Add the following line to your project Podfile:
pod "Shell", "2.2.0"
pod "ShellTesting", "2.2.0"
pod "RxShell", "2.2.0"Carthage
Add the following line to your project Cartfile:
github "tuist/shell" "2.2.0"Marathon
If you want to use Shell in a Marathon script, either add it to your Marathonfile (see the Marathon repo for instructions on how to do that), or point Marathon to Shell using the inline dependency syntax:
import Shell // https://github.com/tuist/shell.gitUsage π
To run commands in the system, you need to create an instance of Shell:
let shell = Shell()Shell exposes methods for running the commands synchronously, asynchronously, and capturing the output:
// Synchronous running
let result = shell.sync(["xcodebuild", "-project", "Shell", "-scheme", "Shell"])
// Asynchronous running
shell.async(["xcodebuild", "-project", "Shell", "-scheme", "Shell"]) { result in
// Process the result
})
// Capturing output
let result = shell.capture(["xcode-select", "-p"])Testing β
We understand how inconvenient testing might be in Swift and thus, we designed Shell's API to facilitate testing by avoiding many syntactic sugar and static interfaces. The library comes with a library, ShellTesting that you can import in your tests target to mock the Shell interface and stub the result of running commands:
import ShellTesting
let mock = Shell.mock()
let xcodebuild = XcodeBuild(shell: mock)
shell.succeed(["xcodebuild", "-project", "Shell.xcodeproj", "-scheme", "Shell"])
XCTAssertNoThrow(try xcodebuild.build(project: "Shell.xcodeproj", scheme: "Shell"))RxShell π
Shell comes with a package, RxShell that adds a reactive extension using RxSwift to the interface of Shell.
subject.run(["xcodebuild", "-project", "Shell", "-scheme", "Shell"]).subscribe {
print("Compilation completed")
}Setup for development π©βπ»
- Git clone:
[email protected]:tuist/shell.git - Generate Xcode project with
swift package generate-xcodeproj. - Open
Shell.xcodeproj. - Have fun
π€
Open source
Tuist is a proud supporter of the Software Freedom Conservacy
