Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions Package.resolved

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import PackageDescription
let package = Package(
name: "XCRemoteCache",
platforms: [
.macOS(.v10_14),
.macOS(.v11),
],
products: [
.executable(name: "xcprebuild", targets: ["xcprebuild"]),
Expand All @@ -16,7 +16,7 @@ let package = Package(
.package(url: "https://github.com/marmelroy/Zip.git", from: "2.1.2"),
.package(url: "https://github.com/jpsim/Yams.git", from: "5.0.0"),
.package(url: "https://github.com/apple/swift-argument-parser", from: "0.0.1"),
.package(url: "https://github.com/tuist/XcodeProj.git", from: "8.9.0"),
.package(url: "https://github.com/tuist/XcodeProj.git", from: "9.12.0"),
.package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0"),
],
targets: [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@
// under the License.

import Foundation

typealias BuildSettings = [String: Any]
import XcodeProj

struct BuildSettingsIntegrateAppenderOption: OptionSet {
let rawValue: Int
Expand Down Expand Up @@ -78,8 +77,8 @@ class XcodeProjBuildSettingsIntegrateAppender: BuildSettingsIntegrateAppender {
setBuildSetting(buildSettings: &result, key: "LDPLUSPLUS", value: wrappers.ldplusplus.path )
}

let existingSwiftFlags = result["OTHER_SWIFT_FLAGS"] as? String
let existingCFlags = result["OTHER_CFLAGS"] as? String
let existingSwiftFlags = result["OTHER_SWIFT_FLAGS"]?.stringValue
let existingCFlags = result["OTHER_CFLAGS"]?.stringValue
var swiftFlags = XcodeSettingsSwiftFlags(settingValue: existingSwiftFlags)
var clangFlags = XcodeSettingsCFlags(settingValue: existingCFlags)

Expand All @@ -102,14 +101,14 @@ class XcodeProjBuildSettingsIntegrateAppender: BuildSettingsIntegrateAppender {
}

private func setBuildSetting(buildSettings: inout BuildSettings, key: String, value: String?, excludedValue: String = "") {
buildSettings[key] = value
buildSettings[key] = value.map { .string($0) }
guard value != nil else {
// no need to exclude as the value will
return
}
// Erase all overrides for a given sdk so a default toolchain is used
for skippedSDK in sdksExclude {
buildSettings["\(key)[sdk=\(skippedSDK)]"] = excludedValue
buildSettings["\(key)[sdk=\(skippedSDK)]"] = .string(excludedValue)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ struct XcodeProjIntegrate: Integrate {
}
}

try xcodeproj.write(path: outputPath)
try xcodeproj.writePBXProj(path: outputPath, override: true, outputSettings: PBXOutputSettings())

try lldbPatcher.enable()
}
Expand Down
2 changes: 1 addition & 1 deletion Sources/XCRemoteCache/Commands/Prepare/Prepare.swift
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ class Prepare: PrepareLogic {
/// Finds the best commit with generated artifacts to use
func prepare() throws -> PrepareResult {
do {
guard fileAccessor.fileExists(atPath: PhaseCacheModeController.xcodeSelectLink.path) else {
guard (try? FileManager.default.destinationOfSymbolicLink(atPath: PhaseCacheModeController.xcodeSelectLink.path)) != nil else {
throw PrepareError.missingXcodeSelectDirectory
}

Expand Down
9 changes: 8 additions & 1 deletion Sources/XCRemoteCache/Dependencies/CacheModeController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,14 @@ protocol CacheModeController {

class PhaseCacheModeController: CacheModeController {
/// Path to the symbolic link that changes if other xcode is selected with `xcode-select -s`
static let xcodeSelectLink: URL = URL(fileURLWithPath: "/var/db/xcode_select_link")
static var xcodeSelectLink: URL {
let legacyPath = URL(fileURLWithPath: "/var/db/xcode_select_link")
let modernPath = URL(fileURLWithPath: "/var/select/developer_dir")
if (try? FileManager.default.destinationOfSymbolicLink(atPath: modernPath.path)) != nil {
return modernPath
}
return legacyPath
}
private let mergeCommitFile: URL
private let modeMarker: URL
private let forceCached: Bool
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
// under the License.

@testable import XCRemoteCache
import XcodeProj
import XCTest

class XcodeProjBuildSettingsIntegrateAppenderTests: XCTestCase {
Expand Down Expand Up @@ -53,7 +54,7 @@ class XcodeProjBuildSettingsIntegrateAppenderTests: XCTestCase {
options: []
)
let result = appender.appendToBuildSettings(buildSettings: buildSettings, wrappers: binaries)
let resultURL = try XCTUnwrap(result["XCRC_FAKE_SRCROOT"] as? String)
let resultURL = try XCTUnwrap(result["XCRC_FAKE_SRCROOT"]?.stringValue)

XCTAssertEqual(resultURL, fakeRootURL.path)
}
Expand All @@ -69,7 +70,7 @@ class XcodeProjBuildSettingsIntegrateAppenderTests: XCTestCase {
options: []
)
let result = appender.appendToBuildSettings(buildSettings: buildSettings, wrappers: binaries)
let resultURL: String = try XCTUnwrap(result["XCRC_FAKE_SRCROOT"] as? String)
let resultURL: String = try XCTUnwrap(result["XCRC_FAKE_SRCROOT"]?.stringValue)

XCTAssertEqual(resultURL, fakeRootURL.path)
}
Expand All @@ -85,7 +86,7 @@ class XcodeProjBuildSettingsIntegrateAppenderTests: XCTestCase {
options: []
)
let result = appender.appendToBuildSettings(buildSettings: buildSettings, wrappers: binaries)
let ldPlusPlus: String = try XCTUnwrap(result["LDPLUSPLUS"] as? String)
let ldPlusPlus: String = try XCTUnwrap(result["LDPLUSPLUS"]?.stringValue)

XCTAssertEqual(ldPlusPlus, binaries.ldplusplus.path)
}
Expand All @@ -100,7 +101,7 @@ class XcodeProjBuildSettingsIntegrateAppenderTests: XCTestCase {
options: []
)
let result = appender.appendToBuildSettings(buildSettings: buildSettings, wrappers: binaries)
let ldPlusPlusWatchOS: String = try XCTUnwrap(result["LDPLUSPLUS[sdk=watchOS*]"] as? String)
let ldPlusPlusWatchOS: String = try XCTUnwrap(result["LDPLUSPLUS[sdk=watchOS*]"]?.stringValue)

XCTAssertEqual(ldPlusPlusWatchOS, "")
}
Expand All @@ -115,7 +116,7 @@ class XcodeProjBuildSettingsIntegrateAppenderTests: XCTestCase {
options: []
)
let result = appender.appendToBuildSettings(buildSettings: buildSettings, wrappers: binaries)
let libtoolWatchOS: String = try XCTUnwrap(result["LIBTOOL[sdk=watchOS*]"] as? String)
let libtoolWatchOS: String = try XCTUnwrap(result["LIBTOOL[sdk=watchOS*]"]?.stringValue)

XCTAssertEqual(libtoolWatchOS, "libtool")
}
Expand All @@ -130,8 +131,8 @@ class XcodeProjBuildSettingsIntegrateAppenderTests: XCTestCase {
options: []
)
let result = appender.appendToBuildSettings(buildSettings: buildSettings, wrappers: binaries)
let ldPlusPlusWatchOS: String = try XCTUnwrap(result["LDPLUSPLUS[sdk=watchOS*]"] as? String)
let ldPlusPlusWatchSimulator: String = try XCTUnwrap(result["LDPLUSPLUS[sdk=watchsimulator*]"] as? String)
let ldPlusPlusWatchOS: String = try XCTUnwrap(result["LDPLUSPLUS[sdk=watchOS*]"]?.stringValue)
let ldPlusPlusWatchSimulator: String = try XCTUnwrap(result["LDPLUSPLUS[sdk=watchsimulator*]"]?.stringValue)

XCTAssertEqual(ldPlusPlusWatchOS, "")
XCTAssertEqual(ldPlusPlusWatchSimulator, "")
Expand All @@ -147,8 +148,8 @@ class XcodeProjBuildSettingsIntegrateAppenderTests: XCTestCase {
options: []
)
let result = appender.appendToBuildSettings(buildSettings: buildSettings, wrappers: binaries)
let disabledWatchOS: String = try XCTUnwrap(result["XCRC_DISABLED[sdk=watchOS*]"] as? String)
let disabledWatchSimulator: String = try XCTUnwrap(result["XCRC_DISABLED[sdk=watchsimulator*]"] as? String)
let disabledWatchOS: String = try XCTUnwrap(result["XCRC_DISABLED[sdk=watchOS*]"]?.stringValue)
let disabledWatchSimulator: String = try XCTUnwrap(result["XCRC_DISABLED[sdk=watchsimulator*]"]?.stringValue)

XCTAssertEqual(disabledWatchOS, "YES")
XCTAssertEqual(disabledWatchSimulator, "YES")
Expand All @@ -164,7 +165,7 @@ class XcodeProjBuildSettingsIntegrateAppenderTests: XCTestCase {
options: [.disableSwiftDriverIntegration]
)
let result = appender.appendToBuildSettings(buildSettings: buildSettings, wrappers: binaries)
let useSwiftIntegrationDriver: String = try XCTUnwrap(result["SWIFT_USE_INTEGRATED_DRIVER"] as? String)
let useSwiftIntegrationDriver: String = try XCTUnwrap(result["SWIFT_USE_INTEGRATED_DRIVER"]?.stringValue)

XCTAssertEqual(useSwiftIntegrationDriver, "NO")
}
Expand All @@ -179,7 +180,7 @@ class XcodeProjBuildSettingsIntegrateAppenderTests: XCTestCase {
options: []
)
let result = appender.appendToBuildSettings(buildSettings: buildSettings, wrappers: binaries)
let useSwiftIntegrationDriver: String? = result["SWIFT_USE_INTEGRATED_DRIVER"] as? String
let useSwiftIntegrationDriver: String? = result["SWIFT_USE_INTEGRATED_DRIVER"]?.stringValue

XCTAssertNil(useSwiftIntegrationDriver)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ class PhaseCacheModeControllerTests: FileXCTestCase {
try modeController.enable(allowedInputFiles: [], dependencies: [])

let allDeps = try dependenciesWriter.wroteDependencies.unwrap().values.flatMap { $0 }
XCTAssertTrue(allDeps.contains("/var/db/xcode_select_link"))
XCTAssertTrue(allDeps.contains(PhaseCacheModeController.xcodeSelectLink.path))
}

func testDependsOnXcodeSelectLinkWhenDisabled() throws {
Expand All @@ -122,7 +122,7 @@ class PhaseCacheModeControllerTests: FileXCTestCase {
try modeController.disable()

let allDeps = try dependenciesWriter.wroteDependencies.unwrap().values.flatMap { $0 }
XCTAssertTrue(allDeps.contains("/var/db/xcode_select_link"))
XCTAssertTrue(allDeps.contains(PhaseCacheModeController.xcodeSelectLink.path))
}

func testForcedCachedPhaseFailToDisable() throws {
Expand Down