每次运行时,XCode都会编译整个项目

lee*_*ker 5 xcode4

在我开始的一个新项目中,XCode决定每次运行它时都会编译项目中的每个文件,而不仅仅是编译更改的文件(以及依赖于这些文件的文件).随着项目中越来越多的文件越来越多,这在时间和电池寿命方面都会变得越来越大.

我可能在某个地方更改了影响此设置的设置; 或者可能不是.我应该关注哪些项目设置?

cdu*_*uhn 7

如果Xcode在您进行构建时重新编译大部分或全部源文件,通常意味着这些文件都直接或间接依赖于某些已更改的头文件.以下是一些需要注意的事项:

  1. 您的源文件是否倾向于#import某些顶级头文件本身以递归方式导入一堆较低级别的头文件?如果修改了该依赖标头树中的任何文件,它将强制重新编译导入顶级标头文件的任何.m文件.您可以通过导入较低级别子模块的标头来减少这些依赖关系,或者更好的是,仅针对每个文件所需的特定标头.(注意:某些未设计为以这种方式使用的库可能会使这种方法在某些情况下具有挑战性或不可能.)

  2. 某些第三方开发工具和静态库运行脚本,这些脚本在构建过程中生成或修改代码.如果源文件依赖于脚本生成的头文件,则每次脚本重新生成该头文件时都会重新编译它们.即使脚本生成的代码没有更改,如果头文件的上次修改日期发生更改,也会重新编译相关的源文件.如果这是您的问题,可能需要一些聪明的黑客来消除冗余编译.

  3. 不要忘记检查预编译的头文件(.pch)以查看在那里导入的内容.在编译时,该文件的内容有效地注入项目中每个.m文件的顶部.

  4. 尝试通过将#import.h文件中的尽可能多的语句移动到.m文件中来最小化依赖关系.通常只需导入类的超类的头文件以及类在其.h文件中实现的任何协议即可.您可以使用前向声明而不是#import您在类中使用的任何其他类,数据类型或协议的语句@interface.


Boa*_*ler 7

我意识到这个问题已经有一个多月了,但是在将一个旧项目移动到Xcode 4时我遇到了类似的问题.经过多次处理之后,我发现Xcode 4(在我的情况下为4.2)有一个错误,如果有的话源文件的完整路径中的任何非ASCII字符,或源文件包含的任何头的完整路径中的任何非ASCII字符,每次构建时都将重新编译.这包括前缀头,在这种情况下,每次都会触发完整编译.在我的情况下,之前的程序员已将'ƒ'附加到几个文件夹名称,一旦我删除它们,它就完美地工作了.

无论如何,我在尝试谷歌答案的过程中偶然发现了这个问题,并认为我会分享我的解决方案.