Xcode挂起"编译Swift源文件"

Ste*_*Kuo 13 xcode ios swift xcode7

我正在运行Xcode 7.3.1.在构建基于Swift的项目时,它会挂起"编译Swift源文件".我已经尝试了删除DerivedData,清理,运行,重新启动Xcode,重新启动OS X的各种组合,似乎没有工作.有任何想法吗?

Hai*_*Hai 17

我做了一个课程扩展自己.这也导致Swift编译器陷入循环而没有错误:

class X: X
Run Code Online (Sandbox Code Playgroud)

  • 哦天啊...为什么编译器不缓存它。 (2认同)

bas*_*svk 14

我发现 RoystonP 在https://developer.apple.com/forums/thread/115303?answerId=391817022#391817022上发布的帖子很有用:

\n
\n
    \n
  1. 打开活动监视器。
  2. \n
  3. 开始您的项目建设。
  4. \n
  5. 等待 build\xe2\x80\x99s 进度完全停止几分钟。
  6. \n
  7. 在活动监视器中找到 Swift 进程(它们应该使用近 100% CPU)并选择其中之一。
  8. \n
  9. 在菜单栏中,选择 \xe2\x80\x9cView\xe2\x80\x9d,然后选择 \xe2\x80\x9cSend Signal To Process\xe2\x80\xa6\xe2\x80\x9d
  10. \n
  11. 从下拉列表中选择 \xe2\x80\x9cAbort (SIGABRT)\xe2\x80\x9d。
  12. \n
  13. 单击 \xe2\x80\x9cSend\xe2\x80\x9d 按钮。这将模拟断言失败,因此编译器将打印有关 it\xe2\x80\x99s 正在执行的操作的信息,然后退出。
  14. \n
  15. 在 Xcode 中,切换到报告导航器(左侧窗格上的 \xe2\x80\x9cspeech bubble\xe2\x80\x9d 按钮)并选择构建。
  16. \n
  17. 向下滚动到现在失败的编译步骤,然后单击转录按钮(有五行的按钮,位于 \xe2\x80\x9cCompile [Filename]\xe2\x80\x9d 行的右侧)。
  18. \n
  19. 向下滚动查看诊断信息。它可能包括一个命令行标志列表、几行诸如 \xe2\x80\x9cIn pass SimplifyCFG\xe2\x80\x9d 之类的内容,以及堆栈跟踪。
  20. \n
\n
\n

您可能需要重复步骤 6 和 7 才能使其正常工作。

\n


Ste*_*Kuo 7

感谢所有评论员的建议.我把它缩小到一个map引用我已删除的属性的闭包.例:

var people: [Person] = ...
let foo = people.map { "\($0.name), \($0.age)" }
Run Code Online (Sandbox Code Playgroud)

在哪里Person看起来像:

protocol Person {
    var name: String { get }
    var age: Int { get }
}
Run Code Online (Sandbox Code Playgroud)

一切正常.然后我删除了age同时保持关闭不变.这导致Xcode变得无可救药地混淆.可能与Swift的类型推断有关.

  • 您可以在http://www.cocoawithlove.com/blog/2016/07/12/type-checker-issues.html上阅读类似的原因 (2认同)

UKD*_*eek 6

尝试清理Project Build Folder

  1. 按住选项键并进入产品 - >清洁构建文件夹(清除以前在菜单中)
  2. 如果您正在使用CocoaPods删除您的Workspace文件并运行Pod InstallPod Update

我认为2可能是原因.


Mir*_*ťák 6

将构建设置中的"Swift编译器优化级别"从"整个模块优化"更改为"单个文件优化".这可能不是你的问题,但它解决了我的问题,我被困了半天.它可能只是最近Xcode版本中的一个临时错误(8.2.1是我在撰写本文时使用的那个).


den*_*eni 5

编译时间过长的原因似乎有多种。角落或边缘情况无处不在。所以最好的办法就是观察和调查自己的情况。

虽然被其他人在评论中提到,但以下步骤仍然值得更多关注:

  1. 运行项目
  2. 切换到报告导航器(command + 9),然后选择当前正在运行的Build任务。查看哪个源文件占用了大量编译时间。
  3. 检查该源文件的最近提交历史记录。调查可能的原因。