将应用程序发送到应用程序商店时,info.plist - UIMainStoryboardFile或NSMainNibFile无效

时间:2013-04-18 12:27:05

标签: xcode submission

在向应用商店发送应用时,我收到一条消息,说明:

"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 个答案:

答案 0 :(得分:8)

不幸的是,@ verbumdei的回答对我不起作用。

我试图在iOS 7中将仅限iPhone的项目转换为Universal,但它无法正常工作。 iPad的故事板没有被阅读。

Xcode为我的.plist添加了一个“主nib文件基本名称(iPad)”的密钥。我不得不删除该密钥并添加“主故事板文件基本名称(iPad)”,然后将文件名设置为我的故事板(即Storyboard-iPad.storyboard)。

答案 1 :(得分:7)

如消息所示,您不应该在Info.plist文件中设置UIMainStorboardFile和NSMainNibFile。我建议您删除NSMainNibFile条目。

由于您有两个故事板,一个用于iPad,一个用于iPhone,您可以在项目的摘要标签中分别将它们设置为主要故事板: / p>

enter image description here

答案 2 :(得分:3)

检查info - > custom IOS target properties

检查Main nib file base name(iPhone/iPad)Main Storyboard file base name(iPhone/iPad)

如果不存在,请添加它们并写入基本文件名。

它对我有用。

答案 3 :(得分:2)

这是帮助我解决此问题的原因。删除NIB条目,仅保留其他条目。

enter image description here

答案 4 :(得分:0)

以上解决方案均不适合我。
因此,我所做的是我向storyboard添加了AppDelegate属性,并将其值设置为- (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;
}

答案 5 :(得分:0)

默认情况下,Xcode在info.plist文件中创建“主nib文件基本名称(iPad)”,并为其分配iPad故事板的名称。

这是决议 打开Info.plist文件 - >删除“主nib文件基本名称(iPad)”并添加另一个名为“主故事板文件基本名称(iPad)”的键,并为其分配iPad故事板文件的名称,即Main_iPad不提供扩展名。

答案 6 :(得分:0)

对于那些有问题的人,我无需创建新密钥即可解决,只需从现有密钥中删除(iPad)

在主界面中,我选择了Storyboard,保存,清理了项目并检查了结果

答案 7 :(得分:0)

从Xcode 11开始,转到Info-> Custom iOS Target Properties->查找Main nib file base name (iPad),然后将此键的值保留为空。另外,在General-> Deployment Info-> Main interface中,您的值应该为空。