Skip to content

Commit

Permalink
Follow-up changes to #699
Browse files Browse the repository at this point in the history
  • Loading branch information
ileitch committed May 19, 2024
1 parent 4bd56a6 commit 115df72
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 34 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

- Unused import detection is now enabled by default.
- Added the `--retain-encodable-properties` option to retain all properties on `Encodable` types only.
- Added the `--xcode-list-arguments` option to pass additional arguments to `xcodebuild -list`.

##### Bug Fixes

Expand Down
13 changes: 9 additions & 4 deletions Sources/Shared/Configuration.swift
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ public final class Configuration {
@Setting(key: "build_arguments", defaultValue: [])
public var buildArguments: [String]

@Setting(key: "schemes_arguments", defaultValue: [])
public var schemesArguments: [String]
@Setting(key: "xcode_list_arguments", defaultValue: [])
public var xcodeListArguments: [String]

@Setting(key: "retain_assign_only_property_types", defaultValue: [], valueSanitizer: PropertyTypeSanitizer.sanitize)
public var retainAssignOnlyPropertyTypes: [String]
Expand Down Expand Up @@ -253,6 +253,10 @@ public final class Configuration {
config[$buildArguments.key] = buildArguments
}

if $xcodeListArguments.hasNonDefaultValue {
config[$xcodeListArguments.key] = xcodeListArguments
}

if $relativeResults.hasNonDefaultValue {
config[$relativeResults.key] = relativeResults
}
Expand Down Expand Up @@ -350,8 +354,8 @@ public final class Configuration {
$cleanBuild.assign(value)
case $buildArguments.key:
$buildArguments.assign(value)
case $schemesArguments.key:
$schemesArguments.assign(value)
case $xcodeListArguments.key:
$xcodeListArguments.assign(value)
case $relativeResults.key:
$relativeResults.assign(value)
case $retainCodableProperties.key:
Expand Down Expand Up @@ -398,6 +402,7 @@ public final class Configuration {
$skipBuild.reset()
$cleanBuild.reset()
$buildArguments.reset()
$xcodeListArguments.reset()
$relativeResults.reset()
$retainCodableProperties.reset()
$retainEncodableProperties.reset()
Expand Down
2 changes: 1 addition & 1 deletion Sources/XcodeSupport/XcodeProjectDriver.swift
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public final class XcodeProjectDriver {

// Ensure schemes exist within the project
let schemes = try project.schemes(
additionalArguments: configuration.schemesArguments
additionalArguments: configuration.xcodeListArguments
).filter { configuration.schemes.contains($0) }
let validSchemeNames = schemes.mapSet { $0 }

Expand Down
4 changes: 2 additions & 2 deletions Sources/XcodeSupport/XcodeProjectSetupGuide.swift
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public final class XcodeProjectSetupGuide: SetupGuideHelpers, ProjectSetupGuide
configuration.targets = select(multiple: targets, allowAll: true).selectedValues

let schemes = try filter(
project.schemes(additionalArguments: configuration.schemesArguments),
project.schemes(additionalArguments: configuration.xcodeListArguments),
project
).map { $0 }.sorted()

Expand Down Expand Up @@ -88,7 +88,7 @@ public final class XcodeProjectSetupGuide: SetupGuideHelpers, ProjectSetupGuide
return try xcodebuild.schemes(
type: "project",
path: path.lexicallyNormalized().string,
additionalArguments: configuration.schemesArguments
additionalArguments: configuration.xcodeListArguments
)
}

Expand Down
46 changes: 19 additions & 27 deletions Sources/XcodeSupport/Xcodebuild.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,20 +39,7 @@ public final class Xcodebuild {
"INDEX_ENABLE_DATA_STORE=\"YES\""
]

// Apply quotes to additional option values is needed.
var quotedArguments = additionalArguments

for (i, arg) in additionalArguments.enumerated() {
if arg.hasPrefix("-"),
let value = additionalArguments[safe: i + 1],
!value.hasPrefix("-"),
!value.hasPrefix("\""),
!value.hasPrefix("\'")
{
quotedArguments[i + 1] = "\"\(value)\""
}
}

let quotedArguments = quote(arguments: additionalArguments)
let xcodebuild = "xcodebuild \((args + [cmd] + envs + quotedArguments).joined(separator: " "))"
return try shell.exec(["/bin/sh", "-c", xcodebuild])
}
Expand Down Expand Up @@ -86,19 +73,7 @@ public final class Xcodebuild {
"-json"
]

var quotedArguments = additionalArguments

for (i, arg) in additionalArguments.enumerated() {
if arg.hasPrefix("-"),
let value = additionalArguments[safe: i + 1],
!value.hasPrefix("-"),
!value.hasPrefix("\""),
!value.hasPrefix("\'")
{
quotedArguments[i + 1] = "\"\(value)\""
}
}

let quotedArguments = quote(arguments: additionalArguments)
let xcodebuild = "xcodebuild \((args + quotedArguments).joined(separator: " "))"
let lines = try shell.exec(["/bin/sh", "-c", xcodebuild], stderr: false).split(separator: "\n").map { String($0).trimmed }

Expand Down Expand Up @@ -143,4 +118,21 @@ public final class Xcodebuild {

return try Constants.cachePath().appending("DerivedData-\(xcodeVersionHash)-\(projectHash)-\(schemesHash)")
}

private func quote(arguments: [String]) -> [String] {
var quotedArguments = arguments

for (i, arg) in arguments.enumerated() {
if arg.hasPrefix("-"),
let value = arguments[safe: i + 1],
!value.hasPrefix("-"),
!value.hasPrefix("\""),
!value.hasPrefix("\'")
{
quotedArguments[i + 1] = "\"\(value)\""
}
}

return quotedArguments
}
}

0 comments on commit 115df72

Please sign in to comment.