CocoaPods Plugin — co to jest, wtyczka do KMM i konfiguracja

Autor: IT Sectr Opublikowano: 2026-06-05 Czas czytania: 8 min

CocoaPods Plugin — to wtyczka Gradle dla Kotlin Multiplatform Mobile, która integruje menedżer zależności CocoaPods bezpośrednio z systemem budowania projektu KMM. Wtyczka umożliwia deklarowanie zależności iOS (podów) bezpośrednio w build.gradle.kts, automatyczne generowanie Podfile, instalowanie podów i łączenie ich z kodem Kotlin. Zamiast ręcznego zarządzania .xcworkspace, programista zarządza zależnościami iOS przez Gradle, co czyni konfigurację projektu KMM w pełni reprodukowalną. Według JetBrains, 2025, wtyczka jest używana w 20% projektów KMM do zarządzania bibliotekami iOS.

Najważniejsze

  • CocoaPods Plugin — wtyczka Gradle do integracji CocoaPods z Kotlin Multiplatform Mobile.
  • Automatyzacja — wtyczka generuje Podfile i zarządza zależnościami podów z Gradle.
  • Podfile — plik konfiguracyjny CocoaPods, który wtyczka tworzy i utrzymuje automatycznie.
  • .xcworkspace — przestrzeń robocza Xcode, generowana przez wtyczkę do integracji z projektem iOS.
  • Integracja KMM — wtyczka łączy framework Kotlin/Native z zależnościami podów iOS.

Czym jest CocoaPods Plugin?

CocoaPods Plugin (znany również jako kotlin.cocoapods) — to oficjalna wtyczka JetBrains do integracji CocoaPods z Kotlin Multiplatform Mobile. Wtyczka jest częścią Kotlin Gradle DSL i konfigurowana jest bezpośrednio w build.gradle.kts modułu KMM. Automatyzuje tworzenie i utrzymywanie Podfile, generowanie .xcworkspace i zarządzanie zależnościami podów, uwalniając programistę od ręcznej konfiguracji projektu Xcode.

Przed pojawieniem się CocoaPods Plugin, programiści KMM byli zmuszeni ręcznie tworzyć Podfile, uruchamiać pod install, konfigurować bridge-headery i śledzić wersje podów oddzielnie od zależności Gradle. Prowadziło to do desynchronizacji wersji i trudności w pipeline'ach CI/CD. Wtyczka rozwiązała te problemy, czyniąc zarządzanie zależnościami iOS tak prostym, jak zarządzanie zależnościami Gradle w modułach Android.

Wtyczka obsługuje zarówno publiczne pody z CocoaPods Trunk, jak i niestandardowe pody z prywatnych repozytoriów. Obsługiwana jest również praca z lokalnymi Podspec i repozytoriami opartymi na git. Wtyczka jest kompatybilna z wersjami Kotlin 1.6.0 i nowszymi, a także wymaga zainstalowanego CocoaPods (gem install cocoapods) na maszynie programisty.

Jak działa CocoaPods Plugin

CocoaPods Plugin działa na poziomie Gradle task-graph, dodając wyspecjalizowane zadania do pracy z CocoaPods. Główne zadania obejmują podInstall (instalacja podów), podGenXcodeWorkspace (generowanie .xcworkspace) i podBuildDebugFramework (budowanie debugowej wersji frameworka). Wtyczka analizuje sekcję cocoapods w build.gradle.kts, tworzy Podfile na podstawie zadeklarowanych zależności i uruchamia pod install z odpowiednimi parametrami.

Architektura wtyczki obejmuje trzy komponenty: rozszerzenie DSL dla build.gradle.kts, generator Podfile do tworzenia Podfile i warstwę integracji Xcode do konfiguracji .xcworkspace. Rozszerzenie DSL udostępnia blok cocoapods { } z zagnieżdżonymi funkcjami pod() do deklarowania zależności, specRepo() do wskazywania prywatnych repozytoriów oraz framework { } do konfiguracji wyjściowego frameworka. Generator Podfile tłumaczy te deklaracje na składnię Ruby zrozumiałą dla CocoaPods.

kotlin
kotlin {
    cocoapods {
        summary = "Shared module for iOS project"
        homepage = "https://itsectr.com"
        framework {
            baseName = "Shared"
            isStatic = true
            export(project(":core"))
        }
        pod("Alamofire") {
            version = "~> 5.9"
        }
        pod("Kingfisher") {
            version = "7.12"
        }
    }
}

Cykl życia zadania podInstall

Podczas wykonywania podInstall, wtyczka kolejno: generuje Podfile w katalogu głównym projektu, uruchamia pod install przez linię poleceń, generuje .xcworkspace, sprawdza zgodność wersji podów zadeklarowanym i buforuje Podfile.lock. Przy ponownym uruchomieniu bez zmian w konfiguracji, podInstall jest pomijany, jeśli Podfile.lock nie uległ zmianie. Oszczędza to czas w CI/CD, gdzie pod install może zajmować do 2–3 minut przy czystej instalacji.

Konfiguracja CocoaPods Plugin w projekcie KMM

Do konfiguracji CocoaPods Plugin należy wykonać kilka kroków. Instalacja CocoaPods na maszynie programisty (gem install cocoapods) jest warunkiem obowiązkowym. Następnie w build.gradle.kts modułu shared dodawany jest blok cocoapods { } z konfiguracją frameworka i zależności. Po konfiguracji należy wykonać zadanie podInstall, które utworzy Podfile i zainstaluje pody. Wygenerowany .xcworkspace będzie znajdować się w katalogu głównym projektu obok Podfile.

Wtyczka integruje się z fazami budowania Xcode. Podczas kompilacji aplikacji iOS, Xcode uruchamia embedAndSignAppleFrameworkForXcode — zadanie, które kopiuje framework Kotlin/Native do pakietu aplikacji. CocoaPods Plugin dodaje tę fazę budowania automatycznie podczas generowania .xcworkspace. Jeśli .xcworkspace został wygenerowany, należy go otwierać zamiast .xcodeproj dla poprawnej kompilacji z zależnościami podów.

KrokOpisPolecenie / Działanie
1Instalacja CocoaPodsgem install cocoapods
2Dodanie wtyczki do build.gradle.ktskotlin { cocoapods { ... } }
3Deklarowanie podówpod("Alamofire") { version = "5.9.0" }
4Generowanie Podfile./gradlew :shared:podInstall (automatycznie)
5Otwarcie .xcworkspaceZamiast .xcodeproj
6Kompilacja aplikacji iOSXcode Build (⌘B)

Przykłady kodu: konfiguracja podów

Rozważmy różne scenariusze deklarowania podów w CocoaPods Plugin. Podstawowy przypadek — podłączenie publicznego poda z CocoaPods Trunk z określeniem wersji. Bardziej złożone scenariusze obejmują użycie niestandardowych podspec, lokalnych podów i podów z repozytoriów git.

kotlin
kotlin {
    iosArm64()
    iosSimulatorArm64()

    cocoapods {
        framework {
            baseName = "Shared"
            isStatic = false
        }

        // Publiczny pod z CocoaPods Trunk
        pod("Alamofire") { version = "5.9.0" }

        // Niestandardowa wersja z operatorem
        pod("SnapKit") { version = "~> 5.6" }

        // Pod z prywatnego repozytorium
        specRepo("https://git.itsectr.com/specs.git",
            "internal-specs")
        pod("InternalAnalyticsPod")

        // Lokalny pod ze ścieżką
        pod(name = "CustomPod",
            localPath = "./ios-pods/CustomPod")

        // Pod z repozytorium git
        pod(name = "PrivateSDK",
            git = "https://git.itsectr.com/ios/sdk.git",
            tag = "2.1.0")
    }
}

Podłączanie podów to tylko część konfiguracji. Wtyczka umożliwia również eksportowanie zależności z innych modułów Kotlin do frameworka iOS. Funkcja export(project(":core")) wskazuje, że wszystkie publiczne API modułu :core powinny być dostępne z nagłówka Objective-C wygenerowanego frameworka. Jest to konieczne, gdy współny kod Kotlin używa klas z innego modułu i muszą one być dostępne z Swift.

kotlin
cocoapods {
    framework {
        baseName = "Shared"
        // Eksportuj moduły do frameworka iOS
        export(project(":network"))
        export(project(":domain"))

        // Łączenie statyczne lub dynamiczne
        isStatic = true
    }

    // Pod wymagany dla eksportowanych modułów
    pod("Moya") { version = "15.0" }
}

Kompilacja i testowanie

Po skonfigurowaniu należy wykonać podInstall w celu wygenerowania Podfile i instalacji zależności. Następnie wygenerowany .xcworkspace otwierany jest w Xcode, gdzie można skompilować aplikację standardowym sposobem. Dla CI/CD należy upewnić się, że na maszynie kompilacyjnej zainstalowane są CocoaPods i Ruby. Wtyczka obsługuje flagę --no-daemon do pracy w środowisku CI.

kotlin
// Instalacja podów generuje Podfile + xcworkspace
./gradlew :shared:podInstall

// Zbuduj debug framework do testowania
./gradlew :shared:podBuildDebugFramework

// Pełna kompilacja iOS z linii poleceń
xcodebuild -workspace ios-app.xcworkspace \
    -scheme ios-app -configuration Debug

CocoaPods Plugin vs Swift Package Manager

Swift Package Manager (SPM) — alternatywny menedżer zależności od Apple, który zyskuje na popularności i stopniowo wypiera CocoaPods w społeczności iOS. Jednak CocoaPods Plugin pozostaje aktualny z kilku powodów: SPM nie obsługuje dynamicznych frameworków w kontekście KMM, a integracja frameworka Kotlin/Native przez SPM wymaga dodatkowej konfiguracji. CocoaPods Plugin zapewnia bardziej dojrzałą i udokumentowaną ścieżkę integracji.

Porównanie CocoaPods Plugin i bezpośredniej integracji przez SPM pokazuje, że pierwszy wygrywa w automatyzacji, a drugi — w natywnym wsparciu Apple. CocoaPods Plugin automatycznie generuje Podfile, zarządza wersjami i konfiguruje fazy budowania Xcode. SPM wymaga ręcznego podłączenia frameworka Kotlin przez Package.swift, co jest trudniejsze w utrzymaniu dla dużych projektów KMM. JetBrains pracuje nad wsparciem SPM dla Kotlin/Native, ale na 2025 rok integracja SPM pozostaje eksperymentalna.

CechaCocoaPods PluginSwift Package Manager
DojrzałośćProduction-readyEksperymentalna
Generowanie PodfileAutomatycznieNie dotyczy
Dynamiczne frameworkiObsługiwaneOgraniczone
Konfiguracja CI/CDProsta (zadanie Gradle)Wymaga ręcznych kroków
Prywatne repozytoriaObsługiwane (specRepo)Obsługiwane (URL)
Natywne wsparcie ApplePrzez CocoaPodsNatywne

Typowe problemy i rozwiązania

Podczas korzystania z CocoaPods Plugin, programiści KMM spotykają się z kilkoma typowymi problemami. Konflikt wersji podów — najczęstszy problem, gdy dwa pody wymagają różnych wersji tej samej zależności. Rozwiązaniem jest jawne określenie wersji konfliktującej zależności przez pod("Dependency") { version = "x.x" }. Drugi częsty przypadek — niezgodność wersji, gdy pod wymaga nowszego iOS SDK niż minimalna wersja projektu KMM.

Problemy z .xcworkspace występują, jeśli otwiera się .xcodeproj zamiast .xcworkspace po konfiguracji wtyczki. Wtyczka ostrzega o tym w logach podInstall. Inny częsty błąd — brak CocoaPods na maszynie programisty. Wtyczka sprawdza obecność polecenia pod przed uruchomieniem podInstall i wyświetla zrozumiały komunikat błędu. Dla CI/CD należy zainstalować CocoaPods: gem install cocoapods.

kotlin
// Rozwiąż konflikt wersji
cocoapods {
    pod("Alamofire") { version = "5.9.0" }
    // Rozwiąż konflikt jawnie
    pod("Alamofire") {
        version = "5.9.0"
        options[name] = mapOf("force" to true)
    }
}

// Sprawdź instalację CocoaPods przez Gradle
tasks.register("checkCocoapods") {
    doLast {
        val result = "pod --version".runCommand()
        println("Wersja CocoaPods: $result")
    }
}

Debugowanie podInstall

Jeśli podInstall kończy się błędem, użyj flagi --info do szczegółowego wyjścia: ./gradlew podInstall --info. Wtyczka loguje każdy krok: generowanie Podfile, uruchomienie pod install, parsowanie Podfile.lock. Najczęściej błędy związane są z problemami sieciowymi (niedostępność CocoaPods Trunk) lub nieprawidłową składnią Podfile. W takich przypadkach spróbuj uruchomić pod install ręcznie w katalogu głównym projektu, aby uzyskać bardziej szczegółowy komunikat błędu od CocoaPods.

Często zadawane pytania

Czy CocoaPods Plugin jest potrzebny, jeśli używany jest tylko Swift Package Manager?

Jeśli wszystkie zależności iOS są zarządzane przez SPM, CocoaPods Plugin nie jest wymagany. Wtyczka jest potrzebna do integracji z CocoaPods. JetBrains pracuje nad wsparciem SPM, ale na 2025 rok jest ono eksperymentalne.

Jak CocoaPods Plugin wpływa na czas kompilacji?

Czas kompilacji zwiększa się tylko przy pierwszym uruchomieniu podInstall (generowanie Podfile + instalacja podów). Kolejne kompilacje korzystają z pamięci podręcznej Podfile.lock. Sama kompilacja frameworka Kotlin/Native nie zależy od podów.

Czy można używać prywatnych repozytoriów podspec?

Tak, wtyczka obsługuje funkcję specRepo do podłączania prywatnych repozytoriów. Podaj URL repozytorium i nazwę w specRepo, po czym pody z tego repozytorium staną się dostępne do deklarowania.

Co zrobić, jeśli podInstall kończy się błędem?

Uruchom pod install ręcznie w katalogu głównym projektu, aby uzyskać szczegółowy komunikat błędu. Sprawdź połączenie z CocoaPods Trunk, poprawność wersji podów i obecność Ruby na maszynie.

Czy należy commitować Podfile.lock do gita?

Tak, Podfile.lock należy commitować dla powtarzalnych kompilacji. CocoaPods Plugin generuje Podfile, ale Podfile.lock rejestruje dokładne wersje podów zainstalowane podczas pod install.

Podsumowanie

  • CocoaPods Plugin — wtyczka Gradle do integracji CocoaPods z KMM, automatyzująca zarządzanie zależnościami iOS.
  • Podfile i .xcworkspace są generowane automatycznie przez zadania podInstall, co eliminuje ręczną konfigurację Xcode.
  • Elastyczna konfiguracja obsługuje publiczne pody, prywatne specRepo, lokalne i gitowe zależności.
  • Eksport modułów przez export() udostępnia API modułów Kotlin z poziomu Objective-C/Swift.
  • Łączenie statyczne i dynamiczne dostępne przez konfigurację isStatic frameworka.
  • CI/CD obsługiwane przez graf zadań Gradle z buforowaniem Podfile.lock w celu przyspieszenia ponownych kompilacji.
  • Używaj CocoaPods Plugin, jeśli w projekcie KMM są zależności iOS zarządzane przez CocoaPods, a nie SPM.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również