.xib 文件不在编译源构建阶段,但仍然可以正确构建;怎么会这样?

Posted

技术标签:

【中文标题】.xib 文件不在编译源构建阶段,但仍然可以正确构建;怎么会这样?【英文标题】:.xib file not in Compile Sources build phase, but still builds correctly; how can this be? 【发布时间】:2013-04-07 17:32:32 【问题描述】:

当您从具有 .xib 文件的 Xcode 模板开始时,该 .xib 文件会列在“编译源代码”构建阶段。这对我来说很有意义,因为在构建过程中,需要将 .xib 文件转换为 .nib 文件(使用ibtool),并且确实如此。

但在重命名我的 .xib 文件并添加一些新文件时,我的 .xib 文件没有列在编译源构建阶段。相反,它们都列在 Copy Files 构建阶段。我无法解决这个问题。 (不要让我开始那个。)

但事实证明我不必修复它!当我构建时,我可以查看构建应用程序的包,我看到它有 .nib 文件,而不是 .xib 文件。 .xib 文件没有被复制到资源文件夹中,即使它们处于 Copy Files 构建阶段;它们正在被编译,即使它们不在编译源构建阶段。

我可以通过查看构建日志来确认这一点:

CompileXIB "MyApp/en.lproj/ViewController~iphone.xib"
CompileXIB "MyApp/en.lproj/ViewController~ipad.xib"

这怎么可能?

编辑:现在我无法重现我最初的前提!正如一位受访者所说,模板没有将 .xib 文件置于 Compile Sources 构建阶段。然而,我确实最终遇到了一些 .xib 文件处于编译源构建阶段而一些处于复制构建阶段的情况,这让我感到困惑。

【问题讨论】:

【参考方案1】:

当我使用“Cocoa Application”模板为 OS X 创建一个全新的 Xcode 项目时,该项目的唯一 .xib 文件未列在“编译源”下,它列在“复制捆绑资源”下。所以我不确定你的.xib 是如何/为什么首先被列在编译源下的。

至于它们是如何使用CompileXIB 命令自动编译的,我怀疑这是由于 Xcode 的 Build Rule 称为“Interface Builder XIB 编译器”,它适用于所有 Interface Builder 文件。

【讨论】:

以上是关于.xib 文件不在编译源构建阶段,但仍然可以正确构建;怎么会这样?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 4.3 停止构建 XIB 文件

如果我在项目的构建阶段从编译源中删除所有文件会怎样?

AppDelegate 和 .xib 未正确实施,但构建成功?

“扁平化编译的xib文件”项目构建选项“做啥”

为啥我不能禁用 ARC(每个单个文件)?

XCode 使用不在项目文件夹内的 .xib