Spec-Zone.ru › Kotlin 1.9

Обзор и настройка 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 с помощью инструмента установки по вашему выбору:

  1. Установите менеджер версий Ruby, если он у вас еще не установлен.

  2. Установите Ruby. Вы можете выбрать конкретную версию:

    rvm install ruby 3.0.0
    
  3. Установите CocoaPods:

    sudo gem install -n /usr/local/bin cocoapods
    
  1. Установите rbenv с GitHub, если он у вас еще не установлен.

  2. Установите Ruby. Вы можете выбрать конкретную версию:

    rbenv install 3.0.0
    
  3. Установите версию Ruby локально для определенной директории или глобально для всей машины:

    rbenv global 3.0.0
    
  4. Установите CocoaPods:

    sudo gem install cocoapods
    

Этот способ установки не работает на устройствах с процессорами Apple M. Используйте другие инструменты для настройки среды для работы с CocoaPods.

Вы можете установить менеджер зависимостей CocoaPods с помощью стандартной версии Ruby, доступной в macOS:

sudo gem install cocoapods

Установка CocoaPods с помощью Homebrew может привести к проблемам совместимости.

При установке CocoaPods, Homebrew также устанавливает gem Xcodeproj, необходимый для работы с Xcode. Однако, его нельзя обновить с помощью Homebrew, и если установленная версия Xcodeproj не поддерживает последнюю версию Xcode, у вас возникнут ошибки при установке Pod. В этом случае, попробуйте другие инструменты для установки CocoaPods.

  1. Установите Homebrew, если он у вас еще не установлен.

  2. Установите CocoaPods:

    brew install cocoapods
    

Если вы используете Kotlin до версии 1.7.0

Если ваша текущая версия Kotlin старше 1.7.0, дополнительно установите плагин cocoapods-generate:

sudo gem install -n /usr/local/bin cocoapods-generate

Обратите внимание, что cocoapods-generate не мог быть установлен на Ruby 3.0.0 и выше. Если это ваш случай, понизьте версию Ruby или обновите Kotlin до версии 1.7.0 или выше.

Если у вас возникнут проблемы во время установки, обратитесь к разделу Возможные проблемы и решения.

Добавление и настройка плагина Kotlin CocoaPods Gradle

Если ваша среда настроена правильно, вы можете создать новый Kotlin Multiplatform-проект и выбрать Менеджер зависимостей CocoaPods в качестве опции распространения iOS-фреймворка. Плагин автоматически сгенерирует проект для вас.

Если вы хотите настроить свой проект вручную:

  1. В build.gradle(.kts) вашего проекта примените плагин CocoaPods и Kotlin Multiplatform:

    plugins {
        kotlin("multiplatform") version "1.9.0"
        kotlin("native.cocoapods") version "1.9.0"
    }
    
  2. Настройте 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
        }
    }
    

    См. полный синтаксис Kotlin DSL в репозитории плагина Kotlin Gradle.

  3. Переимпортируйте проект.

  4. Сгенерируйте обёртку 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 переимпортируйте проект.

Если вы не внесете эти изменения в 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-интерфейса. Попробуйте эти обходные пути, чтобы избежать этой ошибки:

Укажите имя фреймворка

  1. Просмотрите скачанную папку Pod [shared_module_name]/build/cocoapods/synthetic/IOS/Pods/... на файл module.modulemap.

  2. Проверьте имя фреймворка внутри модуля, например 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.

Последнее изменение: 14 июля 2023
Kotlin/Native как фреймворк для Apple – учебник Добавление зависимостей от библиотеки Pod

© 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

Spec-Zone.ru

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