Xcode 5 Cocoa 应用程序无法在 OS X 10.6 上加载 Nib

Posted

技术标签:

【中文标题】Xcode 5 Cocoa 应用程序无法在 OS X 10.6 上加载 Nib【英文标题】:Xcode 5 Cocoa App Fails to Load Nib on OS X 10.6 【发布时间】:2014-01-17 16:00:07 【问题描述】:

我正在为 10.6 和更新的操作系统创建 Cocoa 应用程序。我在 Xcode 5 (10.9) 中创建了一个全新的基于文档的应用程序,并更改了两个设置以使其与 10.6 兼容:我将部署目标更改为 10.6,并在 MainMenu.xib 和 xxDocument.xib 上关闭了 Auto Layout,这两个包含在基于文档的模板中的默认笔尖。我归档了我的应用程序(没有代码签名),没有添加其他代码,并在四个不同的操作系统上对其进行了测试。结果如下: OS X 10.9:按预期启动并显示一个新的文档窗口(“您的文档内容在此处”)。 OS X 10.8:按预期启动;与 10.9 相同。 OS X 10.7:启动失败;控制台应用程序产生“App Name:无法加载 nib 文件:MainMenu,正在退出”。 OSX 10.6:启动失败;控制台输出与 10.7 相同。

我对我的应用程序的行为感到非常困惑。我绝对没有向 Xcode 为我创建的基于模板文档的应用程序添加任何代码;我只是更改了所需的设置以使其与 10.6 及更高版本兼容。我还尝试在构建设置中关闭 ARC,这完全没有区别。我检查了 Apple 文档并搜索了有关我收到的控制台错误的其他问题,但没有一个与此问题有关。我对 10.7 表现出这种行为感到非常惊讶,因为 10.7 与 ARC 兼容。对于如何解决此问题的任何建议,我将不胜感激。我怀疑对默认模板有一个简单的修改,因为 Apple 可能不会提供需要大量修改才能使其正常工作的模板。谢谢。

更新: 按照建议,我在 Xcode 中关闭了基本国际化。我运行了该应用程序,它运行良好。我导出了应用程序(无代码签名)并在上述所有操作系统上进行了测试。这一次,我在上面收到的错误发生在所有操作系统上。这甚至发生在我构建项目的同一台机器上,唯一的区别是我没有从 Xcode 运行它。我的下一步是实际制作一个 MainMenu.xib 文件(因为删除基本国际化删除了旧文件)并将其设置为主界面。现在,我不仅在所有操作系统上的导出应用程序中都收到错误,而且当我尝试运行应用程序时它会显示在 Xcode 中!我还有什么遗漏的吗?

【问题讨论】:

【参考方案1】:

如前所述,您需要禁用国际化基础。

在Project Navigator中点击你的项目的第一项(蓝页内有白色A表示,它是所有其他项目的根)

默认情况下,您应该会看到左侧的信息页面(如果没有从顶部的选项卡中选择它)

信息属性表中的最后一项是本地化。在本地化下,您将能够添加和删除语言,默认情况下,您应该已经拥有两种基本语言和英语。

删除两者,并取消选中“使用基础国际化”复选框

完成此操作后,从项目本身中删除您拥有的所有 *.xib 文件。确保只删除引用!!!不要发送到垃圾箱!!!

删除引用后,进入 Finder,打开您的项目目录,您将找到一个名为 Base.lproj 的目录,其中包含您的 *.xib 文件。将它们复制或移动到您的项目目录上一级,然后删除 Base.lproj 目录。

返回 xCode 并重新添加到您的 *.xib 文件中。 ++K 清理项目,然后 ++R 重建。

这应该将App Package中的*.xib文件从Base.lproj(10.6似乎找不到它们)移动到Resources文件夹,并解决问题。

【讨论】:

【参考方案2】:

新创建的 Xcode 5 项目已启用基本国际化。 OS X 10.8 及更高版本支持基本国际化。您必须关闭基本国际化以支持 10.7 和 10.6。有关详细信息,请参阅以下 Stack Overflow 问题:

Base.lproj/MainMenu.xib is not available when compiling for targets before Mac OS X 10.8

要支持 10.6,您可能需要做的另一件事是将项目和 xib 文件的部署目标设置为 10.6。我知道您说您在问题中将部署目标设置为 10.6,但不清楚您是否为项目和 xib 文件都设置了它。正如您所发现的,Apple 的项目模板并未高度重视与旧操作系统版本的兼容性。

【讨论】:

这看起来很有希望。下周我有机会试试。 嗨,你能看看我对我的问题所做的更新吗?您的回答似乎应该有效,但由于某种原因它没有。 我可以想到另外两件事要检查。首先,确保 xib 文件是应用程序目标的成员。选择 xib 文件并打开文件检查器以设置目标成员资格。其次,确保 xib 文件是应用程序目标的 Copy Bundle Resources 构建阶段的一部分。 好的,我验证了两个 xib 都具有正确的目标成员资格,并且是 Copy Bundle Resources 构建阶段的一部分。我还尝试将 xib 本地化为英语,因为从基本国际化转换它们时它们没有任何本地化。这些步骤都没有奏效。坦率地说,我很困惑并且已经没有想法了。 重新创建 MainMenu.xib 文件允许我在关闭测试项目的基础国际化时加载 xib。如果您需要 10.6 和 10.7 支持,此时我建议安装旧版本的 Xcode(Xcode 4.4 应该足够好),创建项目,并在 Xcode 5 中打开项目。您可能需要安装 OS X 10.7 或 10.8在虚拟机中安装 Xcode 4。

以上是关于Xcode 5 Cocoa 应用程序无法在 OS X 10.6 上加载 Nib的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 5 为 OS X 10.6 开发

Xcode 5 安装 Xcode 6 beta 2 后无法构建模块 Cocoa

NSFileManager 在 Xcode 中作为发行版构建时有效,但在作为独立 OS X Cocoa 应用程序运行时无效

设置:OS X 10.6.6 + XCode3.2 使用 python 和 cocoa

XCode/Cocoa Mac 改变视图

Cocoa 应用程序中的 OpenCV(OS X 应用程序)