change Target.Dependency to a struct with embed

This commit is contained in:
Yonas Kolb 2017-08-27 11:53:16 +02:00
parent 66a78b6165
commit 1ef53e39f0
3 changed files with 34 additions and 20 deletions

View File

@ -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)
}

View File

@ -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] = []
}

View File

@ -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))
}
}