当我在Swift中编写的iPhone应用程序变得相当大(〉150个. swift文件+各种Objective-C库)后,Xcode开始表现得相当糟糕:
- 每隔一次编译,我就会得到各种错误,例如:
第一个月
- 编译需要大量的时间(〉2分钟的MacBook Pro视网膜)
- 等等。
我只是想知道是不是每个人都有同样的问题,也许有人找到了减少这场噩梦的方法?
到目前为止我所做的-我把项目分成几个动态框架,我从主项目链接,这有助于减少编译时间,但引入了一些新的问题。
我还使用iRamDisk将DerivedData
文件夹保存在RAM中,并定期从中删除所有文件,它有时有助于SourceKit崩溃。
6条答案
按热度按时间cx6n0qe31#
Swift工具链仍然有点粗糙,你需要使用一些临时的解决方案,直到苹果修复它(见下面的更新)
这里有一个清单,你可以做,以防止自己疯了。
Swift编译器不成熟导致的速度缓慢
*过时尝试blog post中描述的方法,它涉及到创建一个生成make文件的构建脚本。它需要手动干预构建脚本(它包含swift文件列表)。
*过时尝试this破解增量编译技术
更新:Swift 1.2(Xcode 6.3)上引入了增量构建
苹果终于在Swift 1.2(随Xcode 6.3一起发布)中引入了增量构建,虽然还不完美,但已经是一个巨大的进步。
从现在开始,类只有在它被修改时(或者当它所依赖的类之一被修改时)才会被重新编译。然而,编译器仍然无法理解类的修改是否是针对它的接口的。因此,对类的任何修改都会导致该类及其所有依赖项的重新编译。
更新:仅当Swift 2.1(Xcode 7.1)引入公共接口更改时重新编译依赖类
从Swift 2.1(Xcode 7.1)开始,只有当你改变类的公共接口时,依赖类才会被重新编译,而不是每次改变都被重新编译,这对大项目来说是一个巨大的不同。
项目(错误)配置(与Swift无关)
vkc1a9a22#
苹果有一些建议来加快你在Technical Note 2190中构建Xcode的速度。你有没有考虑过creating and precompiling an own framework来外包未改变的Swift模块或部分/全部Objective-C代码?
删除Swift中的所有类型推理。
This SO topic有一些很好的想法,这个blog post建议
1.停止生成dSYM捆绑包并
1.如果使用Clang,请避免使用
-O4
进行编译。虽然很多改进都与Objective-C有关,但我敢肯定,其中一些仍然与Swift相关。
jexiocij3#
(重新)编译是一个已知的问题,我相信很快就会得到解决。一些建议:
同样,这个问题很有可能很快得到解决,所以现在最好不要在重写或重新组织代码方面投入太多资金。
9rygscc14#
你可以试试:
你也可以看一下this post的答案,以获得一些关于你可以做些什么来降低编译时间的提示
bxjv4tth5#
我发现分段错误和编译速度慢的主要原因之一是硬编码大数组和字典,特别是当把它们声明为全局常量并试图从另一个.swift文件中访问它们的值时,当我把所有数据存储在plist中时,这些问题就消失了。
r55awzrz6#
根据我的经验,避免创建大的
swift
文件,当我在新公司开始一个项目时,有一个超过2000行的“UIViewController”,对这个文件做一些小的修改需要花费很多时间来构建,我从class
中创建了4个小于500行的extension
,我的速度提高是令人难以置信的。