Добавление зависимостей iOS
Зависимости Apple SDK (например, Foundation или Core Bluetooth) доступны в проектах Kotlin Multiplatform в виде набора готовых библиотек. Дополнительная настройка не требуется.
В исходных наборах iOS также можно повторно использовать другие библиотеки и фреймворки из экосистемы iOS. Kotlin поддерживает взаимодействие с зависимостями Objective-C и Swift, если их API экспортируются в Objective-C с атрибутом @objc. Чистые зависимости Swift пока не поддерживаются.
Для работы с зависимостями iOS в проектах Kotlin Multiplatform можно управлять ими с помощью инструмента cinterop или использовать менеджер зависимостей CocoaPods (чистые pod-зависимости Swift не поддерживаются).
С помощью cinterop
С помощью инструмента cinterop можно создать привязки Kotlin для объявлений Objective-C или Swift. Это позволит вызывать их из кода Kotlin.
Шаги немного различаются для библиотек и фреймворков, но общий порядок действий выглядит так:
Загрузите зависимость.
Соберите её, чтобы получить двоичные файлы.
Создайте специальный
.defфайл определения, описывающий эту зависимость для cinterop.Измените сценарий сборки, чтобы во время сборки создавались привязки.
Добавление библиотеки
Загрузите исходный код библиотеки и поместите его в место, на которое можно ссылаться из проекта.
Соберите библиотеку (обычно авторы библиотеки предоставляют инструкции по сборке) и получите путь к двоичным файлам.
В проекте создайте файл
.def, напримерDateTools.def.Добавьте в этот файл первую строку:
language = Objective-C. Если вы хотите использовать чистую зависимость C, опустите свойство языка.-
Укажите значения двух обязательных свойств:
headersзадаёт заголовочные файлы, которые будут обработаны cinterop.packageзадаёт имя пакета, в который следует поместить эти объявления.
Например:
headers = DateTools.h package = DateTools
-
Добавьте в сценарий сборки сведения о взаимодействии с этой библиотекой:
Укажите путь к файлу
.def. Этот путь можно опустить, если файл.defназывается так же, как cinterop, и находится в каталогеsrc/nativeInterop/cinterop/.Укажите cinterop, где искать заголовочные файлы, с помощью параметра
includeDirs.Настройте компоновку с двоичными файлами библиотеки.
kotlin { iosArm64() { compilations.getByName("main") { val DateTools by cinterops.creating { // Path to the .def file definitionFile.set(project.file("src/nativeInterop/cinterop/DateTools.def")) // Directories for header search (an analogue of the -I<path> compiler option) includeDirs("include/this/directory", "path/to/another/directory") } val anotherInterop by cinterops.creating { /* ... */ } } binaries.all { // Linker options required to link to the library. linkerOpts("-L/path/to/library/binaries", "-lbinaryname") } } }kotlin { iosArm64 { compilations.main { cinterops { DateTools { // Path to the .def file definitionFile = project.file("src/nativeInterop/cinterop/DateTools.def") // Directories for header search (an analogue of the -I<path> compiler option) includeDirs("include/this/directory", "path/to/another/directory") } anotherInterop { /* ... */ } } } binaries.all { // Linker options required to link to the library. linkerOpts "-L/path/to/library/binaries", "-lbinaryname" } } } Соберите проект.
Теперь эту зависимость можно использовать в коде Kotlin. Для этого импортируйте пакет, заданный в свойстве package файла .def. В приведённом выше примере это будет:
import DateTools.*
Добавление фреймворка
Загрузите исходный код фреймворка и поместите его в место, на которое можно ссылаться из проекта.
Соберите фреймворк (обычно авторы фреймворка предоставляют инструкции по сборке) и получите путь к двоичным файлам.
В проекте создайте файл
.def, напримерMyFramework.def.Добавьте в этот файл первую строку:
language = Objective-C. Если вы хотите использовать чистую зависимость C, опустите свойство языка.-
Укажите значения двух обязательных свойств:
modules— имя фреймворка, который должен обрабатывать cinterop.package— имя пакета, в который следует поместить эти объявления.
Например:
modules = MyFramework package = MyFramework
-
Добавьте в сценарий сборки сведения о взаимодействии с фреймворком:
Укажите путь к файлу .def. Этот путь можно опустить, если файл
.defназывается так же, как cinterop, и находится в каталогеsrc/nativeInterop/cinterop/.Передайте имя фреймворка компилятору и компоновщику с помощью параметра
-framework. Передайте путь к исходным файлам и двоичным файлам фреймворка компилятору и компоновщику с помощью параметра-F.
kotlin { iosArm64() { compilations.getByName("main") { val DateTools by cinterops.creating { // Path to the .def file definitionFile.set(project.file("src/nativeInterop/cinterop/DateTools.def")) compilerOpts("-framework", "MyFramework", "-F/path/to/framework/") } val anotherInterop by cinterops.creating { /* ... */ } } binaries.all { // Tell the linker where the framework is located. linkerOpts("-framework", "MyFramework", "-F/path/to/framework/") } } }kotlin { iosArm64 { compilations.main { cinterops { DateTools { // Path to the .def file definitionFile = project.file("src/nativeInterop/cinterop/MyFramework.def") compilerOpts("-framework", "MyFramework", "-F/path/to/framework/") } anotherInterop { /* ... */ } } } binaries.all { // Tell the linker where the framework is located. linkerOpts("-framework", "MyFramework", "-F/path/to/framework/") } } } Соберите проект.
Теперь эту зависимость можно использовать в коде Kotlin. Для этого импортируйте пакет, заданный в свойстве package файла .def. В приведённом выше примере это будет:
import MyFramework.*
Подробнее о взаимодействии Swift/Objective-C и настройке cinterop в Gradle.
С помощью CocoaPods
Выполните начальную настройку интеграции с CocoaPods.
-
Добавьте зависимость от библиотеки Pod из репозитория CocoaPods, которую хотите использовать, добавив вызов функции
pod()вbuild.gradle(.kts)проекта.kotlin { cocoapods { version = "2.0" //.. pod("SDWebImage") { version = "5.20.0" } } }kotlin { cocoapods { version = '2.0' //.. pod('SDWebImage') { version = '5.20.0' } } }Можно добавить следующие зависимости от библиотеки Pod:
В IntelliJ IDEA выберите Сборка | Перезагрузить все проекты Gradle (или в Android Studio выберите Файл | Синхронизировать проект с файлами Gradle), чтобы повторно импортировать проект.
Чтобы использовать зависимость в коде Kotlin, импортируйте пакет cocoapods.<library-name>. В приведённом выше примере это:
import cocoapods.SDWebImage.*
Что дальше?
Ознакомьтесь с другими материалами о добавлении зависимостей в мультиплатформенные проекты и узнайте больше о следующем:
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform/multiplatform-ios-dependencies.html