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

x0fgdtte  于 2023-03-31  发布在  Swift
关注(0)|答案(8)|浏览(254)

我得到了4个错误的格式错误的JSON和一个命令compileSwift失败与非零退出代码错误。
我不知道如何调试,因为它没有列出这是发生在什么文件。

我已经尝试删除工作区和pod目录,并做了一个新的pod安装&& pod更新。
我已经尝试删除派生数据。
两个都没有奏效。

lnxxn5zx

lnxxn5zx1#

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

1tuwyuhd

1tuwyuhd2#

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

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

以下是我的全部故事...
首先...我通过将应用程序文件移动到框架项目并更改它们的目标来得到这个错误。
我尝试了你们所有人的建议,但没有运气,我只是花了一些时间来找出如何递归地报告这些文件。如果有人想在整个项目中检查他们的编码,这里是如何做到这一点:

find . -type f -name "*.swift" -exec file {} +

我所有的文件都报告ASCII或UTF-8,我甚至删除了所有Unicode字符,使它们都成为ASCII,但仍然没有帮助。
不管怎样,我绝望了,我决定最后一次尝试...试着解码那无法解码的字节序列中的任何东西。
我打开我的浏览器控制台,运行以下命令:

String.fromCharCode(...[
    123, 10, 32, 32, 34, // the error array from XCode
])

而且它救了我的一天,泄露了实际的问题信息。
我得到的是实际的错误消息,由于某种原因(我仍然不知道),编译器无法处理。
下面是一个简短的摘录,从中你也可以看到为什么所有人在开始时看到的是相同的序列:

{
  "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 ...

因此,我的问题是没有在目标中包含CoreGraphics框架,以及没有在文件本身中添加import CoreGraphics
奇怪的是,当我在XCode中查看该文件时(我以前没有这样做,因为它只是以前工作的代码),我突然清楚地显示了所有这些错误。
我最后一个奇怪的发现是在我问自己...“为什么它在没有import CoreGraphics的原始目标中工作?”
事实证明,在桥接头文件中有这个会自动将其链接到框架中,就好像它们被导入到我所有的文件中一样(这是我使用的链接框架之一,它使用UIKit):

#import <TesseractOCR/TesseractOCR.h>

但它可以是任何东西,真的,比如:

#import <UIKit/UIKit.h>

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

不管怎样,我的主要目的是让大家知道,他们最初的问题很可能是完全不同的东西,而最初的问题实际上是编码在每个人都得到的错误字节数组中。即使你面临编码问题,这个字节数组可能会告诉你代码的错误。

修理愉快!

ygya80vv

ygya80vv3#

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

ukqbszuj

ukqbszuj4#

我从问题中遇到了同样的错误。我将一个文件从project_1拖到project_2,突然所有这些错误都出现在project_2中。奇怪的是,我拖进来的新文件与错误无关,因为它们出现在我以前从project_1拖进来的完全不同的文件中。这些文件在几个月内都工作正常,错误没有发生。直到我拖进新文件后才出现。
我关闭了Xcode,重新打开它,死亡的沙滩球开始旋转。Xcode基本上被冻结了,我必须等待大约45分钟才能解冻。
我添加了错误的屏幕截图和我必须做的步骤来解决这个问题。
1-这些是最初的错误,就像那些从操作的问题。我有151个错误:

2-在beachball停止旋转后,我开始浏览我所有的文件。我遇到了一个文件,不知何故被损坏,其正常代码不知何故被替换为下面中间/右窗格内的奇怪代码。
从中间/右窗格复制和粘贴损坏的代码根本不起作用,这很奇怪,但我对“书签”进行了全局搜索(cmmnd+4),出现了6个文件,其中也包含损坏的代码(显示在左侧导航窗格中)。
“bookmark”是文件中第一行的第一个单词,这就是我选择它的原因:

3-我用c+p把原来的项目中的6个文件返回到这个项目中(损坏的那个),错误从151个变成了10个新的错误。所有10个错误都是Invalid UTF-8 found in source file

4-我查看了所有6个文件,在文件顶部的注解代码中,有一个奇怪的符号代替了第6行的版权符号:

5-我删除了那个奇怪的符号,一切又正常了。
我不知道这些文件是怎么被破坏的。我想这可能是把它们从一个项目拖到另一个项目的原因。可能只是一个随机的bug。为了安全起见,我删除了6个文件,然后通过在project_2的Xcode中创建一个新文件,一个接一个地把它们添加回去。然后我用c+p把同一个文件中的代码从project_1返回到project_2。我再也不用把Swift文件从一个项目拖到另一个项目了。
很奇怪。

ubof19bj

ubof19bj5#

在我的例子中,这个编译错误是因为源代码编码/解码问题而抛出的。请尝试关闭Xcode和同时使用一个代码的程序,然后重新启动Xcode

yhxst69z

yhxst69z6#

我遇到了完全相同的错误信息转换工作空间从Swift 4. 2到Swift 5。即使在错误信息中有相同的数字序列。
在我的源文件中,swiftc命令在一些unicode字符上死亡(在我的文件顶部的版权样板文件中)。正如t0 rst所建议的那样,您可以使用检查器查看命令在哪个文件上死亡。
删除unicode字符后,构建工作了。我怀疑使用UTF-8作为默认存储类的更新可能有一些问题。
EDIT -刚发现有问题的文件的Unicode存储确实是错误的。在终端中,对源文件运行file *.swift。带有“UTF-8 Unicode text”的文件没有问题。有问题的文件报告为“ISO-8859 text”。使用iconv -t UTF-8 src dst修复该文件。

tzxcd3kk

tzxcd3kk7#

在我的例子中,我不小心添加了一个快捷方式到一个swift文件,而不是swift文件本身。

0kjbasz6

0kjbasz68#

要解码上述代码。在浏览器页面上右键单击,单击检查并打开控制台选项卡。在控制台选项卡中**String.fromCharCode(123,10,32,23)**替换为您的数字并按Enter。您将收到可读格式的确切问题。

相关问题