@@ -178,6 +178,42 @@ class ActivityParserTests: XCTestCase {
178178 return startTokens + logMessageTokens + endTokens
179179 } ( )
180180
181+ // Xcode 26.4 format: BuildOperationMetrics JSON format changed
182+ lazy var IDEActivityLogSectionTokensXcode264 : [ Token ] = {
183+ let startTokens = [ Token . int ( 2 ) ,
184+ Token . string ( " com.apple.dt.IDE.BuildLogSection " ) ,
185+ Token . string ( " Prepare build " ) ,
186+ Token . string ( " Prepare build " ) ,
187+ Token . double ( 575479851.278759 ) ,
188+ Token . double ( 575479851.778325 ) ,
189+ Token . null,
190+ Token . string ( " note: Using legacy build system " ) ,
191+ Token . list ( 1 ) ,
192+ Token . className ( " IDEActivityLogMessage " ) ,
193+ Token . classNameRef ( " IDEActivityLogMessage " ) ,
194+ ]
195+ let logMessageTokens = IDEActivityLogMessageTokens
196+ let endTokens = [ Token . int ( 1 ) ,
197+ Token . int ( 0 ) ,
198+ Token . int ( 1 ) ,
199+ Token . int ( 42 ) , // unknown integer before subtitle (Xcode 26.2+)
200+ Token . string ( " subtitle " ) ,
201+ Token . null,
202+ Token . string ( " commandDetailDesc " ) ,
203+ Token . string ( " 501796C4-6BE4-4F80-9F9D-3269617ECC17 " ) ,
204+ Token . string ( " localizedResultString " ) ,
205+ Token . string ( " xcbuildSignature " ) ,
206+ Token . list ( 1 ) , // 1 attachment
207+ Token . classNameRef ( " IDEFoundation.IDEActivityLogSectionAttachment " ) ,
208+ Token . string ( " com.apple.dt.ActivityLogSectionAttachment.BuildOperationMetrics " ) ,
209+ Token . int ( 1 ) ,
210+ Token . int ( 0 ) ,
211+ // swiftlint:disable:next line_length
212+ Token . json ( #"{"counters":{},"taskCounters":{"SwiftDriver":{"moduleDependenciesNotValidatedTasks":1}}}"# ) ,
213+ ]
214+ return startTokens + logMessageTokens + endTokens
215+ } ( )
216+
181217 let IDEConsoleItemTokens : [ Token ] = [
182218 Token . className ( " IDEConsoleItem " ) ,
183219 Token . classNameRef ( " IDEConsoleItem " ) ,
@@ -445,6 +481,42 @@ class ActivityParserTests: XCTestCase {
445481 XCTAssertEqual ( 42 , logSection. unknown)
446482 }
447483
484+ func testParseIDEActivityLogSectionXcode264( ) throws {
485+ parser. logVersion = 12
486+ let tokens = IDEActivityLogSectionTokensXcode264
487+ var iterator = tokens. makeIterator ( )
488+ let logSection = try parser. parseIDEActivityLogSection ( iterator: & iterator)
489+ XCTAssertEqual ( 2 , logSection. sectionType)
490+ XCTAssertEqual ( " com.apple.dt.IDE.BuildLogSection " , logSection. domainType)
491+ XCTAssertEqual ( " Prepare build " , logSection. title)
492+ XCTAssertEqual ( " Prepare build " , logSection. signature)
493+ XCTAssertEqual ( 575479851.278759 , logSection. timeStartedRecording)
494+ XCTAssertEqual ( 575479851.778325 , logSection. timeStoppedRecording)
495+ XCTAssertEqual ( 0 , logSection. subSections. count)
496+ XCTAssertEqual ( " note: Using legacy build system " , logSection. text)
497+ XCTAssertEqual ( 1 , logSection. messages. count)
498+ XCTAssertTrue ( logSection. wasCancelled)
499+ XCTAssertFalse ( logSection. isQuiet)
500+ XCTAssertTrue ( logSection. wasFetchedFromCache)
501+ XCTAssertEqual ( " subtitle " , logSection. subtitle)
502+ XCTAssertEqual ( " " , logSection. location. documentURLString)
503+ XCTAssertEqual ( 0 , logSection. location. timestamp)
504+ XCTAssertEqual ( " commandDetailDesc " , logSection. commandDetailDesc)
505+ XCTAssertEqual ( " 501796C4-6BE4-4F80-9F9D-3269617ECC17 " , logSection. uniqueIdentifier)
506+ XCTAssertEqual ( " localizedResultString " , logSection. localizedResultString)
507+ XCTAssertEqual ( " xcbuildSignature " , logSection. xcbuildSignature)
508+ XCTAssertEqual ( 1 , logSection. attachments. count)
509+ let metrics = logSection. attachments [ 0 ] . buildOperationMetrics
510+ XCTAssertNotNil ( metrics)
511+ XCTAssertNil ( metrics? . clangCacheHits)
512+ XCTAssertNil ( metrics? . clangCacheMisses)
513+ XCTAssertNil ( metrics? . swiftCacheHits)
514+ XCTAssertNil ( metrics? . swiftCacheMisses)
515+ XCTAssertEqual ( metrics? . counters, [ : ] )
516+ XCTAssertEqual ( metrics? . taskCounters ? [ " SwiftDriver " ] ? [ " moduleDependenciesNotValidatedTasks " ] , 1 )
517+ XCTAssertEqual ( 42 , logSection. unknown)
518+ }
519+
448520 func testParseActivityLog( ) throws {
449521 let activityLog = try parser. parseIDEActiviyLogFromTokens ( IDEActivityLogTokens)
450522 XCTAssertEqual ( 10 , activityLog. version)
0 commit comments