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

2024-01-23

我已遵循KMM 实践教程 https://kotlinlang.org/docs/mobile/hands-on-networking-data-storage.html关于如何使用 KMM 构建示例应用程序,我能够成功完成所有步骤! (Yu-huu!)现在我正在尝试在生产应用程序中做一个小型的 POC。所以我创建了一个新的KMM共享模块并将其添加到Android项目中。对于 Android 部分,它工作正常,但我不知道如何将共享模块包含到 iOS 应用程序中。

根据这个链接 https://kotlinlang.org/docs/mobile/integrate-in-existing-app.html#make-your-application-work-on-ios,iOS项目目录应该在gradle.properties file:

xcodeproj=~/iOSProjects/TestKMM

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

所以我想简单地引用iOS项目gradle.properties是不足够的。我一定还缺少其他东西。


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


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

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

这应该在您的构建目录中构建一个框架。看一下动手中的Xcode项目。您将看到一个指向 KMM 框架的链接框架。在您的产品 Xcode 项目中,您需要添加它。在实际操作中,查看运行 gradle 的构建脚本。您需要将其转移到您的 prod Xcode 项目中(see here https://github.com/kotlin-hands-on/kmm-networking-and-data-storage/blob/master/iosApp/iosApp.xcodeproj/project.pbxproj#L294).

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

如果您的产品 Xcode 使用 Cocoapods,我建议您采用该路线(以及自我推销KaMP Kit https://github.com/touchlab/KaMPKit举个例子)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 两者都实现了类。将使用两者之一

    我有一个项目 它具有使用 SocketRocket 的依赖项 通过 CocoaPods 安装 并从 HeapAnalytics 导入了静态库 显然 HeapAnalytics 库已经使用了 SocketRocket 编译时没有出现错误 但在
  • RxJava、Proguard 和 sun.misc.Unsafe

    我有以下问题RxJava 1 1 0 使用时Proguard 我没有更改 RxJava 版本或其 pro文件 但更新后OkHttp我无法编译使用Proguard因为我有关于sun misc Unsafe不在场 rxJava pro keep
  • 防止UIScrollView的UIPanGestureRecognizer遮挡UIScreenEdgePanGestureRecognizer

    我有一个UIScrollView它填满了我应用程序的一页上的屏幕 但我希望允许用户从屏幕边缘平移以显示其后面的视图 问题是 UIScrollView 窃取了我的触摸UIScreenEdgePanGestureRecognizer在屏幕边缘
  • 如何防止 RealmSwift 列表中出现重复项?

    如何防止向列表中添加重复项RealmSwift 我有我的User作为领域对象 但真正的数据源是服务器 只是使用领域在本地缓存用户 当我从服务器获取当前用户数据时 我想确保存储在领域中的用户拥有来自服务器的所有播放列表 以及它们的曲目列表等
  • 如何在 sqlite 中将 2 列合并为新列

    我有一个包含 3 列的表 我必须将 2 列中的值按降序排列到一列中 A B C z 1 2 f 5 7 s 9 5 使用此示例 输出会将 B 列和 C 列中的值放入其中 如下所示 A B s 9 f 7 f 5 s 5 z 2 z 1 我当
  • 在我的Android中,当其他应用程序想要录制音频时如何停止录音?

    在我的应用程序中 服务通过 AudioRecord 持续录制音频 当我的应用程序运行时 其他与音频记录相关的应用程序 例如 Google 搜索 无法工作 如何知道何时有其他应用想要录制音频 以便我可以停止录制以释放资源 答案是MediaRe
  • iOS - NSNotificationCenter 多个UIKeyboard通知

    我有两个视图控制器 我们称它们为 A 和 B 1 在 A 中 我显示一个包含文本字段的 popOver 2 B中有一个UITextView用于简单的文本编辑 我必须管理 A 和 B 中的键盘才能滚动键盘隐藏的内容 我知道如何重新定位内容 我
  • 应用程序未安装在 Android 模拟器上

    我正在 android Geocoder 中开发一个应用程序 当我运行该应用程序时 它会显示 2011 01 11 11 08 13 GeoTourProject 自动目标模式 使用现有模拟器 emulator 5554 运行兼容的 AVD
  • iOS Storyboards 我应该使用它们吗? [复制]

    这个问题在这里已经有答案了 我是 iOS 开发新手 尚未创建应用程序 但我向我的朋友寻求建议 他在市场上拥有非常高评价的应用程序 他说不要使用故事板 尽管我很想听取他的建议 但它们似乎确实很有帮助 这是否会在将来给我的应用程序带来问题 我有
  • ROOM迁移过程中如何处理索引信息

    CODE Entity tableName UserRepo indices Index value id unique true public class GitHubRepo PrimaryKey autoGenerate true p
  • 在 Flutter 中显示 iOS 的 PDF 内联文件

    我正在 flutter 中专门为 iOS 开发一个应用程序 现阶段 我需要向其中添加 PDF 文件 问题是 flutter 没有原生的方式来显示 PDF 文件 据我研究 由此tread https github com flutter fl
  • Android相机意图:如何获取全尺寸照片?

    我正在使用意图来启动相机 Intent cameraIntent new Intent android provider MediaStore ACTION IMAGE CAPTURE getParent startActivityForR
  • Android构建apk:控制MANIFEST.MF

    Android 构建 APK 假设一个 apk 包含一个库 jar 例如 foo jar 该库具有 META INF MANIFEST MF 这对于它的运行很重要 但在APK中有一个包含签名数据的MANIFEST MF 并且lib jar
  • Android 设备上的静默安装

    我已经接受了一段时间了 在 Android 上静默安装应用程序是不可能的 也就是说 让程序安装捆绑为 APK 的应用程序 而不提供标准操作系统安装提示并完成应用程序安装程序活动 但现在我已经拿到了 Appbrain 快速网络安装程序的副本
  • 是什么导致了这个 iPhone 崩溃日志?

    我有点卡住了 需要解决这个问题 因为我的一个应用程序出现了随机崩溃 而这些崩溃并不总是能够重现 这是崩溃日志之一 Incident Identifier 59865612 9F00 44EA 9474 2BF607AD662E CrashR
  • 使用 Espresso 检查 EditText 的字体大小、高度和宽度

    如何使用 Espresso 检查 EditText 的字体大小 高度和宽度 目前要分割我使用的文本 onView withId R id editText1 perform clearText typeText Amr 并阅读文本 onVi
  • 用 UIView 像翻书一样翻页?

    我正在尝试在之间切换UIViews让它看起来就像你正在翻书的一页 The UIViewAnimationTransitionCurlUp如果我能让它向左或向右卷曲 那就非常接近了 这可能吗 我尝试过使用CATRansition但没有一种动画
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • 在 Android 中,如何将字符串从 Activity 传递到 Service?

    任何人都可以告诉如何将字符串或整数从活动传递到服务 我试图传递一个整数 setpossition 4 但它不需要 启动时总是需要 0 Service 我不知道为什么我不能通过使用 Service 实例从 Activity 进行操作 publ
  • 如何删除因 Google Fitness API 7.5.0 添加的权限

    将我的 play services fitness api 从 7 0 0 更新到 7 5 0 后 我注意到当我将新版本上传到 PlayStore 时 它 告诉我正在添加一个新权限和 2 个新功能 我没有这样做 有没有搞错 在做了一些研究来

随机推荐

  • 包装其元素的 Angular 属性指令

    就像标题所说 我正在尝试创建一个属性指令来包装其父级并允许我在编辑和显示实际模型值之间切换 简而言之
  • django 可以延迟加载模型中的字段吗?

    我的 django 模型之一有一个很大的TextField我经常不需要使用它 有没有办法告诉 django 延迟加载 这个字段 也就是说 除非我明确要求 否则不要费心从数据库中提取它 我浪费了大量的内存和带宽来拉这个TextField每次我
  • 将数据传输到命令行 php 中?

    是否可以使用 unix 管道将数据传输到命令行 php 脚本中 我试过了 gt data php script php 但预期的data没有出现在 argv 有没有办法做到这一点 PHP 可以从标准输入读取 并且还为其提供了一个很好的快捷方
  • 流减少不兼容类型

    我正在尝试创建一个查找器 它采用多个谓词并减少它们 public static
  • 使用外部类的可变参数模板中的参数部分特化可变参数模板内部类是否合法

    考虑代码 include
  • jQuery 如何撤消选择更改

    我有一个选择框 我想在将其更改为特定选项之前添加确认 例子
  • IE 对“这个”的理解

    在此代码中 Firefox 将 this 视为被单击的元素 并通过正确的方式传递 href 属性 IE 似乎认为 this 是 对象窗口 我怎样才能让它在两个浏览器中以相同的方式工作 注意 jQuery 会很不错 但不是这个项目的选择 va
  • 我可以使用 C++ 中的内置类型安全地 new[],然后强制转换指针,然后安全地删除[] 吗?

    在我的代码中 我实际上有以下内容 wchar t buffer new wchar t size bonus irrelevant code here delete reinterpret cast
  • 为什么我的常规应用程序上下文无法加载我的属性文件?

    我正在尝试在我的应用程序中使用 PropertyPlaceholderConfigurer 我的 applicationContext test xml 加载我的属性文件很好 但我的 applicationContext xml 抛出异常
  • Postgresql:日期格式和本地语言输出

    我对 postgresql 有两个问题 第一个是我必须将日期转换为特定格式 例如 2016 年 11 月 4 日星期五 SELECT to char tstamp Day DD month YYYY FROM 这就是结果 https i s
  • PostgreSQL - 获取统计数据

    我需要在我的应用程序中收集一些统计信息 我有一个用户表 tb user 每次新用户访问该应用程序时 都会在此表中添加一条新记录 即每个用户一行 主要领域有id and 日期 小时 用户第一次访问该应用程序的时间戳 tb user id bi
  • iOS 版本的 Flutter 应用程序在启动时崩溃

    我正在开发该应用程序 它运行正常 但后来我确实将 Mac 更新到了 macOS Monterey 12 2 1 并将我的 iPhone 设备更新到了最新的 15 2 和 Xcode 13 0 并使用了最新的 13 2 1 但现在应用程序在启
  • ios推送通知的延迟是多少?

    我想在我的应用程序中添加火警功能 我认为推送通知可能是最好的选择 但如果延迟过大 比如超过10分钟 对于火警来说就没有意义了 那么 假设设备在线 推送通知的延迟是多少 推送通知不可靠 无法保证它们已送达 这一切都取决于苹果 APNS 服务器
  • 使用 PHP 从 HTML 源生成屏幕截图

    我有一个想法 可以创建一个可以动态生成网页的 png 或 jpeg 屏幕截图的网站 最终用户永远不会看到这些页面 但 HTML 会被转换为屏幕截图 最终用户将看到该屏幕截图 我怎样才能开始做这件事呢 我想我正在寻找的是某种 PHP 函数 它
  • QBO API v3 .NET SDK 中的特殊字符问题

    我正在使用 NET SDK 从另一个接受 UTF 8 数据编码的系统导入客户和交易 但在处理特殊字符时遇到了很多麻烦 是否有 a 需要转义哪些字符 如撇号 和 b QBO 中不允许使用哪些字符 如冒号 的完整列表 我在在线文档中所能找到的只
  • 将 div 居中对齐,内容左对齐

    我想要一个以文档为中心的 div div 应该占据所有可以显示内容的空间 并且内容本身应该左对齐 我想要创建的是图像库 行和列居中 当您添加新拇指时 它将向左对齐 Code div div img src http www babybedd
  • 使用 Spotify API 时“解析 JSON 时出错”

    我正在学习 Python 并尝试使用 Spotify Web api 创建播放列表 但收到 http 400 错误 解析 json 时出错 我想这与令牌中不正确的变量类型有关 但我很难调试它 因为我无法找到一种方法来查看原始格式的发布请求
  • 如何处理响应超时?

    在 akka http 路由中我可以返回Future作为隐式转换为的响应ToResponseMarshaller 有什么方法可以处理这个未来的超时吗 或者路由级别的连接超时 或者一种方法是使用Await 功能 现在客户可以永远等待响应 co
  • OpenJDK 1.8.0_242,MaxRAMFraction 设置未反映

    我正在 alpine OpenJDK 映像中运行 Springboot 应用程序 并面临 OutOfMemory 问题 最大堆的上限为 256MB 我尝试将 MaxRAMFraction 设置更新为 1 但没有看到它反映在 Java pro
  • KMM:如何将共享模块引用到现有的 iOS 项目中

    我已遵循KMM 实践教程 https kotlinlang org docs mobile hands on networking data storage html关于如何使用 KMM 构建示例应用程序 我能够成功完成所有步骤 Yu hu