问题标签 [kmm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
638 浏览

ios - Kotlin 协程延迟不适用于 IOS 队列调度程序

我有一个 KMM 应用程序,并且有代码:

如果我withContext(Dispatchers.Default) { delay(DELAY_TIME) }delay(DELAY_TIME)执行替换,则永远不会返回到 while 循环,它只会有一次迭代。

ApplicationDispatcher对于 IOS 看起来像:

delay源代码中我可以猜到,DefaultDelay应该返回并且应该有类似的行为有/没有withContext(Dispatchers.Default)

谢谢!

PS 我ApplicationDispatcherktor-samples得到的。

0 投票
1 回答
1125 浏览

android - 将 Ktor 添加到 Kotlin Multiplatform Mobile 导致未解决的参考:HttpClient

我无法让 Ktor 在 KMM 项目中工作,我只是Unresolved reference: HttpClient在尝试引用任何 Ktor 类时遇到错误。如果我尝试手动添加 ktor 导入,它会说Unresolved reference io. 其他依赖项,如Kermit解决问题,似乎只是 Ktor 的问题。这是我重现的简单步骤:

在此处输入图像描述

  1. 在 Android Studio 中(我已经尝试过 4.1.3 和 4.2 Beta 6),我去 File -> New -> KMM Application。

  2. 在共享模块 build.gradle.kts 中,我添加了 ktor 客户端的依赖项:

  1. GreetingcommonMain 类中,我尝试创建一个 HttpClient ,就像 Ktor 文档https://kotlinlang.org/docs/mobile/use-ktor-for-networking.html#select-an-engine中所说的那样:

我得到Unresolved reference: HttpClient. ktor 导入不起作用。

我尝试过的事情:

  1. 还添加了 Android 和 iOS 客户端依赖项。
  2. 按照此处的建议将 enableFeaturePreview("GRADLE_METADATA") 添加到 settings.gradle.kts: How to fix 'Unresolved reference: HttpClient' with ktor-client-core target linuxX64
  3. 清理、与 gradle 同步、使现金无效并重新启动、关闭 AS 并重新打开、构建项目。

我真的不知道为什么这不起作用,这似乎是最简单的设置。这是我的 build.gradle 文件和设置文件(从新的 KMM 项目向导自动生成)

共享模块 build.gradle.kts

项目build.gradle.kts

settings.gradle.kts

0 投票
1 回答
682 浏览

android-studio - Kotlin Multiplatform Mobile 找不到 klib 包

我已经阅读了这些 SO 帖子123,它们面临着类似的问题。我正在尝试.klib在我的 KMM Android 项目中使用 a 。Klib 是从library.hC 头文件构建的。这是我所做的:

我建立了 Kotlin 库

shared在 KMM项目中使用以下 Gradle 块:

mylib.def文件

在构建时,.klib和构建文件夹出现在classes共享项目的目录中,如下所示:

在此处输入图像描述

下面的红线Platform是错误的:

预期的类“平台”在模块 MyApplication.shared.androidNativeArm64Main 中没有用于 Native 的实际声明

但显然这可能只是一个系统故障(不确定 - “创建实际类......”的 Alt+Enter 解决方案似乎没有做任何事情)。假设这不是问题,我继续......

检查.klib详细

运行.konan/.../bin/klib info mylib.klib时我没有得到c.mylib包名,com.example.myapplication:shared-cinterop-mylib而是(见下文)。我可以忍受(虽然不确定为什么它不是我在 Gradle 中指定的)

我尝试将包包含在我的androidAppGradle中

我想访问.klib我的androidApp项目内部。我尝试了两个包c.mylibcom.example.myapplication:shared-cinterop-mylib.

我尝试添加implementation("com.example.myapplication:shared-cinterop-mylib")到我的androidAppGradle 文件,但收到错误:

无法确定任务 ':androidApp:lintVitalRelease' 的依赖关系。无法解析配置“:androidApp:debugCompileClasspath”的所有工件。找不到 com.example.myapplication:shared-cinterop-mylib:。要求:项目:androidApp 可能的解决方案:

我不确定提示是否能解决问题,但我尝试使用例如将文件添加到androidAppGradlerepositories { ... }

但我不确定这是将文件添加到存储库的正确方法。

问题

任何人都可以帮我让包裹得到认可androidApp吗?我会继续努力的。

0 投票
0 回答
653 浏览

android - 不兼容的 Kotlin/Native 库

安卓工作室 4.1.3

全新的 KMM 项目。接受所有默认值。没有添加新代码,就在大门外:

不兼容的 Kotlin/Native 库 项目附加了 2 个第三方库,它们是使用较旧的 Kotlin/Native 编译器编译的,无法在 IDE 中读取: Gradle: org.jetbrains.kotlinx:atomicfu-common:nativeInterop:0.15.1 Gradle: org.jetbrains.kotlinx:atomicfu-common:nativeMain:0.15.1 请编辑 Gradle buildfile(s) 并指定库与 Kotlin/Native 1.4.32 兼容的版本。然后在IDE中重新导入项目。

在此处输入图像描述

为什么这会发生在具有所有默认值的全新项目上?我在哪里可以找到兼容性矩阵?我到底需要在哪里改变这个?

0 投票
0 回答
156 浏览

android - Kotlin Multiplatform 项目在尝试访问 StateFlow 时出现此错误无法访问 kotlinx.coroutines.flow.Flow

在我的 KMM 应用程序中,试图通过协程收集数据的状态,StateFlow但它向我抛出了这个错误,有谁知道是什么原因导致这种情况发生

无法访问“kotlinx.coroutines.flow.StateFlow”的超类型“kotlinx.coroutines.flow.Flow”。检查您的模块类路径是否存在缺失或冲突的依赖项

这是我的gradle文件

0 投票
1 回答
94 浏览

android - Kotlin 多平台模块库

我一直在开发一些我们希望为 Android 和 iOS 提供的库,到目前为止,我们分别为 Android 和 iOS 工作。现在考虑到这么多人开始在他们的应用程序中使用 KMM,我只是想知道是否有人尝试过为 Android 和 iOS 发布使用 Kotlin 创建的库,以及他们的经验以及在开发和集成过程中面临的挑战该库由用户。

如果我使用 Kotlin 1.3.X 版本构建我的库并且用户使用 1.2.X 或 1.4.X,它会有什么影响吗?

0 投票
0 回答
258 浏览

swift - KMM 如何快速使用 kotlin 泛型?

对不起,我的英语不好 :(

我想用 KMM 创建应用程序,并最大化共享代码。只有我想写两次的是 UI 和导航。所以我在共享代码中创建 ViewModel。

ViewState 就在哪里

用于在密封类中实现,描述当前视图状态。当它发生变化时,用户界面会收到变化和更新。状态看起来像(我发现的第一个免费公共 API 返回随机狗图像):

好的

所以我创建了具体的 ViewModel 来在 iOS 和 android 之间共享逻辑

简单,尼特?Viewmodel 使用 Loading 进行初始化,并立即开始图像加载。图像加载后进入新状态。在刷新操作上完全相同

在Android中使用很简单,jetpack compose 可以collectAsStateStateFlow,没有什么可做的,只用state来描述一个ui

问题出在 iOS

我们必须为 iOS“桥接”可观察模型。iOS 有ObservableObject机制,我已经扩展了它

看起来不错。ViewState 的通用类...现在我可以将它与 SwiftUI 一起使用!不好了...

当我尝试ObservableViewModel在代码中使用时,我收到一个错误

类型“DogImageViewState”不符合协议“ViewState”

但它完全符合!

当我跳到定义时,DogImageViewState我会看到下一个

看起来完全不符合。什么是Base<ViewState>(DogBase 因为 Dog 功能构建在单独的框架中dog,而 DogSharedViewState 因为 ViewState 中声明shared)?为什么不只是ViewState

如何解释 swift 和 DogSharedViewState 完全一样?

0 投票
1 回答
278 浏览

android - 如何将 watchOS 目标添加到我现有的 KMM 项目?

我有一个项目,我在适用于 Android 和 iOS 的 android studio 上使用 KMM 插件制作。该项目似乎运行良好。

现在我想向现有的 ios 应用程序添加一个 watchOS 目标,但不知道如何去做。

我的共享 build.gradle.kts 文件

到目前为止,我只是尝试在 Xcode 中打开 ios 应用程序并创建一个新的“watchOS”目标。这设置了 watch OS 应用程序,我能够在 iOS 和 watchOS 之间共享代码,但无法将共享文件和所有常见文件“导入”watch OS。当我尝试在 watchOs 上运行项目时出现此错误

为 watchOS 模拟器构建,但链接框架“shared.framework”是为 iOS 模拟器构建的。科特林项目

谢谢你的帮助。我不太擅长 gradle 或 ios dev。在这一点上,任何事情都会有所帮助。

0 投票
1 回答
100 浏览

kotlin-multiplatform - Kotlin Multiplatform:如何从 swift 调用 getOriginalKotlinClass?

如何从 swift 代码中获取 Kotlin 类?我需要它来进行依赖关系。在文档中它说有一个方法 getOriginalKotlinClass,但我在哪里可以得到它?

例如,我有一个可以从 Kotlin 库快速获得的对象,JsonCacheClient我如何获得它的 kotlin 类?

0 投票
0 回答
139 浏览

kotlin - Kotlin Multiplatform 将 ktor 作为后端 jvm 模块

我正在开发我的多平台项目,并添加了基于 ktor 的后端模块作为其中的一部分,因为我想与这个后端模块共享我的通用代码,我已将其添加到依赖项中

implementation(project(":shared"))

但是似乎存在与 jvm 目标共享代码的问题(ktor 后端是)我找到了一种解决方法,通过将此后端子模块标记为多平台本身来解决我的项目的这种依赖关系,但现在当我构建它和开始运行我收到此错误

错误:无法找到或加载主类 com.owlsoft.backend.ServerKt

我的整个后端 ktor build.gradle.kts

我主要是尝试共享一些模型和业务逻辑,我只在多平台中使用 ktor 制作了后端模块,以解决它无法获取共享模块更改的问题。

所以我有这样的模块