我在尝试为 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
我想知道如何在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
我正在尝试向 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”部分不应该在那里,但不知道如何删除它。
我正在尝试coroutines在Kotlin Multiplatform项目中使用。我也没有经验。
我正在尝试调用此函数
fun startFlow {
coroutineScope.launch {
withContext(defaultDispatcher) {
myFlow.collect { next -> onNext(next) }
}
}
}
Run Code Online (Sandbox Code Playgroud)
coroutineScope上iOS是这样的
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。此问题仅存在于 中iOS,Android …
kotlin-multiplatform kotlin-coroutines kotlin-multiplatform-mobile
我使用的是 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。
kotlin ktor kotlin-native kotlin-multiplatform kotlin-multiplatform-mobile
我有一个 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 的互操作性?
如果以前有人这样做过,你能告诉我你把 google-service.json 放在哪里了吗?android的依赖,你装了吗?在android模块中还是在公共模块中?在IOS上我也不知道如何开始。
我想将 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.
请帮我。提前致谢。
我遇到一个问题,为什么要尝试使用 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
如何使用 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
kotlin-multiplatform-mobile ×10
kotlin ×6
android ×3
crashlytics ×1
fastlane ×1
firebase ×1
gradle ×1
ios ×1
ktor ×1
sqldelight ×1
unit-testing ×1