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

Xcode 15合并框架定义与使用问题:无法找到子框架类

Xcode 15 Mergeable Libraries 问题解决指南

你踩的几个坑:

  • 子框架符号未暴露给上层:就算MergedFramework链接了两个可合并框架,默认子框架的类不会自动对外可见,必须手动配置导出。
  • 合并框架构建设置不全:只设置MERGED_BINARY_TYPE=manual不够,还要明确告诉链接器要合并哪些框架,同时子框架的嵌入方式不能出错。
  • 应用层导入方式错误:直接导入子框架模块会导致找不到类,必须通过合并框架间接导入。

正确的合并框架配置与使用流程:

1. 配置可合并子框架

给MergeableFramework1和MergeableFramework2的构建设置添加以下项:

  • MERGEABLE_LIBRARY = YES
  • BUILD_LIBRARY_FOR_DISTRIBUTION = YES(必须开启,否则无法生成稳定的接口文件)
  • 在MergedFramework的target的「Frameworks, Libraries, and Embedded Content」中,将这两个子框架的嵌入方式设为Do Not Embed(它们会被合并到MergedFramework中,无需单独嵌入)

2. 配置合并框架MergedFramework

  • 设置MERGED_BINARY_TYPE = manual
  • 在OTHER_LDFLAGS中添加参数:-merge_framework MergeableFramework1 -merge_framework MergeableFramework2(明确告知链接器需要合并的目标框架)
  • 导出子框架模块:
    • Swift框架:在MergedFramework的主.swift文件中添加两行代码:
      @_exported import MergeableFramework1
      @_exported import MergeableFramework2
      
      这样上层应用导入MergedFramework后,就能直接使用子框架的类。
    • Objective-C框架:修改module.modulemap文件,显式导出子框架:
      framework module MergedFramework {
          export MergeableFramework1
          export MergeableFramework2
          umbrella header "MergedFramework.h"
          export *
          module * { export * }
      }
      

3. 应用层操作

  • 仅需链接并嵌入MergedFramework,嵌入方式设置为「Embed & Sign」
  • 代码中只需导入import MergedFramework,无需单独导入子框架,直接调用MergeableFramework1或MergeableFramework2的类即可。

额外检查项

  • 清理构建缓存:按下Cmd+Shift+K清理缓存后重新构建,避免缓存导致的符号查找异常。
  • 确认Xcode版本:使用Xcode 15正式版,beta版本可能存在合并框架的兼容性bug。
  • 子框架符号可见性:Swift类需设置为public,Objective-C类需添加__attribute__((visibility("default"))),否则合并后上层无法访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 18:33:21