标签: kotlin-multiplatform-mobile

实际类型别名“ApplicationContext”没有相应的预期声明

我在尝试为 kotlin 多平台自定义上下文时遇到了这个问题

Actual typealias 'ApplicationContext' has no corresponding expected declaration
The following declaration is incompatible because modality is different:
    public final expect class ApplicationContext
Run Code Online (Sandbox Code Playgroud)

android主程序

import android.app.Application

actual typealias ApplicationContext = Application
Run Code Online (Sandbox Code Playgroud)

共同主

expect class ApplicationContext
Run Code Online (Sandbox Code Playgroud)

ios主程序

import platform.UIKit.UIView

actual typealias ApplicationContext = UIView
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

android kotlin kotlin-multiplatform kotlin-multiplatform-mobile

5
推荐指数
1
解决办法
837
查看次数

如何在 KMM 上为 SQLDelight 编写单元测试

我想知道如何在KMM上为SQLDelight编写单元测试。首先,我什至无法正确添加SQLDelight依赖项。

    val commonTest by getting {
        dependencies {
            implementation(kotlin("test-common"))
            implementation(kotlin("test-annotations-common"))
            // SQLDelight tests
            implementation("com.squareup.sqldelight:sqlite-driver:1.4.3")
        }
    }
Run Code Online (Sandbox Code Playgroud)

在我添加依赖项然后同步项目后,该项目甚至没有构建。有人可以告诉我这是否是添加 sqlite 驱动程序依赖项的正确方法?

任何帮助将不胜感激!

unit-testing sqldelight kotlin-multiplatform kotlin-multiplatform-mobile

4
推荐指数
2
解决办法
2811
查看次数

Gradle 没有以正确的方式寻找依赖

我正在尝试向 gradle 上的 kotlin 多平台添加 moko 依赖项。

org.gradle.internal.resolve.ArtifactNotFoundException:找不到 mvvm-livedata-0.9.1-samplessources.jar (dev.icerock.moko:mvvm-livedata:0.9.1)。在以下位置搜索:https : //dl.bintray.com/icerockdev/moko/dev/icerock/moko/mvvm-livedata/0.9.1/mvvm-livedata-0.9.1-samplessources.jar

看起来链接的“-samplessources”部分不应该在那里,但不知道如何删除它。

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

android gradle kotlin-multiplatform-mobile

4
推荐指数
2
解决办法
414
查看次数

iOS 上的 KMM:没有事件循环。使用 runBlocking { ... } 启动一个

我正在尝试coroutinesKotlin Multiplatform项目中使用。我也没有经验。

我正在尝试调用此函数

fun startFlow {
    coroutineScope.launch { 
        withContext(defaultDispatcher) {
           myFlow.collect { next -> onNext(next) }
        } 
    }
}
Run Code Online (Sandbox Code Playgroud)

coroutineScopeiOS是这样的

val defaultScope: CoroutineScope = object : CoroutineScope {
    override val coroutineContext: CoroutineContext
        get() = SupervisorJob() + Dispatchers.Default
}
Run Code Online (Sandbox Code Playgroud)

这不是给我这个问题的唯一调用,实际上所有调用coroutines似乎都因此错误而失败:

kotlin.IllegalStateException: There is no event loop. Use runBlocking { ... } to start one.
Run Code Online (Sandbox Code Playgroud)

这就是我导入库的方式

val commonMain by getting {
        dependencies {
            implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.3")
        }
    }
Run Code Online (Sandbox Code Playgroud)

我正在使用Kotlin1.4.31。此问题仅存在于 中iOSAndroid …

kotlin-multiplatform kotlin-coroutines kotlin-multiplatform-mobile

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

kotlin.native.concurrent.InvalidMutabilityException:KMM iOS 中冻结 kotlin.collections.HashMap@3ee0f08 的突变尝试

我使用的是 Kotlin 1.5.10 和 ktor 1.6.0。

当我执行网络提取时

    private suspend fun getHello(): Model.Result {
        return httpClient.get("https://en.wikipedia.org/w/api.php?action=query&format=json&list=search&srsearch=multiplatform")
    }

Run Code Online (Sandbox Code Playgroud)

使用数据模型

    object Model {
        @Serializable
        data class Result(val query: Query)
        @Serializable
        data class Query(val searchinfo: SearchInfo)
        @Serializable
        data class SearchInfo(val totalhits: Int)
    }
Run Code Online (Sandbox Code Playgroud)

Android 版本编译良好并响应

Result(query=Query(searchInfo=SearchInfo(totalhits=707)))
Run Code Online (Sandbox Code Playgroud)

但是,当我在 iOS 中编译它时,它返回崩溃

RESPONSE https://en.wikipedia.org/w/api.php?action=query&format=json&list=search&srsearch=multiplatform failed with exception: 
kotlin.native.concurrent.InvalidMutabilityException: mutation attempt of frozen kotlin.collections.HashMap@2566888
Run Code Online (Sandbox Code Playgroud)

这个StackOverflow建议下载到1.3.10,但我不能这样做,因为 KMM 不会在我最新的 Android Studio 4.2.1 中编译。此外,我不将协程用于 commonMain 代码(仅在 Android 代码中)。

这个StackOverflow状态问题与Kodein,但我不使用Kodein

注意:我的代码与https://www.youtube.com/watch?v=_Q62iJoNOfg …

kotlin ktor kotlin-native kotlin-multiplatform kotlin-multiplatform-mobile

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

是否可以使用 kotlin 多平台移动应用程序中的 C++ 库?

我有一个 C++ 库,需要从 android 和 iOS 中使用,所以我的想法是创建一个多平台模块,该模块将包装该库以从两个实现中使用它。

另一方面,我看到了 kotlin 本机使用 C 代码的示例: https://theprogrammershangout.com/resources/kotlin/native/creating-c-bindings.md/

这也是 kotlin 文档中的一个: https://kotlinlang.org/docs/native-c-interop.html

是否可以实现 jvm 和 iOS 的互操作性?

kotlin kotlin-multiplatform kotlin-multiplatform-mobile

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

如何在 Kotlin 多平台移动设备中实施 Firebase Crashlytics?

如果以前有人这样做过,你能告诉我你把 google-service.json 放在哪里了吗?android的依赖,你装了吗?在android模块中还是在公共模块中?在IOS上我也不知道如何开始。

firebase crashlytics kotlin-multiplatform-mobile

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

KMM - 如何将 Retrofit 添加到:共享模块(commonMain)

我想将 Retrofit 添加到 :shared 模块 (commonMain) 中。

sourceSets["commonMain"].dependencies {
    implementation("com.squareup.retrofit2:retrofit:2.9.0")
    implementation("com.squareup.retrofit2:converter-gson:2.9.0")
}
Run Code Online (Sandbox Code Playgroud)

但在commonMain我看不到 Retrofit 类。在androidMain我可以看到它。那是一种魔法。我没有将 Retrofit 添加到androidMain.

请帮我。提前致谢。

kotlin kotlin-multiplatform kotlin-multiplatform-mobile

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

使用 fastlane 构建 Kotlin Multiplatform Mobile 在 iOS 上失败

我遇到一个问题,为什么要尝试使用 Jenkins 管道和 fastlane 为 iOS 部分构建 KMM 项目。

Kotlin 版本:1.5.31
XCode 版本:13.1
Fastlane 版本:2.198.1
Ruby 版本:2.6.3p62

当在本地执行这些步骤时,它也会中断。fastlane 抛出的错误是import shared: no such module 'shared'

我发现如果您运行pod install && fastlane xcode_build构建刹车,但如果您第二次重复它,它就会成功并在 XCode 的 DerivedData 文件夹中创建 project.app 文件。

Jenkinsfile 在另一个非 KMM 项目的 iOS 项目上正常工作。

这是詹金斯文件

pipeline {
    options {
        buildDiscarder(logRotator(numToKeepStr: '5', artifactNumToKeepStr: '5'))
    }
    environment{
        FIREBASE_APP = 'some-app'
        FIREBASE_TOKEN = 'some-token'
        YOUR_CRED = credentials('KeychainPassword')
        PROJECT_NAME = 'project'
    }
    agent any
    stages {
        stage("Build and Deploy") {
            parallel {
                stage("iOS") { …
Run Code Online (Sandbox Code Playgroud)

ios kotlin fastlane jenkins-pipeline kotlin-multiplatform-mobile

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

使用 kotlinx-datetime KMM 获取本周的天数

如何使用 kotlinx.datetime KMM 库获取本周的日期?

例如。我想获取本周日期的列表,例如:

“星期一,07”“星期二,08”“星期三,09”,...)

这是使用Calendar 的类似实现:

fun getDaysOfWeek(): Array<String?> {
        val dateFormat = SimpleDateFormat("EEEEE\ndd", Locale.getDefault())
        val calendar = Calendar.getInstance()
        calendar.firstDayOfWeek = Calendar.MONDAY
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY)

        val days = arrayOfNulls<String>(7)
        for (i in 0..6) {
            days[i] = dateFormat.format(calendar.time)
            calendar.add(Calendar.DAY_OF_MONTH, 1)
        }

        return days
    }
Run Code Online (Sandbox Code Playgroud)

android kotlin kotlin-multiplatform kotlin-multiplatform-mobile kotlinx-datetime

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