                 guard let _buildableName =
                         project.getTarget(buildTarget.target.name)?.filename ??
                         project.getAggregateTarget(buildTarget.target.name)?.name else {
-                    throw SchemeGenerationError.unresolvableBuildableName(buildTarget)
+                    fatalError("Unable to determinate \"buildableName\" for build target: \(buildTarget.target)")
                 }
                 buildableName = _buildableName
             }

    }
}

enum SchemeGenerationError: Error, CustomStringConvertible {

    case unresolvableBuildableName(Scheme.BuildTarget)
    case missingTarget(Scheme.BuildTarget, projectPath: String)
    case missingProject(String)

    var description: String {
        switch self {
        case .unresolvableBuildableName(let buildTarget):
            return "Unable to determinate \"buildableName\" for build target: \(buildTarget.target)"
        case .missingTarget(let buildTarget, let projectPath):
            return "Unable to find target named \"\(buildTarget.target)\" in \"\(projectPath)\""
        case .missingProject(let project):
            return "Unable to find project reference named \"\(project)\" in project.yml"
        }
    }
}

extension Scheme {
    public init(name: String, target: Target, targetScheme: TargetScheme, debugConfig: String, releaseConfig: String) {
        self.init(

            }

            guard let pbxTarget = pbxProj.targets(named: buildTarget.target.name).first else {
                fatalError("Unable to find target named \"\(buildTarget.target)\" in \"PBXProj.targets\"")
            }

            let buildableName: String
