Swipt是一个简单的API,用于macOS Yosemite或更高版本,并允许开发者在Swift中直接执行shell脚本。这允许进行一些有趣的特殊用途(特别是对于非沙盒应用程序),并且可以作为更高级技术用于简单任务的合适替代。
安装
安装Swipt有多种选择
CocoaPods
在你的Podfile中添加
pod 'Swipt'
Carthage
在你的Cartfile中添加
github "mayankk2308/swipt"
基本使用
导入Swipt模块
import Swipt
按照以下方式初始化管理对象
let swiptManager = SwiptManager()
要执行脚本,使用以下之一的execute
方法
swiptManager.execute(...)
功能和选项
您可以使用 Privileges
指定所需的权限级别。
- 用户 - 标准用户级别权限(默认)
- 管理员 - 超用户权限(macOS UI 将自动提示输入密码)
您可以使用 ShellType
指定所需的shell类型。
- sh - Shell(默认)
- bash - Bourne Again Shell
- ksh - Korn Shell
- csh - C Shell
- zsh - Z Shell
- tcsh - T Shell
使用说明
为了尽可能的灵活性,Swipt 提供了多种执行脚本的方式。
单线程低性能工作负载
您可以通过传递文本表示形式来执行 unix 命令。
let sampleUnixCommand = "echo hello"
swiptManager.execute(unixScriptText: sampleUnixCommand)
您可以直接指定权限
swiptManager.execute(unixScriptText: sampleUnixCommand, withPrivilegeLevel: .admin)
您可以轻松处理脚本输出和错误
swiptManager.execute(unixScriptText: sampleUnixCommand) { error, output in
// handle errors & output
}
您可以提供脚本文件,这更健壮且更便携
let scriptFile = "/path/to/script.sh"
swiptManager.execute(unixScriptFile: scriptFile)
您可以使用类似之前显示的方法指定权限,但对于文件,您还可以指定shell类型
swiptManager.execute(unixScriptFile: scriptFile, withShellType: .bash)
完成处理程序以与之前所示相同的方式工作。您还可以直接以文本方式执行 AppleScript。
多线程高性能工作负载
在大多数情况下,在单独的线程上执行脚本是最优的。Swipt 允许您无需额外工作即可做到这一点
let sampleUnixCommand = "echo hello"
swiptManager.asyncExecute(unixScriptText: sampleUnixCommand)
只需使用单线程函数的 async
变体。与单线程调用一样,只要父进程(通常是应用程序)存在,完成处理程序将按完全相同的方式工作。
此外,您还可以执行脚本批处理,每个脚本都有自己的权限集([Privileges]
)、shell类型([ShellType]
)和参数([[String]]
),所有这些都是可选的
let scriptBatch = [..String (file paths)..]()
swiptManager.executeSerialBatch(unixScriptFiles: scriptBatch)
// or provide arguments, shell types, and Privileges
let privilegeLevels = [...Privileges...]
swiptManager.executeSerialBatch(unixScriptFiles: scriptBatch, withPrivilegeLevels: privilegeLevels, ...)
此函数目前不支持完成处理程序。将在稍后日期实施更全面的线程系统。到目前为止,支持单个备用串行队列用于脚本。
许可协议
本项目遵循 MIT 许可协议。有关更多信息,请参阅 许可协议文件。