添加对 Pod 库的依赖
To add dependencies between a Kotlin project and a Pod library, complete the initial configuration. You can then add dependencies on different types of Pod libraries.
When you add a new dependency and re-import the project in IntelliJ IDEA, the new dependency will be added automatically. No additional steps are required.
To use your Kotlin project with Xcode, you should make changes in your project Podfile.
A Kotlin project requires the pod()
function call in build.gradle(.kts)
for adding a Pod dependency.
Each dependency requires its separate function call. You can specify the parameters for the dependency in
the configuration block of the function.
If you don't specify the minimum deployment target version and a dependency Pod requires a higher deployment target, you will get an error.
You can find a sample project here.
From the CocoaPods repository
Specify the name of a Pod library in the
pod()
function.In the configuration block, you can specify the version of the library using the
version
parameter. To use the latest version of the library, you can just omit this parameter altogether.You can add dependencies on subspecs.
Specify the minimum deployment target version for the Pod library.
kotlin { ios() cocoapods { ios.deploymentTarget = "13.5" summary = "CocoaPods test library" homepage = "https://github.com/JetBrains/kotlin" pod("FirebaseAuth") { version = "10.16.0" } } }
Re-import the project.
To use these dependencies from the Kotlin code, import the packages cocoapods.<library-name>
:
import cocoapods.FirebaseAuth.*
On a locally stored library
Specify the name of a Pod library in the
pod()
function.In the configuration block, specify the path to the local Pod library: use the
path()
function in thesource
parameter value.You can add local dependencies on subspecs as well. The
cocoapods
block can include dependencies to Pods stored locally and Pods from the CocoaPods repository at the same time.Specify the minimum deployment target version for the Pod library.
kotlin { ios() cocoapods { summary = "CocoaPods test library" homepage = "https://github.com/JetBrains/kotlin" ios.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" } } }
You can also specify the version of the library using
version
parameter in the configuration block. To use the latest version of the library, omit the parameter.Re-import the project.
To use these dependencies from the Kotlin code, import the packages cocoapods.<library-name>
:
import cocoapods.pod_dependency.*
import cocoapods.subspec_dependency.*
import cocoapods.FirebaseAuth.*
From a custom Git repository
Specify the name of a Pod library in the
pod()
function.In the configuration block, specify the path to the git repository: use the
git()
function in thesource
parameter value.Additionally, you can specify the following parameters in the block after
git()
:commit
– to use a specific commit from the repositorytag
– to use a specific tag from the repositorybranch
– to use a specific branch from the repository
The
git()
function prioritizes passed parameters in the following order:commit
,tag
,branch
. If you don't specify a parameter, the Kotlin plugin usesHEAD
from themaster
branch.You can combine
branch
,commit
, andtag
parameters to get the specific version of a Pod.Specify the minimum deployment target version for the Pod library.
kotlin { ios() cocoapods { summary = "CocoaPods test library" homepage = "https://github.com/JetBrains/kotlin" ios.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" } } } }
Re-import the project.
To use these dependencies from the Kotlin code, import the packages cocoapods.<library-name>
:
import cocoapods.Alamofire.*
import cocoapods.JSONModel.*
import cocoapods.CocoaLumberjack.*
From a custom Podspec repository
Specify the HTTP address to the custom Podspec repository using the
url()
inside thespecRepos
block.Specify the name of a Pod library in the
pod()
function.Specify the minimum deployment target version for the Pod library.
kotlin { ios() cocoapods { summary = "CocoaPods test library" homepage = "https://github.com/JetBrains/kotlin" ios.deploymentTarget = "13.5" specRepos { url("https://github.com/Kotlin/kotlin-cocoapods-spec.git") } pod("example") } }
Re-import the project.
To work correctly with Xcode, you should specify the location of specs at the beginning of your Podfile. For example,
source 'https://github.com/Kotlin/kotlin-cocoapods-spec.git'
To use these dependencies from the Kotlin code, import the packages cocoapods.<library-name>
:
import cocoapods.example.*
With custom cinterop options
Specify the name of a Pod library in the
pod()
function.In the configuration block, specify the cinterop options:
extraOpts
– to specify the list of options for a Pod library. For example, specific flags:extraOpts = listOf("-compiler-option")
.packageName
– to specify the package name. If you specify this, you can import the library using the package name:import <packageName>
.
Specify the minimum deployment target version for the Pod library.
kotlin { ios() cocoapods { summary = "CocoaPods test library" homepage = "https://github.com/JetBrains/kotlin" ios.deploymentTarget = "13.5" pod("YandexMapKit") { packageName = "YandexMK" } } }
Re-import the project.
To use these dependencies from the Kotlin code, import the packages cocoapods.<library-name>
:
import cocoapods.YandexMapKit.*
If you use the packageName
parameter, you can import the library using the package name import <packageName>
:
import YandexMK.YMKPoint
import YandexMK.YMKDistance
使用 @import 指令支持 Objective-C 头文件
This feature is Experimental. It may be dropped or changed at any time. Use it only for evaluation purposes. We'd appreciate your feedback on it in YouTrack.
Some Objective-C libraries, specifically those that serve as wrappers for Swift libraries,
have @import
directives in their headers. By default, cinterop doesn't provide support for these directives.
To enable support for @import
directives, specify the -fmodules
option in the configuration block of the pod()
function:
kotlin {
ios()
cocoapods {
summary = "CocoaPods test library"
homepage = "https://github.com/JetBrains/kotlin"
ios.deploymentTarget = "13.5"
pod("PodName") {
extraOpts = listOf("-compiler-option", "-fmodules")
}
}
}
Share Kotlin cinterop between dependent Pods
If you add multiple dependencies on Pods using the pod()
function, you might encounter issues when
there are dependencies between APIs of your Pods.
To make the code compile in such cases, use the useInteropBindingFrom()
function.
It utilizes the cinterop binding generated for another Pod while building a binding for the new Pod.
You should declare the dependent Pod before setting up the dependency:
// The cinterop of pod("WebImage"):
fun loadImage(): WebImage
// The cinterop of pod("Info"):
fun printImageInfo(image: WebImage)
// Your code:
printImageInfo(loadImage())
If you haven't configured the correct dependencies between cinterops in this case,
the code would be invalid because the WebImage
type would be sourced from different cinterop files and, consequently,
different packages.