Обзор и настройка CocoaPods
Kotlin/Native обеспечивает интеграцию с менеджером зависимостей CocoaPods. Вы можете добавлять зависимости от библиотек Pod, а также использовать многоплатформенный проект с нативными таргетами в качестве зависимости CocoaPods.
Вы можете управлять зависимостями Pod непосредственно в IntelliJ IDEA и воспользоваться дополнительными функциями, такими как подсветка кода и автодополнение. Вы можете скомпилировать весь Kotlin-проект с помощью Gradle и никогда не переключаться на Xcode.
Используйте Xcode только в тех случаях, когда вам необходимо писать код Swift/Objective-C или запускать ваше приложение на симуляторе или устройстве. Для корректной работы с Xcode необходимо обновить ваш Podfile.
В зависимости от вашего проекта и задач, вы можете добавлять зависимости между Kotlin-проектом и библиотекой Pod, а также Kotlin-проектом Gradle и Xcode-проектом.
Настройка среды для работы с CocoaPods
Установите менеджер зависимостей CocoaPods с помощью инструмента установки по вашему выбору:
Установите менеджер версий Ruby, если он у вас еще не установлен.
-
Установите Ruby. Вы можете выбрать конкретную версию:
rvm install ruby 3.0.0
-
Установите CocoaPods:
sudo gem install -n /usr/local/bin cocoapods
Установите rbenv с GitHub, если он у вас еще не установлен.
-
Установите Ruby. Вы можете выбрать конкретную версию:
rbenv install 3.0.0
-
Установите версию Ruby локально для определенной директории или глобально для всей машины:
rbenv global 3.0.0
-
Установите CocoaPods:
sudo gem install cocoapods
Вы можете установить менеджер зависимостей CocoaPods с помощью стандартной версии Ruby, доступной в macOS:
sudo gem install cocoapods
Установите Homebrew, если он у вас еще не установлен.
-
Установите CocoaPods:
brew install cocoapods
Если вы используете Kotlin до версии 1.7.0
Если ваша текущая версия Kotlin старше 1.7.0, дополнительно установите плагин cocoapods-generate:
sudo gem install -n /usr/local/bin cocoapods-generate
Если у вас возникнут проблемы во время установки, обратитесь к разделу Возможные проблемы и решения.
Добавление и настройка плагина Kotlin CocoaPods Gradle
Если ваша среда настроена правильно, вы можете создать новый Kotlin Multiplatform-проект и выбрать Менеджер зависимостей CocoaPods в качестве опции распространения iOS-фреймворка. Плагин автоматически сгенерирует проект для вас.
Если вы хотите настроить свой проект вручную:
-
В
build.gradle(.kts)вашего проекта примените плагин CocoaPods и Kotlin Multiplatform:plugins { kotlin("multiplatform") version "1.9.0" kotlin("native.cocoapods") version "1.9.0" } -
Настройте
version,summary,homepage, иbaseNameфайла Podspec в блокеcocoapods:plugins { kotlin("multiplatform") version "1.9.0" kotlin("native.cocoapods") version "1.9.0" } kotlin { cocoapods { // Required properties // Specify the required Pod version here. Otherwise, the Gradle project version is used. version = "1.0" summary = "Some description for a Kotlin/Native module" homepage = "Link to a Kotlin/Native module homepage" // Optional properties // Configure the Pod name here instead of changing the Gradle project name name = "MyCocoaPod" framework { // Required properties // Framework name configuration. Use this property instead of deprecated 'frameworkName' baseName = "MyFramework" // Optional properties // Specify the framework linking type. It's dynamic by default. isStatic = false // Dependency export export(project(":anotherKMMModule")) transitiveExport = false // This is default. // Bitcode embedding embedBitcode(BITCODE) } // Maps custom Xcode configuration to NativeBuildType xcodeConfigurationToNativeBuildType["CUSTOM_DEBUG"] = NativeBuildType.DEBUG xcodeConfigurationToNativeBuildType["CUSTOM_RELEASE"] = NativeBuildType.RELEASE } } Переимпортируйте проект.
Сгенерируйте обёртку Gradle для избежания проблем совместимости при сборке Xcode.
При применении плагина CocoaPods выполняется следующее:
Добавляет как
debug, так иreleaseфреймворки в качестве выходных бинарных файлов для всех macOS, iOS, tvOS и watchOS-таргетов.Создаёт задачу
podspec, которая генерирует файл Podspec для проекта.
Файл Podspec включает путь к выходному фреймворку и этапы скриптов, которые автоматизируют сборку этого фреймворка во время процесса сборки Xcode-проекта.
Обновление Podfile для Xcode
Если вы хотите импортировать свой Kotlin-проект в Xcode-проект, вам необходимо внести некоторые изменения в Podfile:
-
Если в вашем проекте есть зависимости от Git, HTTP или пользовательского репозитория Podspec, вы также должны указать путь к Podspec в Podfile.
Например, если вы добавляете зависимость от
podspecWithFilesExample, укажите путь к Podspec в Podfile:target 'ios-app' do # ... other dependencies ... pod 'podspecWithFilesExample', :path => 'cocoapods/externalSources/url/podspecWithFilesExample' end:pathдолжен содержать путь к файлу Pod. -
При добавлении библиотеки из пользовательского репозитория Podspec, вы также должны указать местоположение спецификаций в начале вашего Podfile:
source 'https://github.com/Kotlin/kotlin-cocoapods-spec.git' target 'kotlin-cocoapods-xcproj' do # ... other dependencies ... pod 'example' end
Если вы не внесете эти изменения в Podfile, задача podInstall завершится неудачно, и плагин CocoaPods отобразит сообщение об ошибке в журнале.
Ознакомьтесь с веткой withXcproject образцового проекта, в котором представлен пример интеграции Xcode с существующим Xcode-проектом под названием kotlin-cocoapods-xcproj.
Возможные проблемы и решения
Установка CocoaPods
Установка Ruby
CocoaPods создан с использованием Ruby, и вы можете установить его с помощью стандартного Ruby, доступного в macOS. Ruby 1.9 или выше имеет встроенный пакетный менеджер RubyGems, который помогает установить менеджер зависимостей CocoaPods.
Если у вас возникают проблемы с установкой и работой CocoaPods, следуйте этой инструкции по установке Ruby или обратитесь к сайту RubyGems для установки фреймворка.
Совместимость версий
Мы рекомендуем использовать последнюю версию Kotlin. Если ваша текущая версия старше 1.7.0, вам потребуется дополнительно установить плагин cocoapods-generate.
Однако, cocoapods-generate несовместим с Ruby 3.0.0 или более поздними версиями. В этом случае понизьте версию Ruby или обновите Kotlin до 1.7.0 или выше.
Модуль не найден
Вы можете столкнуться с ошибкой module 'SomeSDK' not found, связанной с проблемой C-интерфейса. Попробуйте эти обходные пути, чтобы избежать этой ошибки:
Укажите имя фреймворка
Просмотрите скачанную папку Pod
[shared_module_name]/build/cocoapods/synthetic/IOS/Pods/...на файлmodule.modulemap.-
Проверьте имя фреймворка внутри модуля, например
AppsFlyerLib {}. Если имя фреймворка не совпадает с именем Pod, укажите его явно:pod("Alamofire") { moduleName = "AppsFlyerLib" }
Проверьте файл определения
Если Pod не содержит файл .modulemap, например pod("NearbyMessages"), в сгенерированном файле .def, замените модули на заголовки с указанием основного заголовка:
tasks.named<org.jetbrains.kotlin.gradle.tasks.DefFileTask>("generateDefNearbyMessages").configure {
doLast {
outputFile.writeText("""
language = Objective-C
headers = GNSMessages.h
""".trimIndent())
}
}
См. документацию CocoaPods для получения дополнительной информации. Если ничего не помогает, и вы все еще сталкиваетесь с этой ошибкой, сообщите об этом в YouTrack.
© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/native-cocoapods.html