mirror of
https://github.com/yonaskolb/XcodeGen.git
synced 2024-09-20 09:08:46 +03:00
Refactor minimumXcodeGenVersion to be less pervasive
This commit is contained in:
parent
76192fb944
commit
96ac557b96
@ -3,14 +3,9 @@ import PathKit
|
||||
|
||||
extension Project {
|
||||
|
||||
public func validate(xcodeGenVersion: Version) throws {
|
||||
public func validate() throws {
|
||||
|
||||
var errors: [SpecValidationError.ValidationError] = []
|
||||
|
||||
if let minimumXcodeGenVersion = options.minimumXcodeGenVersion, xcodeGenVersion < minimumXcodeGenVersion {
|
||||
errors.append(.invalidXcodeGenVersion(version: xcodeGenVersion, minimumVersion: minimumXcodeGenVersion))
|
||||
}
|
||||
|
||||
func validateSettings(_ settings: Settings) -> [SpecValidationError.ValidationError] {
|
||||
var errors: [SpecValidationError.ValidationError] = []
|
||||
for group in settings.groups {
|
||||
|
@ -5,7 +5,7 @@ public struct SpecValidationError: Error, CustomStringConvertible {
|
||||
public var errors: [ValidationError]
|
||||
|
||||
public enum ValidationError: Error, CustomStringConvertible {
|
||||
case invalidXcodeGenVersion(version: Version, minimumVersion: Version)
|
||||
case invalidXcodeGenVersion(minimumVersion: Version, version: Version)
|
||||
case invalidTargetDependency(target: String, dependency: String)
|
||||
case invalidTargetSource(target: String, source: String)
|
||||
case invalidTargetConfigFile(target: String, configFile: String, config: String)
|
||||
@ -24,7 +24,7 @@ public struct SpecValidationError: Error, CustomStringConvertible {
|
||||
|
||||
public var description: String {
|
||||
switch self {
|
||||
case let .invalidXcodeGenVersion(version, minimumVersion):
|
||||
case let .invalidXcodeGenVersion(minimumVersion, version):
|
||||
return "XcodeGen version is \(version), but minimum required version specified as \(minimumVersion)"
|
||||
case let .invalidTargetDependency(target, dependency):
|
||||
return "Target \(target.quoted) has invalid dependency: \(dependency.quoted)"
|
||||
|
@ -40,8 +40,11 @@ func generate(spec: String, project: String, isQuiet: Bool, justVersion: Bool) {
|
||||
|
||||
do {
|
||||
logger.info("⚙️ Generating project...")
|
||||
|
||||
try project.validateMinimumXcodeGenVersion(version)
|
||||
|
||||
let projectGenerator = ProjectGenerator(project: project)
|
||||
let xcodeProject = try projectGenerator.generateXcodeProject(xcodeGenVersion: version)
|
||||
let xcodeProject = try projectGenerator.generateXcodeProject()
|
||||
|
||||
logger.info("⚙️ Writing project...")
|
||||
|
||||
|
@ -21,8 +21,8 @@ public class ProjectGenerator {
|
||||
return project.configs.first { $0.type == .release }!
|
||||
}
|
||||
|
||||
public func generateXcodeProject(xcodeGenVersion: Version) throws -> XcodeProj {
|
||||
try project.validate(xcodeGenVersion: xcodeGenVersion)
|
||||
public func generateXcodeProject() throws -> XcodeProj {
|
||||
try project.validate()
|
||||
let pbxProjGenerator = PBXProjGenerator(project: project)
|
||||
let pbxProject = try pbxProjGenerator.generate()
|
||||
let workspace = try generateWorkspace()
|
||||
|
@ -10,6 +10,12 @@ extension Project {
|
||||
var schemeVersion: String {
|
||||
return "1.3"
|
||||
}
|
||||
|
||||
public func validateMinimumXcodeGenVersion(_ xcodeGenVersion: Version) throws {
|
||||
if let minimumXcodeGenVersion = options.minimumXcodeGenVersion, xcodeGenVersion < minimumXcodeGenVersion {
|
||||
throw SpecValidationError.ValidationError.invalidXcodeGenVersion(minimumVersion: minimumXcodeGenVersion, version: xcodeGenVersion)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public struct XCodeVersion {
|
||||
|
@ -8,16 +8,16 @@ import Yams
|
||||
|
||||
extension Project {
|
||||
|
||||
func generateXcodeProject(xcodeGenVersion: Version = try! Version("1.11.0"), file: String = #file, line: Int = #line) throws -> XcodeProj {
|
||||
func generateXcodeProject(file: String = #file, line: Int = #line) throws -> XcodeProj {
|
||||
return try doThrowing(file: file, line: line) {
|
||||
let generator = ProjectGenerator(project: self)
|
||||
return try generator.generateXcodeProject(xcodeGenVersion: xcodeGenVersion)
|
||||
return try generator.generateXcodeProject()
|
||||
}
|
||||
}
|
||||
|
||||
func generatePbxProj(xcodeGenVersion: Version = try! Version("1.11.0"), file: String = #file, line: Int = #line) throws -> PBXProj {
|
||||
func generatePbxProj(file: String = #file, line: Int = #line) throws -> PBXProj {
|
||||
return try doThrowing(file: file, line: line) {
|
||||
let xcodeProject = try generateXcodeProject(xcodeGenVersion: xcodeGenVersion).pbxproj
|
||||
let xcodeProject = try generateXcodeProject().pbxproj
|
||||
try xcodeProject.validate()
|
||||
return xcodeProject
|
||||
}
|
||||
|
@ -58,10 +58,10 @@ class ProjectFixtureTests: XCTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
fileprivate func generateXcodeProject(xcodeGenVersion: Version = try! Version("1.11.0"), specPath: Path, projectPath: Path, file: String = #file, line: Int = #line) throws -> XcodeProj {
|
||||
fileprivate func generateXcodeProject(specPath: Path, projectPath: Path, file: String = #file, line: Int = #line) throws -> XcodeProj {
|
||||
let project = try Project(path: specPath)
|
||||
let generator = ProjectGenerator(project: project)
|
||||
let xcodeProject = try generator.generateXcodeProject(xcodeGenVersion: xcodeGenVersion)
|
||||
let xcodeProject = try generator.generateXcodeProject()
|
||||
let oldProject = try XcodeProj(path: projectPath)
|
||||
let pbxProjPath = projectPath + XcodeProj.pbxprojPath(projectPath)
|
||||
let oldProjectString: String = try pbxProjPath.read()
|
||||
|
@ -80,9 +80,9 @@ class ProjectSpecTests: XCTestCase {
|
||||
var project = baseProject
|
||||
project.options = SpecOptions(minimumXcodeGenVersion: minimumVersion)
|
||||
|
||||
try expectValidationError(xcodeGenVersion: try! Version("1.11.0"), project, .invalidXcodeGenVersion(version: try! Version("1.11.0"), minimumVersion: minimumVersion))
|
||||
try expectValidationError(xcodeGenVersion: try! Version("1.10.99"), project, .invalidXcodeGenVersion(version: try! Version("1.10.99"), minimumVersion: minimumVersion))
|
||||
try expectValidationError(xcodeGenVersion: try! Version("0.99"), project, .invalidXcodeGenVersion(version: try! Version("0.99"), minimumVersion: minimumVersion))
|
||||
try expectMinimumXcodeGenVersionError(project, minimumVersion: minimumVersion, xcodeGenVersion: try! Version("1.11.0"))
|
||||
try expectMinimumXcodeGenVersionError(project, minimumVersion: minimumVersion, xcodeGenVersion: try! Version("1.10.99"))
|
||||
try expectMinimumXcodeGenVersionError(project, minimumVersion: minimumVersion, xcodeGenVersion: try! Version("0.99"))
|
||||
}
|
||||
|
||||
$0.it("fails with invalid project") {
|
||||
@ -109,7 +109,7 @@ class ProjectSpecTests: XCTestCase {
|
||||
project.options = SpecOptions(disabledValidations: [.missingConfigs])
|
||||
let configPath = fixturePath + "test.xcconfig"
|
||||
project.configFiles = ["missingConfiguration": configPath.string]
|
||||
try project.validate(xcodeGenVersion: try Version("1.11.0"))
|
||||
try project.validate()
|
||||
}
|
||||
|
||||
$0.it("fails with invalid target") {
|
||||
@ -190,7 +190,7 @@ class ProjectSpecTests: XCTestCase {
|
||||
platform: .iOS,
|
||||
sources: [.init(path: "generated.swift", optional: true)]
|
||||
)]
|
||||
try project.validate(xcodeGenVersion: try Version("1.11.0"))
|
||||
try project.validate()
|
||||
}
|
||||
|
||||
$0.it("validates missing default configurations") {
|
||||
@ -202,9 +202,9 @@ class ProjectSpecTests: XCTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
fileprivate func expectValidationError(xcodeGenVersion: Version = try! Version("1.11.0"), _ project: Project, _ expectedError: SpecValidationError.ValidationError, file: String = #file, line: Int = #line) throws {
|
||||
fileprivate func expectValidationError(_ project: Project, _ expectedError: SpecValidationError.ValidationError, file: String = #file, line: Int = #line) throws {
|
||||
do {
|
||||
try project.validate(xcodeGenVersion: xcodeGenVersion)
|
||||
try project.validate()
|
||||
} catch let error as SpecValidationError {
|
||||
if !error.errors
|
||||
.contains(where: { $0.description == expectedError.description }) {
|
||||
@ -216,3 +216,9 @@ fileprivate func expectValidationError(xcodeGenVersion: Version = try! Version("
|
||||
}
|
||||
throw failure("Supposed to fail with \"\(expectedError)\"", file: file, line: line)
|
||||
}
|
||||
|
||||
fileprivate func expectMinimumXcodeGenVersionError(_ project: Project, minimumVersion: Version, xcodeGenVersion: Version, file: String = #file, line: Int = #line) throws {
|
||||
try expectError(SpecValidationError.ValidationError.invalidXcodeGenVersion(minimumVersion: minimumVersion, version: xcodeGenVersion), file: file, line: line) {
|
||||
try project.validateMinimumXcodeGenVersion(xcodeGenVersion)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user