From 4d69b8aeeb6c6c4246d359be873c369613c22f19 Mon Sep 17 00:00:00 2001 From: fortmarek Date: Fri, 7 Feb 2025 17:57:37 +0100 Subject: [PATCH 1/3] fix: improve performance of XcodeGraphMapper --- Package.resolved | 6 +++--- .../Mappers/Project/PBXProjectMapper.swift | 11 +++++++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Package.resolved b/Package.resolved index 15964b2e..e900c7e0 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "03c49df71ea05c212cda45628b910ec850be3d5268ad44afcf323333a40b1224", + "originHash" : "d85d2800ade4b7815fc45dc86a042a0565bf66be2c0a52d40c24b35d11f9a0be", "pins" : [ { "identity" : "aexml", @@ -168,8 +168,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/tuist/XcodeProj", "state" : { - "revision" : "647cba2719e85748ec82d0720ee7afe5b7a6421e", - "version" : "8.26.3" + "revision" : "6f90427e172da66336739801c84b9cef3e17367b", + "version" : "8.26.6" } }, { diff --git a/Sources/XcodeGraphMapper/Mappers/Project/PBXProjectMapper.swift b/Sources/XcodeGraphMapper/Mappers/Project/PBXProjectMapper.swift index e9687749..e339001b 100644 --- a/Sources/XcodeGraphMapper/Mappers/Project/PBXProjectMapper.swift +++ b/Sources/XcodeGraphMapper/Mappers/Project/PBXProjectMapper.swift @@ -45,8 +45,15 @@ struct PBXProjectMapper: PBXProjectMapping { // Map PBXTargets to domain Targets let targetMapper = PBXTargetMapper() - let targets = try await pbxProject.targets.serialCompactMap { - try await targetMapper.map(pbxTarget: $0, xcodeProj: xcodeProj) + let targets = try await withThrowingTaskGroup(of: Void.self, returning: [Target].self) { taskGroup in + var targets: [Target] = [] + for pbxTarget in pbxProject.targets { + taskGroup.addTask { + targets.append(try await targetMapper.map(pbxTarget: pbxTarget, xcodeProj: xcodeProj)) + } + } + try await taskGroup.waitForAll() + return targets } .sorted() From 3255b3628da897a98556ba214ae2e2fe16fc24cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fo=C5=99t?= Date: Sat, 8 Feb 2025 08:26:06 +0100 Subject: [PATCH 2/3] Update PBXProjectMapper.swift Co-authored-by: Andy Kolean --- .../Mappers/Project/PBXProjectMapper.swift | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/Sources/XcodeGraphMapper/Mappers/Project/PBXProjectMapper.swift b/Sources/XcodeGraphMapper/Mappers/Project/PBXProjectMapper.swift index e339001b..daf81f79 100644 --- a/Sources/XcodeGraphMapper/Mappers/Project/PBXProjectMapper.swift +++ b/Sources/XcodeGraphMapper/Mappers/Project/PBXProjectMapper.swift @@ -45,16 +45,20 @@ struct PBXProjectMapper: PBXProjectMapping { // Map PBXTargets to domain Targets let targetMapper = PBXTargetMapper() - let targets = try await withThrowingTaskGroup(of: Void.self, returning: [Target].self) { taskGroup in - var targets: [Target] = [] - for pbxTarget in pbxProject.targets { - taskGroup.addTask { - targets.append(try await targetMapper.map(pbxTarget: pbxTarget, xcodeProj: xcodeProj)) - } - } - try await taskGroup.waitForAll() - return targets +let targets = try await withThrowingTaskGroup(of: Target.self, returning: [Target].self) { taskGroup in + for pbxTarget in pbxProject.targets { + taskGroup.addTask { + try await targetMapper.map(pbxTarget: pbxTarget, xcodeProj: xcodeProj) } + } + + var targets: [Target] = [] + for try await target in taskGroup { + targets.append(target) + } + + return targets +} .sorted() // Map remote and local packages From 2a4e941b30989d3a0c7dc1a1d4938d4583331672 Mon Sep 17 00:00:00 2001 From: fortmarek Date: Sat, 8 Feb 2025 08:33:43 +0100 Subject: [PATCH 3/3] lint code --- .../Mappers/Project/PBXProjectMapper.swift | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Sources/XcodeGraphMapper/Mappers/Project/PBXProjectMapper.swift b/Sources/XcodeGraphMapper/Mappers/Project/PBXProjectMapper.swift index daf81f79..9e01a7d8 100644 --- a/Sources/XcodeGraphMapper/Mappers/Project/PBXProjectMapper.swift +++ b/Sources/XcodeGraphMapper/Mappers/Project/PBXProjectMapper.swift @@ -45,20 +45,20 @@ struct PBXProjectMapper: PBXProjectMapping { // Map PBXTargets to domain Targets let targetMapper = PBXTargetMapper() -let targets = try await withThrowingTaskGroup(of: Target.self, returning: [Target].self) { taskGroup in - for pbxTarget in pbxProject.targets { - taskGroup.addTask { - try await targetMapper.map(pbxTarget: pbxTarget, xcodeProj: xcodeProj) - } - } + let targets = try await withThrowingTaskGroup(of: Target.self, returning: [Target].self) { taskGroup in + for pbxTarget in pbxProject.targets { + taskGroup.addTask { + try await targetMapper.map(pbxTarget: pbxTarget, xcodeProj: xcodeProj) + } + } - var targets: [Target] = [] - for try await target in taskGroup { - targets.append(target) - } - - return targets -} + var targets: [Target] = [] + for try await target in taskGroup { + targets.append(target) + } + + return targets + } .sorted() // Map remote and local packages