ttypic / swift-klib-plugin

Gradle Plugin for injecting Swift code into Kotlin Multiplatform Mobile shared module
MIT License
159 stars 8 forks source link

Unable to publish multiplatform library for iOS #9

Open lammertw opened 1 year ago

lammertw commented 1 year ago

I'm trying to build a multiplatform library that uses CryptoKit. I've implemented code similar to the KCrypto example. When building a framework for iOS or when running a test on the iOS simulator, everything works fine. However, since I'm building a library, I want to publish it. I've added the maven-publish plugin to my build.gradle.kts file.

Now when I run publishIosSimulatorArm64PublicationToMavenLocal (or any other iOS publish task) it fail because it cannot find the types from the swift file.

In my build.gradle.kt:

swiftklib {
    create("KCrypto") {
        path = file("native/KCrypto")
        packageName("com.mylib.objclibs.kcrypto")
    }
}

native/KCrypto/PublicKeyEncoder.swift:

import CryptoKit
import Foundation

@objc public protocol PublicKeyEncoder {
    @objc func encodePublicKey(decompressedKeyData: Data) -> Data
}

In a iOS specific Kotlin (located in src/iosMain/kotlin:

import com.mylib.objclibs.kcrypto.*

Generates the following error:

e: file:///Users/[path]/src/iosMain/kotlin/com/mylib/ObjcDataCipher.kt:7:26 Unresolved reference: objclibs

As mentioned, this error only occurs when publishing. The same code runs fine in other scenarios.

kalinjul commented 7 months ago

I'm currently working on a library that needs publishing as well and I'm not having the issue you mentioned. Also Using CryptoKit: https://github.com/kalinjul/kotlin-multiplatform-oidc/tree/main/oidc-core

That said, your code looks just like mine...