标签: kotlin-multiplatform

实际类型别名“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
查看次数

如何使用登录 kotlin 多平台 Moblie

嘿,我在 Ktor 工作。我找到了这个答案来显示特定平台 iOS 和 Android 的日志。但是当我通过 gradle 构建它时,在终端上运行此命令时出现错误。正常构建成功,没有任何错误,但是当我使用以下命令时出现错误。

./gradlew build --warning-mode all 
Run Code Online (Sandbox Code Playgroud)

错误

* What went wrong:
Could not determine the dependencies of task ':kotlinmultiplatformsharedmodule:compileIosMainKotlinMetadata'.
> Could not resolve all artifacts for configuration ':kotlinmultiplatformsharedmodule:allSourceSetsCompileDependenciesMetadata'.
   > Could not resolve io.ktor:ktor-client-logging-native:2.0.1.
     Required by:
         project :kotlinmultiplatformsharedmodule
      > Could not resolve io.ktor:ktor-client-logging-native:2.0.1.
         > Could not get resource 'https://s3.amazonaws.com/salesforcesos.com/android/maven/release/io/ktor/ktor-client-logging-native/2.0.1/ktor-client-logging-native-2.0.1.pom'.
            > Could not GET 'https://s3.amazonaws.com/salesforcesos.com/android/maven/release/io/ktor/ktor-client-logging-native/2.0.1/ktor-client-logging-native-2.0.1.pom'. Received status code 403 from server: Forbidden
      > Could not resolve io.ktor:ktor-client-logging-native:2.0.1.
         > Could not get resource 'https://mobile-sdk.jumio.com/io/ktor/ktor-client-logging-native/2.0.1/ktor-client-logging-native-2.0.1.pom'. …
Run Code Online (Sandbox Code Playgroud)

android kotlin ktor kotlin-multiplatform kotlin-multiplatform-mobile

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

无法在 build.gradle.kts 中创建域对象“gpr”(MavenPublication)

嘿,我正在尝试在 github 包中发布 kmm 库。我关注了这个医生。但我不明白

  1. 什么是project.findProperty("gpr.user")("gpr.key")

  2. 我用过macos所以System.getenv("USERNAME")System.getenv("TOKEN")相关吗?

构建.gradle.kts

plugins {
    kotlin("multiplatform") version "1.6.21"
    id("com.android.library")
    id("maven-publish")
}

group = "com.abc"
version = "0.0.1"

repositories {
    google()
    mavenCentral()
}

kotlin {
    android {
        publishLibraryVariants("release", "debug")
    }
    android()
    iosX64()
    iosArm64()
    iosSimulatorArm64()

    sourceSets {
        val ktorVersion = "2.0.0"
        val commonMain by getting 
        val androidMain by getting {
            val iosX64Main by getting
            val iosArm64Main by getting
            val iosSimulatorArm64Main by getting
            val iosMain by creating { …
Run Code Online (Sandbox Code Playgroud)

android build.gradle maven-publish gradle-kotlin-dsl kotlin-multiplatform

5
推荐指数
0
解决办法
948
查看次数

未解决的参考 iosMain Kotlin Multiplatform

我有一个其他 KMM 项目正在使用的 Kotlin 多平台库。我正在尝试构建这些 KMM 项目之一的 iOS 应用程序,但首先我需要将库二进制文件发布到 Maven 存储库。

Unresolved reference当尝试构建 iOS ARM 64 二进制文件时,我正在使用的库之一失败了。它仅在 gradle task 上失败compileIosMainKotlinMetadata,构建项目工作完美,但由于此错误,我无法生成二进制文件。

这是我常见的多平台 lib 设置 gradle:( kotlin-multiplatform-lib-setup)

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

kotlin {
    android {
        publishAllLibraryVariants()
    }
    ios()

    sourceSets {
         commonTest {
             dependencies {
                 implementation(kotlin("test-common"))
                 implementation(kotlin("test-annotations-common"))
             }
         }

        val androidTest by getting {
            dependencies {
                implementation(kotlin("test-junit"))
                implementation("junit:junit:4.13.2")
            }
        }
    }

    tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
        kotlinOptions.jvmTarget = "1.8"
    }
}

android {
    compileSdkVersion(31)

    defaultConfig {
        minSdkVersion(23)
        targetSdkVersion(31)
    }

    compileOptions { …
Run Code Online (Sandbox Code Playgroud)

android gradle kotlin kotlin-multiplatform kotlin-multiplatform-mobile

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

使用 Xcode Cloud 构建 Kotlin 多平台应用程序

随着 Apple 宣布 Xcode Cloud 现已可供所有开发人员使用,我尝试将其设置为 Kotlin 多平台项目。老实说,开始有点困难。目前我在简单的测试操作中面临以下问题:

\n
The operation couldn\xe2\x80\x99t be completed. Unable to locate a Java Runtime.\nPlease visit http://www.java.com for information on installing Java.\nCommand PhaseScriptExecution failed with a nonzero exit code\n
Run Code Online (Sandbox Code Playgroud)\n

所以我阶段就尝试安装一个jdk ci_post_clone.sh。的输出java -version如下:

\n
openjdk version "17.0.2" 2022-01-18\nOpenJDK Runtime Environment (build 17.0.2+8-86)\nOpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)\nInstalled java\n
Run Code Online (Sandbox Code Playgroud)\n

./gradlew -v输出:

\n
\nShowing All Messages\n------------------------------------------------------------\n\nGradle 7.4.2\n\n------------------------------------------------------------\nKotlin:       1.5.31\nGroovy:       3.0.9\nAnt:          Apache Ant(TM) version 1.10.11 compiled on July 10 2021\nJVM: …
Run Code Online (Sandbox Code Playgroud)

xcode kotlin kotlin-multiplatform xcode-cloud

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

Kotlin Multiplatform:无法从另一个模块的 androidMain 源集中引用 commonMain 源集中的类

我有两个多平台模块shared以及other一个针对 Android 和 iOS 的标准多平台模板项目。

sharedcommonMain在源集中定义一个类

class SharedGreeting()
Run Code Online (Sandbox Code Playgroud)

othershared在 gradle 文件中设置为依赖如下:

val commonMain by getting {
            dependencies {
                implementation(project(":shared"))
            }
        }
Run Code Online (Sandbox Code Playgroud)

在其androidMain源集中,它尝试引用SharedGreeting某个类 fx:

class AndroidGreeter{
   val foo = SharedGreeting()
}
Run Code Online (Sandbox Code Playgroud)

但无论我尝试什么,当我尝试引用共享类时都会遇到 IDE 错误,并且我必须手动添加导入语句。

不过代码编译和部署没有问题!关于我遗漏或误解的内容有什么想法吗?或者这是 KMM 中的一个错误?

gradle 文件的完整副本other

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

version = "1.0"

kotlin {
    android()
    iosX64()
    iosArm64()
    iosSimulatorArm64()

    cocoapods {
        summary = "Some description for the Shared Module"
        homepage = "Link …
Run Code Online (Sandbox Code Playgroud)

android kotlin-multiplatform kmm

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

KMM 项目中找不到 iOS 模拟器

我正在尝试使用 Android Studio 构建 KMM 项目。我还可以看到两个单独的配置,分别针对 AndroidApp 和 iOSApp。但 iOSApp 配置没有执行目标。它也没有在下拉列表中显示任何模拟器。我确实安装了 Xcode,并在 iPhone 模拟器中成功运行了其他 iOS 应用程序。

ps我用的是M1 mac

在此输入图像描述

xcode android ios android-studio kotlin-multiplatform

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

(未找到名称为“androidMain”的 KotlinSourceSet。)如何将 android 添加为 Kotlin 多平台项目的构建目标

我正在尝试将android()构建目标添加到 Kotlin 多平台库,以便我可以为 android 目标添加特定的库。所有其他目标(jvm、linux、ios)都工作正常,但 android 似乎有问题,因为 KotlinSourceSet 没有像其他目标一样创建。

这就是我收到错误的地方:

未找到名为“androidMain”的 KotlinSourceSet。

我想知道,我必须手动添加 SourceSet 吗?我是否错过了一些关键的构建步骤?

这是我的gradle.build.kts

plugins {
    id("maven-publish")
    kotlin("multiplatform") version "1.8.0"

}

buildscript {
    repositories {
        google()
    }
    dependencies {
        classpath ("com.android.tools.build:gradle:4.2.2")
        classpath ("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0")
    }
}

group = "zzz.xxxx"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
}

kotlin {
    jvm()
    linuxX64("linux")
    ios()
    android()

    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation("...")
            }
        }
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test")) 
            }
        }
        val jvmMain …
Run Code Online (Sandbox Code Playgroud)

gradle kotlin android-gradle-plugin kotlin-multiplatform kotlin-gradle-plugin

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

目前仅支持在主线程上从 Swift/Objective-C 调用 Kotlin 挂起函数

我正在尝试删除用户的 fcm 令牌,然后注销。

但我不能这样做,因为我收到了错误'Calling Kotlin suspend functions from Swift/Objective-C is currently supported only on main thread'

似乎挂起函数会以某种方式挂起下一个块?

repo.deleteToken 方法:

 suspend fun deleteToken(token: String) {
        val userId = appService.currentUser!!.id
            realm.write {
                var user = query<UserInfo>("_id = $0", userId).first().find()
                if (user != null) {
                    user = findLatest(user)!!.also {
                        it.FCMToken.remove(token)
                    }
                    copyToRealm(user)
                }
        }
    }
Run Code Online (Sandbox Code Playgroud)

和 repo.logout:

suspend fun doLogout() {
        appService.currentUser?.logOut()
    }
Run Code Online (Sandbox Code Playgroud)

我的注销方法删除令牌并尝试注销:

func doLogout(){
        
        repo.deleteToken(token: myFCMToken){error in
            isLoginShown = true

            repo.doLogout(){error in
                
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我注销时:*** Terminating app …

realm swift kotlin-multiplatform kotlin-coroutines swiftui

5
推荐指数
2
解决办法
1929
查看次数

Compose Multiplatform - gradle 插件构建错误

我的带有 SQLDelight DB 的 Compose 多平台项目在没有kotlinx-atomicfu插件的情况下无法构建,但当它处于活动状态时,它会与sqldelight插件发生冲突。同时,我可以在模拟器上运行它,因此问题仅在重建过程中出现。

一开始我收到本主题中提到的错误

e: java.lang.IllegalStateException: e: Could not find "../shared/build/kotlinTransformedMetadataLibraries/commonMain/org.jetbrains.kotlinx-atomicfu-0.17.3-nativeInterop-8G5yng.klib" in [/Users/<user>/Library/Application Support/kotlin/daemon]

解决方案是在顶级 build.gradle.kts 中添加几行并具有kotlinx-atomicfu依赖项

buildscript {
    dependencies {
        // Use the same version in the error
        classpath("org.jetbrains.kotlinx:atomicfu-gradle-plugin:0.17.3")
    }
}

allprojects {
    apply(plugin = "kotlinx-atomicfu")    
}
Run Code Online (Sandbox Code Playgroud)

添加此块后,构建会继续进行,但随后会失败,并在共享/iosMain 的MainViewController 中出现多个错误

package com.user.kmmtutorial

import androidx.compose.ui.window.ComposeUIViewController

fun MainViewController() = ComposeUIViewController {
    App()
}
Run Code Online (Sandbox Code Playgroud)

错误:

ERROR: Exception while analyzing expression in (6,5) in ../shared/src/iosMain/kotlin/com/user/kmmtutorial/MainViewController.kt
Attachments:
causeThrowable
java.lang.NullPointerException
    at androidx.compose.compiler.plugins.kotlin.ComposeFqNamesKt$makeComposableAnnotation$1.getType(ComposeFqNames.kt:148)
(...)

Exception while …
Run Code Online (Sandbox Code Playgroud)

android gradle kotlin kotlin-multiplatform

5
推荐指数
0
解决办法
398
查看次数