在将应用程序发送到应用程序商店时,我收到一条消息,指出:
"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来操纵。
有没有人有任何关于如何解决/修复此问题的提示,以便应用程序发送?
谢谢堆!
不幸的是,@ verbumdei的回答对我不起作用。
我试图在iOS 7中将仅限iPhone的项目转换为Universal,但它无法正常工作。 iPad的故事板没有被阅读。
发生的事情是,Xcode在我的.plist中添加了一个键,即“主nib文件基本名称(iPad)”。我不得不删除该密钥并添加“主故事板文件基本名称(iPad)”,然后将文件名设置为我的故事板(即Storyboard-iPad.storyboard)。
如消息所示,您不应该在Info.plist文件中设置UIMainStorboardFile和NSMainNibFile。我建议您删除NSMainNibFile条目。
由于您有两个故事板,一个用于iPad,另一个用于iPhone,您可以在项目的“摘要”选项卡中将它们分别设置为主要故事板:
检查info
- > custom IOS target properties
检查Main nib file base name(iPhone/iPad)
或Main Storyboard file base name(iPhone/iPad)
如果不存在,请添加它们并写入基本文件名。
这个对我有用。
上述解决方案均不适合我。
因此我做的是我在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;
}
默认情况下,Xcode在info.plist文件中创建“主nib文件基本名称(iPad)”,并为其分配iPad故事板的名称。
这是分辨率打开Info.plist文件 - >删除'主nib文件基本名称(iPad)'并添加另一个名为'主故事板文件基本名称(iPad)'的键,并为其分配iPad故事板文件的名称,即Main_iPad don不提供延期。