buildPresets

This commit is contained in:
Yonas Kolb
2017-07-26 23:18:45 +02:00
parent 4e35dc6b02
commit 9d5342d301
19 changed files with 560 additions and 382 deletions
@@ -1,39 +0,0 @@
//
// BuildSetting.swift
// XcodeGen
//
// Created by Yonas Kolb on 21/7/17.
//
//
import Foundation
import JSONUtilities
import xcodeproj
public struct TargetBuildSettings: JSONObjectConvertible {
public let buildSettings: BuildSettings
public let configSettings: [String: BuildSettings]
public init(buildSettings: BuildSettings, configSettings: [String: BuildSettings] = [:]) {
self.buildSettings = buildSettings
self.configSettings = configSettings
}
public init(jsonDictionary: JSONDictionary) throws {
if jsonDictionary["$base"] != nil {
buildSettings = BuildSettings(dictionary: try jsonDictionary.json(atKeyPath: "$base"))
var configSettings: [String: BuildSettings] = [:]
for (key, value) in jsonDictionary {
if key != "baseSettings", let buildSettings = value as? JSONDictionary {
configSettings["key"] = BuildSettings(dictionary: buildSettings)
}
}
self.configSettings = configSettings
} else {
buildSettings = BuildSettings(dictionary: jsonDictionary)
configSettings = [:]
}
}
}
@@ -1,29 +0,0 @@
//
// BuildSettings.swift
// XcodeGen
//
// Created by Yonas Kolb on 20/7/17.
//
//
import Foundation
import xcodeproj
import JSONUtilities
public struct BuildSettingGroup {
public var name: String
public var buildSettings: BuildSettings
public init(name: String, buildSettings: BuildSettings) {
self.name = name
self.buildSettings = buildSettings
}
}
extension BuildSettingGroup: NamedJSONDictionaryConvertible {
public init(name: String, jsonDictionary: JSONDictionary) throws {
self.name = name
self.buildSettings = BuildSettings(dictionary: jsonDictionary)
}
}
+15 -8
View File
@@ -10,18 +10,25 @@ import Foundation
import xcodeproj
import JSONUtilities
public struct Config {
public struct Config: Equatable {
public var name: String
public var type: ConfigType?
public var buildSettingGroups: [BuildSettingGroup]
public var buildSettings: BuildSettings
public var settings: BuildSettings
public var settingPresets: [String]
public init(name: String, type: ConfigType? = nil, buildSettingGroups: [BuildSettingGroup] = [], buildSettings: BuildSettings = .init()) {
public init(name: String, type: ConfigType? = nil, settings: BuildSettings = .empty, settingPresets: [String] = []) {
self.name = name
self.buildSettingGroups = buildSettingGroups
self.buildSettings = buildSettings
self.settings = settings
self.settingPresets = settingPresets
self.type = type
}
public static func ==(lhs: Config, rhs: Config) -> Bool {
return lhs.name == rhs.name &&
lhs.type == rhs.type &&
lhs.settings == rhs.settings &&
lhs.settingPresets == rhs.settingPresets
}
}
@@ -35,7 +42,7 @@ extension Config: NamedJSONDictionaryConvertible {
public init(name: String, jsonDictionary: JSONDictionary) throws {
self.name = name
type = jsonDictionary.json(atKeyPath: "type")
buildSettingGroups = try jsonDictionary.json(atKeyPath: "settingGroups")
buildSettings = BuildSettings(dictionary: jsonDictionary.json(atKeyPath: "buildSettings") ?? [:])
settings = BuildSettings(dictionary: jsonDictionary.json(atKeyPath: "settings") ?? [:])
settingPresets = jsonDictionary.json(atKeyPath: "settingPresets") ?? []
}
}
@@ -0,0 +1,58 @@
//
// SettingPreset.swift
// XcodeGen
//
// Created by Yonas Kolb on 26/7/17.
//
//
import Foundation
import JSONUtilities
import xcodeproj
public struct SettingPreset: Equatable, CustomStringConvertible {
public var settings: Settings
public var settingPresets: [String]
public init(settings: Settings, settingPresets: [String] = []) {
self.settings = settings
self.settingPresets = settingPresets
}
public static func ==(lhs: SettingPreset, rhs: SettingPreset) -> Bool {
return lhs.settings == rhs.settings && lhs.settingPresets == rhs.settingPresets
}
public var description: String {
return "\(settings)\nPresets: \(settingPresets)"
}
}
public enum SettingsPresetFile {
case config(ConfigType)
case platform(Platform)
case product(PBXProductType)
case base
var path: String {
switch self {
case let .config(config): return "Configs/\(config.rawValue)"
case let .platform(platform): return "Platforms/\(platform.rawValue)"
case let .product(product): return "Products/\(product.rawValue)"
case .base: return "base"
}
}
}
extension SettingPreset: JSONObjectConvertible {
public init(jsonDictionary: JSONDictionary) throws {
if jsonDictionary["settings"] == nil {
settings = try Settings(jsonDictionary: jsonDictionary)
settingPresets = []
} else {
settings = try jsonDictionary.json(atKeyPath: "settings")
settingPresets = jsonDictionary.json(atKeyPath: "settingPresets") ?? []
}
}
}
+73
View File
@@ -0,0 +1,73 @@
//
// BuildSetting.swift
// XcodeGen
//
// Created by Yonas Kolb on 21/7/17.
//
//
import Foundation
import JSONUtilities
import xcodeproj
public struct Settings: Equatable, JSONObjectConvertible, CustomStringConvertible {
public let buildSettings: BuildSettings
public let configSettings: [String: BuildSettings]
public init(buildSettings: BuildSettings, configSettings: [String: BuildSettings] = [:]) {
self.buildSettings = buildSettings
self.configSettings = configSettings
}
public init(dictionary: [String: Any]) {
self.buildSettings = BuildSettings(dictionary: dictionary)
self.configSettings = [:]
}
static let empty: Settings = Settings(buildSettings: BuildSettings())
public init(jsonDictionary: JSONDictionary) throws {
if let configSettings: [String: BuildSettings] = jsonDictionary.json(atKeyPath: "configs") {
buildSettings = jsonDictionary.json(atKeyPath: "default") ?? [:]
self.configSettings = configSettings
} else {
buildSettings = BuildSettings(dictionary: jsonDictionary)
configSettings = [:]
}
}
public static func ==(lhs: Settings, rhs: Settings) -> Bool {
return lhs.buildSettings == rhs.buildSettings && lhs.configSettings == rhs.configSettings
}
public var description: String {
var string: String = ""
if !buildSettings.dictionary.isEmpty {
string += buildSettings.description
}
for (config, buildSettings) in configSettings {
if !buildSettings.dictionary.isEmpty {
string += "\n\(config)\n\t" + buildSettings.description.replacingOccurrences(of: "\n", with: "\n\t")
}
}
return string
}
}
extension Settings: ExpressibleByDictionaryLiteral {
public init(dictionaryLiteral elements: (String, Any)...) {
var dictionary: [String: Any] = [:]
elements.forEach { dictionary[$0.0] = $0.1 }
self.init(dictionary: dictionary)
}
}
extension BuildSettings: JSONObjectConvertible {
public init(jsonDictionary: JSONDictionary) throws {
self.init(dictionary: jsonDictionary)
}
}
+9 -6
View File
@@ -16,23 +16,25 @@ public struct Spec {
public var name: String
public var targets: [Target]
public var settingGroups: [BuildSettingGroup]
public var settings: Settings
public var settingPresets: [String: SettingPreset]
public var configs: [Config]
public var schemes: [Scheme]
public init(name: String, configs: [Config] = [], targets: [Target] = [], settingGroups: [BuildSettingGroup] = [], schemes: [Scheme] = []) {
public init(name: String, configs: [Config] = [], targets: [Target] = [], settings: Settings = .empty, settingPresets: [String: SettingPreset] = [:], schemes: [Scheme] = []) {
self.name = name
self.targets = targets
self.configs = configs
self.settingGroups = settingGroups
self.settings = settings
self.settingPresets = settingPresets
self.schemes = schemes
}
func getTarget(_ targetName: String) -> Target? {
public func getTarget(_ targetName: String) -> Target? {
return targets.first { $0.name == targetName }
}
func getConfig(_ configName: String) -> Config? {
public func getConfig(_ configName: String) -> Config? {
return configs.first { $0.name == configName }
}
}
@@ -53,7 +55,8 @@ extension Spec {
public init(jsonDictionary: JSONDictionary) throws {
name = try jsonDictionary.json(atKeyPath: "name")
settingGroups = try jsonDictionary.json(atKeyPath: "settingGroups")
settings = jsonDictionary.json(atKeyPath: "settings") ?? .empty
settingPresets = jsonDictionary.json(atKeyPath: "settingPresets") ?? [:]
configs = try jsonDictionary.json(atKeyPath: "configs")
if jsonDictionary["targets"] == nil {
targets = []
+7 -4
View File
@@ -14,7 +14,8 @@ public struct Target {
public var name: String
public var type: PBXProductType
public var platform: Platform
public var buildSettings: TargetBuildSettings?
public var settings: Settings
public var settingPresets: [String]
public var sources: [String]
public var sourceExludes: [String]
public var dependencies: [Dependency]
@@ -31,11 +32,12 @@ public struct Target {
return name
}
public init(name: String, type: PBXProductType, platform: Platform, buildSettings: TargetBuildSettings?, configs: [String: String] = [:], sources: [String] = [], sourceExludes: [String] = [], dependencies: [Dependency] = [], prebuildScripts: [String] = [], postbuildScripts: [String] = [], generateSchemes: [String] = []) {
public init(name: String, type: PBXProductType, platform: Platform, settings: Settings = .empty, settingPresets: [String] = [], configs: [String: String] = [:], sources: [String] = [], sourceExludes: [String] = [], dependencies: [Dependency] = [], prebuildScripts: [String] = [], postbuildScripts: [String] = [], generateSchemes: [String] = []) {
self.name = name
self.type = type
self.platform = platform
self.buildSettings = buildSettings
self.settings = settings
self.settingPresets = settingPresets
self.configs = configs
self.sources = sources
self.sourceExludes = sourceExludes
@@ -62,7 +64,8 @@ extension Target: JSONObjectConvertible {
} else {
throw SpecError.unknownTargetPlatform(platformString)
}
buildSettings = jsonDictionary.json(atKeyPath: "buildSettings")
settings = jsonDictionary.json(atKeyPath: "settings") ?? .empty
settingPresets = jsonDictionary.json(atKeyPath: "settingsPresets") ?? []
configs = jsonDictionary.json(atKeyPath: "configs") ?? [:]
if let source: String = jsonDictionary.json(atKeyPath: "sources") {
sources = [source]