对于格式错误的JSON,我收到4个错误,并且一个命令compileSwift失败,退出代码错误为非零。
我不知道如何调试它,因为它没有列出正在其中运行的文件。
我尝试删除工作区和pods目录,并进行新的pod安装&& pod更新。
我尝试删除派生数据。
都没有用。
答案 0 :(得分:2)
这个问题我也有同样的错误。我将文件从project_1拖到了project_2,所有这些错误突然出现在project_2内。奇怪的是,我拖入的新文件与错误无关,因为它们出现在我以前从project_1拖入的完全不同的文件中。这些文件可以正常工作几个月,直到我将其拖入新文件后,错误才会出现。
我关闭了Xcode,将其重新打开,然后死亡的沙滩球开始旋转。 Xcode基本上被冻结了,我不得不等待大约45分钟才能解冻。
我添加了错误的屏幕截图以及解决此问题的步骤。
1-这些是原始错误,就像op的问题中的错误一样。我有151个错误:
2-沙滩球停止旋转后,我开始浏览所有文件。我遇到了一个文件,该文件被某种程度损坏,其正常代码被某种方式替换为下面中间/右侧窗格中的奇数代码。
从中间/右窗格复制和粘贴损坏的代码根本不起作用,这很奇怪,但是我对“书签”进行了全局搜索(cmmnd + 4),并且出现了另外6个文件,其中也包含损坏的代码(显示在左侧导航窗格中)。
“书签”是中间/右窗格中文件内第1行的第一个单词,这就是为什么我选择它:
3-我c + p将原始项目中的6个文件放回该项目中(损坏的文件),错误从151个变为10个新错误。所有10个错误均为Invalid UTF-8 found in source file
:
4-我查看了所有6个文件,在文件顶部的注释掉的代码中,第6行有一个奇怪的符号代替了版权符号:
5-我删除了这个奇怪的符号,一切又恢复了。
我不知道这些文件是如何损坏的。我认为这与将它们从一个项目拖到另一个项目有关。可能只是一个随机的错误。为了安全起见,我删除了6个文件,然后通过在project_2的Xcode中实际创建一个新文件来将它们一个接一个地添加。然后,我将同一文件中的代码从project_1 c + p重新回到project_2。不再需要为我将Swift文件从一个项目拖到另一个项目。
很奇怪。
答案 1 :(得分:1)
这是我关于同一问题的故事,但原因和解决方法完全不同。
TL; DR-将有问题的数组解码为字符串并将其读取,这是您的真正问题,而不是带有JSON的问题。
这是我的完整故事...
首先,要解决这个错误,我将应用程序文件移至框架项目并更改了目标。
我尝试了所有建议,但没有运气,我花了一些时间来了解如何递归报告这些文件。如果有人想检查整个项目中的编码,请按以下步骤操作:
find . -type f -name "*.swift" -exec file {} +
我的所有文件都报告了ASCII和UTF-8,我什至删除了所有Unicode字符,使它们全部成为ASCII,但这仍然无济于事。
无论如何,我完全绝望了,我决定进行最后一次尝试...尝试解码该不可解码字节序列中的任何内容。
我打开了浏览器控制台,并执行了以下操作:
String.fromCharCode(...[123, 10, 32, 32, 34, <the rest of 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>
要点是,如果您使用的是桥接头文件,则可能会很容易掩盖一个事实,即您不会被迫编写所有必需的导入内容的一致代码。
无论如何,我的主要目标是让每个人都知道他们的原始问题很可能是完全不同的东西,而原始问题实际上是编码在每个人都得到的错误字节数组中。即使您遇到编码问题,该字节数组也可能会告诉您代码有什么问题。
修复愉快!
答案 2 :(得分:0)
在导航器窗格中,“报告”选项卡(最后一个)是这些情况的首选。您可以查看构建操作的详细日志,并可以从那里进行跟踪。
答案 3 :(得分:0)
即使将错误消息中的数字序列相同,我也会遇到完全相同的错误消息,将工作区从Swift 4.2转换为Swift 5。
swiftc
命令在我的源文件(在文件顶部的版权模板中)的某些Unicode字符上死了。根据t0rst的建议,您可以使用检查器查看命令在哪个文件中死亡。
删除unicode字符后,构建成功。我怀疑使用UTF-8作为默认存储类的更新可能存在一些问题。
编辑-刚发现有问题的文件上的Unicode存储确实是错误的。在终端中,对您的源文件运行file *.swift
。带有“ UTF-8 Unicode文本”的文件可以使用。出现问题的文件报告为“ ISO-8859文本”。使用iconv -t UTF-8 src dst
修复文件。
答案 4 :(得分:0)
我遇到了同样的错误,在阅读了上面的注释之后,我遍历了我的代码,看到了这个“返回93à” 因此,删除此“à”后,现在可以正常使用了。
答案 5 :(得分:0)
在我的情况下,由于源代码编码/解码问题而引发了此编译错误。尝试关闭同时使用代码的Xcode和程序,然后重新启动Xcode
答案 6 :(得分:0)
就我而言,我不小心添加了指向 swift 文件的快捷方式,而不是 swift 文件本身。
答案 7 :(得分:-1)
解码上面的代码。右键单击浏览器页面,单击检查并打开控制台选项卡。在控制台选项卡 String.fromCharCode(123, 10, 32,23) 中替换为您的数字并按 Enter。您将以可读格式收到确切的问题。