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

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

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

xcodeproj=~/iOSProjects/TestKMM

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

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


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

【问题讨论】:

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

标签: android ios kotlin-multiplatform kotlin-multiplatform-mobile


【解决方案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】:
    1. 转到您的终端
    2. 运行./gradlew tasks
    3. 查找名称类似于linkDebugFrameworkIos 的任务
    4. 运行./gradlew linkDebugFrameworkIos

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

    【讨论】:

      猜你喜欢
      • 2022-10-06
      • 2021-11-15
      • 2021-09-12
      • 2021-07-07
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 2019-02-18
      相关资源
      最近更新 更多