Xcode构建依赖macOS bundle的项目时如何链接bundle所需框架
问题原因
macOS bundle本质是可加载的资源包,默认不会将依赖的系统Framework符号打包进自身二进制,依赖加载它的宿主进程(也就是你的项目A)提供对应符号,你现在遇到的报错就是项目A没有提供GameKit相关类的符号导致的。
解决方案
首选方案(耦合性最低)
直接给项目A添加GameKit依赖即可:
- 打开项目A的Xcode工程,选中主应用Target,进入
Build Phases标签页 - 展开
Link Binary With Libraries,点击左下角+号,搜索GameKit.framework添加到链接列表- 如果你项目对GameKit是强制依赖,Status保持
Required即可;如果是可选支持,可修改为Optional
- 如果你项目对GameKit是强制依赖,Status保持
- 重新编译项目A,链接错误就会消失。
备选方案(Bundle自包含依赖)
如果你希望项目A不需要额外配置依赖,可修改Bundle项目B的构建设置:
- 打开项目B的Xcode工程,选中Bundle Target,进入
Build Settings的Linking分区 - 在
Other Linker Flags中添加-ObjC参数,确保所有OC类符号都被正确导出 - 如果你需要将依赖符号打包进Bundle,还可以添加
-all_load参数,不过该参数会增加包体积 - 重新编译B.bundle后导入项目A即可。
注意事项
不建议修改Bundle的Mach-O类型为动态库/静态库,保持默认的Mach-O Bundle即可避免其他加载异常。
内容的提问来源于stack exchange,提问作者downstroy
相关产品推荐
相关产品推荐

