【问题标题】:XCode 8.0 app building ultraslowXCode 8.0 应用程序构建超慢
【发布时间】:2017-02-13 19:02:06
【问题描述】:

问题在于,在 XCode 8 中构建 Swift 应用程序时,源文件编译速度很快,但复制 Swift 标准库 占了上风 - 该阶段可以运行几分钟(通常整个构建大约需要 4-5 分钟,最坏的情况已经超过 10 分钟——过去不到一分钟)。

此外,存档导出的签名阶段非常缓慢,有时需要将近半个小时(同样,过去非常快)。

我已经在网上搜索了几天的答案,无数次重新安装 XCode,尝试了新的 Swift 工具链,尝试打开/关闭 Sierra 的 iCloud Drive(派生文件夹仍然需要隐藏),尝试了所有构建设置任何人,以及他们的母亲,都推荐过,制作了许多新的空白项目,并且失去了所有希望......

所以我的问题是,我怎样才能使它正常

编辑: 我的 Mac 钥匙串 中还有 867 Apple ID 密钥(相同数量的 pub-s 和 priv-s 以及随附的证书) -这个问题有可能与它有关吗?花费大量时间浏览它们并找到正确的签名?

【问题讨论】:

  • 我不知道这是否适用于你,但无论如何避免缓慢的编译时间是一个很好的建议:在你的代码库中,寻找“复杂”的表达式(例如毛茸茸的单行)并打破使用临时变量将它们分解为几个表达式。如果你有字典字面​​量,通过自己声明类型来帮助编译器(通常最好使用类型推断,但在这种情况下,最好显式给出类型),这将简化编译器的任务。
  • 感谢 Eric 的提示,它们总是有用的。我正在使用BuildTimeAnalyzer 仔细检查我的代码,这样就没有长时间编译源代码(最长为 61.8 毫秒,总共有 ~20 个函数编译时间超过 10 毫秒)。
  • 这适用于 Xcode 8.3 swift 3.1 - stackoverflow.com/a/40497873/1890317
  • 谢谢杰拉德,这与下面的答案相同。

标签: ios build swift3 xcode8


【解决方案1】:

所以...我终于从我的 Keychain 中抓拍并删除了我所有的 Apple ID 钥匙(1 对钥匙除外)(吓坏了关于打破东西)。 现在一切都在快速/正常构建,我终于可以再次快乐...

重申一下 - 确保您在 钥匙串没有重复的钥匙

【讨论】:

  • 有 700 多个重复的键 - 将它们全部删除,一切都开始正常工作(而且速度很快)。 xcode 在删除后自动提供所需的密钥。很失望 xcode 陷入那种奇怪的情况并浪费了我这么多时间(我假设有这么多其他开发人员)
  • @Mikk Rätsep 您删除了所有 Apple ID 密钥是什么意思,除了 1 个付费密钥)?这 1 个密钥对是什么?
  • @bibscy 这意味着,例如,当我有 200 个私有 Apple ID 密钥和 200 个公共 Apple ID 密钥时,我只留下了 1 个私有密钥和 1 个公共密钥。这意味着我删除了重复项。
【解决方案2】:

转到项目设置,然后编辑器 > 添加构建设置 > 添加用户定义的设置,并添加以下内容:

SWIFT_WHOLE_MODULE_OPTIMIZATION = YES

对于一个 40KLOC 的 swift 项目,添加此标志后,我们的 clean-build 编译时间从 7 分钟缩短到了 65 秒,奇迹般地。还可以确认 2 位朋友在企业项目中看到了类似的改进。

我只能假设这是 Xcode 8.0## Heading ##

中的某种错误

【讨论】:

  • 这和在Build Settings - Swift Compiler中设置Optimization Level一样吗?不幸的是,这对我不起作用......似乎我的计算机可能有问题(因为其他人可以快速构建项目)......也许有人以前遇到过这个问题并且知道如何修复它(除了格式等)。
【解决方案3】:

除了删除重复的键之外,当我将 xcode 键的访问控制更改为“允许所有应用程序访问此项目”时,我注意到代码设计有了巨大的改进

打开“钥匙串访问”,选择“钥匙”,然后双击每个钥匙。在“访问控制”选项卡上,您可以选择“允许所有应用程序访问此项目”。

【讨论】:

  • 仅授予对 Xcode(或它可能使用的某些 codesign 应用程序的访问权限)是否可以实现相同的结果?我个人对允许所有应用程序访问我的密钥感到不舒服。
猜你喜欢
  • 2017-01-25
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
  • 2013-06-24
  • 1970-01-01
  • 2012-01-21
  • 1970-01-01
相关资源
最近更新 更多