1

要在 xcodebuild 中运行 xcpretty 命令,我使用以下代码:

import Foundation

class Command{

func command(args: String...) -> Int32 {
    let task = NSTask()
    task.launchPath = "/usr/bin/env"
    task.arguments = args
    task.currentDirectoryPath = "/Users/Desktop/XCode/Test/"
    task.launch()
    task.waitUntilExit()
    return task.terminationStatus
}


let xcodebuildCommand = Command()
xcodebuildCommand.command("xcodebuild","test","-project","proj.xcodeproj","-scheme","projScheme","-destination","platform=iOS Simulator,name=iPad Air","  | /usr/local/bin/xcpretty --report html --output /Desktop/test_output/report.html")

错误是

xcodebuild: error: Unknown build action ' | /usr/local/bin/xcpretty --report html --output /Desktop/test_output/report.html'.

以下命令从终端正确运行:

xcodebuild test -project proj.xcodeproj.xcodeproj -scheme projScheme -destination 'platform=iOS Simulator,name=iPad Air' | xcpretty --repor html --output /pathToReportfolder/report.html
4

1 回答 1

0

NSTask不是外壳,它不会为您解释您的外壳脚本。

您需要手动设置NSPipe以将您的标准输出连接xcodebuild NSTaskxcpretty NSTask.

import Foundation

func runCommand(workingDirectory: String? = nil,
                           stdin: NSPipe? = nil,
                          stdout: NSPipe? = nil,
                          stderr: NSPipe? = nil,
                            args: String...) -> Int32 {
    let task = NSTask()

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

    if let workingDirectory = workingDirectory {
        task.currentDirectoryPath = workingDirectory
    }

    if let stdin  = stdin  { task.standardInput  = stdin  }
    if let stdout = stdout { task.standardOutput = stdout }
    if let stderr = stderr { task.standardError  = stderr }

    task.launch()
    task.waitUntilExit()
    return (task.terminationStatus)
}

let pipe = NSPipe()

//omit "workingDirectory:" in Swift 2
runCommand(workingDirectory: "/Users/Desktop/XCode/Test/",
                     stdout: pipe,
                       args: "xcodebuild","test",
                       "-project","proj.xcodeproj",
                       "-scheme","projScheme",
                       "-destination","platform=iOS Simulator,name=iPad Air")

//omit "workingDirectory:" in Swift 2
runCommand(workingDirectory: "/Users/Desktop/XCode/Test/",
                      stdin: pipe,
                       args: "/usr/local/bin/xcpretty",
                       "--report html",
                       "--output",
                       "/Desktop/test_output/report.html")
于 2016-06-27T14:31:13.933 回答