Xcode 为通用应用程序构建名称后缀不正确的 nib 文件

Posted

技术标签:

【中文标题】Xcode 为通用应用程序构建名称后缀不正确的 nib 文件【英文标题】:Xcode builds nib files with an incorrect name suffix for an Universal app 【发布时间】:2015-04-14 09:01:09 【问题描述】:

这真的很奇怪,它似乎随机发生在一些 xib 文件上。我目前正在将 iPad 应用程序移植到 iPhone,为此我正在创建新的 xib 文件并向它们添加 ~iphone 后缀。这很好用,我以前从来没有遇到过问题。但是对于这个特定的项目,一些生成的 nib 文件(当你构建你的应用程序时,xib 被编译成 nib 文件)没有正确的后缀,或者没有编译正确的 xib 文件。我尝试了几种设置,结果如下:

案例A

第一次尝试,我只是像往常一样创建了移植的 xib 文件:

原始文件: QuestionViewController-NoOptions.xib 移植文件: QuestionViewController-NoOptions~iphone.xib

Xcode 会生成这两个文件:

QuestionViewController-NoOptions~ipad.nib QuestionViewController-NoOptions~iphone.nib

哪个是正确的名称,但 ~iphone 只是 ~ipad 的一个副本。

案例 B

我尝试像这样重命名这两个文件:

原始文件: QuestionViewController-NoOptions~ipad.xib 移植文件: QuestionViewController-NoOptions~iphone.xib

Xcode 会生成:

QuestionViewController-NoOptions~ipad~ipad.nib QuestionViewController-NoOptions~iphone.nib

对于这种情况,两个文件都正确构建,但当然 ~ipad~ipad 一个在 ipad 上不起作用(应用程序崩溃抱怨找不到 QuestionViewController-NoOptions~ipad)。

案例 C

更糟糕的是:

原始文件: QuestionViewController-NoOptions~ipad.xib 移植文件: QuestionViewController-NoOptions.xib

Xcode 会生成:

QuestionViewController-NoOptions~ipad~ipad.nib QuestionViewController-NoOptions~iphone.nib

其中 ~ipad~ipad 是正确的,但 ~iphone 只是 ~ipad~ipad 的副本。

一些随机事实:

有些 xib 使用自动布局,有些则不使用,如果我启用或禁用此功能,行为会发生变化(我有一个 ~iphone~iphone 和一个 ~iphone在一起一次)。

我在xib源代码上手动玩了这行(删除或添加iPad部分),但没有有用的结果:

 <document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="7531" systemVersion="14D131" targetRuntime="ios.CocoaTouch.iPad" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">

以前有人遇到过这个问题吗?任何线索都会有所帮助...谢谢!

【问题讨论】:

【参考方案1】:

问题是我在某些 xib 文件中使用 Size ClassesFile Inspector 上激活了 Use Size Classes 选项) . Size Classes 似乎是为了替换旧的~iphone~ipad 后缀,如果你使用它,它会自动为你创建后缀的 nib 文件。禁用大小类起到了作用,现在一切都按预期工作。

【讨论】:

以上是关于Xcode 为通用应用程序构建名称后缀不正确的 nib 文件的主要内容,如果未能解决你的问题,请参考以下文章

应用程序图标在使用 xcode 10 的真实设备上显示为空白

应用程序名称在模拟器中具有.app作为后缀

Xcode @ 2x图像后缀未在iOS中显示为Retina

Jenkins Xcode 构建参数以更改应用程序名称

如何将基于视图的 iOS 项目转换为通用版本?

在通用应用程序中实例化设备特定视图控制器的正确模式是啥?