Skip to content

Commit b3d1b5c

Browse files
authored
Pass clonedSourcePackagesDirPath to showBuildSettings (#401)
1 parent 878fee4 commit b3d1b5c

File tree

3 files changed

+48
-8
lines changed

3 files changed

+48
-8
lines changed

step/step.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"fmt"
55
"os"
66
"path/filepath"
7-
"slices"
87
"strings"
98
"time"
109

@@ -297,12 +296,9 @@ func (s XcodebuildArchiveConfigParser) ProcessInputs() (Config, error) {
297296
}
298297
}
299298

300-
var spmAdditionalOptions = []string{"-skipPackagePluginValidation", "-skipMacroValidation", "-skipPackageUpdates", "-disableAutomaticPackageResolution", "-onlyUsePackageVersionsFromResolvedFile"}
301-
var filteredShowbuildsettingsOptions []string
302-
for _, option := range config.XcodebuildAdditionalOptions {
303-
if slices.Contains(spmAdditionalOptions, option) {
304-
filteredShowbuildsettingsOptions = append(filteredShowbuildsettingsOptions, option)
305-
}
299+
showbuildSettingsAdditionalOptions := filterSPMAdditionalOptions(config.XcodebuildAdditionalOptions)
300+
if len(showbuildSettingsAdditionalOptions) != len(config.XcodebuildAdditionalOptions) {
301+
s.logger.Printf("Some xcodebuild additional options are filtered out when reading build settings. Options used: %s", strings.Join(showbuildSettingsAdditionalOptions, " "))
306302
}
307303

308304
// Open Xcode project
@@ -311,7 +307,7 @@ func (s XcodebuildArchiveConfigParser) ProcessInputs() (Config, error) {
311307
ProjectOrWorkspacePath: config.ProjectPath,
312308
SchemeName: config.Scheme,
313309
ConfigurationName: config.Configuration,
314-
AdditionalXcodebuildShowbuildsettingsOptions: filteredShowbuildsettingsOptions,
310+
AdditionalXcodebuildShowbuildsettingsOptions: showbuildSettingsAdditionalOptions,
315311
})
316312
if err != nil {
317313
return Config{}, fmt.Errorf("failed to open Project or Workspace: %w", err)

step/utils.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bufio"
55
"fmt"
66
"regexp"
7+
"slices"
78
"strings"
89

910
"github.com/bitrise-io/go-utils/colorstring"
@@ -31,6 +32,24 @@ func generateAdditionalOptions(platform string, customOptions []string) []string
3132
return options
3233
}
3334

35+
func filterSPMAdditionalOptions(xcodebuildAdditionalOptions []string) []string {
36+
var knownSPMFlags = []string{"-skipPackagePluginValidation", "-skipMacroValidation", "-skipPackageUpdates", "-disableAutomaticPackageResolution", "-onlyUsePackageVersionsFromResolvedFile"}
37+
var knownSPMParams = []string{"-clonedSourcePackagesDirPath"}
38+
39+
filteredShowbuildsettingsOptions := []string{}
40+
for i, option := range xcodebuildAdditionalOptions {
41+
if slices.Contains(knownSPMFlags, option) {
42+
filteredShowbuildsettingsOptions = append(filteredShowbuildsettingsOptions, option)
43+
continue
44+
}
45+
if slices.Contains(knownSPMParams, option) && i+1 < len(xcodebuildAdditionalOptions) {
46+
filteredShowbuildsettingsOptions = append(filteredShowbuildsettingsOptions, option, xcodebuildAdditionalOptions[i+1])
47+
}
48+
}
49+
50+
return filteredShowbuildsettingsOptions
51+
}
52+
3453
func determineExportMethod(desiredExportMethod string, archiveExportMethod exportoptions.Method, logger log.Logger) (exportoptions.Method, error) {
3554
if desiredExportMethod == "auto-detect" {
3655
logger.Printf("auto-detect export method specified: using the archive profile's export method: %s", archiveExportMethod)

step/utils_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,28 @@ func Test_findIDEDistrubutionLogsPath(t *testing.T) {
7474
})
7575
}
7676
}
77+
78+
func Test_filterSPMAdditionalOptions(t *testing.T) {
79+
tests := []struct {
80+
name string
81+
xcodebuildAdditionalOptions []string
82+
want []string
83+
}{
84+
{
85+
name: "no SPM options",
86+
xcodebuildAdditionalOptions: []string{"-scheme", "MyScheme", "-configuration", "Release"},
87+
want: []string{},
88+
},
89+
{
90+
name: "with SPM flags",
91+
xcodebuildAdditionalOptions: []string{"-scheme", "MyScheme", "-skipPackagePluginValidation", "-skipMacroValidation", "-clonedSourcePackagesDirPath", "/path/to/packages"},
92+
want: []string{"-skipPackagePluginValidation", "-skipMacroValidation", "-clonedSourcePackagesDirPath", "/path/to/packages"},
93+
},
94+
}
95+
for _, tt := range tests {
96+
t.Run(tt.name, func(t *testing.T) {
97+
got := filterSPMAdditionalOptions(tt.xcodebuildAdditionalOptions)
98+
require.Equal(t, tt.want, got)
99+
})
100+
}
101+
}

0 commit comments

Comments
 (0)