Xcode 15合并框架定义与使用问题:无法找到子框架类
Xcode 15 Mergeable Libraries 问题解决指南
你踩的几个坑:
- 子框架符号未暴露给上层:就算MergedFramework链接了两个可合并框架,默认子框架的类不会自动对外可见,必须手动配置导出。
- 合并框架构建设置不全:只设置
MERGED_BINARY_TYPE=manual不够,还要明确告诉链接器要合并哪些框架,同时子框架的嵌入方式不能出错。 - 应用层导入方式错误:直接导入子框架模块会导致找不到类,必须通过合并框架间接导入。
正确的合并框架配置与使用流程:
1. 配置可合并子框架
给MergeableFramework1和MergeableFramework2的构建设置添加以下项:
MERGEABLE_LIBRARY = YESBUILD_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文件中添加两行代码:
这样上层应用导入MergedFramework后,就能直接使用子框架的类。@_exported import MergeableFramework1 @_exported import MergeableFramework2 - Objective-C框架:修改
module.modulemap文件,显式导出子框架:framework module MergedFramework { export MergeableFramework1 export MergeableFramework2 umbrella header "MergedFramework.h" export * module * { export * } }
- Swift框架:在MergedFramework的主.swift文件中添加两行代码:
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
相关产品推荐
相关产品推荐

