From a20885e6b45cbefaed0bdee42b1e63089e131a85 Mon Sep 17 00:00:00 2001 From: Yonas Kolb Date: Sat, 23 Sep 2017 21:29:12 +0200 Subject: [PATCH] checking build setting existence checks xcconfig files too --- Sources/XcodeGenKit/PBXProjGenerator.swift | 7 +++---- Sources/XcodeGenKit/SettingsBuilder.swift | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index 1dc51234..0031aa02 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -167,10 +167,9 @@ public class PBXProjGenerator { var buildSettings = spec.getTargetBuildSettings(target: target, config: config) // automatically set INFOPLIST_FILE path - if buildSettings["INFOPLIST_FILE"] == nil { - if let plistPath = infoPlists.first { - buildSettings["INFOPLIST_FILE"] = plistPath.byRemovingBase(path: basePath) - } + if let plistPath = infoPlists.first, + !spec.targetHasBuildSetting("INFOPLIST_FILE", basePath: basePath, target: target, config: config, includeProject: false) { + buildSettings["INFOPLIST_FILE"] = plistPath.byRemovingBase(path: basePath) } // set Carthage search paths diff --git a/Sources/XcodeGenKit/SettingsBuilder.swift b/Sources/XcodeGenKit/SettingsBuilder.swift index 33c6557b..03bd65d5 100644 --- a/Sources/XcodeGenKit/SettingsBuilder.swift +++ b/Sources/XcodeGenKit/SettingsBuilder.swift @@ -56,6 +56,27 @@ extension ProjectSpec { return buildSettings } + + // combines all levels of a target's settings + public func getCombinedBuildSettings(basePath: Path, target: Target, config: Config, includeProject: Bool) -> BuildSettings { + var buildSettings: BuildSettings = [:] + if includeProject { + buildSettings += getProjectBuildSettings(config: config) + } + if let configFilePath = target.configFiles[config.name] { + let path = basePath + configFilePath + if let configFile = try? XCConfig(path: path) { + buildSettings += configFile.flattenedBuildSettings() + } + } + buildSettings += getTargetBuildSettings(target: target, config: config) + return buildSettings + } + + public func targetHasBuildSetting(_ setting: String, basePath: Path, target: Target, config: Config, includeProject: Bool) -> Bool { + let buildSettings = getCombinedBuildSettings(basePath: basePath, target: target, config: config, includeProject: includeProject) + return buildSettings[setting] != nil + } } private var buildSettingFiles: [String: BuildSettings] = [:]