Недопустимый 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
Проверьте info
→ custom 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 перейдите к Info
→ Custom iOS Target Properties
→ Find Main nib file base name (iPad)
и оставьте значение для этого ключа пустым. Также, в General
→ Deployment Info
→ Main interface
ваше значение должно быть пустым.