【Compose Multiplatform】CMP專案中導入CocoaPods及無CocoaPods情況下使用IOS Swift/Obj-C
2024, Jul 18
前言
使用跨平台框架開發雙平台App 但是現階段官方提供的解決方案 可能還沒那麼完整 所以有些功能 必需要橋接回原本平台 使用該平台的native code來開發 這時候我們能怎麼實現呢?
目錄
- 【Compose Multiplatform】專案轉移探討與開發指南
- 【Compose Multiplatform】手機使用依賴注入Koin
- 【Compose Multiplatform 】跨平台App但Android需要context作法並搭配Koin
- 【Compose Multiplatform】手機本地持久化儲存DataStore實作
- 【Compose Multiplatform】手機資料庫SqlDelight實作
- 【Compose Multiplatform】CMP中使用ROOM開發資料庫 - [KSP2] Annotation value is missing in nested annotations
- 【Compose Multiplatform】CMP專案中導入CocoaPods及無CocoaPods情況下使用IOS Swift/Obj-C
使用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