Document that macOS binaries are now runnable ^KT-83873 ^KT-85502
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/apple/SwiftPMImportDynamicLinkageTests.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/apple/SwiftPMImportDynamicLinkageTests.kt index 89ed351..34260f1 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/apple/SwiftPMImportDynamicLinkageTests.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/apple/SwiftPMImportDynamicLinkageTests.kt
@@ -338,6 +338,69 @@ } } + @GradleTest + fun `KT-85502 - macOS executable are runnable`(version: GradleVersion) { + project("empty", version) { + val packageDependency = projectPath.resolve("PackageDependency").also { it.createDirectories() }.toFile() + runProcess(listOf("/usr/bin/swift", "package", "init", "--type", "library"), packageDependency) + val swiftClassName = "LocalHelper" + + packageDependency.resolve("Sources/PackageDependency/PackageDependency.swift").writeText( + """ + import Foundation + @objc public class ${swiftClassName}: NSObject { + @objc public static func greeting(_ arg: String) { + print("Hello from \(arg)") + } + } + """.trimIndent() + ) + + plugins { + kotlin("multiplatform") + } + buildScriptInjection { + project.applyMultiplatform { + macosArm64 { + binaries { + executable { + entryPoint = "main" + } + } + } + sourceSets.commonMain.get().compileSource( + """ + import kotlinx.cinterop.ExperimentalForeignApi + import swiftPMImport.empty.${swiftClassName} + + @OptIn(ExperimentalForeignApi::class) + fun main() { + ${swiftClassName}.greeting("Kotlin") + } + """.trimIndent() + ) + swiftPMDependencies { + localSwiftPackage( + directory = project.layout.projectDirectory.dir("PackageDependency"), + products = listOf("PackageDependency") + ) + } + } + } + + build("runDebugExecutableMacosArm64") { + assertOutputContains("Hello from Kotlin") + } + + // Check that executable is also self-sufficient and runs without dyld env hacks + val executablePath = projectPath.resolve("build/bin/macosArm64/debugExecutable/empty.kexe") + runProcess(listOf(executablePath.pathString), projectPath.toFile()).assertProcessRunResult { + assertTrue(isSuccessful) + assertEquals("Hello from Kotlin\n", output) + } + } + } + private fun checkBinariesLinkage( appPath: Path, symbolsFilter: List<String>, @@ -403,4 +466,4 @@ ) } -} \ No newline at end of file +}