在我用Swift编写的iPhone应用程序变得非常大(> 150 .swift文件+各种Objective-C库)后,Xcode开始表现得非常糟糕:
每一次编译我都会遇到各种错误,例如:
Command failed due to signal: Segmentation fault: 11
我只是想知道每个人是否都有同样的问题,也许有人找到了减少这种噩梦的方法?
到目前为止我做了什么 - 我将项目拆分为几个动态框架,我从主项目链接,它有助于减少编译时间,但引入一些新问题.
我还使用iRamDisk将DerivedData文件夹保存在RAM中并定期从中删除所有文件,它有时会导致SourceKit崩溃.
将Swift + ObjC项目更新到Xcode 8(Swift 2.3)后,我发现50%或更多的时间Xcode完全重建项目而不是增量构建.
所做的更改是添加简单的打印语句.似乎没有关于何时执行完全重建的逻辑.
它出现在"检查依赖关系"阶段,它决定了这一点.在Xcode 7上,这似乎不是问题.
有人遇到过这种情况么?
之前
SWIFT_WHOLE_MODULE_OPTIMIZATION = NO
po 在LLDB中运作良好后
SWIFT_WHOLE_MODULE_OPTIMIZATION = YES
po 总是导致Xcode崩溃知道为什么基于这个信息的可怕编译时间,和/或为什么Xcode可能会崩溃?
我正在开发一个大型的100%Swift项目(Objective-C中有第三方库,但我们所有的代码都是Swift).我们编译时间非常糟糕,编译调试配置通常需要大约10-15分钟,编译发布配置需要30多分钟.
由于可怕的编译时间,这个项目很难处理.我一直在寻找改善这一点的方法,特别是通过构建设置,几个月没有运气.我忽略了一件事SWIFT_WHOLE_MODULE_OPTIMIZATION,特别是因为任何提及它都会增加项目的编译时间.
所以前几天我们启用SWIFT_WHOLE_MODULE_OPTIMIZATION并且看到我们的编译时间提高了10倍.
问题是,现在每当我们调试项目并尝试使用po myObjectXcode 在lldb中打印对象时会立即崩溃.以下是崩溃日志中的一些信息:
进程:Xcode [5860]
路径:/Applications/Xcode.app/Contents/MacOS/Xcode
标识符:com.apple.dt.Xcode
版本:6.4(7720)
Build Info:IDEFrameworks-7720000000000000~8
App Item ID:497799835
App External ID:812725084
代码类型:X86-64(Native)
父进程:??? [1]
负责人:Xcode [5860]日期/时间:2015-08-05 15:53:08.265 -0600
操作系统版本:Mac OS X 10.11(15A235d)
报告版本:11自启动以来的时间清醒:13000秒
坠毁的线程:20
异常类型:EXC_BAD_ACCESS(SIGSEGV)
异常代码:KERN_INVALID_ADDRESS位于0x000000000000008f
异常注意:EXC_CORPSE_NOTIFYVM区域接近0x8f: - > __TEXT 000000010ef62000-000000010ef63000 [4K] rx/rwx SM = COW /Applications/Xcode.app/Contents/MacOS/Xcode
特定于应用程序的信息:
ProductBuildVersion:6E35b
这是崩溃线程上的堆栈跟踪:
Thread 20 …Run Code Online (Sandbox Code Playgroud) 我喜欢Apple和他们做的事情,但是Swift...... 哦上帝!
组态:
编译时间: 3分钟.
看起来像" 新的最好和惊人的快速,梦想"这种配置是不够的,它的工作原理Google Chrome-InfiniteLoop(find free memory - eat)
HEADERMAP_USES_VFS到YES(无变化)Build Settings / Architectures / Build Active Architecture Only
为YES(一些改进)设置defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 4(8)(有时它变得更糟)
设置优化级别-Onone(无重大改进)
DWARF而不是DWARF with dSYM FileFind implicit dependencies您的计划(没有重大改进) …Xcode 11 正在重新编译(几乎?)我的整个项目,即使我只是更改本地私有变量,或更改本地范围内的常量值,有时甚至在本地私有函数范围内。我有时可以按预期通过快速构建获得 2 或 3 个更改,但很快它决定再次重新编译所有内容(这需要太长时间)。
任何想法可能会发生什么?Xcode 是否无法确定发生了什么变化,为什么要重新编译这么多其他东西(甚至其他模块)。
任何建议都非常感谢,谢谢!
Xcode添加了一个很棒的功能,可以实时查看您的应用程序编译,但是如何查看各个类的编译持续时间,然后进一步查看导致编译时间慢的代码?
这很有帮助,但只能在那里找到一部分.
随着我的项目在过去一年中不断增长,其构建时间也在增长.在过去的几个月中,它从4分钟变为7分左右(时间包括GitHub拉动,单元测试等).
我已经调查过-Xfrontend -debug-time-function-bodies以找到编译速度慢的行,并更改了该代码.
我相信这是项目规模的问题; 182个Swift文件,≈31K行.23个故事板,52个XIB.这是一个常规的UIKit应用程序,具有少量的Cocoapods依赖项.
大部分构建时间花费在"编译Swift源文件"阶段.
我关心的构建机器时间比编辑 - 构建 - 调试周期要少,后者也一直在减速.
可以做些什么来改善构建时间?
在 func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!{
这行代码使swift编译速度极慢:
cell!.detailTextLabel.text = child.year! + " " + child.make! + " " + child.model!
Run Code Online (Sandbox Code Playgroud)
如果我有这行代码,那么构建项目需要1分44秒.99%的时间它坚持"编译Swift源文件".如果我将此行更改为
cell!.detailTextLabel.text = " "//child.year! + " " + child.make! + " " + child.model!
Run Code Online (Sandbox Code Playgroud)
构建项目只需要5或6秒.我想知道为什么这行代码会导致编译时间过长.
在我的Child模型中,它们被声明为:
var name:String?
var year:String?
var make:String?
var model:String?
Run Code Online (Sandbox Code Playgroud)
和init:
init(name:String!, ... ,year:String!, make:String!, model:String!, ...){
self.name = name
...
self.year = year
self.make = make
self.model = model
}
Run Code Online (Sandbox Code Playgroud)
我构建一个孩子的部分:
Child(name:cName,...,year:cYear,make:cMake, model:cModel,...)
Run Code Online (Sandbox Code Playgroud) 我有一个Swift SpriteKit项目,包含大约25个小文件.编译这个项目的时间是30-45秒!它是纯粹的Swift,没有ObjC.
我在Report Navigator中观察了编译,试图找到一个花时间的文件.但是,它不是一个单独的文件.它始终是列表中的最后一个文件,似乎总是占用.但是这个文件在编译之间可能会有所不同,但仍然需要花费很多时间.
在最后一个文件之后的步骤是Merge xxx.swiftmodule,这很快就会发生,但是我不确定是否因为它在它可能相关的缓慢之后出现.
我搜索并尝试了各种方法来找到罪魁祸首.我看了这篇文章:为什么Swift编译时间这么慢?并尝试了这些方法.我使用CTRL-来完成了命令行构建,但是没有显示有关缓慢的任何有用信息.
我已经完成了我的项目,寻找类型推断可能会被绊倒的地方,但是没有找到太多(实际上,如果是这种情况,我希望单个文件成为罪魁祸首).
有没有人有任何其他建议来追踪这个?来自几乎立即编译的Objective-C项目,这让我发疯.
编辑我对此进行了更多的工作,包括构建输出的屏幕截图,注意到缓慢发生的位置.问题是,如果我在缓慢的文件中注释掉的代码,那么该文件之前,在列表中就变成了一个缓慢的(它被罚款之前).如果我将该代码注释掉,那么那之前的代码就会变慢,等等.

由于我已经更新到XCode 7.3.1,我无法运行我的项目,因为它挂起了"复制Swift标准库"步骤(来自IDE和命令行).如果我尝试打开项目配置文件或者创建一个新的Swift项目,它也会崩溃.
有谁知道为什么会这样?
我正在使用OSX 10.11.6在Mac mini(2012年末)上运行XCode
解决了
最后解决了重新安装XCode和SDK.
谢谢大家的答案.
swift ×11
xcode ×7
ios ×6
compilation ×4
compile-time ×1
crash ×1
ios9 ×1
lldb ×1
time ×1
type-safety ×1
uitableview ×1
xcode11 ×1
xcode8 ×1
xcode8-beta6 ×1
xcodebuild ×1