Swipt 1.2.0

Swipt 1.2.0

Mayank Kumar维护。



Swipt 1.2.0

  • Mayank Kumar

Header 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 许可协议。有关更多信息,请参阅 许可协议文件