Xcode 中的 Swift 编译时间极长

2024-02-26

我有三个 iOS 项目:

  • 第一个 - 35k Swift LOC,Swift 2.1(或 2.0?),使用 Xcode 7.2.3 编译
  • 第二个 - 15k Swift LOC,Swift 2.3,使用 Xcode 8.2.1 编译
  • 第三个 - 15k Swift LOC,Swift 3.0,使用 Xcode 8.2.1 编译

所有这些的编译时间都很糟糕(一个干净的构建需要 10 多分钟),而且每一个的开发速度都慢得像爬行一样。

我已经尝试过:

  • Using Whole Module Optimization
  • 改变C Dialect编译器默认值
  • 分析项目的构建时间并优化瓶颈(一些需要 6-10 秒才能通过数组串联、零合并运算符等进行编译的方法),缩短了大约 15 秒 - 完全不明显的差异
  • HEADERMAP_USES_VFS = YES
  • 还有一些现在不记得了

我正在开发一台 2014 年末推出的 Mac mini,配备 SSD、8GB RAM 和 2.6ghz i5(如果有的话)。

任何人都知道可能会导致这种情况的原因,该怎么办,甚至现在有任何解决方法吗?从我在 SO 和其他地方读到的内容来看,这似乎是一个未解决的编译器问题。

编辑:是的,我正在使用 Cocoapods 来实现依赖。我会尝试搬到迦太基看看会发生什么。


尝试在“构建设置”中设置以下内容作为解决方法。我假设你只有一个目标。

  1. 将“仅构建活动架构”设置为“是”。
  2. 将优化级别设置为无 [-Onone]
  3. 添加名为“SWIFT_WHOLE_MODULE_OPTIMIZATION”且值为“YES”的用户定义设置
  4. 清空派生数据并构建。

然后,您还可以使用此工具来分析任何编译缓慢的 Swift 文件:https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode

我的构建时间需要 6-7 分钟。我放弃了 Cocoapods,开始使用 Carthage,它有助于干净的构建。即使如此,构建仍然需要 3 分钟。最大的改进来自我上面提到的步骤。

Update

在调试构建中将优化级别设置为“快速、整个模块优化”,而不是添加用户定义的设置。然后在调试版本的其他 Swift 标志中添加“-Onone”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xcode 中的 Swift 编译时间极长 的相关文章

随机推荐

  • 使用 AWS Elastic LoadBalancer 公开 kubernetes 应用程序

    我创建了一个内部 AWS 弹性应用程序负载均衡器 并在 AWS 控制台中将其状态显示为活动 请注意 我使用 jenkins 作业创建了此 ALB 并且在该作业中我指定了我的 AWS EC2 实例服务器 该服务器配置为我的 kubernete
  • Cmake target_link_libraries 未链接我的库

    我将开始声明我在 Cmake 问题上几乎完全愚蠢 我有以下内容CMakeLists txt对于 Kdevelop 4 1 项目 project uart find package KDE4 REQUIRED include KDE4Defa
  • PCL:可视化点云

    我正在尝试使用可视化点云PCL http pointclouds org 云浏览器 问题是我对 C 很陌生 我找到了两个教程first https pcl readthedocs io projects tutorials en lates
  • 在尝试 Android 编程之前我应该​​学多少 Java? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我一直在寻找Android的初学者学习书籍 当然发现我应该先学习Java 所以我开始学习 Java 现在我对对象 类 继承 接口非常熟悉 并且刚
  • 通过 C# Graphics 绘制“透明”文本,但在某种程度上它将绘制的文本变为“缺失”,因此它在结果图像中是透明的

    我希望在 DC 上绘制一个字符串 图形 我正在使用 C 但我希望将绘制的文本从图像中 删除 以便剩下的本质上是文本的剪切 如果我用透明画笔绘制绳索 显然什么都不会发生 有没有一种方法可以绘制类似的东西 或者我是否需要使用 2 个 DC 和
  • Pyopengl 镶嵌多边形

    我有以下形式的多边形 1 2 2 4 3 4 5 6 我需要镶嵌来绘制它们 但是 glutes 太复杂了 Opengl 无法处理凸多边形 我想我需要类似的东西 http www math uiuc edu gfrancis illimath
  • 如何为单个文件启用 ARC

    我想将使用 ARC 编写的单个 Objective C 类引入旧项目中 互联网提供了许多关于如何为项目启用 ARC 然后为单个文件禁用它的参考 但我想做相反的事情 我想保持项目原样 即使用手动引用计数 然后仅为新文件启用 ARC 我的搜索在
  • 为什么 Gitlab-CI 在下一阶段删除工件?

    指定依赖关系后 Gitlab CI当进入下一阶段时 仍然会从工作目录中删除工件 我已经尝试了该代码的所有不同变体 我认为这些变体应该有效 但没有成功 此外 我已经阅读了几个小时但尚未成功 亚搏体育实验室11 6 0 stages build
  • mef 中的组合容器所持有的类的实例

    据我了解 MEF CompositionContainer 创建并保留类的实例 我不知道在什么情况下 CompositionContainer 的内部会有一个类实例 任何人都可以列出对 CompositionContainer 执行的操作或
  • C++ 相当于代数数据类型?

    假设我有这个 Haskell 代码 data RigidBody RigidBody Vector3 Vector3 Float Shape position velocity mass and shape data Shape Ball
  • WEKA 工具包中的隐马尔可夫模型相当于什么?

    我需要对来自由 8 个加速度计组成的传感器网络的数据流进行分类 每个加速度计都会给我一个 X Y 和 Z 值 因此 在每个样本中 我有 8 x 3 24 个加速度值 我的采样频率约为 30 Hz 执行时间约为 0 5 秒 起初我想为此使用隐
  • 如何使用反射改变属性值

    是否可以使用反射来更改类的属性值 以下是我的课程 public class LoggerManager private static LoggerManager instance new LoggerManager private Logg
  • 使用 awk getline bash 从指定时间范围内的日志文件中提取数据

    我正在搜索解析日志文件并在此链接中找到了我需要的内容从日志文件中提取指定时间范围内的数据 https stackoverflow com questions 7575267 extract data from log file in spe
  • SemanticException 分区规范 {col=null} 包含非分区列

    我正在尝试使用以下代码在配置单元中创建动态分区 SET hive exec dynamic partition true SET hive exec dynamic partition mode nonstrict create exter
  • PHP 数组按值和日期排序(2 列)[重复]

    这个问题在这里已经有答案了 我在 PHP 中有多维数组 就像是 mylist array array ID gt 1 title gt Hello datetime gt 2014 05 05 12 08 PM array ID gt 2
  • 在 travis-ci 上使用秘密 api 密钥

    我想用特拉维斯 ci http travis ci org 对于我的一个projects https github com adelevie parse ruby client 该项目是一个 API 包装器 因此许多测试都依赖于 API 密
  • Fortran 多态性、函数和分配

    我是 Fortran OOP 的初学者 我正在尝试编写一个程序 其中包含处理多态变量作为参数的过程 尽管我的原始代码要复杂得多 许多过程 几个派生类型等 但我可以隔离我的问题的一个简单示例 例如 我有一个复制多态变量并稍微修改此副本的过程
  • 如何配置 Spring MVC 来防止“基于路径的漏洞”

    我有一个 Spring MVC 5 0 8 RELEASE 应用程序 最近的安全扫描表明它具有 基于路径的漏洞 这是控制器 RequestMapping value faq method RequestMethod GET public S
  • 编写一个可调用 C 代码的 void 过程?

    编写一个可从 C 调用的汇编过程 称为increment 该过程应采用指向 32 位整数的指针作为参数 并应递增该参数指向的整数 该函数的 C 原型如下 void increment int p 仅提供从过程标签到 ret 指令的汇编代码
  • Xcode 中的 Swift 编译时间极长

    我有三个 iOS 项目 第一个 35k Swift LOC Swift 2 1 或 2 0 使用 Xcode 7 2 3 编译 第二个 15k Swift LOC Swift 2 3 使用 Xcode 8 2 1 编译 第三个 15k Sw