Skip to content

Commit 2f71c9c

Browse files
authored
Fix workspace settings key not found handling (#211)
1 parent dd93ee0 commit 2f71c9c

File tree

4 files changed

+68
-0
lines changed

4 files changed

+68
-0
lines changed

xcodeproject/xcodeproj/schemes.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,10 @@ func (p XcodeProj) isAutocreateSchemesEnabled() (bool, error) {
227227

228228
autoCreate, err := settings.Bool("IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded")
229229
if err != nil {
230+
if serialized.IsKeyNotFoundError(err) {
231+
// By default 'Autocreate Schemes' is enabled
232+
return true, nil
233+
}
230234
return false, err
231235
}
232236

xcodeproject/xcodeproj/schemes_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,24 @@ func Test_GivenNewlyGeneratedXcodeProject_WhenListingSchemes_ThenReturnsTheDefau
2424
require.Equal(t, true, schemes[0].IsShared)
2525
}
2626

27+
func Test_GivenNewlyGeneratedXcodeProjectWithWorkspaceSettings_WhenListingSchemes_ThenReturnsTheDefaultScheme(t *testing.T) {
28+
xcodeProjectPath := testhelper.NewlyGeneratedXcodeProjectPath(t)
29+
30+
worksaceSettingsPth := filepath.Join(xcodeProjectPath, "project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings")
31+
require.NoError(t, fileutil.WriteStringToFile(worksaceSettingsPth, workspaceSettingsWithBuildSystemTypeOriginalContent))
32+
33+
proj, err := Open(xcodeProjectPath)
34+
require.NoError(t, err)
35+
36+
schemes, err := proj.Schemes()
37+
require.NoError(t, err)
38+
39+
expectedSchemeName := "ios-sample"
40+
require.Equal(t, 1, len(schemes))
41+
require.Equal(t, expectedSchemeName, schemes[0].Name)
42+
require.Equal(t, true, schemes[0].IsShared)
43+
}
44+
2745
func Test_GivenNewlyGeneratedXcodeProjectWithUserDataGitignored_WhenListingSchemes_ThenReturnsTheDefaultScheme(t *testing.T) {
2846
xcodeProjectPath := testhelper.NewlyGeneratedXcodeProjectPath(t)
2947

@@ -90,6 +108,16 @@ const workspaceSettingsWithAutocreateSchemesDisabledContent = `<?xml version="1.
90108
</plist>
91109
`
92110

111+
const workspaceSettingsWithBuildSystemTypeOriginalContent = `<?xml version="1.0" encoding="UTF-8"?>
112+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
113+
<plist version="1.0">
114+
<dict>
115+
<key>BuildSystemType</key>
116+
<string>Original</string>
117+
</dict>
118+
</plist>
119+
`
120+
93121
const defaultSchemeContent = `<?xml version="1.0" encoding="UTF-8"?>
94122
<Scheme
95123
LastUpgradeVersion = "1430"

xcodeproject/xcworkspace/schemes.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,10 @@ func (w Workspace) isAutocreateSchemesEnabled() (bool, error) {
184184

185185
autoCreate, err := settings.Bool("IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded")
186186
if err != nil {
187+
if serialized.IsKeyNotFoundError(err) {
188+
// By default 'Autocreate Schemes' is enabled
189+
return true, nil
190+
}
187191
return false, err
188192
}
189193

xcodeproject/xcworkspace/schemes_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,28 @@ func Test_GivenNewlyGeneratedWorkspace_WhenListingSchemes_ThenReturnsTheDefaultS
3030
require.Equal(t, true, actualSchemes[0].IsShared)
3131
}
3232

33+
func Test_GivenNewlyGeneratedWorkspaceWithWorkspaceSettings_WhenListingSchemes_ThenReturnsTheDefaultScheme(t *testing.T) {
34+
xcodeWorkspacePath := testhelper.NewlyGeneratedXcodeWorkspacePath(t)
35+
workspace, err := Open(xcodeWorkspacePath)
36+
require.NoError(t, err)
37+
38+
worksaceSettingsPth := filepath.Join(xcodeWorkspacePath, "xcshareddata/WorkspaceSettings.xcsettings")
39+
require.NoError(t, fileutil.WriteStringToFile(worksaceSettingsPth, workspaceSettingsWithBuildSystemTypeOriginalContent))
40+
41+
schemesByContainer, err := workspace.Schemes()
42+
require.NoError(t, err)
43+
44+
expectedSchemeName := "ios-sample"
45+
var actualSchemes []xcscheme.Scheme
46+
for _, schemes := range schemesByContainer {
47+
actualSchemes = append(actualSchemes, schemes...)
48+
}
49+
50+
require.Equal(t, 1, len(actualSchemes))
51+
require.Equal(t, expectedSchemeName, actualSchemes[0].Name)
52+
require.Equal(t, true, actualSchemes[0].IsShared)
53+
}
54+
3355
func Test_GivenNewlyGeneratedWorkspaceWithAutocreateSchemesDisabled_WhenListingSchemes_ThenReturnsError(t *testing.T) {
3456
xcodeWorkspacePath := testhelper.NewlyGeneratedXcodeWorkspacePath(t)
3557

@@ -58,6 +80,16 @@ const workspaceSettingsWithAutocreateSchemesDisabledContent = `<?xml version="1.
5880
</plist>
5981
`
6082

83+
const workspaceSettingsWithBuildSystemTypeOriginalContent = `<?xml version="1.0" encoding="UTF-8"?>
84+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
85+
<plist version="1.0">
86+
<dict>
87+
<key>BuildSystemType</key>
88+
<string>Original</string>
89+
</dict>
90+
</plist>
91+
`
92+
6193
const workspaceSettingsWithAutocreateSchemesEnabledContent = `<?xml version="1.0" encoding="UTF-8"?>
6294
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
6395
<plist version="1.0">

0 commit comments

Comments
 (0)