From 751ecec14e584bca620bdefcfbf935972030f8a1 Mon Sep 17 00:00:00 2001 From: Elliott Williams Date: Mon, 11 Feb 2019 18:59:32 -0800 Subject: [PATCH 1/4] Add missingFiles disabled validation --- Docs/ProjectSpec.md | 1 + Sources/ProjectSpec/SpecOptions.swift | 1 + Sources/ProjectSpec/SpecValidation.swift | 4 ++-- Tests/XcodeGenKitTests/ProjectSpecTests.swift | 7 +++++++ 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md index e43f0e9c..5f5ab325 100644 --- a/Docs/ProjectSpec.md +++ b/Docs/ProjectSpec.md @@ -103,6 +103,7 @@ Note that target names can also be changed by adding a `name` property to a targ - [ ] **deploymentTarget**: **[[Platform](#platform): String]** - A project wide deployment target can be specified for each platform otherwise the default SDK version in Xcode will be used. This will be overridden by any custom build settings that set the deployment target eg `IPHONEOS_DEPLOYMENT_TARGET`. Target specific deployment targets can also be set with [Target](#target).deploymentTarget. - [ ] **disabledValidations**: **[String]** - A list of validations that can be disabled if they're too strict for your use case. By default this is set to an empty array. Currently these are the available options: - `missingConfigs`: Disable errors for configurations in yaml files that don't exist in the project itself. This can be useful if you include the same yaml file in different projects + - `missingFiles`: Disable validation checks for the existence of files. This can be useful for generating a project in a context where config files are not available. - [ ] **defaultConfig**: **String** - The default configuration for command line builds from Xcode. If the configuration provided here doesn't match one in your [configs](#configs) key, XcodeGen will fail. If you don't set this, the first configuration alphabetically will be chosen. - [ ] **groupSortPosition**: **String** - Where groups are sorted in relation to other files. Either: - `none` - sorted alphabetically with all the other files diff --git a/Sources/ProjectSpec/SpecOptions.swift b/Sources/ProjectSpec/SpecOptions.swift index 4fe36f22..4a9be1b9 100644 --- a/Sources/ProjectSpec/SpecOptions.swift +++ b/Sources/ProjectSpec/SpecOptions.swift @@ -23,6 +23,7 @@ public struct SpecOptions: Equatable { public enum ValidationType: String { case missingConfigs + case missingFiles } public enum SettingPresets: String { diff --git a/Sources/ProjectSpec/SpecValidation.swift b/Sources/ProjectSpec/SpecValidation.swift index bbecdfba..cff635a7 100644 --- a/Sources/ProjectSpec/SpecValidation.swift +++ b/Sources/ProjectSpec/SpecValidation.swift @@ -52,7 +52,7 @@ extension Project { } for (config, configFile) in configFiles { - if !(basePath + configFile).exists { + if !options.disabledValidations.contains(.missingFiles) && !(basePath + configFile).exists { errors.append(.invalidConfigFile(configFile: configFile, config: config)) } if !options.disabledValidations.contains(.missingConfigs) && getConfig(config) == nil { @@ -73,7 +73,7 @@ extension Project { for target in projectTargets { for (config, configFile) in target.configFiles { - if !(basePath + configFile).exists { + if !options.disabledValidations.contains(.missingFiles) && !(basePath + configFile).exists { errors.append(.invalidTargetConfigFile(target: target.name, configFile: configFile, config: config)) } if !options.disabledValidations.contains(.missingConfigs) && getConfig(config) == nil { diff --git a/Tests/XcodeGenKitTests/ProjectSpecTests.swift b/Tests/XcodeGenKitTests/ProjectSpecTests.swift index 6eace70c..deb9be23 100644 --- a/Tests/XcodeGenKitTests/ProjectSpecTests.swift +++ b/Tests/XcodeGenKitTests/ProjectSpecTests.swift @@ -117,6 +117,13 @@ class ProjectSpecTests: XCTestCase { project.configFiles = ["missingConfiguration": configPath.string] try project.validate() } + + $0.it("allows non-existent config files") { + var project = baseProject + project.options = SpecOptions(disabledValidations: [.missingFiles, .missingConfigs]) + project.configFiles = ["invalidConfig": "invalidConfigFile"] + try project.validate() + } $0.it("fails with invalid target") { var project = baseProject From 23c68bd21063176591a634175f2a10525e702e1b Mon Sep 17 00:00:00 2001 From: Elliott Williams Date: Tue, 12 Feb 2019 13:38:55 -0800 Subject: [PATCH 2/4] Add changelog entry --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index faeaa6e1..909d068a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## Master +#### Added +- Added `missingConfigFiles` to `options.disabledValidations` to optionally skip checking for the existence of config files. + ## 2.2.0 #### Added From 224def7a09fb824c8c435ccc373ef4f70c88a64c Mon Sep 17 00:00:00 2001 From: Elliott Williams Date: Tue, 12 Feb 2019 13:39:24 -0800 Subject: [PATCH 3/4] Rename missingFiles to missingConfigFiles --- Docs/ProjectSpec.md | 2 +- Sources/ProjectSpec/SpecOptions.swift | 2 +- Sources/ProjectSpec/SpecValidation.swift | 4 ++-- Tests/XcodeGenKitTests/ProjectSpecTests.swift | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Docs/ProjectSpec.md b/Docs/ProjectSpec.md index 5f5ab325..c533bbe7 100644 --- a/Docs/ProjectSpec.md +++ b/Docs/ProjectSpec.md @@ -103,7 +103,7 @@ Note that target names can also be changed by adding a `name` property to a targ - [ ] **deploymentTarget**: **[[Platform](#platform): String]** - A project wide deployment target can be specified for each platform otherwise the default SDK version in Xcode will be used. This will be overridden by any custom build settings that set the deployment target eg `IPHONEOS_DEPLOYMENT_TARGET`. Target specific deployment targets can also be set with [Target](#target).deploymentTarget. - [ ] **disabledValidations**: **[String]** - A list of validations that can be disabled if they're too strict for your use case. By default this is set to an empty array. Currently these are the available options: - `missingConfigs`: Disable errors for configurations in yaml files that don't exist in the project itself. This can be useful if you include the same yaml file in different projects - - `missingFiles`: Disable validation checks for the existence of files. This can be useful for generating a project in a context where config files are not available. + - `missingConfigFiles`: Disable checking for the existence of configuration files. This can be useful for generating a project in a context where config files are not available. - [ ] **defaultConfig**: **String** - The default configuration for command line builds from Xcode. If the configuration provided here doesn't match one in your [configs](#configs) key, XcodeGen will fail. If you don't set this, the first configuration alphabetically will be chosen. - [ ] **groupSortPosition**: **String** - Where groups are sorted in relation to other files. Either: - `none` - sorted alphabetically with all the other files diff --git a/Sources/ProjectSpec/SpecOptions.swift b/Sources/ProjectSpec/SpecOptions.swift index 4a9be1b9..b966be9d 100644 --- a/Sources/ProjectSpec/SpecOptions.swift +++ b/Sources/ProjectSpec/SpecOptions.swift @@ -23,7 +23,7 @@ public struct SpecOptions: Equatable { public enum ValidationType: String { case missingConfigs - case missingFiles + case missingConfigFiles } public enum SettingPresets: String { diff --git a/Sources/ProjectSpec/SpecValidation.swift b/Sources/ProjectSpec/SpecValidation.swift index cff635a7..ab7c94c3 100644 --- a/Sources/ProjectSpec/SpecValidation.swift +++ b/Sources/ProjectSpec/SpecValidation.swift @@ -52,7 +52,7 @@ extension Project { } for (config, configFile) in configFiles { - if !options.disabledValidations.contains(.missingFiles) && !(basePath + configFile).exists { + if !options.disabledValidations.contains(.missingConfigFiles) && !(basePath + configFile).exists { errors.append(.invalidConfigFile(configFile: configFile, config: config)) } if !options.disabledValidations.contains(.missingConfigs) && getConfig(config) == nil { @@ -73,7 +73,7 @@ extension Project { for target in projectTargets { for (config, configFile) in target.configFiles { - if !options.disabledValidations.contains(.missingFiles) && !(basePath + configFile).exists { + if !options.disabledValidations.contains(.missingConfigFiles) && !(basePath + configFile).exists { errors.append(.invalidTargetConfigFile(target: target.name, configFile: configFile, config: config)) } if !options.disabledValidations.contains(.missingConfigs) && getConfig(config) == nil { diff --git a/Tests/XcodeGenKitTests/ProjectSpecTests.swift b/Tests/XcodeGenKitTests/ProjectSpecTests.swift index deb9be23..d7c50124 100644 --- a/Tests/XcodeGenKitTests/ProjectSpecTests.swift +++ b/Tests/XcodeGenKitTests/ProjectSpecTests.swift @@ -120,7 +120,7 @@ class ProjectSpecTests: XCTestCase { $0.it("allows non-existent config files") { var project = baseProject - project.options = SpecOptions(disabledValidations: [.missingFiles, .missingConfigs]) + project.options = SpecOptions(disabledValidations: [.missingConfigFiles, .missingConfigs]) project.configFiles = ["invalidConfig": "invalidConfigFile"] try project.validate() } From 732d07072c1fd79c96a8ddffc6d396cd23d4b78d Mon Sep 17 00:00:00 2001 From: Elliott Williams Date: Tue, 12 Feb 2019 17:03:42 -0800 Subject: [PATCH 4/4] Only use .missingConfigFiles in its test --- Tests/XcodeGenKitTests/ProjectSpecTests.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tests/XcodeGenKitTests/ProjectSpecTests.swift b/Tests/XcodeGenKitTests/ProjectSpecTests.swift index d7c50124..cc5d6eef 100644 --- a/Tests/XcodeGenKitTests/ProjectSpecTests.swift +++ b/Tests/XcodeGenKitTests/ProjectSpecTests.swift @@ -120,8 +120,8 @@ class ProjectSpecTests: XCTestCase { $0.it("allows non-existent config files") { var project = baseProject - project.options = SpecOptions(disabledValidations: [.missingConfigFiles, .missingConfigs]) - project.configFiles = ["invalidConfig": "invalidConfigFile"] + project.options = SpecOptions(disabledValidations: [.missingConfigFiles]) + project.configFiles = ["invalid": "doesntexist.xcconfig"] try project.validate() }