mirror of
https://github.com/yonaskolb/XcodeGen.git
synced 2024-10-26 14:01:24 +03:00
Add validation for project reference
This commit is contained in:
parent
848dfe28ba
commit
c4305dd02e
@ -180,9 +180,15 @@ extension Project {
|
||||
|
||||
for scheme in schemes {
|
||||
for buildTarget in scheme.build.targets {
|
||||
guard buildTarget.target.location == .local else { continue }
|
||||
if getProjectTarget(buildTarget.target.name) == nil {
|
||||
errors.append(.invalidSchemeTarget(scheme: scheme.name, target: buildTarget.target.name))
|
||||
switch buildTarget.target.location {
|
||||
case .local:
|
||||
if getProjectTarget(buildTarget.target.name) == nil {
|
||||
errors.append(.invalidSchemeTarget(scheme: scheme.name, target: buildTarget.target.name))
|
||||
}
|
||||
case .project(let project):
|
||||
if getProjectReference(project) == nil {
|
||||
errors.append(.invalidProjectReference(scheme: scheme.name, reference: project))
|
||||
}
|
||||
}
|
||||
}
|
||||
if let action = scheme.run, let config = action.config, getConfig(config) == nil {
|
||||
|
@ -29,6 +29,7 @@ public struct SpecValidationError: Error, CustomStringConvertible {
|
||||
case missingConfigForTargetScheme(target: String, configType: ConfigType)
|
||||
case missingDefaultConfig(configName: String)
|
||||
case invalidPerConfigSettings
|
||||
case invalidProjectReference(scheme: String, reference: String)
|
||||
case deprecatedUsageOfPlaceholder(placeholderName: String)
|
||||
|
||||
public var description: String {
|
||||
@ -73,6 +74,8 @@ public struct SpecValidationError: Error, CustomStringConvertible {
|
||||
return "Default configuration \(name) doesn't exist"
|
||||
case .invalidPerConfigSettings:
|
||||
return "Settings that are for a specific config must go in \"configs\". \"base\" can be used for common settings"
|
||||
case let .invalidProjectReference(scheme, project):
|
||||
return "Scheme \(scheme.quoted) has invalid project reference \(project.quoted)"
|
||||
case let .deprecatedUsageOfPlaceholder(placeholderName: placeholderName):
|
||||
return "Usage of $\(placeholderName) is deprecated and will stop working in an upcoming version. Use ${\(placeholderName)} instead."
|
||||
}
|
||||
|
@ -217,6 +217,15 @@ class ProjectSpecTests: XCTestCase {
|
||||
try expectValidationError(project, .invalidSchemeConfig(scheme: "scheme1", config: "releaseInvalid"))
|
||||
}
|
||||
|
||||
$0.it("fails with invalid project reference") {
|
||||
var project = baseProject
|
||||
project.schemes = [Scheme(
|
||||
name: "scheme1",
|
||||
build: .init(targets: [.init(target: "invalidProjectRef/target1")])
|
||||
)]
|
||||
try expectValidationError(project, .invalidProjectReference(scheme: "scheme1", reference: "invalidProjectRef"))
|
||||
}
|
||||
|
||||
$0.it("allows missing optional file") {
|
||||
var project = baseProject
|
||||
project.targets = [Target(
|
||||
|
Loading…
Reference in New Issue
Block a user