                 }
             }
             return errors
+        }
+
+        for fileGroup in fileGroups {
+            if !(path + fileGroup).exists {
+                errors.append(.invalidFileGroup(fileGroup))
+            }
+        }
+
+        for (config, configFile) in configFiles {
+            if !(path + configFile).exists {
+                errors.append(.invalidConfigFile(configFile: configFile, config: config))
+            }
         }
 
         for settings in settingGroups.values {

            case let .invalidBuildScriptPath(target, path): return "Target \(target.quoted) has a script path that doesn't exist \(path.quoted)"
            case let .invalidTargetSchemeConfigVariant(target, configVariant, configType): return "Target \(target.quoted) has invalid scheme config varians which requires a config that has a \(configType.rawValue.quoted) type and contains the name \(configVariant.quoted)"
            case let .invalidTargetSchemeTest(target, test): return "Target \(target.quoted) scheme has invalid test \(test.quoted)"
            }
        }
    }

        case invalidTargetDependency(target: String, dependency: String)
        case invalidSchemeTarget(scheme: String, target: String)
        case invalidSchemeConfig(scheme: String, config: String)
        case invalidConfigFile(configFile: String, config: String)
        case invalidTargetConfigFile(configFile: String, config: String, target: String)
        case invalidBuildSettingConfig(String)
        case invalidSettingsPreset(String)
