Kotlin Multiplatform 项目的 iosMain 中的 Cocoapod 依赖项,cocoapod 未解析参考

Posted

技术标签:

【中文标题】Kotlin Multiplatform 项目的 iosMain 中的 Cocoapod 依赖项,cocoapod 未解析参考【英文标题】:Cocoapod dependency in iosMain of a Kotlin Multiplatform project, cocoapod unresolved reference 【发布时间】:2021-09-29 17:57:35 【问题描述】:

我正在尝试围绕 AWS Amplify 创建一个包装器以用于我的项目。我的共享(公共)模块中有一个名为 Amplify 的模块。这里我在官方文档中integrated cocoapods as instructed。但是当我尝试从 iosMain 导入任何内容时,我不断收到Unresolved reference: cocoapods

我的项目结构如下

通用模块(共享) |- 根模块 |- 其他功能 |- 放大包装模块

在根模块中我有

kotlin 
    ios 
        binaries 
            framework 
                baseName = "Framework"
                linkerOpts.add("-lsqlite3")
                export(project(":common:main"))
            
        
    

以及放大模块中 cocoapods 的设置

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

plugins 
    id("multiplatform-setup") // this is from buildSrc, it adds the multiplatform plugin
    id("android-setup")
    id("org.jetbrains.kotlin.native.cocoapods")
    kotlin("plugin.serialization") version "1.5.10"


version = "1.0"


kotlin 
    sourceSets 
        named("commonMain") 
            dependencies 
            
        
    

    cocoapods 
        summary = "Amplify wrapper for KMP project"
        homepage = "Link to a Kotlin/Native module homepage"
        frameworkName = "AmplifyKMP"

        pod("Amplify")
        pod("AmplifyPlugins/AWSCognitoAuthPlugin")
        pod("AmplifyPlugins/AWSPinpointAnalyticsPlugin")
    

我的想法是,我可以从 commonMain 代码中公开我的包装器,这将调用 Amplify Android 和 Amplify IOS 库中的实际实现。我的第一个问题是 cocoapods 未解决,其次,官方文档和 github 中的所有示例都在主模块(在我的情况下为根模块)中有 cocoapods,它们从那里导出框架,我不确定我的方法是否可行.

【问题讨论】:

【参考方案1】:

第一个问题很简单。您需要将kotlin("native.cocoapods") 添加到您的plugins 部分。

第二个,子模块可以使用 cinterop 导入 pod 并使它们可用于依赖它们的模块吗?我没试过。从理论上讲,cocoapods 插件应该能够将 pod 定义导入 kotlin。但是,cocoapods Kotlin gradle 插件(又名kotlin("native.cocoapods"))将配置 ios 目标以创建框架。这可能会导致依赖配置出现问题。

在放大模块中,我没有看到您正在定义任何 iOS 目标,因此您可能需要这样做,但该配置将被 kotlin("native.cocoapods") 更改。您可能需要自己介入并修改它。您可以介入并在 gradle 中执行此操作,但我会准备花一些时间进行调整。

https://github.com/touchlab/KaMPKit/blob/main/shared/build.gradle.kts#L114

【讨论】:

以上是关于Kotlin Multiplatform 项目的 iosMain 中的 Cocoapod 依赖项,cocoapod 未解析参考的主要内容,如果未能解决你的问题,请参考以下文章

如何确定 kotlin-multiplatform 项目中的构建类型

Kotlin Multiplatform 项目中的语法突出显示失败

如何使用 Cocoapods 调整 Kotlin Multiplatform 项目的 Swift 类名?

无法在 Kotlin Multiplatform 项目中引用 kotlinx.cinterop 包

无法在 MacBook M1 芯片上构建 Kotlin Multiplatform 移动项目

在 Kotlin MultiPlatform 项目中未解决 iOS 依赖项