Swift toolchain仍然有点粗糙,在苹果修复之前,你需要使用一些临时的解决方法(见下面的UPDATES)
下面是一个 list ,你可以做一些事情来防止自己发疯.
Slowness caused by immature Swift compiler
使用Injection for Xcode更改开发工作流程.一旦安装了插件,就可以在模拟器\设备without重新编译中插入代码更改.您不需要硬编码\修改项目中的任何内容.我们最近开始在工作中使用它,它对我们产生了巨大的影响,即使它不适用于每个用例(例如,你不能创建新函数,你只能修改现有函数).
编译器不喜欢某些特定的代码 struct ,并且需要花费太多时间来编译.最常见的问题是类型判断器,它根据需要执行的类型判断的数量以指数方式降低编译时间(阅读here多个实用示例,阅读here多个详细解释).为了确定您是否遇到了这个问题,您可以遵循以下blog post,您将通过使用一些编译器附加标志来收集有关创建慢度的函数的信息.或者,您可以使用这个Xcode plugin来确定构建缓慢的来源.
Use dynamic frameworks wisely, where it makes sense. A framework recompilation will be done only when you modify one of its Swift files (dynamic frameworks are only available for iOS >= 7).
在相同的文件中压缩代码.减少Swift文件的数量可以明显加快编译过程.通过添加用户定义的自定义标志SWIFT_WHOLE_MODULE_OPTIMIZATION并将其设置为"是",同时将优化级别设置为"无"(禁用优化将使其变慢),可以很容易地实现"整个模块优化"(OUTDATED).您可以考虑使用这gist个,它是一个构建脚本,在"合并.SWIFT"文件中折叠所有代码.
仔细判断 list here(还有一些其他原因,因为编译速度慢)
OUTDATEDtry 本blog post中描述的方法,它涉及创建生成make文件的构建脚本.它需要手动干预构建脚本(它包含swift文件列表)德尔>
OUTDATEDtry this种黑客攻击的增量编译技术
UPDATE: Incremental builds introduced on Swift 1.2 (Xcode 6.3)
苹果最终推出了Swift 1.2(Xcode 6.3附带)的增量版本.虽然还不够完美,但这是一个巨大的进步.
从现在起,只有当类被更改时(或者当它所依赖的一个类被更改时),才会重新编译该类.
UPDATE: Recompile dependent classes only when public interface changes introduced on Swift 2.1 (Xcode 7.1)
从Swift 2.1(Xcode 7.1)开始,依赖类仅在更改类的公共接口时重新编译,而不是每次更改时重新编译.这对大型项目尤其重要.
Project (mis)configuration (not related to Swift)
- 确保"仅构建活动体系 struct "对于调试是肯定的.
- 确保没有添加花费太多时间的编译前/编译后脚本.