我在存档中收到此错误:
命令 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc 失败,退出代码为 1
如何解决?
请看截图。
https://i.stack.imgur.com/teTMU.png
当 Swift 优化级别未设置为 None for Release 时,会出现此问题。将值设置为无,问题就会消失。
打开您的项目并单击项目根目录。单击构建设置选项卡。搜索 Swift Compiler - Code Generation 并在 Optimization Level 下确保 Release 设置为 None。
编辑
升级到 Xcode 6.1 后,这些说明在归档时会导致其他问题(为调试/设备构建工作正常)。将优化设置为最快允许我再次存档。 Swift 编译仍然存在明显的问题(特别是归档)。
Can't archive working 6.0.1 Swift project in Xcode 6.1 / Segmentation fault: 11
编辑在阅读此答案之前,我无法为“构建设置”选项卡提供资金。
how to find the build settings tab
当我有两个完全相同的文件时,这发生在我身上,而且当我丢失我不知道我已删除的文件时。我点击了错误消息,就在错误上方,它向您显示了您拥有超过 1 个或丢失的文件。
您可以点击导航中的产品,然后选择“清理”按钮;它将清除您项目中的所有编译错误。然后,您可以调试最新的错误。
已删除的文件引用保留在构建阶段,这就是它给出此错误的原因。也从那里删除参考。
项目>目标>构建阶段
在此部分下,您会以红色找到已删除的文件。删除这些文件错误将解决。
我不确定它是否有一个解决方案。我建议您检查上次 git 提交之间的差异,并评论/关闭更改。
就我而言,我的代码是
let anArray = ResultDict["ResultSet"] as [[NSDictionary : AnyObject]]
for aDict : NSDictionary in anArray {
let anObject = ObjectType(ObjectDict: aDict)
objectList.addObject(aDict)
}
行上没有警告,我得到了相同的退出 1 编译错误,然后我将其更改为已编译的下面。
let anArray = ResultDict["ResultSet"] as [[NSDictionary : AnyObject]]
for aDict in anArray {
let anObject = ObjectType(ObjectDict: aDict)
objectList.addObject(aDict)
}
我不知道这是否真的是一个答案,但是......
我有同样的问题。应用程序在构建/运行时工作,但存档失败,“...swiftc failed with exit code 1”,根本没有其他有用的消息。幸运的是,当我尝试使用 Nomad's ipa build
构建我的应用程序时,我得到了:
The following build commands failed:
CompileSwift normal arm64 /path/to/erroneous/TableViewController.swift
所以我开始注释掉那个文件的部分,并将问题追溯到一个元组分配。
// MARK: - Table Data
private var tableData: [(sectionName: String, item:ListItem)] = []
private func refreshTableData() {
// let labor = ("Labor", laborListItem) // DOESN'T ARCHIVE
let labor = (sectionName: "Labor", item: laborListItem) // ARCHIVES
tableData = [labor]
tableView.reloadData()
}
显然,编译器想要命名元组中的元素(由 tableData
的类型定义).. 但仅用于归档?愚蠢的是,我在其他视图控制器中使用了相同的模式,编译器似乎对这些很好。
作为记录,我的 Code Generation -> Optimization Level
设置为 None 以进行调试和发布。
希望这对某人有帮助!花了几个小时才弄清楚这一点。
当我没有将括号放在函数调用的末尾时,它发生在我身上:
let var = self.getNextPrimeNumber
通过以下方式解决了它:
let var = self.getNextPrimeNumber()
就我而言,这是由我的项目目录中使用相同名称的重复文件引起的。一旦我删除它们,错误就消失了。
当我使用 swift 文件中的静态内联函数时,这发生在我身上
函数看起来像这样
static inline void openURLInSafari(NSString * _Nonnull urlString) {
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:urlString]];}
我只是发生了同样的事情。我找到了一个导致错误的文件的原因,即使是空的也是如此。检查文件,我发现它的字符集错误。当我将其设置为 UTF-8 时,错误消失了。我认为它使用错误的字符集对其进行解码。
据此,我推测该错误只是表明发生了编译器没有准备好的事情。抱歉,这对大多数人来说不是很有帮助,但它可能有助于检查你的字符集。
还有一个可能导致这个错误的情况,我花了几个小时才找到:一个总是返回 nil 的失败初始化程序。
我有一个看起来像这样的初始化程序:
init?(object: MyObject) {
if object.importantProperty {
// initialize
}
return nil
}
当我的意思是:
init?(object: MyObject) {
if object.importantProperty {
// initialize
}
else {
return nil
}
}
修复初始化程序使错误消失。
如果使用 Core Data
:
我有一个 Core Data 实体,我为它创建了 NSManagedObject
子类(在 Xcode 的帮助下)。此外,实体被配置为自动生成代码(见截图),所以在运行时基本上存在 2 个类。只需将选项切换到手动/无,它就不会生成它。
https://i.stack.imgur.com/sEseA.png
在我注意到我的一些 .swift 文件莫名其妙地位于错误的目录中之后,我发生了这个错误——比我的 Xcode 项目目录高一级。当我注意到这一点时,我将它们移动到主项目目录并清理了项目,认为一切都会好起来的。但是,在构建项目时,我得到了上述“失败,退出代码 1”错误。就在错误消息的上方,它列出了我刚刚移动的文件,表明它在它们以前所在的目录中找不到它们。除了错误消息之外,我移动的文件现在在文件导航窗格中显示为红色。
对于每个有问题的文件,我解决这个问题的方法是: - 从 Xcode 文件导航窗格中的文件列表中选择文件, - 单击 Xcode 最右侧窗格中的小页面图标,这将打开一个文件属性窗格, - 单击文件属性窗格中“位置”下方的小文件夹图标, - 选择文件的新位置, - 重新启动 Xcode 以进行上述更改以真正执行任何操作。
此错误来自丢失的文件,因此编译器找不到文件并保持警报。请按照以下步骤重建您的应用程序:
在工作区中查找红色和不可见的文件删除它们的引用重新添加文件重新编译
我在执行 git 合并后遇到了这个错误。我解决了新的 Xcode 警告并且可以编译项目。
Xcode 7.2.1 用于我的案例。
以我的方式,错误是由于 ((UIDevice.currentDevice().systemVersion as NSString).floatValue >= 8.0)
中的 UIDevice.currentDevice()
评论这一切开始工作正常。
XCode 7.2
在我的情况下,在您的项目目标 Build Setttings 中,在 Other Swift Flags 中,只需删除字符串“-serialize-debuggin-options”enter image description here
我有一个与 RyanM 非常相似的解决方案,我过于狂妄地尝试将一个变量分配给内部函数的默认值:
编译失败(尽管 SourceKit 不会崩溃):
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
func itemCell(_ indexPath: IndexPath = indexPath) -> UITableViewCell {//...}
成功:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
func itemCell(_ indexPath: IndexPath) -> UITableViewCell {//...}
发生这种情况的一个可能原因可能是您已删除文件但未删除对它的引用。这会弄乱 pbxproj 文件。我会检查是否是这种情况。
检查“Development Pods”文件夹所有列出的框架路径。
在我的例子中,选择了快速开发快照而不是 xcode 9.2。这是步骤和图像。
将 xcode 保持在屏幕上,然后单击 xcode 顶部菜单栏。然后转到工具链选项并检查 xcode 9.2。而已。快乐编码!!!
因此,我有上述情况并将其缩小到锁定文件的 TFS 问题,但仅在我粘贴或进行除小副本或手动键入之外的任何其他编辑时。我注意到原始文件会编译,但我的编辑不会,即使它们的语法没问题。另外相关的是无法保存文档:xcode The document "..." could not be saved
两者的修复是:
重复的工作版本。将完全合并的新代码粘贴到副本中。将旧文件复制并粘贴到新文件上。 (我个人只是将旧的重命名为其他东西,然后粘贴重复并重命名它。猜测这两项工作,因为我之前直接粘贴,以便在测试期间恢复查看)。
瞧。绕过合并锁定问题的懒惰方法。显然完整的文件粘贴就可以了,而编辑则不行。共享,因为其他答案似乎并不像这样懒惰。 ;) 注意:我怀疑某个非 UTF-8 字符出现在某个地方,但粘贴在旧版本中有效,所以我不知道在哪里,或者是否相关。
在我的情况下,错误是 Xcode 生成的文件丢失的结果。我尝试了常规的 clean Opt+Shift+K 并没有清除所有错误。我在 Apple Developer 网站上发现了一篇帖子,建议转到 Xcode 中的 Product Menu,按住 opt 键,然后选择 Clean Build Folder。这似乎是一个更全面的构建,因为它会弹出一个模式对话框供您确认。
只需转到“项目设置”并单击“构建阶段”,之后您会发现目标您必须删除测试文件,例如我的项目名称“WER”,因此它的显示如下 WER&TEST 所以只需删除它并清理你的项目并运行............