Add Simctl that wraps xcrun simctl calls
This commit is contained in:
parent
951280361d
commit
a6052d167d
|
@ -0,0 +1,28 @@
|
||||||
|
import Foundation
|
||||||
|
import Basic
|
||||||
|
import SPMUtility
|
||||||
|
|
||||||
|
struct Simctl {
|
||||||
|
enum Error: Swift.Error {
|
||||||
|
case listDevices(errorOutput: String)
|
||||||
|
}
|
||||||
|
|
||||||
|
static func listDevices() throws -> Data {
|
||||||
|
let process = Process(
|
||||||
|
args: "xcrun", "simctl", "list", "--json", "devices"
|
||||||
|
)
|
||||||
|
try process.launch()
|
||||||
|
let result = try process.waitUntilExit()
|
||||||
|
guard result.exitStatus == .terminated(code: 0) else {
|
||||||
|
let errorOutput = try (result.utf8Output() + result.utf8stderrOutput()).spm_chuzzle() ?? ""
|
||||||
|
throw Error.listDevices(errorOutput: errorOutput)
|
||||||
|
}
|
||||||
|
|
||||||
|
switch result.output {
|
||||||
|
case .success(let bytes):
|
||||||
|
return Data(bytes)
|
||||||
|
case .failure(let error):
|
||||||
|
throw error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
import Foundation
|
||||||
|
import XCTest
|
||||||
|
@testable import XcodeSimulatorKit
|
||||||
|
|
||||||
|
class SimctlTests: XCTestCase {
|
||||||
|
func testListDevices() throws {
|
||||||
|
let jsonData = try Simctl.listDevices()
|
||||||
|
let obj = try JSONSerialization.jsonObject(with: jsonData, options: [])
|
||||||
|
XCTAssertTrue(obj is [String: Any])
|
||||||
|
guard let dict = obj as? [String: Any] else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
XCTAssertEqual(dict.keys.count, 1)
|
||||||
|
XCTAssertEqual(dict.keys.first, "devices")
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue