将 Kotlin Gradle 项目用作 CocoaPods 依赖项
最终更新: 2024/03/21
要将带有 native 编译目标的 Kotlin Multiplatform 项目用作 CocoaPods 的依赖项, 需要 完成初始配置. 你可以在 Xcode 项目的 Podfile 中, 通过它的名称和生成的 Podspec 文件的目录路径来包含这样的依赖项.
依赖项将会与项目一起自动构建(以及重构建). 这样的方案可以简化 Kotlin Multiplatform 项目到 Xcode 的导入工作, 因为不再需要编写对应的 Gradle task 和 Xcode 构建步骤.
你可以在 Kotlin Gradle 项目和带有一个或多个编译目标的 Xcode 项目之间添加依赖.
也可以在 Gradle 项目和多个 Xcode 项目之间添加依赖.
但是, 这种情况下, 你需要通过对每个 Xcode 项目调用手动 pod install
来添加依赖.
其他情况下, 这个调用可以自动完成.
- 要将依赖项正确导入到 Kotlin/Native 模块,
Podfile
必须包含:use_modular_headers!
或use_frameworks!
指令.- 如果你不指定部署目标(deployment target)最小版本, 而且依赖项 Pod 需要更高的部署目标版本, 那么会发生错误.
单个编译目标的 Xcode 项目
- 如果你还没有 Xcode 项目, 请使用
Podfile
创建一个. -
在应用程序 Target 中, 请确认禁用了 Build Options 之下的 User Script Sandboxing:
- 使用
podfile = project.file(..)
向你的 Xcode 项目Podfile
添加路径, 其中的文件路径是你的 Kotlin 项目的build.gradle.kts
(build.gradle
) 文件路径. 这个步骤可以通过对你的Podfile
调用pod install
, 帮助你的 Xcode 项目与 Gradle 项目依赖项保持同步. - 指定 Pod 库的部署目标(deployment target)最小版本.
kotlin { ios() cocoapods { summary = "CocoaPods test library" homepage = "https://github.com/JetBrains/kotlin" ios.deploymentTarget = "13.5" pod("FirebaseAuth") { version = "10.16.0" } podfile = project.file("../ios-app/Podfile") } }
-
对你在 Xcode 项目中想要包含的 Gradle 项目, 将它的名称和路径添加到
Podfile
.use_frameworks! platform :ios, '13.5' target 'ios-app' do pod 'kotlin_library', :path => '../kotlin-library' end
- 重新导入项目.
多个编译目标的 Xcode 项目
- 如果你还没有 Xcode 项目, 请使用
Podfile
创建一个. - 使用
podfile = project.file(..)
向你的 Xcode 项目Podfile
添加路径, 其中的文件路径是你的 Kotlin 项目的build.gradle(.kts)
. 这个步骤可以通过对你的Podfile
调用pod install
, 帮助你的 Xcode 项目与 Gradle 项目依赖项保持同步. - 对于你的项目中希望使用的 Pod 库, 使用
pod()
添加依赖项. -
对每个目标, 指定 Pod 库的部署目标(deployment target)最小版本.
kotlin { ios() tvos() cocoapods { summary = "CocoaPods test library" homepage = "https://github.com/JetBrains/kotlin" ios.deploymentTarget = "13.5" tvos.deploymentTarget = "13.4" pod("FirebaseAuth") { version = "10.16.0" } podfile = project.file("../severalTargetsXcodeProject/Podfile") // 指定 Podfile 路径 } }
-
对你在 Xcode 项目中想要包含的 Gradle 项目, 将它的名称和路径添加到
Podfile
.target 'iosApp' do use_frameworks! platform :ios, '13.5' # Pods for iosApp pod 'kotlin_library', :path => '../kotlin-library' end target 'TVosApp' do use_frameworks! platform :tvos, '13.4' # Pods for TVosApp pod 'kotlin_library', :path => '../kotlin-library' end
- 重新导入项目.
参见 示例项目.