Переключение проекта Kotlin Multiplatform с CocoaPods на зависимости SwiftPM
Если у вас есть модуль KMP с зависимостями CocoaPods и вы хотите перейти на пакеты Swift с помощью импорта SwiftPM, выполните следующие действия:
Обновите скрипт сборки, добавив зависимости SwiftPM и соответствующую конфигурацию
Полностью или частично отключите интеграцию с CocoaPods в зависимости от структуры проекта
Обновление скрипта сборки
Чтобы обновить сборку, следуйте инструкциям на странице импорта SwiftPM:
Например, если вы используете pod FirebaseAnalytics:
Убедитесь, что настроили плагин Kotlin Multiplatform Gradle для использования версии 2.4.20-RC3.
-
Добавьте пакет Swift
FirebaseAnalyticsв блокswiftPMDependencies {}:// projectDir/sharedLogic/build.gradle.kts kotlin { swiftPMDependencies { swiftPackage( url = url("https://github.com/firebase/firebase-ios-sdk.git"), version = from("12.5.0"), products = listOf(product("FirebaseAnalytics")), ) } cocoapods { // ... pod("FirebaseAnalytics") { version = "12.5.0" // ... } } } Выполните действие Синхронизировать проект с файлами Gradle, чтобы импортировать API из пакета Swift.
-
Обновите код, чтобы использовать API, импортированные из пакета Swift. Если pod и соответствующий пакет Swift предоставляют совершенно одинаковые API, достаточно обновить директивы импорта Kotlin, например:
import cocoapods.FirebaseAnalytics.FIRAnalyticsimport swiftPMImport.org.example.package.FIRAnalytics -
Если в скрипте сборки используется блок
cocoapods.framework {}, перенесите эту конфигурацию в блокbinaries.framework {}, например:kotlin { iosArm64() iosSimulatorArm64() cocoapods { framework { baseName = "Shared" isStatic = true } } }kotlin { listOf( iosArm64(), iosSimulatorArm64(), ).forEach { iosTarget -> iosTarget.binaries.framework { baseName = "Shared" isStatic = true } } }
Перенастройка проекта Xcode
Если вы используете плагин CocoaPods Gradle (kotlin("native.cocoapods")), перед переходом на SwiftPM необходимо перенастроить проект Xcode для использования прямой интеграции. Инструменты импорта SwiftPM могут сгенерировать команду оболочки для внесения необходимых изменений в файл .xcodeproj.
Откройте проект в Xcode (в IntelliJ IDEA выберите Файл | Открыть проект в Xcode).
Соберите проект в Xcode (Продукт | Собрать). Сборка должна завершиться с ошибкой, но в сообщении об ошибке будет содержаться нужная команда.
-
Чтобы просмотреть ошибки сборки в Xcode, выберите Вид | Навигаторы | Отчёт, а затем выберите в фильтре вверху пункт Только ошибки. Команда выглядит следующим образом и содержит правильные пути к вашему проекту:
XCODEPROJ_PATH='/path/to/project/iosApp/iosApp.xcodeproj' GRADLE_PROJECT_PATH=':kotlin-library' '/path/to/project/gradlew' -p '/path/to/project' ':kotlin-library:integrateEmbedAndSign' ':kotlin-library:integrateLinkagePackage'
Вызов
grepв конце находит конкретное сообщение об ошибке и команду, которую нужно выполнить. В каталоге
/path/to/project/iosAppвыполните сгенерированную команду в терминале. Она изменит файл.xcodeprojвашего проектаiosApp, чтобы во время сборки запускалась задачаembedAndSignAppleFrameworkForXcode, которая добавляет фазу компиляции Kotlin Multiplatform в сборку для iOS.В IntelliJ IDEA выберите Инструменты | Swift Package Manager | Разрешить зависимости, чтобы разрешить зависимости SwiftPM, объявленные в файле
build.gradle.kts.
Теперь приложение для iOS использует зависимости SwiftPM. Вы можете отключить плагин CocoaPods и удалить интеграцию pod.
Удаление интеграции CocoaPods с KMP
Если вы заменили все зависимости CocoaPods пакетами Swift, теперь можно удалить интеграцию pod, выполнив следующую команду в каталоге /path/to/project/iosApp:
pod deintegrate
Если вы хотите продолжать использовать CocoaPods для зависимостей, не пересекающихся с зависимостями SwiftPM, измените файл Podfile, удалив только строку с упоминанием модуля KMP, а затем выполните pod install. Например:
target 'iosApp' do
# Here 'sharedLogic' is the name of a shared code module.
# Remove this line and run 'pod install' again.
pod 'sharedLogic', :path => '../sharedLogic'
...
end
Наконец, удалите упоминания CocoaPods из конфигурации сборки Gradle:
Удалите весь блок
cocoapods {}из файлаbuild.gradle.ktsв модуле общего кода, поскольку теперь всеми зависимостями управляют инструменты импорта SwiftPM.Если ваш проект больше не зависит от CocoaPods, удалите ссылки на плагин CocoaPods Gradle из блока
plugins {}как в корневом файлеbuild.gradle.kts, так и в файлеbuild.gradle.ktsобщего модуля.
© 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-cocoapods-spm-migration.html