错误:无法表达IRGen,没有其他错误

Paw*_*sta 26 debugging xcode lldb swift xcode10

我无法在UI测试中打印调试信息.配置:Xcode 10和SWIFT 4.2.

当我尝试在控制台中打印某些内容时,我只能看到错误:

"error: Couldn't IRGen expression, no additional error" 
Run Code Online (Sandbox Code Playgroud)

我在早期版本的Xcode(8,9等)中没有任何问题,仅在Xcode 10中.我无法打印任何东西,当我放置断点并尝试打印例如应用程序po XCUIApplication()或类似的东西.

在我在控制台中编写的Xcode的早期版本中:

"po XCUIApplication.debugDescription()"我看到了我的应用程序的结构.

我们发现当外部框架添加到UI Tests Target时会出现问题.我们创建了一个包含RxSwift.framework的示例项目,可用于重现我们的问题:

https://drive.google.com/file/d/1BlByFVNaOdDqT4ED9Jwyi1kJ99PTRQen/view?usp=sharing

问候.

Mic*_*elV 26

我和迦太基有同样的问题.然而,在仔细观察控制台时,我发现Carthage而不是构建RxSwift只是下载了预先构建的二进制文件,

*** Downloading RxSwift.framework binary at "Zürich"
Run Code Online (Sandbox Code Playgroud)

这反过来又导致IRGen错误.因此迫使Carthage构建框架而不是下载二进制工作.

carthage update --platform iOS --no-use-binaries
Run Code Online (Sandbox Code Playgroud)

  • `carthage update --platform iOS --no-use-binaries` 对我来说效果很好。但是,如果您与其他开发人员合作,并将 carthage 构建推送到存储库,那么其他开发人员仍然会遇到问题,因为 RxSwift 构建是在我的计算机上进行的。这种情况只发生在 RxSwift 框架中。 (2认同)

Jim*_*ham 4

Swift 调试格式是 Swift 内部对象的二进制转储,因此您必须使用您正在使用的调试器附带的编译器来编译二进制文件,否则事情会很糟糕。

我可以使用 Xcode 10.0 和您提供的项目重现您所看到的行为。但后来我从 github 获取了 RxSwift 源代码,并使用 Xcode 10.0 编译器重新构建了它们,并用我在本地构建的框架替换了 RxSwift.framework 并重新运行了测试,并且附加到断点的表达式可以正常工作。你能看看这是否也适合你吗?

调试器应该给出更好的错误消息,如果您想使用 swift bug 报告器 ( http://bugs.swift.org )提交错误,我们可以考虑改进错误消息。