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

使用SBTUITestTunnel执行XCTest时触发EXC_BAD_INSTRUCTION崩溃求助

解决SBTUITestTunnel启动崩溃(EXC_BAD_INSTRUCTION)的排查方案

我之前在集成SBTUITestTunnel做UI自动化测试时,也碰到过一模一样的启动崩溃问题,给你几个亲测有效的排查方向,应该能帮你解决:

1. 先确认Podfile的配置是否正确

这是最容易踩坑的地方,一定要确保主App和UITest Target的依赖分开配置,绝对不要把Server端依赖加到主App里。正确的Podfile示例应该是这样:

target 'YourMainAppTargetName' do
  use_frameworks!
  pod 'SBTUITestTunnel/Client'
end

target 'YourUITestTargetName' do
  use_frameworks!
  pod 'SBTUITestTunnel/Server'
end

配置完后记得执行pod install,并且关闭Xcode再重新打开.xcworkspace文件。

2. 检查Build Phases的框架嵌入配置

  • 主App Target:进入Build Phases → Link Binary With Libraries,确认有SBTUITestTunnelClient.framework;再看Embed Frameworks,这个框架必须在这里,且设置为Embed & Sign。
  • UITest Target:同样在Link Binary With Libraries里确认有SBTUITestTunnelServer.framework,但绝对不要把它加到Embed Frameworks里——UITest是注入到主App运行的,重复嵌入会导致框架重复加载,直接触发崩溃。

3. 彻底清理缓存后重新构建

缓存经常会导致各种玄学问题,按这个顺序操作:

  • 执行终端命令:pod deintegrate && pod install
  • 在Xcode里按Cmd+Shift+K清理项目,再按Cmd+Option+Shift+K彻底清除DerivedData
  • 重启Xcode和测试用的模拟器/真机

4. 验证App启动时的Client初始化代码

确保你在主App的application:didFinishLaunchingWithOptions:里正确初始化了Client,而且要放在启动流程的早期:

import SBTUITestTunnelClient

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    #if DEBUG
        // 务必只在Debug环境初始化
        SBTUITestTunnelClient.takeOff()
    #endif
    // 其他业务初始化代码
    return true
}

如果你的项目用了SceneDelegate,也要确保在scene(_:willConnectTo:options:)里做同样的初始化(如果需要的话)。

5. 检查UITest Scheme的启动参数

打开UITest的Scheme配置(Cmd+<),进入Test → Info标签:

  • 确认Environment Variables里没有错误的SBTUITestTunnel相关变量
  • 切换到Arguments标签,检查Arguments Passed On Launch里是否包含-SBTUITestTunnel——这个参数是UITest启动App时用来触发Server端初始化的,缺少它也会导致崩溃。

6. 排查系统版本或框架版本兼容性

SBTUITestTunnel对iOS版本有最低要求,比如最新版本可能只支持iOS 13及以上。如果你的测试设备系统版本过低,尝试降级SBTUITestTunnel到适配旧系统的版本;或者升级设备系统到符合要求的版本。

7. 用Demo项目验证是否是项目冲突

如果以上方法都没用,建议创建一个全新的空白iOS项目,严格按照官方步骤集成SBTUITestTunnel。如果Demo能正常运行,说明你的原项目里存在第三方库冲突或者Build Settings配置异常(比如Other Linker Flags里的参数冲突),可以逐步对比两个项目的配置差异来定位问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:00:30