You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 08:14:54