发送应用到应用商店时出现无效的info.plist - UIMainStoryboardFile或NSMainNibFile。

17

在将应用程序发送到应用商店时,我收到了一条消息,指出:

"Invalid info.plist: the info.plist may contain either UIMainStoryboardFile or NSMainNibFile, but must not contain both keys"

在进行了谷歌搜索之后,似乎共识是将“主nib文件基本名称”设置为“MainWindow”,并将“主故事板文件基本名称”设置为“MainStoryboard_iPAd”。这两个选项我们已经有了。

该应用程序旨在在iPad和iPhone上运行,该应用程序包含两个故事板文件,一个用于iPad,另一个用于iPhone。即使我找到了正确的答案,也找不到任何可见的.nib或.xib来操纵。

有没有人有关于如何解决/修复这个问题,以便应用程序可以发送的提示?

非常感谢!

8个回答

9
这是帮助我解决这个问题的方法。删除NIB条目。 enter image description here

7
很遗憾,@verbumdei的答案对我没有用。
我试图在iOS 7中将一个仅适用于iPhone的项目变为通用项目,但不起作用。iPad的故事板没有被读取。
发生的是Xcode向我的.plist文件添加了一个键“Main nib file base name(iPad)”。我必须删除该键并添加“Main storyboard file base name(iPad)”,然后将文件名设置为我的故事板(即Storyboard-iPad.storyboard)。

1
我还需要复制第一个故事板,命名为MainStoryboard-iPad.storyboard。 - WebOrCode
在我的情况下,我创建了一个新的Storyboard,但是复制你的iPhone Storyboard也是一个明智的选择。谢谢! - olivaresF
谢谢@OlivaresF,这个答案救了我。我已经将一个iPhone应用程序切换为通用应用程序,但是仍在使用相同的故事板。 - drc

7
如提示所示,您的Info.plist文件中不应同时设置UIMainStorboardFile和NSMainNibFile。建议您删除NSMainNibFile条目。
由于您有两个Storyboard,一个用于iPad,一个用于iPhone,您可以在项目的“摘要”选项卡中分别将它们设置为“主Storyboard”: enter image description here

除了您的答案之外,我已经在“Info.plist”文件中将<key>NSMainNibFile~ipad</key>更改为<key>UIMainStoryboardFile~ipad</key> - Daniel Danielecki

4

检查 信息 -> 自定义iOS目标属性

检查Main nib文件基本名称(iPhone / iPad)Main Storyboard文件基本名称(iPhone / iPad)

如果不存在,请添加并编写您的基本文件名。

对我起作用。


1
从Xcode 11开始,转到Info -> 自定义iOS目标属性 -> 查找Main nib file base name (iPad)并将此键的值留空。同时,在General -> 部署信息 -> Main interface中,您的值应为空。

1
对于那些遇到问题的人,我解决了而不需要创建一个新的密钥,只需从现有密钥中删除(iPad)即可。
在主界面中,我选择了Storyboard,保存,清理项目,然后就完成了。

0

以上的解决方案都对我没用。
因此,我所做的是在AppDelegate中添加了一个storyboard属性,并在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中设置其值。
以下是此代码:
AppDelegate.h

@property (strong, nonatomic) UIStoryboard* storyboard;  

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) { // is iPad
        self.storyboard = [UIStoryboard storyboardWithName:@"Storyboard_ipad" bundle:Nil];
    } else {
        self.storyboard = [UIStoryboard storyboardWithName:@"Storyboard_iphone" bundle:Nil];
    }

    self.window.rootViewController = [self.storyboard instantiateInitialViewController];

    [self.window makeKeyAndVisible];

    return YES;
}

0

默认情况下,Xcode在info.plist文件中创建'Main nib file base name (iPad)'并将其分配为您的iPad故事板的名称。

以下是解决方法: 打开Info.plist文件->删除'Main nib file base name (iPad)'并添加另一个键,名称为'Main storyboard file base name (iPad)',并将其分配为您的iPad故事板文件的名称,即Main_iPad不提供扩展名。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接