https://kotlinlang.org logo
#kotlin-native
Title
# kotlin-native
m

MJegorovas

11/09/2023, 11:38 AM
Anybody tried to cinterop on macos? My
buildMacosx
task outputs to wrong directory so I get error
/Users/developer/AndroidStudioProjects/SwiftLibSample/CryptoKitWrapper/build/Release-macosx/include doesn't exist
More in 🧵
Relevant build.gradle.kts
Copy code
listOf(iosArm64(), iosSimulatorArm64(), macosArm64()).forEach {
        with (it) {
            val platform = when (name) {
                "iosArm64" -> "iphoneos"
                "iosSimulatorArm64" -> "iphonesimulator"
                "macosArm64" -> "macosx"
                else -> error("Unsupported target $name")
            }
            compilations.getByName("main") {
                cinterops.create("CryptoKitWrapper") {
                    val interopTask = tasks[interopProcessingTaskName]
                    interopTask.dependsOn(":CryptoKitWrapper:build${platform.capitalize()}")
                    includeDirs.headerFilterOnly("$rootDir/CryptoKitWrapper/build/Release-$platform/include")
                }
            }
        }
    }
CryptoKitWrapperbuildMacosx task
Copy code
listOf("iphoneos", "iphonesimulator", "macosx").forEach { sdk ->
    tasks.create<Exec>("build${sdk.capitalize()}") {
        group = "build"

        commandLine(
            "xcodebuild",
            "-project", "CryptoKitWrapper.xcodeproj",
            "-target", "CryptoKitWrapper",
            "-sdk", sdk
        )
        workingDir(projectDir)

        inputs.files(
            fileTree("$projectDir/CryptoKitWrapper.xcodeproj") { exclude("**/xcuserdata") },
            fileTree("$projectDir/CryptoKitWrapper")
        )
        outputs.files(
            fileTree("$projectDir/build/Release-${sdk}")
        )
    }
}

tasks.create<Delete>("clean") {
    group = "build"

    delete("$projectDir/build")
}
def file
Copy code
package = swift.cryptoKit
language = Objective-C

headers = CryptoKitWrapper/CryptoKitWrapper-Swift.h
headerFilter = CryptoKitWrapper/*

staticLibraries = libCryptoKitWrapper.a
libraryPaths.ios_arm64 = ../CryptoKitWrapper/build/Release-iphoneos
libraryPaths.ios_simulator_arm64 = ../CryptoKitWrapper/build/Release-iphonesimulator
libraryPaths.osx = ../CryptoKitWrapper/build/Release-macosx

linkerOpts = -L/usr/lib/swift
linkerOpts.ios_simulator_arm64 = -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphonesimulator/
linkerOpts.ios_arm64 = -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/
linkerOpts.osx = -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx/
but for some reason it outputs to
Release
folder instead of
Release-macosx
Here's sample if anybody wants to look at it https://github.com/MJegorovas/SwiftLibSample