Kotlin/Native ЧаВо
Как запустить мою программу?
Определите функцию верхнего уровня fun main(args: Array<String>) или просто fun main(), если вас не интересуют переданные аргументы, убедитесь, что она не находится в пакете. Также можно использовать компиляторную опцию -entry, чтобы сделать любую функцию, принимающую Array<String> или не принимающую аргументов, и возвращающую Unit, точкой входа.
Какая модель управления памятью используется в Kotlin/Native?
Kotlin/Native использует автоматическую схему управления памятью, похожую на Java или Swift.
Как создать общую библиотеку?
Используйте компиляторную опцию -produce dynamic или binaries.sharedLib() в Gradle.
kotlin {
iosArm64("mylib") {
binaries.sharedLib()
}
}
Это создаст платформоспецифичный общий объект (.so на Linux, .dylib на macOS и .dll на Windows) и заголовок на языке C, позволяющий использовать все доступные публичные API вашей программы Kotlin/Native из кода C/C++.
Как создать статическую библиотеку или файл объекта?
Используйте компиляторную опцию -produce static или binaries.staticLib() в Gradle.
kotlin {
iosArm64("mylib") {
binaries.staticLib()
}
}
Это создаст платформоспецифичный статический объект (в формате библиотеки .a) и заголовок на языке C, позволяющий использовать все публичные API вашей программы Kotlin/Native из кода C/C++.
Как запустить Kotlin/Native через корпоративный прокси?
Поскольку Kotlin/Native необходимо загрузить платформоспецифичный компилятор, вам нужно указать -Dhttp.proxyHost=xxx -Dhttp.proxyPort=xxx как аргументы компилятора или gradlew, или установить его через переменную окружения JAVA_OPTS.
Как указать пользовательское префиксное имя Objective-C для моего Kotlin фреймворка?
Используйте опцию компилятора -module-name или соответствующее утверждение DSL в Gradle.
kotlin {
iosArm64("myapp") {
binaries.framework {
freeCompilerArgs += listOf("-module-name", "TheName")
}
}
}
kotlin {
iosArm64("myapp") {
binaries.framework {
freeCompilerArgs += ["-module-name", "TheName"]
}
}
}
Как переименовать iOS фреймворк?
По умолчанию имя iOS фреймворка — <project name>.framework. Чтобы установить пользовательское имя, используйте опцию baseName. Это также установит имя модуля.
kotlin {
iosArm64("myapp") {
binaries {
framework {
baseName = "TheName"
}
}
}
}
Как включить bitcode для моего Kotlin фреймворка?
По умолчанию плагин gradle добавляет его для iOS целевого устройства.
Для отладочной сборки он встраивает маркерные данные LLVM IR.
Для релизной сборки он встраивает bitcode как данные.
Или аргументы командной строки: -Xembed-bitcode (для релиза) и -Xembed-bitcode-marker (отладка)
Установка этого в Gradle DSL:
kotlin {
iosArm64("myapp") {
binaries {
framework {
// Use "marker" to embed the bitcode marker (for debug builds).
// Use "disable" to disable embedding.
embedBitcode("bitcode") // for release binaries.
}
}
}
}
Эти опции практически идентичны опциям clang's -fembed-bitcode/-fembed-bitcode-marker и swiftc's -embed-bitcode/-embed-bitcode-marker.
Почему я вижу InvalidMutabilityException?
Вероятно, это происходит, потому что вы пытаетесь изменить замороженный объект. Объект может перейти в замороженное состояние явным образом, как объекты, доступные из объектов, к которым применяется kotlin.native.concurrent.freeze, или неявно (т. е. доступные из enum или глобального объекта-синглтона — см. следующий вопрос).
Как сделать объект-синглтон изменяемым?
В настоящее время объекты-синглтоны неизменяемы (т. е. замораживаются после создания), и, как правило, считается хорошей практикой, чтобы глобальное состояние было неизменяемым. Если по какой-то причине вам нужен изменяемый объект внутри такого объекта, используйте аннотацию @konan.ThreadLocal на объекте. Также можно использовать класс kotlin.native.concurrent.AtomicReference, чтобы хранить разные указатели на замороженные объекты в замороженном объекте и автоматически обновлять их.
Как скомпилировать проект с предварительными версиями Kotlin/Native?
Сначала попробуйте предварительные версии.
В случае необходимости более свежей версии, вы можете скомпилировать Kotlin/Native из исходного кода: склонируйте репозиторий Kotlin и следуйте эти шагам.
© 2010–2022 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/native-faq.html