Fix build settings not being generated properly (#282)

* Fix build settings not being generated properly

* update changelog

* Adding unit test for debug/release target settings

* Fix tests

* Solve some issues after rebasing
This commit is contained in:
Pedro Piñera Buendía 2019-03-14 08:40:23 +01:00 committed by GitHub
parent d348c83d93
commit 739a4c1015
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 60 additions and 17 deletions

View File

@ -17,6 +17,8 @@ Please, check out guidelines: https://keepachangelog.com/en/1.0.0/
- Fix duplicated embedded frameworks https://github.com/tuist/tuist/pull/280 by @pepibumur
- Fix manifest target linker errors https://github.com/tuist/tuist/pull/287 by @kwridan
- Build settings not being generated properly https://github.com/tuist/tuist/pull/282 by @pepibumur
- Duplicated embedded frameworks https://github.com/tuist/tuist/pull/280 by @pepibumur
## 0.12.0

View File

@ -122,11 +122,11 @@ final class ConfigGenerator: ConfigGenerating {
sourceRootPath: AbsolutePath) throws {
let product = settingsProviderProduct(target)
let platform = settingsProviderPlatform(target)
let defaultConfigSettings = BuildSettingsProvider.targetDefault(platform: platform, product: product)
let variant: BuildSettingsProvider.Variant = (buildConfiguration == .debug) ? .debug : .release
var settings: [String: Any] = [:]
extend(buildSettings: &settings, with: defaultConfigSettings)
extend(buildSettings: &settings, with: BuildSettingsProvider.targetDefault(variant: .all, platform: platform, product: product, swift: true))
extend(buildSettings: &settings, with: BuildSettingsProvider.targetDefault(variant: variant, platform: platform, product: product, swift: true))
extend(buildSettings: &settings, with: target.settings?.base ?? [:])
extend(buildSettings: &settings, with: configuration?.settings ?? [:])
@ -192,7 +192,7 @@ final class ConfigGenerator: ConfigGenerating {
fileprivate func extend(buildSettings: inout [String: Any], with other: [String: Any]) {
other.forEach { key, value in
if buildSettings[key] == nil {
if buildSettings[key] == nil || (value as? String)?.contains("$(inherited)") == false {
buildSettings[key] = value
} else {
let previousValue: Any = buildSettings[key]!

View File

@ -46,24 +46,37 @@ final class ConfigGeneratorTests: XCTestCase {
}
func test_generateTargetConfig() throws {
try generateTargetConfig(config: .release)
// Given / When
try generateTargetConfig()
// Then
let configurationList = pbxTarget.buildConfigurationList
let debugConfig = configurationList?.configuration(name: "Debug")
let releaseConfig = configurationList?.configuration(name: "Release")
func assert(config: XCBuildConfiguration?) {
XCTAssertEqual(config?.buildSettings["Base"] as? String, "Base")
XCTAssertEqual(config?.buildSettings["INFOPLIST_FILE"] as? String, "$(SRCROOT)/Info.plist")
XCTAssertEqual(config?.buildSettings["PRODUCT_BUNDLE_IDENTIFIER"] as? String, "com.test.bundle_id")
XCTAssertEqual(config?.buildSettings["CODE_SIGN_ENTITLEMENTS"] as? String, "$(SRCROOT)/Test.entitlements")
XCTAssertEqual(config?.buildSettings["SWIFT_VERSION"] as? String, Constants.swiftVersion)
let commonSettings = [
"Base": "Base",
"INFOPLIST_FILE": "$(SRCROOT)/Info.plist",
"PRODUCT_BUNDLE_IDENTIFIER": "com.test.bundle_id",
"CODE_SIGN_ENTITLEMENTS": "$(SRCROOT)/Test.entitlements",
"SWIFT_VERSION": Constants.swiftVersion,
]
let xcconfig: PBXFileReference? = config?.baseConfiguration
XCTAssertEqual(xcconfig?.path, "\(config!.name.lowercased()).xcconfig")
}
let debugSettings = [
"SWIFT_OPTIMIZATION_LEVEL": "-Onone",
]
assert(config: debugConfig)
assert(config: releaseConfig)
let releaseSettings = [
"SWIFT_OPTIMIZATION_LEVEL": "-Owholemodule",
]
assert(config: debugConfig, contains: commonSettings)
assert(config: debugConfig, contains: debugSettings)
assert(config: debugConfig, hasXcconfig: "debug.xcconfig")
assert(config: releaseConfig, contains: commonSettings)
assert(config: releaseConfig, contains: releaseSettings)
assert(config: releaseConfig, hasXcconfig: "release.xcconfig")
}
private func generateProjectConfig(config _: BuildConfiguration) throws {
@ -88,7 +101,7 @@ final class ConfigGeneratorTests: XCTestCase {
options: options)
}
private func generateTargetConfig(config _: BuildConfiguration) throws {
private func generateTargetConfig() throws {
let dir = try TemporaryDirectory(removeTreeOnDeinit: true)
let xcconfigsDir = dir.path.appending(component: "xcconfigs")
try fileHandler.createFolder(xcconfigsDir)
@ -120,4 +133,32 @@ final class ConfigGeneratorTests: XCTestCase {
options: options,
sourceRootPath: AbsolutePath("/"))
}
// MARK: - Helpers
func assert(config: XCBuildConfiguration?,
contains settings: [String: String],
file: StaticString = #file,
line: UInt = #line) {
let matches = settings.filter {
config?.buildSettings[$0.key] as? String == $0.value
}
XCTAssertEqual(matches.count,
settings.count,
"Settings \(String(describing: config?.buildSettings)) do not contain expected settings \(settings)",
file: file,
line: line)
}
func assert(config: XCBuildConfiguration?,
hasXcconfig xconfigPath: String,
file: StaticString = #file,
line: UInt = #line) {
let xcconfig: PBXFileReference? = config?.baseConfiguration
XCTAssertEqual(xcconfig?.path,
xconfigPath,
file: file,
line: line)
}
}