【Compose Multiplatform】CMP專案中導入CocoaPods及無CocoaPods情況下使用IOS Swift/Obj-C

前言

使用跨平台框架開發雙平台App 但是現階段官方提供的解決方案 可能還沒那麼完整 所以有些功能 必需要橋接回原本平台 使用該平台的native code來開發 這時候我們能怎麼實現呢?

使用CocoaPods
加入CocoaPods配置設定

加入libs.version.toml配置

在build.gradle.kts中
加入cocoapods block
並在裡面加入想要使用的Pod庫依賴pod("Google-Mobile-Ads-SDK")
還有PodFile的位置podfile = project.file("../iosApp/Podfile")
通常在你的ios專案下面
如果用kmm官方的網頁產生專案的話
預設名稱是iosApp

官網有提到可以添加以下幾種類型的Pod庫依賴

  • 來自CocoaPods repository
  • 本地存儲的庫
  • 自定義Git repository
  • 自定義Podspec repository
  • 帶有自定義cinterop選項

在iosApp專案下配置Podfile

好了之後
就在iosApp專案下使用指定pod install 安裝配置
安裝過有可用pod install --repo-update
或者pod deintegrate之後再重新安裝

最後./gradlew build一下
成功就能透過kotlin 導入 ios 橋接過來的code

不用Cocoapods並實現橋接在kotlin中使用ios framework

如果不想使用CocoaPods
可以使用cinterop來為Objective-C或Swift聲明創建Kotlin橋接
這樣就可以從Kotlin中調用它們

步驟1.
需在../composeApp/nativeInterop/cinterop/xxx.def
建立一個.def
(依照你實據需求寫裡面內容)

步驟2.
Build.gradle.kts 中對ios配置加入下面代碼
其中你要使用的framework也可以透過cocoapods安裝後你再去找路徑之類的
或你自己實作.swift橋接過來也可以

總結
  • 不過目前實測下來
    直接用cocoapods配置轉過來的ios native code
    現階段還沒辦法整個轉過來
    例如我用Google-Mobile-Ads-SDK不是裡面所有的function都resolve的出來
  • 所以得用.def自己轉過來
    但這樣也就是等於還是要寫ios native code

You might also enjoy