diff --git a/Sources/ProjectSpec/Target.swift b/Sources/ProjectSpec/Target.swift index 740c7c5f..99a7bde8 100644 --- a/Sources/ProjectSpec/Target.swift +++ b/Sources/ProjectSpec/Target.swift @@ -194,31 +194,44 @@ extension Target: JSONObjectConvertible { } } -public enum Dependency: Equatable { +public struct Dependency: Equatable { - case target(String) - case framework(String) - case carthage(String) + public let type: DependencyType + public let reference: String + public let embed: Bool? + + public init(type: DependencyType, reference: String, embed: Bool? = nil) { + self.type = type + self.reference = reference + self.embed = embed + } + + public enum DependencyType { + case target + case framework + case carthage + } public static func ==(lhs: Dependency, rhs: Dependency) -> Bool { - switch (lhs, rhs) { - case let (.target(lhs), .target(rhs)): return lhs == rhs - case let (.framework(lhs), .framework(rhs)): return lhs == rhs - case let (.carthage(lhs), .carthage(rhs)): return lhs == rhs - default: return false - } + return lhs.reference == rhs.reference && + lhs.type == rhs.type && + lhs.embed == rhs.embed } } extension Dependency: JSONObjectConvertible { public init(jsonDictionary: JSONDictionary) throws { + embed = jsonDictionary.json(atKeyPath: "embed") if let target: String = jsonDictionary.json(atKeyPath: "target") { - self = .target(target) + type = .target + reference = target } else if let framework: String = jsonDictionary.json(atKeyPath: "framework") { - self = .framework(framework) + type = .framework + reference = framework } else if let carthage: String = jsonDictionary.json(atKeyPath: "carthage") { - self = .carthage(carthage) + type = .carthage + reference = carthage } else { throw ProjectSpecError.invalidDependency(jsonDictionary) } diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index d8985c80..b3feac28 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -203,8 +203,9 @@ public class PBXProjGenerator { var extensions: [String] = [] for dependancy in target.dependencies { - switch dependancy { - case let .target(dependencyTargetName): + switch dependancy.type { + case .target: + let dependencyTargetName = dependancy.reference guard let dependencyTarget = spec.getTarget(dependencyTargetName) else { continue } let dependencyFileReference = targetFileReferences[dependencyTargetName]! @@ -235,15 +236,15 @@ public class PBXProjGenerator { } } - case let .framework(framework): - let fileReference = getFileReference(path: Path(framework), inPath: basePath) + case .framework: + let fileReference = getFileReference(path: Path(dependancy.reference), inPath: basePath) let buildFile = PBXBuildFile(reference: generateUUID(PBXBuildFile.self, fileReference + target.name), fileRef: fileReference) addObject(buildFile) targetFrameworkBuildFiles.append(buildFile.reference) if !frameworkFiles.contains(fileReference) { frameworkFiles.append(fileReference) } - case let .carthage(carthage): + case .carthage: if carthageFrameworksByPlatform[target.platform.rawValue] == nil { carthageFrameworksByPlatform[target.platform.rawValue] = [] } diff --git a/Sources/XcodeGenKit/ProjectGenerator.swift b/Sources/XcodeGenKit/ProjectGenerator.swift index fba22efc..8ac1d14b 100644 --- a/Sources/XcodeGenKit/ProjectGenerator.swift +++ b/Sources/XcodeGenKit/ProjectGenerator.swift @@ -58,8 +58,8 @@ public class ProjectGenerator { for target in spec.targets { for dependency in target.dependencies { - if case let .target(targetName) = dependency, spec.getTarget(targetName) == nil { - errors.append(.invalidTargetDependency(target: target.name, dependency: targetName)) + if dependency.type == .target, spec.getTarget(dependency.reference) == nil { + errors.append(.invalidTargetDependency(target: target.name, dependency: dependency.reference)) } }