Просто подумал, что поделюсь своим решением с этой непонятной ошибкой архива NSKeyedUnarchiver.
Я только что потратил пару недель на то, чтобы избавиться от этого, и мой обходной путь почти такой же, как у borrrden'а, описанного выше (т.е. используйте файлы пера, созданные с помощью старой версии XCode).Я попробовал все остальное, что мог придумать без какой-либо радости.(Другие мои варианты заключались в том, чтобы прекратить использовать файл xib и написать весь пользовательский интерфейс в коде или прекратить поддержку iOS 3.0)
Итак, вот моя ситуация, как я нашел обходной путь и как я собирался строитьАрхив рассылки для магазина приложений.
Сначала немного фона : Мое приложение изначально создавалось с Xcode 3.2.5 и отлично работало на iOS 3.0 и выше.Когда я обновил до Xcode 4.2, я получил ошибку NSKeyedUnarchiver, как только приложение загрузило файл XIB.После небольшого поиска в Google я наткнулся на другие статьи, упомянутые в этой теме, поэтому я изменил версии Deployment and Development для каждого файла XIB.Это работало, пока я не обновился до Xcode 4.3.1, когда ошибка вернулась.Я перепроверил все файлы XIB, но не радости.Даже при том, что они были установлены для iOS3.0 / IB3.0 (и я попробовал каждую доступную комбинацию), приложение все еще падало.
В попытке доказать, что это была проблема с файлами xib, на которых я пытался отлаживатьустройство (iPod Touch 2-го поколения под управлением iOS 3.0, подключенный к Xcode по кабелю).Но приложение зависнет до того, как отладчик сможет начать работу.Поэтому я удалил MainWindow.xib из проекта (установив App Delegate и UIWindow в коде).Это позволило отладчику начать работу и достигнуть моей первой точки останова (первая строка приложения: didFinishLaunchingWithOptions), но приложение просто зависало, не вызывая исключения, как только я нажимал ViewController.После долгих копаний я переключил отладчик с LLDB на GDB (из Products -> Edit Scheme).Это остановило приложение от зависания и выдало исключение, как я и ожидал (непонятный архив).Очевидно, что у LLDB все еще есть проблемы.
После нескольких недель работы над моими волосами единственное, что сработало, - это использование файлов пера, созданных со старой версией Xcode.К счастью, у меня все еще есть Xcode 3.2.5 на моей машине.Вот шаги, которые я использовал, чтобы заставить это работать и разрешить создание Архива для магазина приложений:
- Выйдите из Xcode 4.3.1 и запустите Xcode 3.2.5.
- Создайте новый проект View-Based-Application и добавьте в него все файлы .xib из вашего основного проекта.
- Установите цель развертывания на iOS3.0, затем выполните сборку и запуск релиза на устройстве (используйте общийпрофиль обеспечения, если он не подхватывает его автоматически)
- Из Xcode, откройте .app в поисковике, затем Показать содержимое пакета, чтобы увидеть все файлы .nib внутри него (Xcode преобразовал файлы .xib в.nib файлы).
- Для простоты использования скопируйте файлы .nib в другой каталог.
- Выйдите из Xcode 3.2.5 и запустите Xcode 4.3.1 и откройте ваш проект.
- Посетите каждый xib и на боковой панели справа отмените выбор приложения из целевого членства (это означает, что Xcode не использует эти файлы .xib для окончательного пакета).
- Сейчасдобавить все новые файлы .nib (по мере созданияed в Xcode 3.2.5) для вашего проекта (для аккуратности поместите их в собственную группу).
- Теперь вы можете очищать, создавать и запускать сколько угодно и даже создавать архив для приложенияstore.
Чтобы убедиться, что используются правильные файлы .nib, используйте md5 из терминала.Покажите ваш .app (или Архив от Организатора) в Finder, чтобы увидеть, где Xcode его создал, а затем Показать содержимое пакета, чтобы увидеть файлы .nib.Сравните контрольные суммы md5 с контрольными суммами из файлов .nib, созданных Xcode 3.2.5.
Просто помните, что всякий раз, когда вы изменяете xib, он не будет использоваться, пока вы не соберетесь из Xcode 3.2.5.и скопируйте полученный файл .nib в каталог хранения.
Это не идеально, и если у кого-то есть лучшее решение, которое работает, я буду рад его услышать. Тем временем я надеюсь, что это поможет.