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

如何为项目配置同名的Debug/Release版本Framework

Debug/Release分别嵌入同名Framework的解决方案

方法一:条件化添加Framework(最稳妥)

这是Xcode原生支持的方式,能彻底避免「Multiple commands produce」错误:

  1. 先移除Embed Frameworks中已添加的所有同名Framework,避免冲突残留。
  2. 将Debug和Release版本的MyFramework.xcframework都添加到项目中(拖到Project Navigator即可,不要直接拖进Embed Frameworks)。
  3. 选中项目里的Debug版MyFramework.xcframework,打开右侧File Inspector:
    • 在Target Membership区域,只勾选当前Target的Debug配置,取消Release的勾选。
  4. 同样操作Release版的MyFramework.xcframework:只勾选Release配置,取消Debug的勾选。
  5. 把这两个Framework都添加到Embed Frameworks列表中:
    • 选中Embed Frameworks里的Debug版Framework,点击右侧Build Settings标签,找到Condition列,设置为CONFIGURATION == Debug。
    • 对Release版Framework做同样操作,Condition设为CONFIGURATION == Release。

这样Xcode在构建Debug时只会处理Debug版框架,构建Release时只处理Release版,完全不会出现重复命令的问题,还能自动完成签名和嵌入流程。

方法二:修复Run Script脚本(适合复杂场景)

如果一定要用脚本复制的方式,需要调整脚本逻辑和执行顺序:

  1. 移除Embed Frameworks中的所有同名Framework,避免Xcode自动处理冲突。
  2. 在Build Phases中添加Run Script Phase,拖动到Embed Frameworks之前执行,脚本内容修改为:
    # 先清理目标目录的旧框架,防止残留冲突
    rm -rf "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/MyFramework.xcframework"
    
    # 根据当前配置复制对应版本的框架
    if [ "$CONFIGURATION" = "Debug" ]; then
        SOURCE_FRAMEWORK="${PROJECT_DIR}/Debug/MyFramework.xcframework"
    else
        SOURCE_FRAMEWORK="${PROJECT_DIR}/Release/MyFramework.xcframework"
    fi
    
    # 复制框架到目标目录
    if [ -d "$SOURCE_FRAMEWORK" ]; then
        cp -R "$SOURCE_FRAMEWORK" "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/"
    fi
    
  3. 配置Build Settings:
    • 在Framework Search Paths中添加$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH),并勾选Recursive。
    • 在Other Linker Flags中添加-framework MyFramework。
  4. 最后在Embed Frameworks中添加复制后的框架路径:点击+ -> Add Other -> Add Files,选择${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/MyFramework.xcframework(如果找不到,先执行一次构建生成目录),并确保其Condition设置为Any SDK(因为脚本已经处理了版本切换)。

为什么原脚本没生效?

  • 脚本执行顺序可能在Embed Frameworks之后,导致Xcode先处理了旧框架,复制的新版本没起作用。
  • 没有清理目标目录的旧框架,新旧版本冲突导致错误。

解决「No such module 'MyFramework'」错误

出现这个问题的核心是Xcode找不到模块,需要确保:

  • Framework的Target Membership已正确勾选对应配置的Target。
  • Framework Search Paths包含了Framework所在的目录,并且勾选了Recursive。
  • 如果是静态Framework,不需要添加到Embed Frameworks,只需要在Link Binary With Libraries中添加即可。

内容的提问来源于stack exchange,提问作者Marshall

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:22:43