CocoaPods Plugin — wat is het, plugin voor KMM en configuratie

Auteur: IT Sectr Gepubliceerd: 2026-06-05 Leestijd: 8 min

CocoaPods Plugin — is een Gradle-plugin voor Kotlin Multiplatform Mobile die de afhankelijkheidsbeheerder CocoaPods direct integreert in het buildsysteem van een KMM-project. De plugin maakt het mogelijk om iOS-afhankelijkheden (pods) rechtstreeks in build.gradle.kts te declareren, Podfile automatisch te genereren, pods te installeren en ze te koppelen met Kotlin-code. In plaats van handmatig .xcworkspace te beheren, beheert de ontwikkelaar iOS-afhankelijkheden via Gradle, waardoor de configuratie van een KMM-project volledig reproduceerbaar is. Volgens JetBrains, 2025 wordt de plugin gebruikt in 20% van de KMM-projecten voor het beheren van iOS-bibliotheken.

Belangrijkste punten

  • CocoaPods Plugin — Gradle-plugin voor integratie van CocoaPods met Kotlin Multiplatform Mobile.
  • Automatisering — de plugin genereert Podfile en beheert pod-afhankelijkheden vanuit Gradle.
  • Podfile — het configuratiebestand van CocoaPods dat de plugin automatisch aanmaakt en onderhoudt.
  • .xcworkspace — de Xcode-werkruimte, gegenereerd door de plugin voor integratie met het iOS-project.
  • KMM-integratie — de plugin koppelt het Kotlin/Native-framework aan iOS-pod-afhankelijkheden.

Wat is CocoaPods Plugin?

CocoaPods Plugin (ook bekend als kotlin.cocoapods) — is de officiële JetBrains-plugin voor integratie van CocoaPods met Kotlin Multiplatform Mobile. De plugin maakt deel uit van Kotlin Gradle DSL en wordt rechtstreeks geconfigureerd in build.gradle.kts van de KMM-module. Het automatiseert het aanmaken en onderhouden van Podfile, het genereren van .xcworkspace en het beheren van pod-afhankelijkheden, waardoor de ontwikkelaar wordt ontlast van handmatige Xcode-projectconfiguratie.

Vóór de komst van CocoaPods Plugin waren KMM-ontwikkelaars gedwongen om handmatig Podfile aan te maken, pod install uit te voeren, bridge-headers te configureren en pod-versies apart van Gradle-afhankelijkheden bij te houden. Dit leidde tot desynchronisatie van versies en problemen in CI/CD-pijplijnen. De plugin loste deze problemen op door het beheer van iOS-afhankelijkheden net zo eenvoudig te maken als het beheer van Gradle-afhankelijkheden in Android-modules.

De plugin ondersteunt zowel openbare pods van CocoaPods Trunk als aangepaste pods uit privé-repositories. Werken met lokale Podspec en git-gebaseerde repositories wordt ook ondersteund. De plugin is compatibel met Kotlin-versies 1.6.0 en hoger, en vereist geïnstalleerde CocoaPods (gem install cocoapods) op de machine van de ontwikkelaar.

Hoe werkt CocoaPods Plugin

CocoaPods Plugin werkt op het niveau van de Gradle-taakgrafiek en voegt gespecialiseerde taken toe voor het werken met CocoaPods. De belangrijkste taken zijn podInstall (installatie van pods), podGenXcodeWorkspace (genereren van .xcworkspace) en podBuildDebugFramework (bouwen van de debug-versie van het framework). De plugin analyseert de cocoapods-sectie in build.gradle.kts, maakt Podfile op basis van gedeclareerde afhankelijkheden en voert pod install uit met de vereiste parameters.

De architectuur van de plugin omvat drie componenten: DSL-extensie voor build.gradle.kts, Podfile Generator voor het maken van Podfile en Xcode-integratielaag voor het configureren van .xcworkspace. De DSL-extensie biedt het cocoapods { }-blok met geneste pod()-functies voor het declareren van afhankelijkheden, specRepo() voor het specificeren van privé-repositories en framework { } voor het configureren van het uitvoerframework. De Podfile Generator vertaalt deze declaraties naar Ruby-syntaxis die begrijpelijk is voor 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"
        }
    }
}

Levenscyclus van de podInstall-taak

Bij het uitvoeren van podInstall genereert de plugin achtereenvolgens: Podfile in de hoofdmap van het project, voert pod install uit via de opdrachtregel, genereert .xcworkspace, controleert de overeenstemming van pod-versies met de gedeclareerde versies en cachet Podfile.lock. Bij herhaalde uitvoering zonder wijzigingen in de configuratie wordt podInstall overgeslagen als Podfile.lock niet is gewijzigd. Dit bespaart tijd in CI/CD, waar pod install 2-3 minuten kan duren voor een schone installatie.

Configuratie van CocoaPods Plugin in een KMM-project

Voor het configureren van CocoaPods Plugin moeten verschillende stappen worden uitgevoerd. Installatie van CocoaPods op de ontwikkelaarsmachine (gem install cocoapods) is een verplichte voorwaarde. Vervolgens wordt in build.gradle.kts van de shared-module het cocoapods { }-blok toegevoegd met de configuratie van het framework en de afhankelijkheden. Na configuratie moet de podInstall-taak worden uitgevoerd, die Podfile aanmaakt en de pods installeert. De gegenereerde .xcworkspace bevindt zich in de hoofdmap van het project naast Podfile.

De plugin integreert met Xcode Build Phases. Tijdens het bouwen van de iOS-app voert Xcode embedAndSignAppleFrameworkForXcode uit — een taak die het Kotlin/Native-framework naar het app-bundle kopieert. CocoaPods Plugin voegt deze build-phase automatisch toe bij het genereren van .xcworkspace. Als .xcworkspace is gegenereerd, moet deze worden geopend in plaats van .xcodeproj voor correcte compilatie met pod-afhankelijkheden.

StapBeschrijvingCommando / Actie
1Installatie van CocoaPodsgem install cocoapods
2Plugin toevoegen aan build.gradle.ktskotlin { cocoapods { ... } }
3Pods declarerenpod("Alamofire") { version = "5.9.0" }
4Podfile genereren./gradlew :shared:podInstall (automatisch)
5.xcworkspace openenIn plaats van .xcodeproj
6iOS-app bouwenXcode Build (⌘B)

Codevoorbeelden: configuratie van pods

Laten we verschillende scenario's bekijken voor het declareren van pods in CocoaPods Plugin. Het basisscenario — aansluiten van een openbare pod van CocoaPods Trunk met versieopgave. Complexere scenario's omvatten het gebruik van aangepaste podspec, lokale pods en pods uit git-repositories.

kotlin
kotlin {
    iosArm64()
    iosSimulatorArm64()

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

        // Openbare pod van CocoaPods Trunk
        pod("Alamofire") { version = "5.9.0" }

        // Aangepaste versie met operator
        pod("SnapKit") { version = "~> 5.6" }

        // Pod van privé-repository
        specRepo("https://git.itsectr.com/specs.git",
            "internal-specs")
        pod("InternalAnalyticsPod")

        // Lokale pod met pad
        pod(name = "CustomPod",
            localPath = "./ios-pods/CustomPod")

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

Het aansluiten van pods is slechts een deel van de configuratie. De plugin maakt het ook mogelijk om afhankelijkheden uit andere Kotlin-modules naar het iOS-framework te exporteren. De functie export(project(":core")) geeft aan dat alle openbare API's van de :core-module toegankelijk moeten zijn vanuit de Objective-C-header van het gegenereerde framework. Dit is nodig wanneer gedeelde Kotlin-code klassen uit een andere module gebruikt en deze toegankelijk moeten zijn vanuit Swift.

kotlin
cocoapods {
    framework {
        baseName = "Shared"
        // Modules exporteren naar iOS-framework
        export(project(":network"))
        export(project(":domain"))

        // Statische of dynamische koppeling
        isStatic = true
    }

    // Pod vereist voor geëxporteerde modules
    pod("Moya") { version = "15.0" }
}

Bouwen en testen

Na het configureren moet podInstall worden uitgevoerd om Podfile te genereren en afhankelijkheden te installeren. Vervolgens wordt de gegenereerde .xcworkspace geopend in Xcode, waar de app op de standaard manier kan worden gebouwd. Voor CI/CD moet u ervoor zorgen dat CocoaPods en Ruby zijn geïnstalleerd op de build-machine. De plugin ondersteunt de vlag --no-daemon voor werken in een CI-omgeving.

kotlin
// Pods installeren genereert Podfile + xcworkspace
./gradlew :shared:podInstall

// Debug-framework bouwen voor testen
./gradlew :shared:podBuildDebugFramework

// Volledige iOS-build vanaf de opdrachtregel
xcodebuild -workspace ios-app.xcworkspace \
    -scheme ios-app -configuration Debug

CocoaPods Plugin vs Swift Package Manager

Swift Package Manager (SPM) — een alternatieve afhankelijkheidsbeheerder van Apple, die aan populariteit wint en geleidelijk CocoaPods verdringt in de iOS-gemeenschap. CocoaPods Plugin blijft echter om verschillende redenen relevant: SPM ondersteunt geen dynamische frameworks in KMM-context en integratie van het Kotlin/Native-framework via SPM vereist extra configuratie. CocoaPods Plugin biedt een volwassenere en beter gedocumenteerde integratieroute.

Vergelijking tussen CocoaPods Plugin en directe integratie via SPM laat zien dat de eerste wint op automatisering en de tweede op native Apple-ondersteuning. CocoaPods Plugin genereert automatisch Podfile, beheert versies en configureert Xcode Build Phases. SPM vereist handmatige aansluiting van het Kotlin-framework via Package.swift, wat moeilijker te onderhouden is voor grote KMM-projecten. JetBrains werkt aan SPM-ondersteuning voor Kotlin/Native, maar tot 2025 blijft SPM-integratie experimenteel.

KenmerkCocoaPods PluginSwift Package Manager
VolwassenheidProduction-readyExperimenteel
Podfile-generatieAutomatischNiet van toepassing
Dynamische frameworksOndersteundBeperkt
CI/CD-configuratieEenvoudig (Gradle-taak)Vereist handmatige stappen
Privé-repositoriesOndersteund (specRepo)Ondersteund (URL)
Native Apple-ondersteuningVia CocoaPodsNative

Veelvoorkomende problemen en oplossingen

Bij het gebruik van CocoaPods Plugin komen KMM-ontwikkelaars verschillende veelvoorkomende problemen tegen. Versieconflict van pods — het meest voorkomende probleem, wanneer twee pods verschillende versies van dezelfde afhankelijkheid vereisen. De oplossing is het expliciet specificeren van de versie van de conflicterende afhankelijkheid via pod("Dependency") { version = "x.x" }. Het tweede veelvoorkomende geval — versie-incompatibiliteit, wanneer een pod een nieuwere iOS SDK vereist dan de minimale versie van het KMM-project.

Problemen met .xcworkspace ontstaan wanneer .xcodeproj wordt geopend in plaats van .xcworkspace na configuratie van de plugin. De plugin waarschuwt hiervoor in de podInstall-logboeken. Een andere veelvoorkomende fout — het ontbreken van CocoaPods op de ontwikkelaarsmachine. De plugin controleert de aanwezigheid van het pod-commando voordat podInstall wordt uitgevoerd en geeft een duidelijke foutmelding. Voor CI/CD moet CocoaPods worden geïnstalleerd: gem install cocoapods.

kotlin
// Versieconflict oplossen
cocoapods {
    pod("Alamofire") { version = "5.9.0" }
    // Conflict expliciet oplossen
    pod("Alamofire") {
        version = "5.9.0"
        options[name] = mapOf("force" to true)
    }
}

// CocoaPods-installatie controleren via Gradle
tasks.register("checkCocoapods") {
    doLast {
        val result = "pod --version".runCommand()
        println("CocoaPods-versie: $result")
    }
}

Debuggen van podInstall

Als podInstall eindigt met een fout, gebruik dan de --info-vlag voor gedetailleerde uitvoer: ./gradlew podInstall --info. De plugin logt elke stap: genereren van Podfile, uitvoeren van pod install, parseren van Podfile.lock. Meestal hebben fouten te maken met netwerkproblemen (onbereikbaarheid van CocoaPods Trunk) of onjuiste syntax van Podfile. Probeer in dergelijke gevallen pod install handmatig uit te voeren in de hoofdmap van het project om een gedetailleerdere foutmelding van CocoaPods te krijgen.

Veelgestelde vragen

Is CocoaPods Plugin nodig als alleen Swift Package Manager wordt gebruikt?

Als alle iOS-afhankelijkheden via SPM worden beheerd, is CocoaPods Plugin niet verplicht. De plugin is nodig voor integratie met CocoaPods. JetBrains werkt aan SPM-ondersteuning, maar tot 2025 is deze experimenteel.

Hoe beïnvloedt CocoaPods Plugin de buildtijd?

Buildtijd neemt alleen toe bij de eerste uitvoering van podInstall (Podfile genereren + pods installeren). Volgende builds gebruiken de cache van Podfile.lock. De build van het Kotlin/Native-framework zelf is niet afhankelijk van pods.

Kunnen privé-podspec-repositories worden gebruikt?

Ja, de plugin ondersteunt de specRepo-functie voor het aansluiten van privé-repositories. Geef de URL en naam van de repository op in specRepo, waarna pods uit deze repository beschikbaar zijn voor declaratie.

Wat te doen als podInstall faalt met een fout?

Voer pod install handmatig uit in de hoofdmap van het project voor een gedetailleerde foutmelding. Controleer de verbinding met CocoaPods Trunk, de juistheid van pod-versies en de aanwezigheid van Ruby op de machine.

Moet Podfile.lock worden gecommit in git?

Ja, Podfile.lock moet worden gecommit voor reproduceerbare builds. CocoaPods Plugin genereert Podfile, maar Podfile.lock registreert de exacte versies van pods die tijdens pod install zijn geïnstalleerd.

Samenvatting

  • CocoaPods Plugin — Gradle-plugin voor integratie van CocoaPods met KMM, die het beheer van iOS-afhankelijkheden automatiseert.
  • Podfile en .xcworkspace worden automatisch gegenereerd door podInstall-taken, wat handmatige Xcode-configuratie elimineert.
  • Flexibele configuratie ondersteunt openbare pods, privé-specRepo, lokale en git-gebaseerde afhankelijkheden.
  • Module-export via export() maakt API's van Kotlin-modules toegankelijk vanuit Objective-C/Swift.
  • Statische en dynamische koppeling beschikbaar via de isStatic-configuratie van het framework.
  • CI/CD wordt ondersteund via de Gradle-taakgrafiek met caching van Podfile.lock voor het versnellen van herhaalde builds.
  • Gebruik CocoaPods Plugin als er in het KMM-project iOS-afhankelijkheden zijn die via CocoaPods worden beheerd, niet SPM.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook