Skip to content

新增 Pod 函式庫的依賴項

您可以在 Kotlin 專案的不同位置新增對 Pod 函式庫的依賴項。

若要新增 Pod 依賴項,請在共用模組的 build.gradle(.kts) 檔案中呼叫 pod() 函式。 每個依賴項都需要單獨的函式呼叫。您可以在函式體的配置區塊中指定依賴項的參數。

  • 當您新增一個新的依賴項並在您的 IDE 中重新匯入專案時,該函式庫將會自動連接。
  • 若要在 Xcode 中使用您的 Kotlin 專案,請先變更專案的 Podfile

如果您未指定最小部署目標版本,而某個依賴項 Pod 需要更高的部署目標, 您將會收到錯誤。

來自 CocoaPods 儲存庫

若要新增對位於 CocoaPods 儲存庫中的 Pod 函式庫的依賴項:

  1. pod() 函式中指定 Pod 函式庫的名稱。

    在配置區塊中,您可以使用 version 參數指定函式庫的版本。 若要使用函式庫的最新版本,您可以完全省略此參數。

    您也可以新增對子規格 (subspecs) 的依賴項。

  2. 指定 Pod 函式庫的最小部署目標版本。

    kotlin
    kotlin {
        iosArm64()
    
        cocoapods {
            version = "2.0"
            summary = "CocoaPods test library"
            homepage = "https://github.com/JetBrains/kotlin"
            ios.deploymentTarget = "16.0"
    
            pod("SDWebImage") {
                version = "5.20.0"
            }
        }
    }
  3. 在 IntelliJ IDEA 中執行 Build | Reload All Gradle Projects (或在 Android Studio 中執行 File | Sync Project with Gradle Files), 以重新匯入專案。

若要從 Kotlin 程式碼中使用這些依賴項,請匯入 cocoapods.<library-name> 套件:

kotlin
import cocoapods.SDWebImage.*

對於本地儲存的函式庫

若要新增對本地儲存的 Pod 函式庫的依賴項:

  1. pod() 函式中指定 Pod 函式庫的名稱。

    在配置區塊中,指定本地 Pod 函式庫的路徑:在 source 參數值中使用 path() 函式。

    您也可以新增對本地子規格的依賴項。 cocoapods {} 區塊可以同時包含對本地儲存的 Pod 和來自 CocoaPods 儲存庫的 Pod 的依賴項。

  2. 指定 Pod 函式庫的最小部署目標版本。

    kotlin
    kotlin {
        iosArm64()
    
        cocoapods {
            version = "2.0"
            summary = "CocoaPods test library"
            homepage = "https://github.com/JetBrains/kotlin"
            ios.deploymentTarget = "16.0"
    
            pod("pod_dependency") {
                version = "1.0"
                extraOpts += listOf("-compiler-option")
                source = path(project.file("../pod_dependency"))
            }
            pod("subspec_dependency/Core") {
                version = "1.0"
                extraOpts += listOf("-compiler-option")
                source = path(project.file("../subspec_dependency"))
            }
            pod("SDWebImage") {
                version = "5.20.0"
            }
        }
    }

    您也可以在配置區塊中使用 version 參數指定函式庫的版本。 若要使用函式庫的最新版本,請省略該參數。

  3. 在 IntelliJ IDEA 中執行 Build | Reload All Gradle Projects (或在 Android Studio 中執行 File | Sync Project with Gradle Files), 以重新匯入專案。

若要從 Kotlin 程式碼中使用這些依賴項,請匯入 cocoapods.<library-name> 套件:

kotlin
import cocoapods.pod_dependency.*
import cocoapods.subspec_dependency.*
import cocoapods.SDWebImage.*

來自自訂 Git 儲存庫

若要新增對位於自訂 Git 儲存庫中的 Pod 函式庫的依賴項:

  1. pod() 函式中指定 Pod 函式庫的名稱。

    在配置區塊中,指定 Git 儲存庫的路徑:在 source 參數值中使用 git() 函式。

    此外,您可以在 git() 後的區塊中指定以下參數:

    • commit – 使用儲存庫中的特定提交
    • tag – 使用儲存庫中的特定標籤
    • branch – 使用儲存庫中的特定分支

    git() 函式會按照以下順序優先處理傳入的參數:committagbranch。 如果您未指定參數,Kotlin 插件會使用 master 分支的 HEAD

    您可以結合 branchcommittag 參數來獲取 Pod 的特定版本。

  2. 指定 Pod 函式庫的最小部署目標版本。

    kotlin
    kotlin {
        iosArm64()
    
        cocoapods {
            version = "2.0"
            summary = "CocoaPods test library"
            homepage = "https://github.com/JetBrains/kotlin"
            ios.deploymentTarget = "16.0"
    
            pod("SDWebImage") {
                source = git("https://github.com/SDWebImage/SDWebImage") {
                    tag = "5.20.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"
                }
            }
        }
    }
  3. 在 IntelliJ IDEA 中執行 Build | Reload All Gradle Projects (或在 Android Studio 中執行 File | Sync Project with Gradle Files), 以重新匯入專案。

若要從 Kotlin 程式碼中使用這些依賴項,請匯入 cocoapods.<library-name> 套件:

kotlin
import cocoapods.SDWebImage.*
import cocoapods.JSONModel.*
import cocoapods.CocoaLumberjack.*

來自自訂 Podspec 儲存庫

若要新增對位於自訂 Podspec 儲存庫中的 Pod 函式庫的依賴項:

  1. specRepos {} 區塊內使用 url() 呼叫指定自訂 Podspec 儲存庫的位址。

  2. pod() 函式中指定 Pod 函式庫的名稱。

  3. 指定 Pod 函式庫的最小部署目標版本。

    kotlin
    kotlin {
        iosArm64()
    
        cocoapods {
            version = "2.0"
            summary = "CocoaPods test library"
            homepage = "https://github.com/JetBrains/kotlin"
            ios.deploymentTarget = "16.0"
    
            specRepos {
                url("https://github.com/Kotlin/kotlin-cocoapods-spec.git")
            }
            pod("example")
        }
    }
  4. 在 IntelliJ IDEA 中執行 Build | Reload All Gradle Projects (或在 Android Studio 中執行 File | Sync Project with Gradle Files), 以重新匯入專案。

若要與 Xcode 協同工作,請在 Podfile 的開頭指定 specs 的位置:

ruby
source 'https://github.com/Kotlin/kotlin-cocoapods-spec.git'

若要從 Kotlin 程式碼中使用這些依賴項,請匯入 cocoapods.<library-name> 套件:

kotlin
import cocoapods.example.*

搭配自訂 cinterop 選項

若要使用自訂 cinterop 選項新增對 Pod 函式庫的依賴項:

  1. pod() 函式中指定 Pod 函式庫的名稱。

  2. 在配置區塊中,新增以下選項:

    • extraOpts – 指定 Pod 函式庫的選項列表。例如,extraOpts = listOf("-compiler-option")

      如果您遇到 clang 模組的問題,請同時新增 -fmodules 選項。

    • packageName – 直接使用套件名稱 import <packageName> 匯入函式庫。

  3. 指定 Pod 函式庫的最小部署目標版本。

    kotlin
    kotlin {
        iosArm64()
    
        cocoapods {
            version = "2.0"
            summary = "CocoaPods test library"
            homepage = "https://github.com/JetBrains/kotlin"
            ios.deploymentTarget = "16.0"
    
            pod("FirebaseAuth") {
                packageName = "FirebaseAuthWrapper"
                version = "11.7.0"
                extraOpts += listOf("-compiler-option", "-fmodules")
            }
        }
    }
  4. 在 IntelliJ IDEA 中執行 Build | Reload All Gradle Projects (或在 Android Studio 中執行 File | Sync Project with Gradle Files), 以重新匯入專案。

若要從 Kotlin 程式碼中使用這些依賴項,請匯入 cocoapods.<library-name> 套件:

kotlin
import cocoapods.FirebaseAuth.*

如果您使用 packageName 參數,您可以使用套件名稱 import <packageName> 匯入函式庫:

kotlin
import FirebaseAuthWrapper.Auth
import FirebaseAuthWrapper.User

支援帶有 @import 指令的 Objective-C 標頭檔

此功能為實驗性。 它可能隨時被刪除或更改。僅用於評估目的。 我們將感謝您在 YouTrack 上提供關於它的意見回饋。

一些 Objective-C 函式庫,特別是那些作為 Swift 函式庫包裝的函式庫, 在它們的標頭檔中包含 @import 指令。預設情況下,cinterop 不支援這些指令。

若要啟用對 @import 指令的支援,請在 pod() 函式的配置區塊中指定 -fmodules 選項:

kotlin
kotlin {
    iosArm64()

    cocoapods {
        version = "2.0"
        summary = "CocoaPods test library"
        homepage = "https://github.com/JetBrains/kotlin"
        ios.deploymentTarget = "16.0"

        pod("PodName") {
            version = "1.0.0"
            extraOpts = listOf("-compiler-option", "-fmodules")
        }
    }
}

在相依的 Pod 之間共用 Kotlin cinterop

如果您使用 pod() 函式新增了多個 Pod 的依賴項,當您的 Pod API 之間存在依賴關係時,您可能會遇到問題。

為了在這種情況下使程式碼編譯,請使用 useInteropBindingFrom() 函式。 它會在為新 Pod 建立繫結時,利用為另一個 Pod 生成的 cinterop 繫結。

您應該在設定依賴關係之前宣告相依的 Pod:

kotlin
// The cinterop of pod("WebImage"):
fun loadImage(): WebImage

// The cinterop of pod("Info"):
fun printImageInfo(image: WebImage)

// Your code:
printImageInfo(loadImage())

如果您在這種情況下未配置 cinterop 之間正確的依賴關係, 程式碼將會無效,因為 WebImage 類型將來自不同的 cinterop 檔案,因此也來自不同的套件。

接下來