Cit*_*tut 4 kotlin kotlin-multiplatform kmm
假设我有一个包,即共享包,与两个 KMM 项目共享:KMM 项目 A 和 KMM 项目 B。
因此,我们有共享包 -> KMM 项目 A 和共享包 -> KMM 项目 B。
现在我想在我的 iOS 应用程序中使用 KMM 项目 A 和 KMM 项目 B。这是如何运作的?共享包是否与两个框架捆绑在一起(即我两次包含相同的依赖项?)。此外,共享包是否需要是 KMM 项目才能允许 KMM 项目 A 和 B 生成相关的 iOS 框架?或者它可以是一个纯 Kotlin 项目吗?
这是一个图表,可以对我试图理解的情况提供更多解释。
您需要一个依赖于 KMM 项目 A 和 KMM 项目 B 的包装器“unbrella”模块,并让它生成您的 Xcode 框架。
从技术上讲,您可以生成 2 个框架,KMM 项目 A 和 B 各一个,但它们都将拥有一份“共享包”副本,以及 Kotlin 标准库的相关部分,最重要的是,这 2 个框架将在二进制级别上不同,因此它们无法通信。
我的意思是,如果“共享包”有一个data class Foo,并且您通过调用“KMM 项目 A”得到它,比如说fun makeAFoo():Foo,并且您在“KMM 项目 B”中有一个函数,定义为fun takeAFoo(foo:Foo),Foo您的实例get frommakeAFoo()不能传递到takeAFoo(foo:Foo)。
因此,简短的答案是您需要一个包装器模块来拉入两个“共享包”模块。您还需要通过保护伞导出它们。
请参阅: https: //touchlab.co/multiple-kotlin-frameworks-in-application/和https://kotlinlang.org/docs/mpp-build-native-binaries.html#export-dependency-to-binaries