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 项目中的主要内容,如果未能解决你的问题,请参考以下文章
无法将 io.ktor 导入 Android Studio 中 KMM 的通用模块
Android Studio:KMM 项目的“共享”模块目录一直未被标记为源根目录
将 socket.io 添加到现有的 Express 项目(前面有 React)