Xcode无效的Swift可解析输出(格式错误的JSON)

moc*_*e10 11 debugging xcode swift

我收到格式错误的JSON的4个错误,一个命令compileSwift失败,退出代码错误为非零。

我不知道如何调试它,因为它没有列出正在发生什么文件。

错误的屏幕截图

我尝试删除工作区和pods目录并进行新的pod install && pod更新。

我尝试删除派生数据。

都没有工作。

mar*_*ico 7

这是我关于完全相同问题的故事,但原因和解决方案完全不同。

TL;DR - 将有问题的数组解码为字符串并读取它,这是您真正的问题,而不是 JSON 的问题。


这是我的完整故事......

首先,我通过将应用程序文件移动到框架项目并更改其目标来解决此错误。

我尝试了你们建议的所有方法,但没有运气,我花了一些时间才找出如何递归地报告这些文件。如果有人想检查整个项目中的编码,请按以下步骤操作:

find . -type f -name "*.swift" -exec file {} +
Run Code Online (Sandbox Code Playgroud)

我的所有文件都报告为 ASCII 或 UTF-8,我什至删除了所有 Unicode 字符以使它们全部为 ASCII,但仍然没有帮助。

不管怎样,完全绝望的是,我决定最后一次尝试......尝试解码那个不可解码的字节序列中的任何内容。

我打开浏览器控制台,然后运行:

String.fromCharCode(...[
    123, 10, 32, 32, 34, // the error array from XCode
])
Run Code Online (Sandbox Code Playgroud)

它节省了我的时间,泄露了实际的问题信息。

我得到的是实际的错误消息,由于某种原因(我仍然不知道)编译器无法处理。

这是一个简短的摘录,您还可以从中了解为什么所有人一开始都会看到相同的序列:

{
  "kind": "finished",
  "name": "compile",
  "pid": 27181,
  "output": ...
... /RecognizedSymbolBlock.swift:5:15: error: use of undeclared type 'CGRect'\n    let rect: CGRect;\n ... 
... /RecognizedTextBlock.swift:3:7: error: type 'RecognizedTextBlock' does not conform to protocol 'Decodable'\nclass RecognizedTextBlock ...
Run Code Online (Sandbox Code Playgroud)

所以事实证明我的问题是CoreGraphics目标中没有包含框架,也没有import CoreGraphics在文件本身中添加框架。

奇怪的是,当我在 XCode 中查看该文件时(我以前没有这样做,因为它只是移动以前有效的代码),我突然清楚地显示了所有这些错误。

我最后一个奇怪的发现是在我问自己之后......“为什么它在没有的情况下在原始目标中起作用import CoreGraphics?”

事实证明,将其包含在桥接头文件中会自动为其带来链接框架,就好像它们已导入到我的所有文件中一样(它是我使用的使用 UIKit 的链接框架之一):

{
  "kind": "finished",
  "name": "compile",
  "pid": 27181,
  "output": ...
... /RecognizedSymbolBlock.swift:5:15: error: use of undeclared type 'CGRect'\n    let rect: CGRect;\n ... 
... /RecognizedTextBlock.swift:3:7: error: type 'RecognizedTextBlock' does not conform to protocol 'Decodable'\nclass RecognizedTextBlock ...
Run Code Online (Sandbox Code Playgroud)

但它实际上可以是任何东西,比如:

#import <TesseractOCR/TesseractOCR.h>
Run Code Online (Sandbox Code Playgroud)

关键是,如果您使用桥接头文件,它可能很容易隐藏这样一个事实:您不必被迫为所有必要的导入编写一致的代码。

无论如何,我的主要目标是让每个人都知道他们的原始问题很可能是完全不同的问题,并且原始问题实际上编码在每个人都得到的错误字节数组中。即使您面临编码问题,这个字节数组也可能会告诉您代码出了什么问题。

快乐修复!


小智 5

我遇到了同样的错误,在阅读了上面的评论后,我浏览了我的代码并看到了这个“return 93à”所以在删除这个“à”之后它现在工作正常。


t0r*_*rst 2

在导航器窗格中,报告选项卡(最后一个)是这些情况的首选。您可以查看构建操作的详细日志,并可以从那里进行跟踪。