Skip to content

Commit

Permalink
Fix workspace settings key not found handling (#211)
Browse files Browse the repository at this point in the history
  • Loading branch information
godrei authored Aug 23, 2023
1 parent dd93ee0 commit 2f71c9c
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 0 deletions.
4 changes: 4 additions & 0 deletions xcodeproject/xcodeproj/schemes.go
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,10 @@ func (p XcodeProj) isAutocreateSchemesEnabled() (bool, error) {

autoCreate, err := settings.Bool("IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded")
if err != nil {
if serialized.IsKeyNotFoundError(err) {
// By default 'Autocreate Schemes' is enabled
return true, nil
}
return false, err
}

Expand Down
28 changes: 28 additions & 0 deletions xcodeproject/xcodeproj/schemes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,24 @@ func Test_GivenNewlyGeneratedXcodeProject_WhenListingSchemes_ThenReturnsTheDefau
require.Equal(t, true, schemes[0].IsShared)
}

func Test_GivenNewlyGeneratedXcodeProjectWithWorkspaceSettings_WhenListingSchemes_ThenReturnsTheDefaultScheme(t *testing.T) {
xcodeProjectPath := testhelper.NewlyGeneratedXcodeProjectPath(t)

worksaceSettingsPth := filepath.Join(xcodeProjectPath, "project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings")
require.NoError(t, fileutil.WriteStringToFile(worksaceSettingsPth, workspaceSettingsWithBuildSystemTypeOriginalContent))

proj, err := Open(xcodeProjectPath)
require.NoError(t, err)

schemes, err := proj.Schemes()
require.NoError(t, err)

expectedSchemeName := "ios-sample"
require.Equal(t, 1, len(schemes))
require.Equal(t, expectedSchemeName, schemes[0].Name)
require.Equal(t, true, schemes[0].IsShared)
}

func Test_GivenNewlyGeneratedXcodeProjectWithUserDataGitignored_WhenListingSchemes_ThenReturnsTheDefaultScheme(t *testing.T) {
xcodeProjectPath := testhelper.NewlyGeneratedXcodeProjectPath(t)

Expand Down Expand Up @@ -90,6 +108,16 @@ const workspaceSettingsWithAutocreateSchemesDisabledContent = `<?xml version="1.
</plist>
`

const workspaceSettingsWithBuildSystemTypeOriginalContent = `<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildSystemType</key>
<string>Original</string>
</dict>
</plist>
`

const defaultSchemeContent = `<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1430"
Expand Down
4 changes: 4 additions & 0 deletions xcodeproject/xcworkspace/schemes.go
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,10 @@ func (w Workspace) isAutocreateSchemesEnabled() (bool, error) {

autoCreate, err := settings.Bool("IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded")
if err != nil {
if serialized.IsKeyNotFoundError(err) {
// By default 'Autocreate Schemes' is enabled
return true, nil
}
return false, err
}

Expand Down
32 changes: 32 additions & 0 deletions xcodeproject/xcworkspace/schemes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,28 @@ func Test_GivenNewlyGeneratedWorkspace_WhenListingSchemes_ThenReturnsTheDefaultS
require.Equal(t, true, actualSchemes[0].IsShared)
}

func Test_GivenNewlyGeneratedWorkspaceWithWorkspaceSettings_WhenListingSchemes_ThenReturnsTheDefaultScheme(t *testing.T) {
xcodeWorkspacePath := testhelper.NewlyGeneratedXcodeWorkspacePath(t)
workspace, err := Open(xcodeWorkspacePath)
require.NoError(t, err)

worksaceSettingsPth := filepath.Join(xcodeWorkspacePath, "xcshareddata/WorkspaceSettings.xcsettings")
require.NoError(t, fileutil.WriteStringToFile(worksaceSettingsPth, workspaceSettingsWithBuildSystemTypeOriginalContent))

schemesByContainer, err := workspace.Schemes()
require.NoError(t, err)

expectedSchemeName := "ios-sample"
var actualSchemes []xcscheme.Scheme
for _, schemes := range schemesByContainer {
actualSchemes = append(actualSchemes, schemes...)
}

require.Equal(t, 1, len(actualSchemes))
require.Equal(t, expectedSchemeName, actualSchemes[0].Name)
require.Equal(t, true, actualSchemes[0].IsShared)
}

func Test_GivenNewlyGeneratedWorkspaceWithAutocreateSchemesDisabled_WhenListingSchemes_ThenReturnsError(t *testing.T) {
xcodeWorkspacePath := testhelper.NewlyGeneratedXcodeWorkspacePath(t)

Expand Down Expand Up @@ -58,6 +80,16 @@ const workspaceSettingsWithAutocreateSchemesDisabledContent = `<?xml version="1.
</plist>
`

const workspaceSettingsWithBuildSystemTypeOriginalContent = `<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildSystemType</key>
<string>Original</string>
</dict>
</plist>
`

const workspaceSettingsWithAutocreateSchemesEnabledContent = `<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
Expand Down

0 comments on commit 2f71c9c

Please sign in to comment.