diff --git a/Sources/ProjectSpec/SpecValidation.swift b/Sources/ProjectSpec/SpecValidation.swift index fa7d2add..5967e79b 100644 --- a/Sources/ProjectSpec/SpecValidation.swift +++ b/Sources/ProjectSpec/SpecValidation.swift @@ -156,6 +156,10 @@ extension Project { errors.append(.invalidSDKDependency(target: target.name, dependency: dependency.reference)) } } + case .package: + if packages[dependency.reference] == nil { + errors.append(.invalidSwiftPackage(name: dependency.reference, target: target.name)) + } default: break } } diff --git a/Sources/ProjectSpec/SpecValidationError.swift b/Sources/ProjectSpec/SpecValidationError.swift index d1a7a0b0..d1cdf0c9 100644 --- a/Sources/ProjectSpec/SpecValidationError.swift +++ b/Sources/ProjectSpec/SpecValidationError.swift @@ -18,6 +18,7 @@ public struct SpecValidationError: Error, CustomStringConvertible { case invalidTargetSchemeTest(target: String, testTarget: String) case invalidSchemeTarget(scheme: String, target: String) case invalidSchemeConfig(scheme: String, config: String) + case invalidSwiftPackage(name: String, target: String) case invalidConfigFile(configFile: String, config: String) case invalidBuildSettingConfig(String) case invalidSettingsGroup(String) @@ -61,6 +62,8 @@ public struct SpecValidationError: Error, CustomStringConvertible { return "Invalid file group \(group.quoted)" case let .invalidConfigFileConfig(config): return "Config file has invalid config \(config.quoted)" + case let .invalidSwiftPackage(name, target): + return "Target \(target.quoted) has an invalid package dependency \(name.quoted)" case let .missingConfigForTargetScheme(target, configType): return "Target \(target.quoted) is missing a config of type \(configType.rawValue) to generate its scheme" case let .missingDefaultConfig(name): diff --git a/Tests/XcodeGenKitTests/ProjectSpecTests.swift b/Tests/XcodeGenKitTests/ProjectSpecTests.swift index 346ba865..8860f8e1 100644 --- a/Tests/XcodeGenKitTests/ProjectSpecTests.swift +++ b/Tests/XcodeGenKitTests/ProjectSpecTests.swift @@ -134,7 +134,10 @@ class ProjectSpecTests: XCTestCase { settings: invalidSettings, configFiles: ["invalidConfig": "invalidConfigFile"], sources: ["invalidSource"], - dependencies: [Dependency(type: .target, reference: "invalidDependency")], + dependencies: [ + Dependency(type: .target, reference: "invalidDependency"), + Dependency(type: .package(product: nil), reference: "invalidPackage") + ], preBuildScripts: [BuildScript(script: .path("invalidPreBuildScript"), name: "preBuildScript1")], postCompileScripts: [BuildScript(script: .path("invalidPostCompileScript"))], postBuildScripts: [BuildScript(script: .path("invalidPostBuildScript"))], @@ -142,6 +145,7 @@ class ProjectSpecTests: XCTestCase { )] try expectValidationError(project, .invalidTargetDependency(target: "target1", dependency: "invalidDependency")) + try expectValidationError(project, .invalidSwiftPackage(name: "invalidPackage", target: "target1")) try expectValidationError(project, .invalidTargetConfigFile(target: "target1", configFile: "invalidConfigFile", config: "invalidConfig")) try expectValidationError(project, .invalidTargetSchemeTest(target: "target1", testTarget: "invalidTarget")) try expectValidationError(project, .invalidTargetSource(target: "target1", source: "invalidSource"))