From 14fd1d3e4f9429f11625106c8de37920cb316a75 Mon Sep 17 00:00:00 2001 From: Dayton Bobbitt <12210193+dayton-bobbitt@users.noreply.github.com> Date: Sun, 12 Feb 2023 11:41:59 -0600 Subject: [PATCH 1/2] Write failing test case --- .../Project/XcodeProjTests.swift | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Tests/XcodeProjTests/Project/XcodeProjTests.swift b/Tests/XcodeProjTests/Project/XcodeProjTests.swift index 3c8507d3e..dabb8348d 100644 --- a/Tests/XcodeProjTests/Project/XcodeProjTests.swift +++ b/Tests/XcodeProjTests/Project/XcodeProjTests.swift @@ -24,6 +24,25 @@ final class XcodeProjIntegrationTests: XCTestCase { try testReadWriteProducesNoDiff(from: iosProjectPath, initModel: XcodeProj.init(path:)) } + + func test_write_includes_workspace_settings() throws { + // Define workspace settings that should be written + let workspaceSettings = WorkspaceSettings(buildSystem: .new, derivedDataLocationStyle: .default, autoCreateSchemes: false) + + testWrite(from: iosProjectPath, + initModel: { try? XcodeProj(path: $0) }, + modify: { project in + project.sharedData?.workspaceSettings = workspaceSettings + return project + }, + assertion: { + /** + * Expect that the workspace settings read from file are equal to the + * workspace settings we expected to write. + */ + XCTAssertEqual($1.sharedData?.workspaceSettings, workspaceSettings) + }) + } // MARK: - Private From 555621579ba61ca4711735866bc572da3b318aac Mon Sep 17 00:00:00 2001 From: Dayton Bobbitt <12210193+dayton-bobbitt@users.noreply.github.com> Date: Sun, 12 Feb 2023 11:42:23 -0600 Subject: [PATCH 2/2] Write WorkspaceSettings with XCSharedData --- Sources/XcodeProj/Project/WorkspaceSettings.swift | 6 ++++++ Sources/XcodeProj/Project/XCSharedData.swift | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/Sources/XcodeProj/Project/WorkspaceSettings.swift b/Sources/XcodeProj/Project/WorkspaceSettings.swift index 4cf306b57..c8f775735 100644 --- a/Sources/XcodeProj/Project/WorkspaceSettings.swift +++ b/Sources/XcodeProj/Project/WorkspaceSettings.swift @@ -153,3 +153,9 @@ public class WorkspaceSettings: Codable, Equatable, Writable { try path.write(data) } } + +extension WorkspaceSettings { + static func path(_ path: Path) -> Path { + path + "WorkspaceSettings.xcsettings" + } +} diff --git a/Sources/XcodeProj/Project/XCSharedData.swift b/Sources/XcodeProj/Project/XCSharedData.swift index ffc8ee4e7..9469970c9 100644 --- a/Sources/XcodeProj/Project/XCSharedData.swift +++ b/Sources/XcodeProj/Project/XCSharedData.swift @@ -63,6 +63,7 @@ public final class XCSharedData: Equatable, Writable { public func write(path: Path, override: Bool) throws { try writeSchemes(path: path, override: override) try writeBreakpoints(path: path, override: override) + try writeWorkspaceSettings(path: path, override: override) } func writeSchemes(path: Path, override: Bool) throws { @@ -91,6 +92,20 @@ public final class XCSharedData: Equatable, Writable { try debuggerPath.mkpath() try breakpoints.write(path: XCBreakpointList.path(debuggerPath), override: override) } + + func writeWorkspaceSettings(path: Path, override: Bool) throws { + /** + * We don't want to delete this path when `override` is `true` because + * that will delete everything in the folder, including schemes and breakpoints. + * Instead, just create the path if it doesn't exist and let the `write` method + * in `WorkspaceSettings` handle the override. + */ + if !path.exists { + try path.mkpath() + } + + try workspaceSettings?.write(path: WorkspaceSettings.path(path), override: override) + } } extension XCSharedData {