KMM 和 iOS 中的传递依赖性如何工作?
How Do Transitive Dependencies in KMM and iOS work?
假设我有一个包,共享包,它与两个 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 标准库的相关部分,最重要的是,这两个框架在二进制级别上是不同的,因此它们无法通信。
我的意思是,如果“共享包”有一个 data class Foo
,并且你通过调用“KMM 项目 A”得到它,比如 fun makeAFoo():Foo
,你有“KMM 项目 B”中定义为 fun takeAFoo(foo:Foo)
的函数,您从 makeAFoo()
获得的 Foo
实例无法传递到 takeAFoo(foo:Foo)
.
所以,简短的回答是您需要一个包装器模块来引入两个“共享包”模块。您还需要通过保护伞导出它们。
参见:https://touchlab.co/multiple-kotlin-frameworks-in-application/ and https://kotlinlang.org/docs/mpp-build-native-binaries.html#export-dependencies-to-binaries
假设我有一个包,共享包,它与两个 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 标准库的相关部分,最重要的是,这两个框架在二进制级别上是不同的,因此它们无法通信。
我的意思是,如果“共享包”有一个 data class Foo
,并且你通过调用“KMM 项目 A”得到它,比如 fun makeAFoo():Foo
,你有“KMM 项目 B”中定义为 fun takeAFoo(foo:Foo)
的函数,您从 makeAFoo()
获得的 Foo
实例无法传递到 takeAFoo(foo:Foo)
.
所以,简短的回答是您需要一个包装器模块来引入两个“共享包”模块。您还需要通过保护伞导出它们。
参见:https://touchlab.co/multiple-kotlin-frameworks-in-application/ and https://kotlinlang.org/docs/mpp-build-native-binaries.html#export-dependencies-to-binaries