标签: kotlin-multiplatform

在 kotlin-multiplatform 上生成 UUID?

是否有任何 kotlin-multiplatform 通用函数来获取 UUID/GUID?

 // ideally something like this
 val newUUID = UUID() // "1598044e-5259-11e9-8647-d663bd873d93"
 println("newUUID = $newUUID")
Run Code Online (Sandbox Code Playgroud)

我不希望使用expect-actual 制作单独的Android 和iOS 版本。

uuid kotlin kotlin-multiplatform

13
推荐指数
2
解决办法
1万
查看次数

如何在 Android Studio 中为 Kotlin Multiplatform 配置 iOS 应用程序?

我想为 Android Studio 4.1.2 中的 Kotlin 多平台移动应用程序的 iOS 应用程序添加运行/调试配置。但是,iOS 的配置似乎存在问题。

在下面的屏幕截图中,您可以看到问题。在对话框“运行/调试配置”Android Studio 中抱怨

Error: Please specify Xcode project location in xcodeproj property of gradle.properties
Run Code Online (Sandbox Code Playgroud)

使用“修复”按钮不能解决问题。Android Studio 只是添加了一个额外的参数xcodeprojgradle.properties并抱怨重复参数。

我还尝试了不同的路径(相对路径和绝对路径)xcodeproj。没运气。

如果我没记错的话,它曾经是开箱即用的。自动为 AndroidiOS配置了一个新的 Kotlin Multiplatform Mobile 项目。我不确定发生了什么变化。可能有什么东西更新了。

这是 KMM 插件的错误吗?或者我可以在我的系统上做些什么来解决这个问题?

在此处输入图片说明

kotlin android-studio kotlin-multiplatform kotlin-multiplatform-mobile

13
推荐指数
1
解决办法
1639
查看次数

使用 Kotlin 多平台进行文件 IO

我想在 mingwX64 Windows(可能还有其他平台)上执行一些基本的文件系统操作:打开、关闭、读取、重命名、获取元数据、列出目录中的文件。

我找到了一个承诺实现此功能的项目:KotlinxIO。然而,多年来并没有取得任何进展。

还有其他替代方案或解决方法吗?

kotlin kotlin-native kotlin-multiplatform

13
推荐指数
2
解决办法
8885
查看次数

使用 cocoaPods 设置 KMM 项目在首次编译时失败

我创建了一个新的 KMM 项目并选择 Cocoapods 作为 iOS 框架发行版,构建完成后立即抛出以下错误:

执行“pod install”失败,代码为 1。错误消息:

请检查文件“/Users/barryalan/AndroidStudioProjects/PersonalProjects/deleteThis/iosApp/Podfile”标头中是否包含以下行:source 'https://cdn.cocoapods.org'

请检查共享所依赖的每个目标是否包含以下依赖项:

鉴于这仍处于 alpha 阶段,我不能抱怨,但我确实需要一些关于如何解决此问题的指导。

cocoapods kotlin-multiplatform kotlin-multiplatform-mobile

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

如何在 Kotlin 多平台项目中的commanMain 模块中使用 okio 读取文件?

我正在尝试读取/写入commonMain模块中的文件。

我使用 Android Studio 向导为 Android 和 iOS 创建了一个新的 Kotlin 多平台应用程序。( New -> New Project ... -> Koltin Multiplatform App)

然后我将 okio 添加为shared/build.gradle.kts文件中 common 的依赖项。

    sourceSets {
        val okio = "3.3.0"
        val commonMain by getting {
            dependencies {
                implementation("com.squareup.okio:okio:$okio")
            }
        }
        ...
Run Code Online (Sandbox Code Playgroud)

在模块 commonMain 中,我无法访问FileSystem.SYSTEM( Unresolved Reference: SYSTEM),因此无法读取或写入任何文件。

在模块中iOSMainandroidMain可以访问FileSystem.SYSTEM. 这是预期的行为吗?这需要我为所有 okio api 编写一个expected/actual映射。或者还有其他方法吗?

或者我是否需要以不同的方式配置我的项目才能访问-ModuleFileSystem.SYSTEM内部commonMain

shared/build.gradle

plugins {
    kotlin("multiplatform") …
Run Code Online (Sandbox Code Playgroud)

kotlin okio kotlin-multiplatform

13
推荐指数
0
解决办法
714
查看次数

Kotlin Multiplatform:如何在 iOS 单元测试中模拟对象

我正在开发适用于 iOS/Android 的 Kotlin 多平台 (KMP) 库。我已经为 JVM 编写了一些单元测试,为此我使用MockK来创建间谍和模拟,但 MockK 尚不完全支持 Kotlin 本机。

因此,我想知道其他从事 KMP 项目的人是如何为 iOS 平台编写单元测试的。一个例子将不胜感激。

android unit-testing ios kotlin kotlin-multiplatform

12
推荐指数
2
解决办法
1370
查看次数

将 kapt 与多平台子项目一起使用

我有以下项目结构

root-project
?   build.gradle.kts
?
????multiplatform-project
?   ?   build.gradle.kts 
?   ?
?   ????src
?       ?   kotlin
|       |   js
?   
????simple-kotlin-project
    ?   build.gradle.kts
Run Code Online (Sandbox Code Playgroud)

所以总共有 3 个项目(3 个build.gradle.kts文件)。

  1. 这是项目build.gradle.kts

    plugins {
        kotlin("jvm") version kotlinVersion apply false
        kotlin("kapt") version kotlinVersion apply false
        kotlin("multiplatform") version kotlinVersion apply false
    }
    
    subprojects {
        apply<JavaPlugin>()
    
        if (name.contains("multiplatform-project")) {
            apply(plugin = "org.jetbrains.kotlin.multiplatform")
        } else {
            apply(plugin = "kotlin")
        }
    
        apply(plugin = "kotlin-kapt")
    
        dependencies {
            implementation(kotlin("stdlib"))
            implementation(kotlin("reflect"))
            implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.0-M2")
    
            implementation("org.slf4j:slf4j-api:1.7.25")
            implementation("ch.qos.logback:logback-core:1.2.3")
            implementation("ch.qos.logback:logback-classic:1.2.3")
    
            testImplementation("junit:junit:$jUnitVersion")
        } …
    Run Code Online (Sandbox Code Playgroud)

gradle kotlin kapt gradle-kotlin-dsl kotlin-multiplatform

12
推荐指数
2
解决办法
1381
查看次数

Kotlin多平台默认项目运行iOs App时出错:无法解析com.android.tools.build:gradle:7.4.0-rc01

我创建了一个默认的 KMP 项目,没有进行任何更改。它在 Android 上运行良好,但是当我尝试在 iOS 上运行它时,它告诉我找不到 gradle 插件:

A problem occurred configuring root project 'KMPSandBox'.
> Could not resolve all files for configuration ':classpath'.
   > Could not resolve com.android.tools.build:gradle:7.4.0-rc01.
     Required by:
         project : > com.android.application:com.android.application.gradle.plugin:7.4.0-rc01
         project : > com.android.library:com.android.library.gradle.plugin:7.4.0-rc01
      > No matching variant of com.android.tools.build:gradle:7.4.0-rc01 was found. The consumer was configured to find a runtime of a library compatible with Java 8, packaged as a jar, and its dependencies declared externally, as well as attribute 'org.gradle.plugin.api-version' with value '7.5' …
Run Code Online (Sandbox Code Playgroud)

kotlin kotlin-multiplatform

12
推荐指数
2
解决办法
1万
查看次数

Kotlin MPP 期望/实际具有不同的签名

我有一个管理器类,它有一个 Android 和 iOS impl(来自第 3 方库)。“例如 MyManagerImpl()”。为了构建第 3 方管理器,iOS 不需要 Context,但 Android 需要。我创建了一个公共类“MyManager”,它提取了需要在 commonMain 中调用的所有公共方法。

//commonMain
expect class MyManager {
  fun method1()
  companion object Factory {
    makeManager(): MyManager
  }
}

val manager = MyManager.Factory.makeManager() // ex intended usage

//androidMain
MyManagerImpl(context: Context) {
  fun method1()
}

actual class MyManager private constructor(manager: MyManagerImpl) {
  ..
  actual companion object Factory {
    override fun makeManager(): MyManager {
      return MyManager(MyManagerImpl(?how to get context?))
    }
  }
}

//iosMain
MyManagerImpl() {
  fun method1()
}

actual class …
Run Code Online (Sandbox Code Playgroud)

kotlin kotlin-multiplatform

11
推荐指数
2
解决办法
4845
查看次数

Kotlin 多平台项目单元测试问题

今天我刚刚将我的 Android Studio 更新为

Android Studio 3.5.2
Build #AI-191.8026.42.35.5977832, built on October 31, 2019
JRE: 1.8.0_202-release-1483-b49-5587405 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.15.1
Run Code Online (Sandbox Code Playgroud)

我更新了Android Studio,因为当kotlin版本低于1.3.60时它会提示我错误。

但是我遇到了单元测试文件的问题。以前我可以毫无问题地运行单元测试。现在,当我单击函数名称(左侧)之外的运行按钮时,它会显示“Nothing Here”。

在此处输入图片说明

下面是我所有的依赖

// build.gradle

buildscript {
ext.kotlin_version = '1.3.60'
repositories {
    google()
    jcenter()
    maven { url "https://kotlin.bintray.com/kotlinx" }
}

dependencies {
    // classpath 'com.android.tools.build:gradle:3.4.1'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
}
}

allprojects {
  repositories {
    google()
    jcenter()
  }
}

task clean(type: Delete) {
   delete rootProject.buildDir
}


 apply plugin: 'kotlin-multiplatform'
 apply plugin: …
Run Code Online (Sandbox Code Playgroud)

android kotlin kotlin-multiplatform

10
推荐指数
1
解决办法
997
查看次数