From 5693717a9faf2b12c5a4e2cd7635476ffda2544b Mon Sep 17 00:00:00 2001 From: Brentley Jones Date: Wed, 22 Aug 2018 09:36:42 -0500 Subject: [PATCH] Fix getAllCarthageDependencies for aggregate targets --- Sources/XcodeGenKit/PBXProjGenerator.swift | 48 +++++++++++++--------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index e575ce12..b0068f0c 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -910,37 +910,45 @@ public class PBXProjGenerator { return "\(carthagePath)/\(platformName)" } - func getAllCarthageDependencies(target: Target) -> [Dependency] { + func getAllCarthageDependencies(target topLevelTarget: Target) -> [Dependency] { // this is used to resolve cyclical target dependencies var visitedTargets: Set = [] var frameworks: [String: Dependency] = [:] - var queue: [Target] = [target] + var queue: [ProjectTarget] = [topLevelTarget] while !queue.isEmpty { - let target = queue.removeFirst() - if visitedTargets.contains(target.name) { + let projectTarget = queue.removeFirst() + if visitedTargets.contains(projectTarget.name) { continue } - - for dependency in target.dependencies { - // don't overwrite frameworks, to allow top level ones to rule - if frameworks.contains(reference: dependency.reference) { - continue - } - - switch dependency.type { - case .carthage: - frameworks[dependency.reference] = dependency - case .target: - if let target = project.getTarget(dependency.reference) { - queue.append(target) + + if let target = projectTarget as? Target { + for dependency in target.dependencies { + // don't overwrite frameworks, to allow top level ones to rule + if frameworks.contains(reference: dependency.reference) { + continue + } + + switch dependency.type { + case .carthage: + frameworks[dependency.reference] = dependency + case .target: + if let projectTarget = project.getProjectTarget(dependency.reference) { + queue.append(projectTarget) + } + default: + break + } + } + } else if let aggregateTarget = projectTarget as? AggregateTarget { + for dependencyName in aggregateTarget.targets { + if let projectTarget = project.getProjectTarget(dependencyName) { + queue.append(projectTarget) } - default: - break } } - visitedTargets.update(with: target.name) + visitedTargets.update(with: projectTarget.name) } return frameworks.sorted(by: { $0.key < $1.key }).map { $0.value }