标签: kotlin-multiplatform

如何在 Android Studio 上为 KMM 调试 swift 代码?

我无法在 Android Studio 中对 Swift 代码设置断点。我认为 KMM 插件允许这样做。有什么办法可以实现这一点吗?

如何在 iOS 中调试我的 iOS UI + 共享业务逻辑?

android-studio kotlin-multiplatform

4
推荐指数
1
解决办法
1424
查看次数

Kotlin 多平台出现“所选方案“iosApp”不支持“iphonesimulator””错误

我正在尝试在 Android Studio 中运行由 Kotlin 多平台移动插件生成的初始示例应用程序。我按照以下步骤进行环境设置。Android模拟器运行正常,但iPhone模拟器无法运行。运行配置有以下错误:

Error: Selected scheme "iosApp" does not support "iphonesimulator"
Run Code Online (Sandbox Code Playgroud)

当我运行配置(忽略错误)时,iPhone 模拟器确实会打开并且似乎会加载 iOS,但它永远不会加载 Android Studio 中的“Hello,iOS”应用程序。

什么会导致这种情况呢?

版本信息:

  • macOS 12.2.1
  • Android Studio 2021.1.1 补丁 2
  • Xcode 13.3

xcode android-studio kotlin-multiplatform

4
推荐指数
1
解决办法
1620
查看次数

第一次无法在android studio中设置KMM项目

我以前从未使用过 KMM(Kotlin Multiplatform Mobile)。我刚刚更新到最新版本的 kotlin 并在 android studio 中安装了 KMM 插件,然后重新启动了 android studio(使用此链接)。然后我创建了一个新项目(使用此链接)但它给了我这个错误。我不知道该怎么办,我尝试清除缓存并重新启动,还尝试创建另一个项目,但它仍然给出相同的错误。我之前在我的 android studio 中使用 java 和 kotlin 构建了 android 应用程序,它运行良好。所以也许这是 KMM 的错误或类似的错误? 我得到的错误

android-studio android-gradle-plugin kotlin-multiplatform

3
推荐指数
1
解决办法
1537
查看次数

在 Swift 中使用协程流

我们目前如何从 swift收集Flow

通过在 Swift流的collect方法中对 Kotlin 的挂起函数的新支持,可以在 swift 中获得这个相当笨重的签名

vm.topStoriesFlow.collect(
 collector: Kotlinx_coroutines_coreFlowCollector,
 completionHandler: @escaping (KotlinUnit?, Error?) -> Void
)
Run Code Online (Sandbox Code Playgroud)

知道如何使用它,或者即使当前支持它的使用吗?

kotlin kotlin-native kotlin-multiplatform kotlin-coroutines kotlin-flow

3
推荐指数
1
解决办法
958
查看次数

与 Room 相比,SQLDelight 的性能较慢

我们想将我们的应用程序从 Room 迁移到 SQLDelight,以便在 iOS 上重用它(这是一个多平台项目)。但是我注意到 SQLDelight 比 Room 慢得多。对于某些查询,它大约慢 10 倍。我对插入语句进行了一些深入测试,Room 平均需要约 5 毫秒,SQLDelight 平均需要约 25 毫秒。我检查(并调整)了查询,使它们完全相同。

我还检查了一些 PRAGMA,发现 SQLDelight 使用 Pragma SYNCHRONOUS=1 (NORMAL) 而 Room 使用 2 (FULL) 而 SQLDelight 使用 JOURNAL_MODE=TRUNCATE 而 Room 使用 WAL。我将 SQLDelight 设置中的这些设置更改为等于 Room 并且性能有所提高,但对于上述测试仍然约为 20 毫秒。

有谁知道导致差异的原因是什么?任何帮助表示赞赏。

android sqldelight android-room kotlin-multiplatform

3
推荐指数
1
解决办法
890
查看次数

如何使用 Kotlinmultiplatform 从设备获取区域设置和语言

我正在 kotlin 多平台上创建我的第一个应用程序,并且需要获取一些设备的信息,例如语言和国家/地区。

我正在寻找一种使用 Kotlin 多平台在 Android 和 iOS 两种设备上运行的方法。

有可能的?或者只能在两种设备上以本机方式进行此操作?

kotlin-multiplatform

3
推荐指数
1
解决办法
182
查看次数

空的 KMM 项目卡住了 gradle 同步

我正在尝试将一些业务逻辑从我的 iOS 应用程序转移到 KMM。当突然开始在工作室遇到问题时,我已经做了一些工作。它没有构建,有奇怪的metaspace错误等。老实说,我在我的项目周围跳动了几个小时和几天 - 没有结果。我决定完全卸载工作室及其所有相关文件。

在那之后,我什至无法正确构建一个空的 KMM 项目。简单的 Android 项目工作得很好。只有 KMM 才会出现问题。当我第一次创建项目时,它已成功加载,下载所有依赖项并同步。我能够看到“Android”项目结构。我试图通过./gradlew build- 错误来构建它。没有完整的描述,只有失败任务的名称 - compile kotlin to ios arm64。一个全新项目中的错误。我尝试重建项目 - 没有运气。所以我重新启动了工作室,魔法的第二部分开始了。

从这一刻起,每当我打开一个新的或现有的 KMM 项目时,它就会开始同步并卡住。例如,我无法打开项目结构,因为同步正在进行,我无法添加依赖项,因为同步正在进行。但是我可以通过./gradlew build它来构建它并且它会构建!好吧,我尝试了更多命令,例如./gradlew -refresh-dependencies等。它构建成功。然后在某个时候所有的代码都变成了红色。下面你可以同时看到Android Studio的所有颜色:

在此处输入图片说明

在终端中,您可以看到它已成功构建。在右下角,您可以看到它不允许进入项目结构,因为正在进行同步。最美丽的是所有未解决的符号。

我相信我已经尝试了大部分 Android Studio 的东西:

  • 使缓存无效并重新启动
  • 只需重新启动
  • 重建项目
  • ./gradlew clean build
  • 删除 ~/.gradle 和 ./gradle 并重建
  • 重新启动笔记本电脑
  • 更新所有插件等。

伙计们,您有什么想法可以让工作室只与 KMM 一起工作吗?然后我应该如何让它继续工作?正如我已经说过的,问题不是特定于工作室的,而是特定于 KMM 的,因为常规的 android 项目构建得很好。

安卓工作室 4.1.2

Mac OS 大苏尔 11.2

Kotlin 1.4.30-release-Studio4.1-1

android kotlin android-studio kotlin-native kotlin-multiplatform

3
推荐指数
1
解决办法
549
查看次数

如何为 iOS 制作多模块 kotlin 多平台库?

我正在尝试制作一个可在 Android、JavaScript 和 iOS 中使用的 Kotlin 多平台库。该库由多个模块组成,因此可以轻松扩展。我现在的问题只与 Kotlin 原生有关。

这是项目的设置方式

  • 一个模块 :common
object MySingleton {
    fun doSomethingWithMyInterface(value: MyInterface) {
        // ...
    }
}

interface MyInterface {
  fun doSomething()
}
Run Code Online (Sandbox Code Playgroud)
  • 其他模块实现 MyInterface
class MyInterfaceExample : MyInterface {
    override fun doSomething() {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我已将build.gradle.kts文件设置:common如下:

plugins {
    kotlin("multiplatform")
    kotlin("native.cocoapods")
    id("maven-publish")
}

kotlin {
    targets {
        jvm()
        js().browser()
        ios("ios") {
            binaries {
                framework("CommonModule") {
                    baseName = "common"
                }
            }
        }
    }

    cocoapods {
        frameworkName = "CommonModule"
        summary …
Run Code Online (Sandbox Code Playgroud)

kotlin-native kotlin-multiplatform

3
推荐指数
1
解决办法
1026
查看次数

无法在 Android Studio 中将 io.ktor 导入到 KMM 的公共模块

所以我是 Kotlin Multiplatform Mobile 和一般移动开发的新手。我正在尝试按照KMM 教程中的本教程在我的项目中使用 Ktor。

添加依赖后,如下图build.gradle.kts(commonMain、androidMain、iosMain的依赖):

import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget

plugins {
    kotlin("multiplatform")
    id("com.android.library")
}

kotlin {
    android()
    ios {
        binaries {
            framework {
                baseName = "shared"
            }
        }
    }

    val ktorVersion = "1.5.2"

    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation("io.ktor:ktor-client-core:$ktorVersion")
            }
        }
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test-common"))
                implementation(kotlin("test-annotations-common"))
            }
        }
        val androidMain by getting {
            dependencies {
                implementation ("io.ktor:ktor-client-android:$ktorVersion")
            }
        }
        val androidTest by getting {
            dependencies {
                implementation(kotlin("test-junit"))
                implementation("junit:junit:4.13")
            } …
Run Code Online (Sandbox Code Playgroud)

kotlin android-gradle-plugin ktor kotlin-multiplatform ktor-client

3
推荐指数
1
解决办法
510
查看次数

如何将 JS 目标添加到 KMM 项目?

我有一个 AndrodiStudio KMM 项目,我想添加一个 JS 目标。

鉴于 JS 开发仅在 IntelliJ 中可用,我希望我必须在 IDEA 中打开项目添加一个“模块”——但我什至不知道选择哪个——它们似乎都不是“正确”适合:

  • 在 Gradle 部分,有“用于浏览器的 Kotlin/JS 和“Kotlin/JVM”。添加“Kotlin/JS”会破坏*整个项目的 Gradle 构建。“Kotlin/Multiplatform”听起来不像我想要的我已经有了“共享”模块(虽然它不包括 JS)

  • 在 Kotlin 部分,有“KS | IDEA”。显然,我不想将基于“IDEA 构建系统”的内容添加到基于 gradle.kts 的项目中。

所以我的问题是:

  • 哪个模块模板是在“iosApp”和“androidApp”(在 AndroidStudio 或 Idea 中?)旁边添加“jsApp”(或 webApp)的最佳起点?

  • 我需要向“shared/build.gradle.kts”添加什么来支持“jsMain”和“jsTest”文件夹?是否有不同/更好的起点(例如,Github 上涵盖所有平台的教程或最小的“helloWorld”示例)?

我的代码的当前结构与 Android Studio 中的 KMM 项目模板 1:1 对应:https : //github.com/stefanhaustein/komponents

*) 错误信息:

Error resolving plugin [id: 'org.jetbrains.kotlin.multiplatform', version: '1.4.31']
> Plugin request for plugin already on the classpath must not include a version
Run Code Online (Sandbox Code Playgroud)

intellij-idea android-studio kotlin-multiplatform kotlin-js

3
推荐指数
1
解决办法
303
查看次数