Fastlane CI导出IPA时test1.framework不支持配置描述文件报错排查
问题根因定位
update_project_provisioning默认存在配置越界问题:该方法默认会遍历项目内所有target的构建设置,把当前匹配到的描述文件批量写入每个target的签名配置,不会自动跳过framework这类非可执行target,是后续错配的源头。你之前以为这个方法只会给主App绑定描述文件,实际逻辑和预期不符。build_app(即gym插件)传入xcconfig参数时,自动签名过滤逻辑会失效:正常无外部xcconfig的流程下,gym会自动识别归档包内的framework类型target,自动跳过为其绑定独立描述文件的步骤;一旦传入外部xcconfig,gym会将xcconfig内定义的、项目内残留的所有签名配置全量透传到导出环节生成的ExportOptions.plist。加上报错指向的test1.framework本身和主App共用了com.xxx.test1的bundle id,xcodebuild导出时会无差别给所有匹配这个bundle id的产物(包括主App和内嵌framework)应用描述文件绑定规则,最终因为framework不支持独立描述文件触发报错。- 之前手动配置空值provisioningProfiles的操作无效,是因为匹配的键完全错位:报错指向的
test1.framework和主App同bundle id,你之前填的com.xxx.framework1、com.xxx.framework2根本不是实际错配的条目,空值自然无法生效。
具体修复操作
- 第一,收敛
update_project_provisioning的配置范围,禁止其批量修改framework target的设置:
把原调用:
替换为带target过滤的配置:update_project_provisioning(xcodeproj: "MyProject.xcodeproj")update_project_provisioning( xcodeproj: "MyProject.xcodeproj", target_filter: "MyProject", # 仅匹配主App target,跳过所有framework类target profile: "PROFILE_test1.mobileprovision" # 显式指定绑定的描述文件,避免自动匹配串扰 ) - 第二,修正
build_app的export_options配置,明确排除framework的独立描述文件绑定:
不要在provisioningProfiles字典里列任何framework的条目,仅保留主App的配置,同时增加参数告诉xcodebuild不要给framework强制嵌入独立描述文件:build_app( workspace: "MyProject.xcworkspace", output_directory: "./OutputFile", xcconfig: xcconfigPath, export_method: "enterprise", scheme: "MyProject", export_options: { # 仅配置主App的描述文件绑定,完全不写framework相关条目 provisioningProfiles: { "com.xxx.test1" => "PROFILE_TEST1" }, signingStyle: "manual", # 关键参数:禁止为framework嵌入独立描述文件,沿用宿主App签名 embedProvisioningProfiles: false } ) - 第三,清理xcconfig文件内的残留签名配置:
打开传入build_app的xcconfig文件,删除所有非主App target层级的PROVISIONING_PROFILE_SPECIFIER、PROVISIONING_PROFILE、CODE_SIGN_IDENTITY配置项——这类全局配置会被xcodebuild直接读取,哪怕在Fastlane层没有主动配置,也会被透传到导出环节的plist文件里。
补充说明:之前移除xcconfig参数时流程正常,是因为gym的默认无外部配置流程会自动按target类型匹配签名规则,给主App绑定对应描述文件、给framework自动设置为无独立描述文件的状态;一旦传入外部xcconfig,xcconfig的配置优先级会覆盖gym的自动过滤逻辑,最终触发描述文件错配。
内容的提问来源于stack exchange,提问作者William Hu
相关产品推荐
相关产品推荐

