【问题标题】:Kotlin Multiplatform Mobile: Project already has a CocoaPods dependency with name SDWebImageKotlin Multiplatform Mobile:项目已经有一个名为 SDWebImage 的 CocoaPods 依赖项
【发布时间】:2021-06-22 22:58:11
【问题描述】:

我创建了一个演示项目来将 cocoapods 集成到 KMM 项目中。我从官方网站关注了这个link。在step 3 重新导入项目时,我收到以下错误。

Project already has a CocoaPods dependency with name SDWebImage ,之后我什至无法在 KMM 中导入这个库。

有人可以帮忙吗?

更新:添加build.gradle.kts

import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget

plugins {
    kotlin("multiplatform")
    id("com.android.library")
    kotlin("native.cocoapods")
}

// CocoaPods requires the podspec to have a version.
 version = "1.0"

kotlin {
    android()
    ios {
        cocoapods {
            // Configure fields required by CocoaPods.
            summary = "Some description for a Kotlin/Native module"
            homepage = "Link to a Kotlin/Native module homepage"

            pod("SDWebImage")

            // You can change the name of the produced framework.
            // By default, it is the name of the Gradle project.
            frameworkName = "shared"
        }
    }
    sourceSets {
        val commonMain by getting
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test-common"))
                implementation(kotlin("test-annotations-common"))
            }
        }
        val androidMain by getting {
            dependencies {
                implementation("com.google.android.material:material:1.2.1")
            }
        }
        val androidTest by getting {
            dependencies {
                implementation(kotlin("test-junit"))
                implementation("junit:junit:4.13")
            }
        }
        val iosMain by getting
        val iosTest by getting
    }
}

android {
    compileSdkVersion(29)
    sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
    defaultConfig {
        minSdkVersion(24)
        targetSdkVersion(29)
    }
}

val packForXcode by tasks.creating(Sync::class) {
    group = "build"
    val mode = System.getenv("CONFIGURATION") ?: "DEBUG"
    val sdkName = System.getenv("SDK_NAME") ?: "iphonesimulator"
    val targetName = "ios" + if (sdkName.startsWith("iphoneos")) "Arm64" else "X64"
    val framework = kotlin.targets.getByName<KotlinNativeTarget>(targetName).binaries.getFramework(mode)
    inputs.property("mode", mode)
    dependsOn(framework.linkTask)
    val targetDir = File(buildDir, "xcode-frameworks")
    from({ framework.outputDirectory })
    into(targetDir)
}

tasks.getByName("build").dependsOn(packForXcode)

【问题讨论】:

  • 如果可能,请使用 build.gradle.kts 文件扩展问题。
  • @ArtyomDegtyarev 已更新构建,gradle.kts。请看一下。

标签: kotlin cocoapods kotlin-multiplatform kmm


【解决方案1】:

当你使用 cocoapods 插件时,你不需要手动声明packForXcode 目标,也许这就是问题所在。尝试删除val packForXcode之后的所有内容

cocoapods 部分应该在 kotlin 内,而不是在 ios

【讨论】:

  • 不。评论 PackForXcode 没有用。还是一样的错误。
  • 好的,我找到了。 cocoapods 部分应该在 kotlin 内,而不是在 ios
  • @Phillip 是的。那是个问题。但是我仍然无法在任何地方导入 SDWebImage,不知道为什么?
  • 这是一个已知问题,您可以在此处查看可能的解决方案:medium.com/icerock/…
  • 谢谢,伙计。这是一个巨大的帮助。
猜你喜欢
  • 2021-09-08
  • 2021-04-11
  • 2021-12-03
  • 2020-12-08
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
相关资源
最近更新 更多