Emcee
53 строки · 1.5 Кб
1import CommonTestModels
2import Foundation
3import PathLib
4import ProcessController
5import SimulatorPoolModels
6
7public final class SimulatorVideoRecorder {
8public enum CodecType: String {
9case h264
10case hevc
11}
12
13private let processControllerProvider: ProcessControllerProvider
14private let simulatorUuid: UDID
15private let simulatorSetPath: AbsolutePath
16
17public init(
18processControllerProvider: ProcessControllerProvider,
19simulatorUuid: UDID,
20simulatorSetPath: AbsolutePath
21) {
22self.processControllerProvider = processControllerProvider
23self.simulatorUuid = simulatorUuid
24self.simulatorSetPath = simulatorSetPath
25}
26
27public func startRecording(
28codecType: CodecType,
29outputPath: AbsolutePath
30) throws -> CancellableRecording {
31let processController = try processControllerProvider.createProcessController(
32subprocess: Subprocess(
33arguments: [
34"/usr/bin/xcrun",
35"simctl",
36"--set",
37simulatorSetPath,
38"io",
39simulatorUuid.value,
40"recordVideo",
41"--codec=\(codecType.rawValue)",
42outputPath
43]
44)
45)
46try processController.start()
47
48return CancellableRecordingImpl(
49outputPath: outputPath,
50recordingProcess: processController
51)
52}
53}
54