1

假设我有一个包,共享包,它与两个 KMM 项目共享:KMM 项目 A 和 KMM 项目 B。

所以我们有共享包 -> KMM 项目 A 和共享包 -> KMM 项目 B。

现在我想在我的 iOS 应用程序中同时使用 KMM Project A 和 KMM Project B。这是如何运作的?共享包是否与两个框架捆绑在一起(即我两次包含相同的依赖项?)。此外,共享包是否需要是 KMM 项目才能允许 KMM 项目 A 和 B 生成相关的 iOS 框架?或者它可以是一个纯粹的 Kotlin 项目吗?

这是一张图表,可能会对我试图理解的情况提供更多解释。

在此处输入图像描述

4

1 回答 1

4

您需要一个依赖于 KMM 项目 A 和 KMM 项目 B 的包装“unbrella”模块,并让它生成您的 Xcode 框架。

从技术上讲,您可以为 KMM 项目 A 和 B 生成 2 个框架,但它们都将具有“共享包”的副本,以及 Kotlin 标准库的相关部分,最重要的是,这两个框架将是在二进制级别上不同,因此它们无法通信。

我的意思是,如果“共享包”具有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-dependencies-to-binaries

于 2021-12-07T23:05:28.127 回答