我在尝试为 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
嘿,我在 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
嘿,我正在尝试在 github 包中发布 kmm 库。我关注了这个医生。但我不明白
什么是project.findProperty("gpr.user")和("gpr.key")?
我用过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
我有一个其他 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
随着 Apple 宣布 Xcode Cloud 现已可供所有开发人员使用,我尝试将其设置为 Kotlin 多平台项目。老实说,开始有点困难。目前我在简单的测试操作中面临以下问题:
\nThe 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\nRun Code Online (Sandbox Code Playgroud)\n所以我阶段就尝试安装一个jdk ci_post_clone.sh。的输出java -version如下:
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\nRun Code Online (Sandbox Code Playgroud)\n还./gradlew -v输出:
\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) 我有两个多平台模块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 Studio 构建 KMM 项目。我还可以看到两个单独的配置,分别针对 AndroidApp 和 iOSApp。但 iOSApp 配置没有执行目标。它也没有在下拉列表中显示任何模拟器。我确实安装了 Xcode,并在 iPhone 模拟器中成功运行了其他 iOS 应用程序。
ps我用的是M1 mac
我正在尝试将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
我正在尝试删除用户的 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 …
我的带有 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 ×7
kotlin ×6
gradle ×3
kotlin-multiplatform-mobile ×3
xcode ×2
build.gradle ×1
ios ×1
kmm ×1
ktor ×1
realm ×1
swift ×1
swiftui ×1
xcode-cloud ×1