如何使用Kotlin/native从另一个框架生成.框架



我对KMP和iOS框架有一些依赖性问题。

以下是一些上下文:我有2个KMP模块:

  • API模块:只定义接口
  • 一个经典的lib使用API模块作为注入

我还有2个android项目和2个iOS项目:

  • 安卓和iOS应用程序(使用KMP ClassicLib(
  • 实现API模块的Android和iOS库

在Android上,我有以下内容:

// KMP API project
public interface Foo
// KMP libA project
public class Bar {
fun doSomething(foo: Foo)
}
// ANDROID: libB project
import API
public class FooImpl: Foo { }
// ANDROID app
import libA
import libB
var foo = FooImpl()
var bar = Bar()
bar.doSomething(foo) // <----- Everything is fine here

但在iOS上,我有这个:

// iOS app
import libA
import libB
var foo = FooImpl()
var bar = Bar()
bar.doSomething(foo) // <----- Error here : FooImpl is of type APIFoo but here LibAAPIFoo is excpected 

事实上,当我查看生成的标题时,我有以下内容:

// KMP API.h
@protocol APIFoo
@end;
// KMP libA.h
@protocol LibAKAFoo // <----- here we have a redefinition of the protocol.
@end;
@interface Bar
- (void)doSomething:(KMPKAFoo)foo;  
@ends;

我本以为会有更像的东西

// KMP API.h
@protocol APIFoo
@end;
// KMP libA.h
#include <API/API.h> // <----- import the API
@interface Bar
- (void)doSomething:(APIFoo)foo; // <----- use it
@ends;

我的build.gradle中是否缺少一个特殊的配置?我曾尝试在依赖项定义中使用compileOnly,但它没有效果,并且具有与implementation相同的行为

val commonMain by getting {
dependencies {
compileOnly("com.poc.sample:KMPAPI:0.0.1")
}

您不能创建多个Kotlin iOS框架并在同一项目中可互换使用它们。当Kotlin编译器创建iOS框架时;"自己的世界";,因为它包含了您所需要的一切(依赖项等(。这是一个大的二进制。

总结是,您想要的配置是不可能的。您可以在同一项目中使用多个Kotlin iOS框架,但它们需要完全独立。他们将无法相互交流。

相关内容

  • 没有找到相关文章

最新更新