全新的Xcode单元测试目标无法运行,因为"启动会话在签入之前已过期".

use*_*135 4 macos xcode unit-testing

我在Xcode的macOS app项目中添加了一个全新的单元测试目标.它包含默认的两个文件:

  • (目标名称).swift
  • 的Info.plist

但是,当我运行我的测试套件时,这个全新的目标会出现错误"测试操作失败:在检入之前启动会话已过期".

完整的日志是:

12:12:49.492 Xcode[10034:721978] Beginning test session MyTargetTests-3902F95F-20F9-4E6C-94EE-0BF8660D3B5A at 2017-06-18 12:12:49.492 with Xcode 8E3004b on target <DVTLocalComputer: 0x7fcc3cf024d0 (My Mac | x86_64)> (10.12.4 (16E195))
12:12:49.492 Xcode[10034:721978] Launching with Xcode.DebuggerFoundation.Launcher.LLDB
12:12:49.492 Xcode[10034:894962] Waiting for connection to unix domain socket at /tmp/XCTest-QcErkZ.
12:12:59.747 Xcode[10034:721978] Launch session started.
12:12:59.832 Xcode[10034:721978] Adding console adaptor <IDEConsoleAdaptor: 0x7fcc2cd44d00 'target'> for test session 3902F95F-20F9-4E6C-94EE-0BF8660D3B5A.
12:12:59.914 Xcode[10034:721978] Test process runnable PID is 19198.
12:13:02.025 Xcode[10034:721978] Test operation failure: Launch session expired before checking in.
12:13:02.025 Xcode[10034:721978] _finishWithError:Error Domain=IDETestOperationsObserverErrorDomain Code=5 "Launch session expired before checking in." UserInfo={NSLocalizedDescription=Launch session expired before checking in.} didCancel: 1
Run Code Online (Sandbox Code Playgroud)

我的设置是:

  • Mac Mini 2011年中期
  • macOS 10.12.4
  • Xcode 8.3(尝试使用Xcode 8 - 不好)

我试过了:

  • sudo /usr/sbin/DevToolsSecurity --enable - 不好
  • 删除并重新创建测试目标 - 没有好处
  • 将Xcode升级到8.3 - 没有好处
  • 只是自己运行目标测试 - 没有好处,也没有额外的日志

那么...... 我如何使单元测试目标工作?

use*_*135 14

错误消息"启动会话在签入之前过期"有点像红色鲱鱼.您需要公开真实的底层错误消息,您可以通过View - > Debug Area - > Show Debug Area(如果它尚未显示)访问该消息.

在我的情况下,问题是libswiftswiftononesupport.dylib没有链接到我自己的macOS应用程序中的某些库(未找到dyld图像).解决方案有点奇怪,费力,但确实有效:

  • 我用框架目标替换了所有动态库目标
  • 我在框架目标中启用了"始终嵌入Swift标准库"
  • 我没有在任何主机应用程序中嵌入框架 - 我为此选项选择了"none".