You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

在OC工程中引入Swift导致编译错误的解决方法

解决Objective-C Workspace中混入Swift代码后的链接符号缺失问题

嘿,我碰到过好多次这种Objective-C工程里加Swift代码导致的链接错误,本质就是你的静态库libBusiness.a没正确链接Swift标准库——毕竟原来的子项目是纯Objective-C的,突然加Swift代码,Xcode需要额外配置才能搞定。给你几个靠谱的解决办法,按顺序试就行:

方案1:给子项目开启Swift相关配置(最推荐)

这是从根源解决问题的办法,因为是子项目里加了Swift代码,所以得让这个子项目自己正确处理Swift依赖:

  • 打开那个包含TestSwift.o的子xcodeproj(也就是生成libBusiness.a的项目)
  • 找到Build Settings,搜索Always Embed Swift Standard Libraries,把它设为YES
  • 接着搜索Defines Module,同样设为YES
  • 检查子项目的Build PhasesCompile Sources,确保你的Swift文件已经被加进去了
  • 最后clean整个workspace(菜单栏选Product > Clean Build Folder),再重新编译

方案2:在主App项目里补全链接配置

如果子项目的配置不好改,或者方案1没起效,可以试试在主项目(workspace里的主应用项目)里做配置:

  • 打开主项目的Build Settings,搜索Other Linker Flags,添加两个参数:-ObjC-lc++
  • 同时把主项目的Always Embed Swift Standard Libraries也设为YES——哪怕主项目本身没有Swift代码,Xcode默认可能是关闭的,得手动打开

方案3:检查桥接文件的配置

有时候桥接文件路径错了也会间接引发这类链接问题,顺手检查下:

  • 确认子项目的Objective-C Bridging Header配置的路径是对的(要相对于子项目的根目录,比如Business/Bridging-Header.h
  • 桥接文件里别乱导入不必要的头文件,避免循环依赖搞出奇怪问题

这些步骤走下来,基本就能解决那些__swift_FORCE_LOAD_$xxxswift_slowAlloc之类的符号缺失问题了。

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

火山引擎 最新活动