Kotlin Multiplatform集成CocoaPods后iOS共享资源缺失问题
问题解决:Compose Multiplatform集成CocoaPods后iOS资源加载崩溃
问题现象
使用Compose Multiplatform + Voyager开发跨端应用,未集成CocoaPods时iOS端可正常通过painterResource加载commonMain/resources下的图片;集成CocoaPods后,进入对应标签页时崩溃,抛出异常:
org.jetbrains.compose.resources.MissingResourceException: Missing resource with path: ic_autodealer_logo.xml
原因分析
集成CocoaPods后,iOS端的资源打包逻辑发生变化,原shared.podspec中的资源路径配置错误,导致Compose无法找到打包后的资源文件。
解决方案
1. 修正shared.podspec的资源路径
将spec.resources的路径修改为指向commonMain/resources目录下的所有资源,确保CocoaPods能正确收集并打包这些资源:
Pod::Spec.new do |spec| spec.name = 'shared' spec.version = '1.0' spec.homepage = 'Link to the Shared Module homepage' spec.source = { :http=> ''} spec.authors = '' spec.license = '' spec.summary = 'Some description for the Shared Module' spec.vendored_frameworks = 'build/cocoapods/framework/shared.framework' spec.libraries = 'c++' spec.ios.deployment_target = '14.2' spec.pod_target_xcconfig = { 'KOTLIN_PROJECT_PATH' => ':shared', 'PRODUCT_MODULE_NAME' => 'shared', } spec.script_phases = [ { :name => 'Build shared', :execution_position => :before_compile, :shell_path => '/bin/sh', :script => <<-SCRIPT if [ "YES" = "$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED" ]; then echo "Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \"YES\"" exit 0 fi set -ev REPO_ROOT="$PODS_TARGET_SRCROOT" "$REPO_ROOT/../gradlew" -p "$REPO_ROOT" $KOTLIN_PROJECT_PATH:syncFramework \ -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME \ -Pkotlin.native.cocoapods.archs="$ARCHS" \ -Pkotlin.native.cocoapods.configuration="$CONFIGURATION" SCRIPT } ] # 修改此处:指向commonMain下的所有资源文件 spec.resources = ['src/commonMain/resources/**/*'] end
2. 增强Gradle资源同步(可选)
如果上述修改后仍存在资源缺失问题,可在build.kts的cocoapods配置块中添加资源目录映射,强制Gradle同步资源:
cocoapods { summary = "Some description for the Shared Module" homepage = "Link to the Shared Module homepage" version = "1.0" ios.deploymentTarget = "14.2" framework { baseName = "shared" isStatic = true } // 添加资源目录映射 resources { from("src/commonMain/resources") } }
3. 清理缓存并重新构建
- 执行Gradle清理任务:
./gradlew clean - 进入iOS项目目录执行:
pod deintegrate && pod install - 重新运行iOS应用
验证
重新启动iOS应用后,进入对应标签页,图片应能正常加载,不再抛出资源缺失异常。
内容的提问来源于stack exchange,提问作者herz88888888
相关产品推荐
相关产品推荐

