Недопустимый info.plist - UIMainStoryboardFile или NSMainNibFile при отправке приложения в магазин приложений

При отправке приложения в магазин приложений я получил сообщение с сообщением:

"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, чтобы манипулировать, даже если я нашел правильный ответ.

Есть ли у кого-нибудь подсказки о том, как обойти/исправить это, чтобы приложение отправило?

Спасибо, кучи!

Ответ 1

К сожалению, ответ @verbumdei не работал у меня.

Я пытался превратить iPhone-единственный проект в Universal в iOS 7, и он не работал. Паттерн для iPad не читался.

Что произошло, так это то, что Xcode добавил ключ к моему .plist, который был "Main nib file base name (iPad)". Мне пришлось удалить этот ключ и добавить "Основное имя файла раскадровки (iPad)", а затем установить имя файла в мою раскадровку (т.е. Storyboard-iPad.storyboard).

Ответ 2

Как следует из сообщения, вы не должны устанавливать оба файла UIMainStorboardFile и NSMainNibFile в свой файл Info.plist. Я бы предположил, что вы удалили запись NSMainNibFile.

Поскольку у вас есть две раскадровки, одна для iPad и одна для iPhone, вы можете установить их в качестве основного раскадровки отдельно на вкладке "Сводка" вашего проекта:

enter image description here

Ответ 3

Вот что помогло мне решить эту проблему. Удалите запись NIB, оставив только другую запись.

enter image description here

Ответ 4

Проверьте infocustom IOS target properties

Проверьте Main nib file base name(iPhone/iPad) или Main Storyboard file base name(iPhone/iPad)

Если этого не существует, добавьте их и напишите название своего базового файла.

Это работает для меня.

Ответ 5

Для тех, у кого проблемы, я решил без создания нового ключа, просто удалил (iPad) из существующего ключа

В главном интерфейсе я выбрал раскадровку, сохранил, очистил проект и вуаля

Ответ 6

Ни один из вышеперечисленных решений не работал у меня.
Поэтому я сделал, что я добавил свойство 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;
}

Ответ 7

По умолчанию Xcode создает базовое имя основного файла nib (iPad) в файле info.plist и присваивает ему имя раскадровки iPad.

Вот разрешение Откройте файл Info.plist- > удалите "Основное имя файла nib файла (iPad)" и добавьте еще один ключ с именем "Основное базовое имя основного раскадровки (iPad)" и назначьте его именем своего файла раскадровки iPad, т.е. Main_iPad не предоставляет расширение.

Ответ 8

Начиная с Xcode 11 перейдите к InfoCustom iOS Target Properties → Find Main nib file base name (iPad) и оставьте значение для этого ключа пустым. Также, в GeneralDeployment InfoMain interface ваше значение должно быть пустым.