Xcode 为通用应用程序构建名称后缀不正确的 nib 文件
Xcode builds nib files with an incorrect name suffix for an Universal app
这真的很奇怪,它似乎随机发生在一些 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[=106 的副本=]一个。
案例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">
有没有人遇到过这个问题?任何线索都会有所帮助...谢谢!
问题是在某些 xib 文件中我使用了 Size 类(Use Size 类 选项已在 文件检查器 上激活)。似乎 Size 类 是用来替换旧的 ~iphone
和 ~ipad
后缀的,如果你使用它,它会自动创建后缀nib 文件给你。禁用 Size 类 成功了,现在一切正常。
这真的很奇怪,它似乎随机发生在一些 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[=106 的副本=]一个。
案例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">
有没有人遇到过这个问题?任何线索都会有所帮助...谢谢!
问题是在某些 xib 文件中我使用了 Size 类(Use Size 类 选项已在 文件检查器 上激活)。似乎 Size 类 是用来替换旧的 ~iphone
和 ~ipad
后缀的,如果你使用它,它会自动创建后缀nib 文件给你。禁用 Size 类 成功了,现在一切正常。