run the terminal “scan” command from swift code

2019-09-11 22:18发布

问题:

i have installed scan to automate my testing process. i use the process from below website:http://qualitytesting.tumblr.com/post/141771752059/run-a-subset-of-xctest-tests-with-fastlanescan

I have two project one is ios and another is Osx which runs the ios project.

In the osx project, i init the scan file and there i add the scheme of ios project.

when i run the

scan 

command from terminal, it runs the ios project successfully.

But if i use below code:

class func shell(args: String...) -> Int32 {
    let task = NSTask()
    task.launchPath = "/usr/bin/env"
    task.arguments = args
    task.currentDirectoryPath = "/Users/username/Desktop/Xocde/mainSwiftAutomation/"
    task.launch()
    task.waitUntilExit()
    return task.terminationStatus
}

and than call the function like:

classname.shell("scan")

it shows the below error:

env: scan: No such file or directory

please help.

回答1:

Scan will run if you change

task.launchPath = "/usr/bin/env"

to

task.launchPath = "/usr/local/bin/scan"

if your Scan is installed there instead. This was the problem on my machine.

The application is still unable to find xcpretty to generate the report, but my UI tests do run.

If you add the code with the shebang (#!/usr/bin/env swift) to a regular run_tests.swift file (rather than a Command Line Tool project), then you should be able to run it without problems from the command line:

$ swift run_tests.swift

...which is running the tests from Swift code but not through Xcode.



回答2:

i have solved this like below:

i have create shell script where i use the scan command, than locate the shell script in my project folder and run it using my code.

But there i change my taskpath to

task.launchPath = "/usr/local/bin/scan"

and from command line, go to /usr/local/bin/scan and make it executable like below:

sudo chmod +x /usr/local/bin/scan

finally i run my shell script and it runs well.