是否有任何 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 版本。
我想为 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 只是添加了一个额外的参数xcodeproj,gradle.properties并抱怨重复参数。
我还尝试了不同的路径(相对路径和绝对路径)xcodeproj。没运气。
如果我没记错的话,它曾经是开箱即用的。自动为 Android和iOS配置了一个新的 Kotlin Multiplatform Mobile 项目。我不确定发生了什么变化。可能有什么东西更新了。
这是 KMM 插件的错误吗?或者我可以在我的系统上做些什么来解决这个问题?
kotlin android-studio kotlin-multiplatform kotlin-multiplatform-mobile
我想在 mingwX64 Windows(可能还有其他平台)上执行一些基本的文件系统操作:打开、关闭、读取、重命名、获取元数据、列出目录中的文件。
我找到了一个承诺实现此功能的项目:KotlinxIO。然而,多年来并没有取得任何进展。
还有其他替代方案或解决方法吗?
我创建了一个新的 KMM 项目并选择 Cocoapods 作为 iOS 框架发行版,构建完成后立即抛出以下错误:
执行“pod install”失败,代码为 1。错误消息:
请检查文件“/Users/barryalan/AndroidStudioProjects/PersonalProjects/deleteThis/iosApp/Podfile”标头中是否包含以下行:source 'https://cdn.cocoapods.org'
请检查共享所依赖的每个目标是否包含以下依赖项:
鉴于这仍处于 alpha 阶段,我不能抱怨,但我确实需要一些关于如何解决此问题的指导。
我正在尝试读取/写入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),因此无法读取或写入任何文件。
在模块中iOSMain我androidMain可以访问FileSystem.SYSTEM. 这是预期的行为吗?这需要我为所有 okio api 编写一个expected/actual映射。或者还有其他方法吗?
或者我是否需要以不同的方式配置我的项目才能访问-ModuleFileSystem.SYSTEM内部commonMain?
shared/build.gradle
plugins {
kotlin("multiplatform") …Run Code Online (Sandbox Code Playgroud) 我正在开发适用于 iOS/Android 的 Kotlin 多平台 (KMP) 库。我已经为 JVM 编写了一些单元测试,为此我使用MockK来创建间谍和模拟,但 MockK 尚不完全支持 Kotlin 本机。
因此,我想知道其他从事 KMP 项目的人是如何为 iOS 平台编写单元测试的。一个例子将不胜感激。
我有以下项目结构
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文件)。
这是根项目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)我创建了一个默认的 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) 我有一个管理器类,它有一个 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) 今天我刚刚将我的 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) kotlin ×9
android ×2
kotlin-multiplatform-mobile ×2
cocoapods ×1
gradle ×1
ios ×1
kapt ×1
okio ×1
unit-testing ×1
uuid ×1