我正在尝试为我的 Kotlin/Native 项目提供支持ktor(kotlinx确切地说serialization)coroutines。所有库都适用于该项目的 Android 版本,但是当我尝试编译 Xcode 项目时,我收到错误消息,指出找不到kotlinx.serialization和库:kotlinx.coroutines
src/commonMain/kotlin/.../.kt:4:16: error: unresolved reference: coroutines
import kotlinx.coroutines.CoroutineDispatcher
^
src/commonMain/kotlin/.../.kt:5:16: error: unresolved reference: serialization
import kotlinx.serialization.json.JSON
Run Code Online (Sandbox Code Playgroud)
这是我的项目的 gradle 文件:
plugins {
id 'kotlin-multiplatform' version '1.3.11'
id 'kotlinx-serialization' version '1.3.0'
}
ext {
ktor_version = '1.0.1'
kotlinx_version = '1.1.0'
}
repositories {
maven { url "https://kotlin.bintray.com/ktor" }
maven { url "https://kotlin.bintray.com/kotlinx" }
google()
jcenter()
mavenCentral()
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android-extensions'
configurations { …Run Code Online (Sandbox Code Playgroud) 在下面的Kotlin/JVM System.exit(-1)程序中,使用错误退出代码停止程序的执行:
fun main(args: Array<String>) {
if (args.size < 2) {
println("too few args!")
System.exit(-1)
}
println("Hello, ${args[1]} from ${args[0]}")
}
Run Code Online (Sandbox Code Playgroud)
Kotlin/Native无权访问任何Java类,包括System.那么Kotlin/Native程序使用错误代码停止执行程序的等效函数是什么?
我正在尝试在私有CocoaPod中添加使用Kotlin/Native构建的销售框架,但是我收到错误:
pod repo push myCocoapodsRepo myProject.podspec --verbose"[iOS] xcodebuild: fatal error: lipo: input file (/Users/jeandaube/Library/Developer/Xcode/DerivedData/App-auugdpsmbbpvarfzghxatkvwftsn/Build/Products/Release-iphonesimulator/App.app/Frameworks/MyProject.framework/MyProject) must be a fat file when the -remove option is specified
我是否应该以某种方式改变我首先使用Konan导出框架的格式?
我正在尝试从JetBrains学习Kotlin Native如何使用本教程:https : //kotlinlang.org/docs/tutorials/native/interop-with-c.html
但是这些教程仅适用于macOS和Linux。有时我使用Windows计算机,但我想知道它在那里的工作方式。
如何在Windows中添加libcurl库,如何将其添加到libcurl.def文件中?
在任何地方都没有解释。
我正在尝试在Kotlin Multiplatform项目中使用cocoapods框架。所以我
.def文件cinterop配置build.gradle./gradlew cinteropFirebaseIos运行成功。它生成,.klib因此我可以看到kotlin代码中的类。但是,当我尝试运行iOS应用时,构建失败并显示以下消息:
显示最近的消息
>任务:app:linkDebugFrameworkIos
ld:找不到框架FirebaseDatabase
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld调用报告了错误
这是我的配置 build.gradle
fromPreset(presets.iosX64, 'ios') {
compilations.main {
outputKinds('FRAMEWORK')
cinterops {
firebase {
def proj = "${System.getProperty("user.home")}/Projects/kmpp"
def pods = "${proj}/iosApp/Pods"
defFile "${proj}/app/src/iosMain/c_interop/libfirebase.def"
includeDirs "${pods}/Firebase",
"${pods}/Firebase/CoreOnly/Sources",
"${pods}/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的.def文件:
language = Objective-C
headers = /Users/oleg/Projects/klug/crckalculator/iosApp/Pods/FirebaseCore/Firebase/Core/Public/FIRApp.h /Users/oleg/Projects/klug/crckalculator/iosApp/Pods/FirebaseDatabase/Firebase/Database/Public/FIRDatabase.h /Users/oleg/Projects/klug/crckalculator/iosApp/Pods/FirebaseCore/Firebase/Core/Public/FirebaseCore.h
compilerOpts = -framework FirebaseDatabase
linkerOpts = -framework FirebaseDatabase
Run Code Online (Sandbox Code Playgroud)
我如何找出问题所在?我错过了.def文件中的东西吗?在build.gradle?
我是 Kotlin 本机的初学者,我的目标是构建一个库,我们的 Rest API 包含它,我在 iOS 和 Android 上使用它。我知道ktor并在我的项目中实现了这一点,但是当我build通过Gradle获取异常运行项目时,我使用了以下对象kotr:
> Task :apiCore:androidProcessResources NO-SOURCE
> Task :apiCore:compileKotlinAndroid UP-TO-DATE
> Task :apiCore:androidMainClasses UP-TO-DATE
> Task :apiCore:androidJar UP-TO-DATE
> Task :apiCore:compileKotlinIOS
src/commonMain/kotlin/APICore.kt:3:8: error: unresolved reference: io
import io.ktor.client.HttpClient
^
src/commonMain/kotlin/APICore.kt:4:8: error: unresolved reference: io
import io.ktor.client.request.get
^
src/commonMain/kotlin/APICore.kt:10:17: error: unresolved reference:
HttpClient
val client = HttpClient()
^
Execution failed for task ':apiCore:compileKotlinIOS'.
> Process 'command '/Applications/Android
Studio.app/Contents/jre/jdk/Contents/Home/bin/java'' finished with
non-zero exit value 1
Run Code Online (Sandbox Code Playgroud)
和我 …
我正在开发一个多平台项目,iOS 和 JVM(我不直接针对 Android)。根据构建类型(调试或发布),我想配置日志记录级别(即仅打印发布中的错误)。由于没有BuildConfig可用的类,我如何从commonMain构建类型中知道?
我正在研究用 Kotlin/Native 编写的命令行工具的概念证明,因为它似乎是跨平台二进制文件的理想语言和运行时。
该命令行工具需要定期与 os 用户 $PATH 或 shell 环境中的操作系统可执行文件、命令和/或 shell 函数进行交互。但是,我在kotlin-native 示例或文档中没有看到任何可能指示如何执行以下操作的示例:
在 JVM 领域,我们可以使用java.lang.ProcessBuilder所有这些,但这显然在 Kotlin/Native 中不可用。
我找到了 cinterop/posixplatform.posix.system函数,但这并不能让您访问进程的流。
在我的网络研究中,我发现了一个非常好的 C教程,它表明唯一干净的方法是使用forkanddup2等,但我不清楚这是否或如何转换为 Kotlin/Native 代码。
UIKit 被设计为通过子类和重写方法来使用。
通常,drawRectUIView 的 Objective-C 方法在 SWIFT 中是这样实现的:
import UIKit
import Foundation
class SmileView: UIView {
override func draw(_ rect: CGRect) {
super.draw(rect)
let smile = ":)" as NSString
smile.draw(in: rect, withAttributes: nil)
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,Kotlin 中的 UIKit 导入将这些函数定义为无法重写的扩展函数。
有人成功通过自定义配置从 Kotlin 子类化 UIView 吗cinterop?
I\'ve downloaded a fresh IntelliJ IDEA with the Kotlin multiplatform plugin and created a project using the Native application project template. This template creates a Main.kt file with the content:
fun main() {\n println("Hello, Kotlin/Native!")\n}\nRun Code Online (Sandbox Code Playgroud)\nAs well as many other gradle files referencing kotlin("multiplatform") version "1.7.20". I can build and run the project from inside IntelliJ IDEA, but I see no hello world:
我只能看到 gradle 输出和成功结果,但没有Hello Kotlin/Native! message anywhere. I\'ve tried changing the runDebugExecutableNative …
kotlin ×10
kotlin-native ×10
ios ×3
android ×1
cocoapods ×1
gradle ×1
java ×1
native ×1
objective-c ×1
swift ×1