添加 Pod 库依赖项
要添加 Kotlin 项目对 Pod 库的依赖项, 需要 完成初始配置. 然后你就可以添加各种类型的 Pod 库依赖项.
添加新的依赖项, 并在你的 IDE 中重新导入项目之后, 新的依赖项会被自动添加进来. 不需要其他步骤.
要让你的 Kotlin 项目与 Xcode 协同工作, 应该 修改项目的 Podfile 文件.
Kotlin 项目需要在 build.gradle(.kts)
中调用 pod()
函数来添加 Pod 依赖项. 每个依赖项都需要单独调用这个函数. 可以在函数的配置代码中对依赖项指定参数.
示例项目参见 这里.
从 CocoaPods 仓库添加 Pod 库依赖项
在
pod()
函数内指定 Pod 库名称.在配置代码段中, 可以使用
version
参数指定库的版本. 要使用库的最新版本, 可以完全省略这个参数.指定 Pod 库的部署目标(deployment target)最小版本.
kotlin { iosArm64() cocoapods { iosArm64.deploymentTarget = "13.5" summary = "CocoaPods test library" homepage = "https://github.com/JetBrains/kotlin" pod("FirebaseAuth") { version = "10.16.0" } } }在 IntelliJ IDEA 中, 运行 Reload All Gradle Projects (如果是 Android Studio, 请运行 Sync Project with Gradle Files), 重新导入项目.
要在 Kotlin 代码中使用这些依赖项, 需要导入 cocoapods.<library-name>
包:
使用保存在本地的 Pod 库添加依赖项
在
pod()
函数内指定 Pod 库名称.在配置代码段中, 指定本地 Pod 库的路径: 在
source
参数值中使用path()
函数.指定 Pod 库的部署目标(deployment target)最小版本.
kotlin { iosArm64() cocoapods { summary = "CocoaPods test library" homepage = "https://github.com/JetBrains/kotlin" iosArm64.deploymentTarget = "13.5" pod("pod_dependency") { version = "1.0" source = path(project.file("../pod_dependency")) } pod("subspec_dependency/Core") { version = "1.0" source = path(project.file("../subspec_dependency")) } pod("FirebaseAuth") { version = "10.16.0" } } }在 IntelliJ IDEA 中, 运行 Reload All Gradle Projects (如果是 Android Studio, 请运行 Sync Project with Gradle Files), 重新导入项目.
要在 Kotlin 代码中使用这些依赖项, 需要导入 cocoapods.<library-name>
包:
从自定义的 Git 仓库添加 Pod 库依赖项
在
pod()
函数内指定 Pod 库名称.在配置代码段中, 指定 git 仓库路径: 在
source
参数中使用git()
函数.此外, 还可以在
git()
之后的代码段中指定以下参数:commit
– 使用仓库中特定的 committag
– 使用仓库中特定的 tagbranch
– 使用仓库中特定的 branch
git()
函数的参数优先级顺序如下:commit
,tag
,branch
. 如果不指定参数, Kotlin plugin 使用master
branch 中的HEAD
.指定 Pod 库的部署目标(deployment target)最小版本.
kotlin { iosArm64() cocoapods { summary = "CocoaPods test library" homepage = "https://github.com/JetBrains/kotlin" iosArm64.deploymentTarget = "13.5" pod("FirebaseAuth") { source = git("https://github.com/firebase/firebase-ios-sdk") { tag = "10.16.0" } } pod("JSONModel") { source = git("https://github.com/jsonmodel/jsonmodel.git") { branch = "key-mapper-class" } } pod("CocoaLumberjack") { source = git("https://github.com/CocoaLumberjack/CocoaLumberjack.git") { commit = "3e7f595e3a459c39b917aacf9856cd2a48c4dbf3" } } } }在 IntelliJ IDEA 中, 运行 Reload All Gradle Projects (如果是 Android Studio, 请运行 Sync Project with Gradle Files), 重新导入项目.
要在 Kotlin 代码中使用这些依赖项, 需要导入 cocoapods.<library-name>
包:
从自定义 Podspec 仓库添加 Pod 库依赖项
在
specRepos
代码段之内, 使用url()
函数, 指定自定义 Podspec 仓库的 HTTP 地址.在
pod()
函数内指定 Pod 库名称.指定 Pod 库的部署目标(deployment target)最小版本.
kotlin { iosArm64() cocoapods { summary = "CocoaPods test library" homepage = "https://github.com/JetBrains/kotlin" iosArm64.deploymentTarget = "13.5" specRepos { url("https://github.com/Kotlin/kotlin-cocoapods-spec.git") } pod("example") } }在 IntelliJ IDEA 中, 运行 Reload All Gradle Projects (如果是 Android Studio, 请运行 Sync Project with Gradle Files), 重新导入项目.
要在 Kotlin 代码中使用这些依赖项, 需要导入 cocoapods.<library-name>
包:
使用自定义 cinterop 选项添加 Pod 库依赖项
在
pod()
函数内指定 Pod 库名称.在配置代码段中, 指定 cinterop 选项:
extraOpts
– 指定对 Pod 库的选项列表. 例如, 指定 flag:extraOpts = listOf("-compiler-option")
.packageName
– 指定包名称. 如果有指定, 可以使用这个包名称导入这个库:import <packageName>
.
指定 Pod 库的部署目标(deployment target)最小版本.
kotlin { iosArm64() cocoapods { summary = "CocoaPods test library" homepage = "https://github.com/JetBrains/kotlin" iosArm64.deploymentTarget = "13.5" pod("YandexMapKit") { packageName = "YandexMK" } } }在 IntelliJ IDEA 中, 运行 Reload All Gradle Projects (如果是 Android Studio, 请运行 Sync Project with Gradle Files), 重新导入项目.
要在 Kotlin 代码中使用这些依赖项, 需要导入 cocoapods.<library-name>
包:
如果使用了 packageName
参数, 那么可以使用包这个名称导入这个库 import <packageName>
:
对带 @import 命令的 Objective-C 头文件的支持
某些 Objective-C 库, 尤其是 Swift 库的封装库, 在它们的头文件中存在 @import
命令. 默认情况下, cinterop 不支持这些命令.
要启用对 @import
命令的支持, 请在 pod()
函数的配置代码段中指定 -fmodules
选项:
在依赖的 Pod 之间共用 Kotlin cinterop
如果你使用 pod()
函数添加了多个 Pod 库依赖项, 当你的 Pod 库的 API 之间存在依赖关系时, 你可能会遇到问题.
这种情况下, 为了让代码成功编译, 请使用 useInteropBindingFrom()
函数. 在为新的 Pod 构建绑定时, 这个函数会利用为另一个 Pod 生成的 cinterop 绑定.
你应该在设置依赖项之前声明依赖的 Pod 库:
这样的情况下, 如果你没有正确配置 cinterop 之间的依赖关系, 这段代码会无效, 因为 WebImage
类型在不同的 cinterop 文件内, 因此, 它也属于不同的包.