From 0a648934895e4c7eb01c67f65be4845404299630 Mon Sep 17 00:00:00 2001 From: Bartosz Polaczyk Date: Mon, 14 Nov 2022 06:28:10 +0100 Subject: [PATCH 1/4] Bundle optional private.swiftinterface --- .../XCRemoteCache/Artifacts/SwiftmoduleFileExtension.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Sources/XCRemoteCache/Artifacts/SwiftmoduleFileExtension.swift b/Sources/XCRemoteCache/Artifacts/SwiftmoduleFileExtension.swift index 85ff2db..512b0ca 100644 --- a/Sources/XCRemoteCache/Artifacts/SwiftmoduleFileExtension.swift +++ b/Sources/XCRemoteCache/Artifacts/SwiftmoduleFileExtension.swift @@ -31,6 +31,8 @@ enum SwiftmoduleFileExtension: String { case swiftdoc case swiftsourceinfo case swiftinterface + case privateSwiftinterface + case abiJson } extension SwiftmoduleFileExtension { @@ -40,5 +42,7 @@ extension SwiftmoduleFileExtension { .swiftdoc: .required, .swiftsourceinfo: .optional, .swiftinterface: .optional, + .privateSwiftinterface: .optional, + .abiJson: .optional, ] } From 2fa1f4e92723cd5d7f603499e538c9b5d4c3b872 Mon Sep 17 00:00:00 2001 From: Bartosz Polaczyk Date: Mon, 14 Nov 2022 06:34:45 +0100 Subject: [PATCH 2/4] Update SwiftmoduleFileExtension.swift --- .../XCRemoteCache/Artifacts/SwiftmoduleFileExtension.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/XCRemoteCache/Artifacts/SwiftmoduleFileExtension.swift b/Sources/XCRemoteCache/Artifacts/SwiftmoduleFileExtension.swift index 512b0ca..4e36a60 100644 --- a/Sources/XCRemoteCache/Artifacts/SwiftmoduleFileExtension.swift +++ b/Sources/XCRemoteCache/Artifacts/SwiftmoduleFileExtension.swift @@ -31,8 +31,8 @@ enum SwiftmoduleFileExtension: String { case swiftdoc case swiftsourceinfo case swiftinterface - case privateSwiftinterface - case abiJson + case privateSwiftinterface = "private.swiftinterface" + case abiJson = "abi.json" } extension SwiftmoduleFileExtension { From 75fdd27a5f2d97fdbb68e91f755b89a6d56e0413 Mon Sep 17 00:00:00 2001 From: Bartosz Polaczyk Date: Mon, 14 Nov 2022 20:00:18 -0800 Subject: [PATCH 3/4] Add unit tests for SPI changes in Xcode14 --- .../ArtifactSwiftProductsBuilderImplTests.swift | 13 +++++++++++++ .../Artifacts/BuildArtifactCreatorTests.swift | 10 ++++++++++ Tests/XCRemoteCacheTests/Commands/SwiftcTests.swift | 10 ++++++++++ 3 files changed, 33 insertions(+) diff --git a/Tests/XCRemoteCacheTests/Artifacts/ArtifactSwiftProductsBuilderImplTests.swift b/Tests/XCRemoteCacheTests/Artifacts/ArtifactSwiftProductsBuilderImplTests.swift index 2eeb86e..92c6408 100644 --- a/Tests/XCRemoteCacheTests/Artifacts/ArtifactSwiftProductsBuilderImplTests.swift +++ b/Tests/XCRemoteCacheTests/Artifacts/ArtifactSwiftProductsBuilderImplTests.swift @@ -28,6 +28,8 @@ class ArtifactSwiftProductsBuilderImplTests: FileXCTestCase { private var swiftmoduleDocFile: URL! private var swiftmoduleSourceInfoFile: URL! private var swiftmoduleInterfaceFile: URL! + private var privateSwiftmoduleInterfaceFile: URL! + private var abiJsonFile: URL! private var workingDir: URL! private var builder: ArtifactSwiftProductsBuilderImpl! @@ -39,6 +41,9 @@ class ArtifactSwiftProductsBuilderImplTests: FileXCTestCase { swiftmoduleDocFile = moduleDir.appendingPathComponent("MyModule.swiftdoc") swiftmoduleSourceInfoFile = moduleDir.appendingPathComponent("MyModule.swiftsourceinfo") swiftmoduleInterfaceFile = moduleDir.appendingPathComponent("MyModule.swiftinterface") + privateSwiftmoduleInterfaceFile = moduleDir.appendingPathComponent("MyModule.private.swiftinterface") + abiJsonFile = moduleDir.appendingPathComponent("MyModule.abi.json") + workingDir = rootDir.appendingPathComponent("working") builder = ArtifactSwiftProductsBuilderImpl( workingDir: workingDir, @@ -98,6 +103,8 @@ class ArtifactSwiftProductsBuilderImplTests: FileXCTestCase { try fileManager.spt_createEmptyFile(swiftmoduleDocFile) try fileManager.spt_createEmptyFile(swiftmoduleSourceInfoFile) try fileManager.spt_createEmptyFile(swiftmoduleInterfaceFile) + try fileManager.spt_createEmptyFile(privateSwiftmoduleInterfaceFile) + try fileManager.spt_createEmptyFile(abiJsonFile) let builderSwiftmoduleDir = builder .buildingArtifactSwiftModulesLocation() @@ -110,6 +117,10 @@ class ArtifactSwiftProductsBuilderImplTests: FileXCTestCase { builderSwiftmoduleDir.appendingPathComponent("MyModule.swiftsourceinfo") let expectedBuildedSwiftInterfaceFile = builderSwiftmoduleDir.appendingPathComponent("MyModule.swiftinterface") + let expectedPrivateSwiftmoduleInterfaceFile = + builderSwiftmoduleDir.appendingPathComponent("MyModule.private.swiftinterface") + let expectedAbiJsonFile = + builderSwiftmoduleDir.appendingPathComponent("MyModule.abi.json") try builder.includeModuleDefinitionsToTheArtifact(arch: "arm64", moduleURL: swiftmoduleFile) @@ -117,6 +128,8 @@ class ArtifactSwiftProductsBuilderImplTests: FileXCTestCase { XCTAssertTrue(fileManager.fileExists(atPath: expectedBuildedSwiftmoduledocFile.path)) XCTAssertTrue(fileManager.fileExists(atPath: expectedBuildedSwiftSourceInfoFile.path)) XCTAssertTrue(fileManager.fileExists(atPath: expectedBuildedSwiftInterfaceFile.path)) + XCTAssertTrue(fileManager.fileExists(atPath: expectedPrivateSwiftmoduleInterfaceFile.path)) + XCTAssertTrue(fileManager.fileExists(atPath: expectedAbiJsonFile.path)) } func testFailsIncludingWhenMissingRequiredSwiftmoduleFiles() throws { diff --git a/Tests/XCRemoteCacheTests/Artifacts/BuildArtifactCreatorTests.swift b/Tests/XCRemoteCacheTests/Artifacts/BuildArtifactCreatorTests.swift index 4809da5..ea49d50 100644 --- a/Tests/XCRemoteCacheTests/Artifacts/BuildArtifactCreatorTests.swift +++ b/Tests/XCRemoteCacheTests/Artifacts/BuildArtifactCreatorTests.swift @@ -32,6 +32,8 @@ class BuildArtifactCreatorTests: FileXCTestCase { private var swiftdocURL: URL! private var swiftSourceInfoURL: URL! private var swiftInterfaceURL: URL! + private var privateSwiftInterfaceURL: URL! + private var abiJsonURL: URL! private var executablePath: String! private var executableURL: URL! private var creator: BuildArtifactCreator! @@ -53,6 +55,10 @@ class BuildArtifactCreatorTests: FileXCTestCase { .appendingPathComponent("Target.swiftsourceinfo") swiftInterfaceURL = workDirectory.appendingPathComponent("Objects-normal") .appendingPathComponent("Target.swiftinterface") + privateSwiftInterfaceURL = workDirectory.appendingPathComponent("Objects-normal") + .appendingPathComponent("Target.private.swiftinterface") + abiJsonURL = workDirectory.appendingPathComponent("Objects-normal") + .appendingPathComponent("Target.abi.json") executablePath = "libTarget.a" executableURL = buildDir.appendingPathComponent(executablePath) dSYM = executableURL.deletingPathExtension().appendingPathExtension(".dSYM") @@ -124,6 +130,8 @@ class BuildArtifactCreatorTests: FileXCTestCase { try fileManager.spt_createEmptyFile(swiftdocURL) try fileManager.spt_createEmptyFile(swiftSourceInfoURL) try fileManager.spt_createEmptyFile(swiftInterfaceURL) + try fileManager.spt_createEmptyFile(privateSwiftInterfaceURL) + try fileManager.spt_createEmptyFile(abiJsonURL) try creator.includeModuleDefinitionsToTheArtifact(arch: "arch", moduleURL: swiftmoduleURL) let artifact = try creator.createArtifact(artifactKey: "key", meta: sampleMeta) @@ -138,6 +146,8 @@ class BuildArtifactCreatorTests: FileXCTestCase { unzippedURL.appendingPathComponent("swiftmodule/arch/Target.swiftdoc"), unzippedURL.appendingPathComponent("swiftmodule/arch/Target.swiftsourceinfo"), unzippedURL.appendingPathComponent("swiftmodule/arch/Target.swiftinterface"), + unzippedURL.appendingPathComponent("swiftmodule/arch/Target.private.swiftinterface"), + unzippedURL.appendingPathComponent("swiftmodule/arch/Target.abi.json"), ]) } diff --git a/Tests/XCRemoteCacheTests/Commands/SwiftcTests.swift b/Tests/XCRemoteCacheTests/Commands/SwiftcTests.swift index e5f23cc..99a32e8 100644 --- a/Tests/XCRemoteCacheTests/Commands/SwiftcTests.swift +++ b/Tests/XCRemoteCacheTests/Commands/SwiftcTests.swift @@ -285,6 +285,12 @@ class SwiftcTests: FileXCTestCase { let artifactSwiftInterfaceInfo = URL( fileURLWithPath: "/cachedArtifact/swiftmodule/archTest/Target.swiftinterface" ) + let artifactPrivateSwiftInterfaceInfo = URL( + fileURLWithPath: "/cachedArtifact/swiftmodule/archTest/Target.private.swiftinterface" + ) + let artifactAbiJsonInfo = URL( + fileURLWithPath: "/cachedArtifact/swiftmodule/archTest/Target.abi.json" + ) artifactOrganizer = ArtifactOrganizerFake(artifactRoot: artifactRoot) let swiftc = Swiftc( @@ -309,6 +315,8 @@ class SwiftcTests: FileXCTestCase { let swiftDocURL = swiftModuleFiles.0[.swiftdoc] let swiftSourceInfoURL = swiftModuleFiles.0[.swiftsourceinfo] let swiftInterfaceURL = swiftModuleFiles.0[.swiftinterface] + let privateSwiftInterfaceURL = swiftModuleFiles.0[.privateSwiftinterface] + let abiJsonURL = swiftModuleFiles.0[.abiJson] let swiftHeaderURL = swiftModuleFiles.1 XCTAssertEqual(swiftModuleURL, artifactSwiftmodule) @@ -316,6 +324,8 @@ class SwiftcTests: FileXCTestCase { XCTAssertEqual(swiftSourceInfoURL, artifactSwiftSourceInfo) XCTAssertEqual(swiftHeaderURL, artifactObjCHeader) XCTAssertEqual(swiftInterfaceURL, artifactSwiftInterfaceInfo) + XCTAssertEqual(privateSwiftInterfaceURL, artifactPrivateSwiftInterfaceInfo) + XCTAssertEqual(abiJsonURL, artifactAbiJsonInfo) } From 73d7a13246905cfdda9a5fcc69f9c4f2157387c0 Mon Sep 17 00:00:00 2001 From: Bartosz Polaczyk Date: Mon, 14 Nov 2022 20:27:45 -0800 Subject: [PATCH 4/4] Fix linter issue --- .../Commands/SwiftcTests.swift | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/Tests/XCRemoteCacheTests/Commands/SwiftcTests.swift b/Tests/XCRemoteCacheTests/Commands/SwiftcTests.swift index 99a32e8..5df313f 100644 --- a/Tests/XCRemoteCacheTests/Commands/SwiftcTests.swift +++ b/Tests/XCRemoteCacheTests/Commands/SwiftcTests.swift @@ -311,21 +311,14 @@ class SwiftcTests: FileXCTestCase { _ = try swiftc.mockCompilation() let swiftModuleFiles = try productsGenerator.generated.first.unwrap() - let swiftModuleURL = swiftModuleFiles.0[.swiftmodule] - let swiftDocURL = swiftModuleFiles.0[.swiftdoc] - let swiftSourceInfoURL = swiftModuleFiles.0[.swiftsourceinfo] - let swiftInterfaceURL = swiftModuleFiles.0[.swiftinterface] - let privateSwiftInterfaceURL = swiftModuleFiles.0[.privateSwiftinterface] - let abiJsonURL = swiftModuleFiles.0[.abiJson] - let swiftHeaderURL = swiftModuleFiles.1 - XCTAssertEqual(swiftModuleURL, artifactSwiftmodule) - XCTAssertEqual(swiftDocURL, artifactSwiftdoc) - XCTAssertEqual(swiftSourceInfoURL, artifactSwiftSourceInfo) - XCTAssertEqual(swiftHeaderURL, artifactObjCHeader) - XCTAssertEqual(swiftInterfaceURL, artifactSwiftInterfaceInfo) - XCTAssertEqual(privateSwiftInterfaceURL, artifactPrivateSwiftInterfaceInfo) - XCTAssertEqual(abiJsonURL, artifactAbiJsonInfo) + XCTAssertEqual(swiftModuleFiles.0[.swiftmodule], artifactSwiftmodule) + XCTAssertEqual(swiftModuleFiles.0[.swiftdoc], artifactSwiftdoc) + XCTAssertEqual(swiftModuleFiles.0[.swiftsourceinfo], artifactSwiftSourceInfo) + XCTAssertEqual(swiftModuleFiles.0[.swiftinterface], artifactSwiftInterfaceInfo) + XCTAssertEqual(swiftModuleFiles.0[.privateSwiftinterface], artifactPrivateSwiftInterfaceInfo) + XCTAssertEqual(swiftModuleFiles.0[.abiJson], artifactAbiJsonInfo) + XCTAssertEqual(swiftModuleFiles.1, artifactObjCHeader) }