KT-66516 Add swift export framework test
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/SwiftExportIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/SwiftExportIT.kt
index a281b97..ad0fdb6 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/SwiftExportIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/SwiftExportIT.kt
@@ -47,7 +47,7 @@
assertTasksExecuted(":shared:linkSwiftExportBinaryDebugStaticIosArm64")
assertTasksExecuted(":shared:iosArm64DebugGenerateSPMPackage")
assertTasksExecuted(":shared:iosArm64DebugBuildSPMPackage")
- assertTasksExecuted(":shared:mergeIosDebugSwiftExportLibraries")
+ assertTasksExecuted(":shared:mergeIosDebugEmbedSwiftExportLibraries")
assertTasksExecuted(":shared:copyDebugSPMIntermediates")
assertTasksSkipped(":shared:embedAndSignAppleFrameworkForXcode")
@@ -57,6 +57,20 @@
assertDirectoryInProjectExists("shared/build/SPMPackage/iosArm64/Debug")
assertDirectoryInProjectExists("shared/build/SwiftExport/iosArm64/Debug")
}
+
+ // Check up-to-dateness
+ build(
+ ":shared:embedAndSignAppleFrameworkForXcode",
+ environmentVariables = swiftExportEmbedAndSignEnvVariables(testBuildDir)
+ ) {
+ assertTasksUpToDate(":shared:iosArm64DebugSwiftExport")
+ assertTasksUpToDate(":shared:iosArm64MainKlibrary")
+ assertTasksUpToDate(":shared:compileSwiftExportMainKotlinIosArm64")
+ assertTasksUpToDate(":shared:linkSwiftExportBinaryDebugStaticIosArm64")
+ assertTasksUpToDate(":shared:iosArm64DebugGenerateSPMPackage")
+ assertTasksUpToDate(":shared:iosArm64DebugBuildSPMPackage")
+ assertTasksUpToDate(":shared:mergeIosDebugEmbedSwiftExportLibraries")
+ }
}
}
@@ -267,6 +281,48 @@
assert(x64Compilation.isSuccessful)
}
}
+
+ @DisplayName("creates a valid .xcframework with Swift Export")
+ @GradleTest
+ fun testSwiftExportXCFrameworkTask(
+ gradleVersion: GradleVersion,
+ ) {
+ nativeProject(
+ "simpleSwiftExport",
+ gradleVersion,
+ ) {
+ projectPath.enableSwiftExport()
+
+ val frameworkPath = "shared/build/SwiftExportFramework/Debug/Shared.xcframework"
+
+ build(
+ ":shared:assembleDebugSwiftExportFramework",
+ buildOptions = defaultBuildOptions.copy(
+ configurationCache = true,
+ )
+ ) {
+ assertDirectoryInProjectExists(frameworkPath)
+ }
+
+ projectPath
+ .resolve(frameworkPath)
+ .copyToRecursively(projectPath.resolve("FrameworkConsumer/Shared.xcframework"), followLinks = false)
+
+ projectPath
+ .resolve("shared/build")
+ .deleteRecursively()
+
+ val consumerPackage = projectPath.resolve("FrameworkConsumer")
+
+ xcodebuild(
+ workingDir = consumerPackage,
+ scheme = "FrameworkConsumer",
+ configuration = "Debug",
+ sdk = "iphonesimulator",
+ destination = "generic/platform=iOS Simulator"
+ )
+ }
+ }
}
@OptIn(EnvironmentalVariablesOverride::class)
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simpleSwiftExport/FrameworkConsumer/Package.swift b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simpleSwiftExport/FrameworkConsumer/Package.swift
new file mode 100644
index 0000000..bc32d71
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simpleSwiftExport/FrameworkConsumer/Package.swift
@@ -0,0 +1,17 @@
+// swift-tools-version: 5.10
+// The swift-tools-version declares the minimum version of Swift required to build this package.
+
+import PackageDescription
+
+let package = Package(
+ name: "FrameworkConsumer",
+ products: [
+ .library(
+ name: "FrameworkConsumer",
+ targets: ["FrameworkConsumer"]),
+ ],
+ targets: [
+ .target(name: "FrameworkConsumer", dependencies: ["Shared"]),
+ .binaryTarget(name: "Shared", path: "Shared.xcframework")
+ ]
+)
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simpleSwiftExport/FrameworkConsumer/Sources/FrameworkConsumer/FrameworkConsumer.swift b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simpleSwiftExport/FrameworkConsumer/Sources/FrameworkConsumer/FrameworkConsumer.swift
new file mode 100644
index 0000000..91ffc32
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simpleSwiftExport/FrameworkConsumer/Sources/FrameworkConsumer/FrameworkConsumer.swift
@@ -0,0 +1,12 @@
+// The Swift Programming Language
+// https://docs.swift.org/swift-book
+
+import Shared
+
+class Consumer {
+
+ func consume() {
+ _ = com.github.jetbrains.swiftexport.foo()
+ _ = com.github.jetbrains.swiftexport.bar()
+ }
+}