Добавление зависимостей iOS
Зависимости Apple SDK (например, Foundation или Core Bluetooth) доступны в виде набора предварительно скомпилированных библиотек в проектах Kotlin Multiplatform Mobile. Они не требуют дополнительной конфигурации.
Вы также можете повторно использовать другие библиотеки и фреймворки из экосистемы iOS в своих наборах исходного кода iOS. Kotlin поддерживает взаимодействие с зависимостями Objective-C и Swift, если их API экспортированы в Objective-C с атрибутом @objc. Чистые зависимости Swift пока не поддерживаются.
Также поддерживается интеграция с менеджером зависимостей CocoaPods с тем же ограничением — вы не можете использовать чистые Swift-зависимости.
Мы рекомендуем использовать CocoaPods для управления зависимостями iOS в проектах Kotlin Multiplatform. Управлять зависимостями вручную следует только если вы хотите настроить процесс взаимодействия или у вас есть веская причина для этого.
С CocoaPods
Выполните настройку начальной интеграции CocoaPods.
-
Добавьте зависимость от библиотеки Pod из репозитория CocoaPods, которую вы хотите использовать, включив вызов функции
pod()вbuild.gradle(.kts)вашего проекта.kotlin { cocoapods { //.. pod("Alamofire") { version = "5.7.0" } } }kotlin { cocoapods { //.. pod('Alamofire') { version = '5.7.0' } } }Вы можете добавить следующие зависимости от библиотеки Pod:
Переимпортируйте проект.
Чтобы использовать зависимость в вашем Kotlin-коде, импортируйте пакет cocoapods.<library-name>. В данном примере это:
import cocoapods.Alamofire.*
Без CocoaPods
Если вы не хотите использовать CocoaPods, вы можете использовать инструмент cinterop для создания Kotlin-связей для объявлений Objective-C или Swift. Это позволит вызывать их из Kotlin-кода.
Шаги немного отличаются для библиотек и фреймворков, но идея остаётся прежней.
Скачайте свою зависимость.
Скомпилируйте её, чтобы получить её двоичные файлы.
Создайте специальный файл
.def, описывающий эту зависимость для cinterop.Настройте свой скрипт сборки для генерации связей во время сборки.
Добавление библиотеки без CocoaPods
Скачайте исходный код библиотеки и поместите его куда-то, откуда вы сможете сослаться на него из своего проекта.
Скомпилируйте библиотеку (авторы библиотеки обычно предоставляют руководство по этому процессу) и получите путь к двоичным файлам.
В своём проекте создайте файл
.def, напримерDateTools.def.Добавьте первую строку в этот файл:
language = Objective-C. Если вы хотите использовать чистую C-зависимость, опустите свойство языка.-
Укажите значения для двух обязательных свойств:
headersописывает, какие заголовки будут обработаны cinterop.packageустанавливает имя пакета, в который должны быть помещены эти объявления.
Например:
headers = DateTools.h package = DateTools
-
Добавьте информацию о взаимодействии с этой библиотекой в скрипт сборки:
Укажите путь к файлу
.def. Этот путь можно опустить, если ваш файл.defимеет такое же имя, как и cinterop, и расположен в каталогеsrc/nativeInterop/cinterop/.Укажите cinterop, где искать заголовочные файлы, используя опцию
includeDirs.Настройте линковку с двоичными файлами библиотеки.
kotlin { iosX64() { compilations.getByName("main") { val DateTools by cinterops.creating { // Path to .def file defFile("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 { iosX64 { compilations.main { cinterops { DateTools { // Path to .def file defFile("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.*
Добавление фреймворка без CocoaPods
Скачайте исходный код фреймворка и поместите его куда-то, откуда вы сможете сослаться на него из своего проекта.
Соберите фреймворк (авторы фреймворка обычно предоставляют руководство по этому процессу) и получите путь к двоичным файлам.
В своём проекте создайте файл
.def, напримерMyFramework.def.Добавьте первую строку в этот файл:
language = Objective-C. Если вы хотите использовать чистую C-зависимость, опустите свойство языка.-
Укажите значения для этих двух обязательных свойств:
modules– имя фреймворка, который должен быть обработан cinterop.package– имя пакета, в который должны быть помещены эти объявления.
Например:
modules = MyFramework package = MyFramework
-
Добавьте информацию о взаимодействии с фреймворком в скрипт сборки:
Укажите путь к файлу .def. Этот путь можно опустить, если ваш файл
.defимеет то же имя, что и cinterop, и находится в каталогеsrc/nativeInterop/cinterop/.Передайте имя фреймворка компилятору и линковщику, используя опцию
-framework. Передайте путь к исходным файлам и двоичным файлам фреймворка компилятору и линковщику, используя опцию-F.
kotlin { iosX64() { compilations.getByName("main") { val DateTools by cinterops.creating { // Path to .def file defFile("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 { iosX64 { compilations.main { cinterops { DateTools { // Path to .def file defFile("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-коде. Для этого импортируйте пакет, который вы настроите в свойстве пакета в файле .def. В данном примере это будет:
import MyFramework.*
Дополнительные сведения о взаимодействии Objective-C и Swift и настройке cinterop из Gradle.
Что дальше?
Ознакомьтесь с другими ресурсами по добавлению зависимостей в проекты с многоплатформенностью и узнайте больше о:
© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform-mobile-ios-dependencies.html