2013-04-18 14 views
9

Podczas wysyłania aplikacji do App Store pojawił się komunikat informujący:Nieprawidłowy Info.plist - UIMainStoryboardFile lub NSMainNibFile podczas wysyłania aplikacji do sklepu z aplikacjami

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

Po googling wokół wydaje się, że konsensus jest, aby ustawić "główna nazwa pliku podstawowego pliku zerowego" do "MainWindow", a także ustawić "główną nazwę pliku głównego pliku storyboard" na "MainStoryboard_iPAd". Obie opcje mamy już.

Aplikacja jest przeznaczona do pracy zarówno na iPadzie, jak i telefonie iPhone, a aplikacja zawiera dwa pliki scenorysu: jeden dla iPada i jeden dla iPhone'a. Nie mogę znaleźć żadnego widocznego pliku .nib ani .xib do manipulowania, nawet jeśli znalazłem poprawną odpowiedź.

Czy ktoś ma jakieś wskazówki, jak obejść/naprawić to, aby aplikacja wysyłała?

Dzięki za hałdy!

Odpowiedz

6

Zgodnie z tym, co sugeruje komunikat, nie należy ustawiać w pliku Info.plist zarówno pliku UIMainStorboardFile, jak i NSMainNibFile. Sugerowałbym usunąć wpis NSMainNibFile.

Skoro masz dwa storyboardy, jeden dla iPada i jeden dla iPhone, można ustawić je jako Głównego Storyboard oddzielnie w Podsumowanie karcie projektu:

enter image description here

8

Niestety Odpowiedź @ verbumdei nie działa dla mnie.

Próbowałem zmienić projekt na iPhone'a w Universal na iOS 7 i nie działał. Tablica na iPada nie była czytana.

Co się stało, to że Xcode dodał klucz do mojej .plist, która była "Główną nazwą pliku podstawowego stalówki (iPad)". Musiałem usunąć ten klucz i dodać "Główną nazwę pliku bazy storyboard (iPad)", a następnie ustawić nazwę pliku do mojego scenorysu (np. Storyboard-iPad.storyboard).

+1

Musiałem również zrobić kopię pierwszego storyboardu jako MainStoryboard-iPad.storyboard. – WebOrCode

+0

W moim przypadku utworzyłem nową Storyboard, ale tak, skopiowanie twojego iPhone storyboard'a może być rozsądną odpowiedzią. Dzięki! – OlivaresF

+0

Dziękuję @OlivaresF, ta odpowiedź mnie uratowała. Zmieniłem aplikację na iPhone'a na uniwersalną aplikację, ale korzystałem z tego samego scenariusza. – drc

3

Sprawdź info ->custom IOS target properties

Sprawdź Main nib file base name(iPhone/iPad) lub Main Storyboard file base name(iPhone/iPad)

Jeśli nie istnieje, dodaj je i zapisywać nazwy pliku bazowej.

To działa dla mnie.

0

Żadne z powyższych rozwiązań nie sprawdziło się u mnie.
Nich co zrobiłem, że dodałem właściwość storyboard do AppDelegate i ustawić jej wartość w - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Poniżej znajduje się kod na to:
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

Domyślnie Xcode tworzy "główną nazwę pliku stalówki (iPad)" w pliku info.plist i przypisuje ją do nazwy swojego storyboardu na iPadzie. To jest rozdzielczość .plist file-> delete 'Główna nazwa pliku podstawowego stalówki (iPad)' i dodaj kolejny klucz o nazwie "Nazwa podstawowego pliku storyboardu (iPad)" i przypisz go do nazwy pliku ze stacją na iPadzie, np. Main_iPad nie zapewnia rozszerzenia.

Powiązane problemy