KMM:如何将共享模块引用到现有的 iOS 项目中

Posted

技术标签:

【中文标题】KMM:如何将共享模块引用到现有的 iOS 项目中【英文标题】:KMM: How to reference the shared module into an already existing iOS project 【发布时间】:2021-04-16 16:08:43 【问题描述】:

我已按照KMM hands-on tutorial 了解如何使用 KMM 构建示例应用程序,并且我能够成功完成所有步骤! (Yu-huu!)现在我正在尝试在生产应用程序中做一个小的 POC。所以我创建了一个新的 KMM 共享模块并将其添加到 android 项目中。对于 Android 部分,它工作正常,但我不知道如何将共享模块包含到 ios 应用程序中。

According to this link,gradle.properties文件中要引用iOS项目目录:

xcodeproj=~/iOSProjects/TestKMM

但是当我尝试导入共享模块时,xcode 抱怨没有这样的模块:

所以我想仅仅在gradle.properties 中引用iOS 项目是不够的。一定还有其他我遗漏的东西。


另外,我检查了共享模块的build 目录,据我所知,没有生成 iOS 工件。 (这与实践教程项目不同,其中存在bin/iosX64/debugFragmework/shared.framework/ ....。)

【问题讨论】:

您好,您成功解决了这个问题吗?如果你能分享一些关于它的文章或资源,真的很感激。谢谢! 【参考方案1】:

所以我想仅仅在 gradle.properties 中引用 iOS 项目是不够的。

正确。实际操作似乎没有描述您如何实际与 Xcode 集成。我们通常使用 cocoapods 来简化这一切,但在实际操作中,您需要从 gradle 命令行运行 :shared:packForXCode 来构建实际的框架(您可以也许从Android Studio)。

这应该在您的构建目录中构建一个框架。动手看看Xcode项目。您将看到一个指向 KMM 框架的链接框架。在您的 prod Xcode 项目中,您需要添加它。在动手实践中,查看运行 gradle 的构建脚本。您需要将其转移到您的产品 Xcode 项目 (see here)。

要手动设置所有这些,您需要对 Xcode 配置有相当深入的了解。

如果您的 prod Xcode 使用 Cocoapods,我建议使用该路线(并以自我促销 KaMP Kit 为例)。

【讨论】:

您好先生,我想问一些事情。我从实验阶段就一直在关注 kotlin multiplatfrom,我们曾经运行过 packForXcode。现在我正面临在 m1 mac 中构建模拟器时缺少 arm64。你有任何想法如何解决。这个问题?谢谢【参考方案2】:

从 kotlin 1.5.20 开始,您可以使用此处概述的embedAndSignAppleFrameworkForXcode

https://blog.jetbrains.com/kotlin/2021/07/multiplatform-gradle-plugin-improved-for-connecting-kmm-modules/

cocoapods 方法对于小型项目来说可能有点过头了,packForXcode 经常无法在共享代码更改或 sim/设备切换时重建,这让 iOS 开发人员使用起来很痛苦。

【讨论】:

【参考方案3】:
    转到您的终端 运行./gradlew tasks 查找名称类似于linkDebugFrameworkIos 的任务 运行./gradlew linkDebugFrameworkIos

现在您的工作区中有您通过 Xcode 打开的共享模块

【讨论】:

以上是关于KMM:如何将共享模块引用到现有的 iOS 项目中的主要内容,如果未能解决你的问题,请参考以下文章

如何将人行横道集成到现有的离子目标c项目中

无法将 io.ktor 导入 Android Studio 中 KMM 的通用模块

Android Studio:KMM 项目的“共享”模块目录一直未被标记为源根目录

将 socket.io 添加到现有的 Express 项目(前面有 React)

Xcode:如何将 Unity 游戏添加到现有的 iOS 应用程序?

将核心数据添加到现有的选项卡式应用程序(ios swift、Xcode6)