Skip to content

Commit 877439f

Browse files
authored
Improve output when using XCBuild (#2726)
- Print build diagnostics and output as they both are used for potential error message - If the build failed, was canceled or aborted, log a message. rdar://problem/60925204
1 parent 0647265 commit 877439f

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

Sources/XCBuildSupport/XCBuildDelegate.swift

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,21 @@ extension XCBuildDelegate: XCBuildOutputParserDelegate {
5757
queue.async {
5858
self.progressAnimation.clear()
5959
self.outputStream <<< info.data
60+
self.outputStream <<< "\n"
61+
self.outputStream.flush()
62+
}
63+
case .buildDiagnostic(let info):
64+
queue.async {
65+
self.progressAnimation.clear()
66+
self.outputStream <<< info.message
67+
self.outputStream <<< "\n"
68+
self.outputStream.flush()
69+
}
70+
case .buildOutput(let info):
71+
queue.async {
72+
self.progressAnimation.clear()
73+
self.outputStream <<< info.data
74+
self.outputStream <<< "\n"
6075
self.outputStream.flush()
6176
}
6277
case .didUpdateProgress(let info):
@@ -66,8 +81,14 @@ extension XCBuildDelegate: XCBuildOutputParserDelegate {
6681
}
6782
case .buildCompleted(let info):
6883
queue.async {
69-
if info.result == .ok, self.didEmitProgressOutput {
70-
self.progressAnimation.update(step: 100, total: 100, text: "Build succeeded")
84+
switch info.result {
85+
case .aborted, .cancelled, .failed:
86+
self.outputStream <<< "Build \(info.result)\n"
87+
self.outputStream.flush()
88+
case .ok:
89+
if self.didEmitProgressOutput {
90+
self.progressAnimation.update(step: 100, total: 100, text: "Build succeeded")
91+
}
7192
}
7293
}
7394
default:

Sources/XCBuildSupport/XCBuildOutputParser.swift

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,16 @@ public enum XCBuildMessage {
2323
case ok
2424
case failed
2525
case cancelled
26+
case aborted
2627
}
2728

2829
public let result: Result
2930
}
3031

32+
public struct BuildOutputInfo {
33+
let data: String
34+
}
35+
3136
public struct DidUpdateProgressInfo {
3237
public let message: String
3338
public let percentComplete: Double
@@ -101,6 +106,7 @@ public enum XCBuildMessage {
101106
case buildStarted
102107
case buildDiagnostic(BuildDiagnosticInfo)
103108
case buildCompleted(BuildCompletedInfo)
109+
case buildOutput(BuildOutputInfo)
104110
case preparationComplete
105111
case didUpdateProgress(DidUpdateProgressInfo)
106112
case targetUpToDate(TargetUpToDateInfo)
@@ -187,6 +193,7 @@ extension XCBuildOutputParser: JSONMessageStreamingParserDelegate {
187193
extension XCBuildMessage.BuildDiagnosticInfo: Decodable, Equatable {}
188194
extension XCBuildMessage.BuildCompletedInfo.Result: Decodable, Equatable {}
189195
extension XCBuildMessage.BuildCompletedInfo: Decodable, Equatable {}
196+
extension XCBuildMessage.BuildOutputInfo: Decodable, Equatable {}
190197
extension XCBuildMessage.TargetUpToDateInfo: Decodable, Equatable {}
191198
extension XCBuildMessage.TaskDiagnosticInfo: Decodable, Equatable {}
192199
extension XCBuildMessage.TargetDiagnosticInfo: Decodable, Equatable {}
@@ -322,6 +329,8 @@ extension XCBuildMessage: Decodable, Equatable {
322329
self = try .buildDiagnostic(BuildDiagnosticInfo(from: decoder))
323330
case "buildCompleted":
324331
self = try .buildCompleted(BuildCompletedInfo(from: decoder))
332+
case "buildOutput":
333+
self = try .buildOutput(BuildOutputInfo(from: decoder))
325334
case "preparationComplete":
326335
self = .preparationComplete
327336
case "didUpdateProgress":
@@ -345,7 +354,7 @@ extension XCBuildMessage: Decodable, Equatable {
345354
case "targetDiagnostic":
346355
self = try .targetDiagnostic(TargetDiagnosticInfo(from: decoder))
347356
default:
348-
throw DecodingError.dataCorruptedError(forKey: .kind, in: container, debugDescription: "invalid kind")
357+
throw DecodingError.dataCorruptedError(forKey: .kind, in: container, debugDescription: "invalid kind \(kind)")
349358
}
350359
}
351360
}

0 commit comments

Comments
 (0)