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 包