Spec-Zone.ru › Kotlin 2

Часто задаваемые вопросы о Kotlin/Native

Как запустить программу?

Определите функцию верхнего уровня fun main(args: Array<String>) или просто fun main(), если вам не нужны переданные аргументы. Убедитесь, что она не находится в пакете. Также можно использовать параметр компилятора -entry, чтобы назначить точкой входа любую функцию, принимающую Array<String> или не принимающую аргументы и возвращающую Unit.

Какова модель управления памятью в Kotlin/Native?

В Kotlin/Native используется автоматическая схема управления памятью, аналогичная схемам в Java и Swift.

Подробнее о диспетчере памяти Kotlin/Native

Как создать динамическую библиотеку?

Используйте параметр компилятора -produce dynamic или binaries.sharedLib() в файле сборки Gradle:

kotlin {
    iosArm64("mylib") {
        binaries.sharedLib()
    }
}

В результате создаются платформенный общий объект (.so в Linux, .dylib в macOS и .dll для целей Windows) и заголовочный файл языка C. Это позволяет использовать из кода C/C++ все общедоступные API программы на Kotlin/Native.

Пройдите руководство по созданию динамической библиотеки на Kotlin/Native

Как создать статическую библиотеку или объектный файл?

Используйте параметр компилятора -produce static или binaries.staticLib() в файле сборки Gradle:

kotlin {
    iosArm64("mylib") {
        binaries.staticLib()
    }
}

В результате создаются платформенный статический объект (формат библиотеки .a) и заголовочный файл языка C. Это позволяет использовать из кода C/C++ все общедоступные API программы на Kotlin/Native.

Как запускать 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?

Встраивание bitcode устарело в Xcode 14 и было удалено в Xcode 15 для всех целевых платформ Apple. Начиная с Kotlin 2.0.20 компилятор Kotlin/Native не поддерживает встраивание bitcode.

Если вы используете более ранние версии Xcode, но хотите перейти на Kotlin 2.0.20 или более поздние версии, отключите встраивание bitcode в проектах Xcode.

Как получать более подробные отчеты о сбоях для iOS?

Когда необработанное исключение Kotlin попадает в код iOS, инструменты для создания отчетов о сбоях могут показать расплывчатое сообщение о внутренней проблеме Kotlin/Native вместо фактической строки кода, в которой было выброшено исключение. Это происходит потому, что исходная трассировка стека Kotlin теряется к моменту регистрации сбоя.

Обойти эту проблему можно с помощью сторонних решений, например NSExceptionKt: оно преобразует неперехваченные исключения Kotlin в экземпляры NSException, благодаря чему инструмент для создания отчетов о сбоях захватывает правильную трассировку стека. Решение предоставляет специальные интеграции с популярными инструментами для создания отчетов о сбоях:

  • Bugsnag

  • Firebase Crashlytics

Как безопасно обращаться к объектам из разных корутин?

Чтобы безопасно обращаться к объекту или обновлять его из нескольких корутин в Kotlin/Native, используйте потокобезопасные конструкции, например @Volatile и AtomicReference.

Используйте @Volatile для аннотирования свойства var. Благодаря этому все операции чтения и записи в поле хранения свойства выполняются атомарно. Кроме того, изменения становятся сразу видны другим потокам. Когда другой поток обращается к этому свойству, он видит не только обновленное значение, но и изменения, произошедшие до обновления.

Вместо этого можно использовать AtomicReference, который поддерживает атомарное чтение и обновление. В Kotlin/Native он оборачивает volatile-переменную и выполняет атомарные операции. Kotlin также предоставляет набор типов для атомарных операций с конкретными типами данных. Можно использовать AtomicInt, AtomicLong, AtomicBoolean, AtomicArray, а также AtomicIntArray и AtomicLongArray.

Подробнее о доступе к общему изменяемому состоянию см. в документации по корутинам.

Как скомпилировать проект с еще не выпущенными версиями Kotlin/Native?

Сначала попробуйте предварительные версии.

Если вам нужна еще более свежая версия для разработки, можно собрать Kotlin/Native из исходного кода: клонируйте репозиторий Kotlin и выполните эти действия.

12 августа 2026 г.
Файлы лицензий для двоичных файлов Kotlin/NativeKotlin для Android

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/native-faq.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API