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

Swift UI测试调用Objective C类时遇未定义符号错误求助

解决Swift UI测试调用Objective-C类出现链接错误的问题

这个链接器错误我之前也碰到过,核心问题是你的UI测试target并没有真正包含MyService的实现代码——桥接文件只是让Swift编译器能识别类的接口,但链接阶段需要实际的二进制代码才能找到对应的符号。下面是具体的解决思路和步骤:

  • 检查UI测试target的编译源文件
    打开Xcode,按以下操作处理:

    1. 选中项目导航栏最顶部的项目图标
    2. 在右侧的target列表里选择你的UI测试target(比如MyAppUITests)
    3. 切换到Build Phases标签页,展开Compile Sources部分
    4. 查看列表里是否有MyService.m文件:
      • 如果没有,点击+按钮,在弹出的文件选择器里找到MyService.m并添加进去
      • 这一步是关键,因为UI测试target是独立的,不会自动包含主app的所有代码
  • 确认UI测试target的桥接文件配置
    很多人会只给主app target配置桥接文件,但忘了UI测试target也需要:

    1. 同样选中UI测试target,切换到Build Settings标签页
    2. 搜索Objective-C Bridging Header选项
    3. 确保这里填写的桥接文件路径是正确的,比如文件在项目根目录的话,路径应该是$(SRCROOT)/MyApp_Bridging_Header.h
  • 排查架构与编译宏问题
    链接错误也可能是架构不匹配导致的:

    1. 检查MyService.m里有没有针对特定架构的条件编译宏(比如只允许arm64架构编译),如果有,确保x86_64(旧模拟器)或arm64(新模拟器)也被包含
    2. 确认主app target和UI测试target的Architectures设置一致,建议都设为Standard Architectures
  • 清理缓存重新编译
    有时候Xcode的缓存会导致奇怪的链接问题:

    • 按下Cmd+Shift+K清理Build文件夹
    • 再按下Cmd+B重新编译UI测试target,之后再运行测试

如果你的MyService是主app里的核心类,后续可能还有其他测试需要用到,更优雅的方式是把它放到一个共享的Framework target里,让主app和UI测试target都依赖这个Framework,这样就不用重复添加源文件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:10:05