Files
XcodeGen/Sources/XcodeGenKit/SettingsBuilder.swift
T
2017-07-27 14:41:18 +02:00

73 lines
2.1 KiB
Swift

//
// SettingsBuilder.swift
// XcodeGen
//
// Created by Yonas Kolb on 26/7/17.
//
//
import Foundation
import xcodeproj
import PathKit
extension Spec {
public func getProjectBuildSettings(config: Config) -> BuildSettings {
var buildSettings: BuildSettings = .empty
buildSettings += SettingsPresetFile.base.getBuildSettings()
if let type = config.type {
buildSettings += SettingsPresetFile.config(type).getBuildSettings()
}
buildSettings += getBuildSettings(settings: settings, config: config)
return buildSettings
}
public func getTargetBuildSettings(target: Target, config: Config) -> BuildSettings {
var buildSettings = BuildSettings()
buildSettings += SettingsPresetFile.platform(target.platform).getBuildSettings()
buildSettings += SettingsPresetFile.product(target.type).getBuildSettings()
buildSettings += getBuildSettings(settings: target.settings, config: config)
return buildSettings
}
public func getBuildSettings(settings: Settings, config: Config) -> BuildSettings {
var buildSettings: BuildSettings = .empty
for preset in settings.presets {
let presetSettings = settingPresets[preset]!
buildSettings += getBuildSettings(settings: presetSettings, config: config)
}
buildSettings += settings.buildSettings
if let configSettings = settings.configSettings[config.name] {
buildSettings += getBuildSettings(settings: configSettings, config: config)
}
return buildSettings
}
}
private var buildSettingFiles: [String: BuildSettings] = [:]
extension SettingsPresetFile {
public func getBuildSettings() -> BuildSettings? {
if let group = buildSettingFiles[path] {
return group
}
let settingsPath = Path(#file).parent().parent().parent() + "SettingPresets/\(path).yml"
guard settingsPath.exists,
let buildSettings = try? BuildSettings(path: settingsPath) else { return nil }
buildSettingFiles[path] = buildSettings
return buildSettings
}
}