A Process/NSTask Tool for MacOS
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
Example
Slarder.xcodeproj
Slarder
SlarderTests
resources
.gitignore
LICENSE
README.md
README.zh-cn.md

README.md

platforms Xcode 8.3 MacOS 10.5 Swift 3.1 Carthage compatible 中文 README

Its a easier way to use Process on MacOS for handling STDOUT、STDERR、termination status, and running your script as root.

Feature

Common Script:

Async Script:

Install

Carthage and CocoaPods are the optional tools to install Slarder into your project.

Of course, you can also download the source code and drag the source file to your project as you like.

Carthage

1.Create Cartfile in your project directory

$ touch Cartfile

2.Add this to Cartfile:

github "Khala-wan/Slarder"

3.Run

carthage update

4.Drag Slarder.frameWork to your project directory. Slarder.frameWork stored in:

${ Project }/Carthage/Build/Mac/Slarder.frameWork

5.Embedde in your project:

Target -> General -> Embedded Binaries -> Add Other -> Select "Slarder.frameWork"

6.Where you want to use Slarder

Import Slarder

7.Just try it!

More Carthage usage in Carthage

CocoaPods (not supported yet)

1.Create Podfile

$ Pod init

2.Add this to Podfile

pod Slarder

3.Where you want to use Slarder

Import Slarder

Usage

Create a Process

If you only want to run a command, you can create a process instance as before. If you want to run a script, Slarder provides you with a simple constructor:

let process:Process = try! Process.initWith(scriptName: "commonShell.sh", bundle: nil)

sd

Every Process instance has a property named sd , by which we can use all the features of Slarder.

Process().sd.someFunc()

Run Process

Slardar provides two running privileges for your Process: current users and root users

If you need root privileges to lanuch process, set the first parameter sudo to True

Common Script launchWith

process.sd.launchWith(sudo: false,outputHandler: { (string, input) in
            //STDOUT everytime
        }, errorputHandler: { (string) in
            //STDERR everytime
        }) { (statusCode) in
            //Process terminated
        }

If the errorputHandler parameter is nil, STDERR is output with STDOUT

Async Script launchAsyncWith

If your script has tasks such as delay or network request, you may not be able to get all the output at once, then you need to listen to STDOUT, and connect each output in series.

process.sd.launchAsyncWith(sudo: self.root, outputHandler: { (newStr, input) in
            self.outputString.append(newStr)
        }, errorputHandler: nil) { (code) in
            self.updateConsoleView(newMessage: "statusCode = \(code)")
        }

STDIN

Maybe your script needs to read some data from STDIN, like shell's read userName; echo $ userName. You can use the outputHandler closure parameter input: Pipe

process.sd.launchAsyncWith(sudo: self.root, outputHandler: { (newStr, input) in
            let writeHandle = input?.fileHandleForWriting
            writeHandle?.write(someData)
        }, errorputHandler: nil) { (code) in
            self.updateConsoleView(newMessage: "statusCode = \(code)")
        }

About Swift4.0

Slarder is supported by Swift4.0, but SlarderSimpleExample is not supported. In case you want to use SlarderSimpleExample in Swift4.0, there is a branch named Swift4.0.

NextStep

  • Test Slarder
  • Add more useful features

Last

Contact me if you have any questions. We welcome any contributions to make Slarder better. Look forward to your use ~