Compose Multiplatform iOS集成Google MLKit扫码cinterop生成失败求助
问题
开发Compose Multiplatform应用时,通过CocoaPods在iOS端集成Google MLKit条码扫描器,构建项目时出现以下错误:
Failed to generate cinterop for :composeApp:cinteropGoogleMLKitIosArm64: Process 'command '/Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java'' finished with non-zero exit value 1 composeApp:iosArm64Main: cinterop file: /Users/OTB/Desktop/Tkl/composeApp/build/libs/composeApp-iosArm64Cinterop-GoogleMLKitMain.klib does not exist
附带提示:
Possible solution: - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html
当前配置如下:
Podfile
platform :ios, '15.5' target 'iosApp' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! pod 'composeApp', :path => '../composeApp' pod 'GoogleMLKit/BarcodeScanning', '8.0.0' # Pods for iosApp end
Compose模块build.gradle
cocoapods { summary = "Tkl ios dependency" homepage = "tkl.com/homepage" version = "1.0" podfile = project.file("../iosApp/Podfile") ios.deploymentTarget = "15.5" pod("GoogleMLKit/BarcodeScanning"){ moduleName ="MLKitBarcodeScanning" version = "8.0.0" extraOpts += listOf("-compiler-option","-fmodules") } } listOf( iosX64(), iosArm64(), iosSimulatorArm64() ).forEach { iosTarget -> iosTarget.binaries.framework { baseName = "ComposeApp" isStatic = true } } sourceSets { androidMain.dependencies { implementation(compose.preview) implementation(libs.androidx.activity.compose) ... } commonMain.dependencies { implementation(compose.runtime) implementation(compose.foundation) ... } iosMain.dependencies { implementation(libs.ktor.client.darwin) }}
求问如何正确集成Google MLKit条码扫描Pod到Compose Multiplatform的iOS端,需要可行方案或示例。
解决方案
1. 移除Pod依赖重复声明
当前build.gradle和Podfile同时声明了GoogleMLKit/BarcodeScanning,会导致依赖冲突。只保留build.gradle中的声明,修改Podfile如下:
platform :ios, '15.5' target 'iosApp' do use_frameworks! pod 'composeApp', :path => '../composeApp' end
2. 优化cinterop配置
Google MLKit的框架结构需要额外参数才能让cinterop正确识别,更新build.gradle中的Pod配置:
pod("GoogleMLKit/BarcodeScanning") { moduleName = "MLKitBarcodeScanning" version = "8.0.0" extraOpts += listOf( "-compiler-option", "-fmodules", "-framework", "MLKitBarcodeScanning", "-I", "\${PODS_ROOT}/GoogleMLKit/BarcodeScanning/Frameworks" ) }
3. 刷新依赖与清理缓存
- 执行Android Studio缓存清理:
File -> Invalidate Caches...,选择Invalidate and Restart - 同步Gradle项目:点击工具栏的「Sync Project with Gradle Files」按钮
- 在iOS项目目录下执行命令更新Pods:
cd iosApp pod deintegrate pod install
4. 验证配置有效性
重新构建项目后,若仍有错误,检查:
- 确认iOS部署目标
15.5符合MLKit 8.0.0的最低要求(支持iOS 13.0+) - 查看
iosApp/Pods/GoogleMLKit/BarcodeScanning目录下是否存在MLKitBarcodeScanning.framework
5. 示例调用代码
在iosMain源集中编写MLKit条码扫描的包装代码:
import MLKitBarcodeScanning.* import platform.CoreImage.CIImage import platform.UIKit.UIImage fun scanBarcodeFromImage(image: UIImage): List<String> { val ciImage = CIImage(image = image) ?: return emptyList() val scanner = BarcodeScanner.barcodeScanner() val results = scanner.process(ciImage) return results.mapNotNull { it.displayValue } }
内容的提问来源于stack exchange,提问作者uniqueapps
相关产品推荐
相关产品推荐

