🧪 Shell
Shell 是一个使用 Swift 编写的 µ-library,用于运行 shell 任务。
🛠
安装Swift 包管理器
在您的 Package.swift
文件中添加依赖
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
将以下行添加到您的项目 Podfile 中
pod "Shell", "2.2.0"
pod "ShellTesting", "2.2.0"
pod "RxShell", "2.2.0"
Carthage
将以下行添加到您的项目 Cartfile 中
github "tuist/shell" "2.2.0"
Marathon
如果您想在Marathon脚本来使用Shell,可以将它添加到您的Marathonfile
中(有关如何操作的说明请参阅Marathon代码库),或者使用内联依赖语法将Marathon指向Shell。
import Shell // https://github.com/tuist/shell.git
🚀
使用方法要在系统中运行命令,您需要创建一个Shell
实例。
let shell = Shell()
Shell暴露了用于同步、异步运行命令和捕获输出的方法。
// 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"])
✅
测试我们了解到Swift中测试可能不方便,因此我们设计了Shell API以避免许多语法糖和静态接口来简化测试。该库附带有ShellTesting
库,您可以将其导入测试目标中,以模拟Shell
接口并存根命令运行的结果。
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"))
💃
RxShellShell附带一个名为RxShell
的包,它使用RxSwift为Shell
接口添加了响应式扩展。
subject.run(["xcodebuild", "-project", "Shell", "-scheme", "Shell"]).subscribe {
print("Compilation completed")
}
👩💻
开发设置- Git克隆:
:tuist/shell.git
- 使用
swift package generate-xcodeproj
生成Xcode项目。 - 打开
Shell.xcodeproj
。 - 享受乐趣
🤖
开源
Tuist 是软件自由保守会的坚定支持者