Я обнаружил, что через пару дней успешного запуска и отладки локализованных приложений на Симуляторе он (или процесс развертывания XCode) перешел в состояние где, если симулятор был настроен на один из поддерживаемых мной локальных языков, он вылетел бы при запуске со следующим стеком:
3 CoreFoundation 0x01780e6a +[NSException raise:format:] + 58
4 UIKit 0x008050fa -[UINib instantiateWithOwner:options:] + 2024
5 UIKit 0x00806ab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168
6 UIKit 0x0060c17a -[UIApplication _loadMainNibFile] + 172
7 UIKit 0x0060ccf4 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] +
8 UIKit 0x00617617 -[UIApplication handleEvent:withNewEvent:] + 1533
9 UIKit 0x0060fabf -[UIApplication sendEvent:] + 71
10 UIKit 0x00614f2e _UIApplicationHandleEvent + 7576
11 GraphicsServices 0x01e13992 PurpleEventCallback + 1550
Сбой происходит, потому что UIApplication не может загрузить файл MainWindow.nib:
Завершение работы приложения из-за непойманного исключение 'NSInternalInconsistencyException', причина: 'Не удалось загрузить NIB в связку: 'NSBundle /.app> (загружено) 'с именем' MainWindow ''
Когда вы локализуете приложение, у вас есть несколько вариантов. Вы можете сделать одно (или оба) из следующего:
Я выбрал более позднее, потому что хотел, чтобы все мои локализованные строки были в одном месте (чтобы их можно было перевести все сразу). Это означает, что в моем проекте нет файлов xib в каталогах для конкретных языков (fr.lproj, zh-Hant.lproj и т. Д.). Вместо этого у меня есть en.lproj, заполненный всеми моими файлами xib (файлы пера после их создания) и каталогами для конкретных языков, содержащими соответствующие переведенные файлы Localizable.strings.
Как я уже упоминал, пару дней он работал нормально. Сегодня (и я не уверен, в какой именно момент) приложение на симуляторе начало вылетать при запуске. Установка приложения на устройство работала нормально, и запуск приложения на имитаторе в режиме английского языка работал нормально.
После долгих размышлений я понял, что симулятор вылетает из-за того, что искал свои файлы пера на языке конкретный каталог (fr.lpro, sz-Hant.lproj, ja.lproj в зависимости от языковых настроек).
Таким образом, похоже, что Симулятор находится в состоянии, когда он не ищет языковой каталог по умолчанию (en.lproj ) после того, как ему не удалось найти перо в каталоге для конкретного языка.
Я решил проблему, перейдя в каталог приложения для симулятора (на основе сообщения об исключении выше):
/ Users / ... Поддержка / iPhone Simulator / 4.3 / Applications //. App
Затем перейдите в подкаталог для конкретного языка и скопируйте все файлы пера из en.lproj в этот каталог.
Скопировав файлы вручную, симулятор загружает файлы пера для конкретного языка (которые на самом деле являются просто копиями файлов в каталоге en.lproj), и все работает нормально.
Итак, мои вопросы:
Обновление
Сегодня обнаружил, что эта проблема не ограничивается симулятором, это происходит на устройстве. Итак, обходной путь, который я описал выше (копирование перьев из каталога языка по умолчанию в каталог целевого языка), по телефону явно не работает.
Я попробовал исправить предложенное МакКигнусом (удалить все локализации для моих xib-файлов, что перемещает их обратно в корневой каталог), и это отсортировало его для меня. Итак, я предполагаю, что система локализации проверяет текущий языковой каталог, а затем корень, он не вернется к вашему языку по умолчанию.