Переход от xcode3 к xcode4 - не может загружать программы на более старый iPod Touch

Возможный дубликат:
iPhone app does not run on old device (3G, 3GS, …)

У меня есть аналогичная проблема (приложение для iPhone не работает на старом устройстве (3G, 3GS,...)), но обходной путь для этого страница не делает ничего для меня. Я разрабатываю приложения для iOS на XCode3 и тестирую на более раннем iPod Touch второго поколения под управлением iOS 4.2.1. Пробовал последние пару дней использовать XCode4.

Я могу создавать и запускать приложения под XCode4 с помощью симулятора, оба из которых я первоначально разрабатывал под XCode3, а также новый XCode4, созданный типами "Hello World". Однако, когда я пытаюсь поместить его на фактическое оборудование, он терпит неудачу с небольшим количеством сообщений об ошибках. Окно отладки в XCode4 ничего не показывает. Индикатор активности/состояния в верхней части XCode переходит из "Building [AppName]" прямо к "Finished Running [AppName]", но приложение никогда не переносится или не запускается на устройстве.

Если я посмотрю на консоль iPod через Organizer, я вижу кучу ошибок, например:

Thu Jun 16 15:17:56 unknown lockdownd [16] < Ошибка > : 2ff68000 handle_connection: Не удалось получить сообщение USB № 6 из Xcode. Убийственное соединение

Thu Jun 16 15:17:56 unknown com.apple.mobile.lockdown [16] < Примечание > : Не удалось получить размер сообщения

и я предполагаю, что это связано с этим. Я попытался отключить все другие USB-устройства с моего Mac, но не имеет значения. Попробовал перезагрузить устройство и Mac, но опять же никаких различий.

Я настроил цель развертывания iOS на 4.2, поэтому я не думаю, что там есть какая-то проблема. Устройство отображается в Органайзере с зеленой точкой и действительным незавершенным профилем подготовки. Под свойствами подписи кода это выглядит так:

Code Signing Entity     Don't Code Sign
    Debug               Don't Code Sign
        Any iOS SDK     iPhone Developer (currently matches...[profile I have installed])
    Release             Don't Code Sign
        Any iOS SDK     iPhone Developer (currently matches...[profile I have installed])

Само устройство отображается в раскрывающемся списке "Схемы":

[DeviceName] (4.2.1 переопределение базового SDK на 5.0)

Кто-нибудь еще сталкивается с подобной проблемой или имеет какие-либо предложения?

Ответ 1

Просто для того, чтобы откликнуться на комментарий Томаса, это может быть вызвано таргетингом на архитектуру процессора, которую ваше устройство не поддерживает. IPhone и iPhone 3G (наряду с iPod touch того же поколения) не поддерживают armv7. Задайте настройку сборки Archiectures, чтобы включить "armv6", чтобы гарантировать, что полученный двоичный файл содержит код armv6.

Ответ 2

У меня была такая же проблема с XCode 4.1.1 и Ipod Touch 2nd gen. Я начал с одного из шаблонов и не смог запустить его на своем оборудовании. Найденные ответы здесь, в stackoverflow, но лучше иметь все необходимые шаги в одном месте:

  • Вы должны добавить armv6 в Architectures в свои настройки проекта (вкладка "Настройки" ). Вы можете установить его в "armv6 $(ARCHS_STANDARD_32_BIT)" или "armv6 armv7", это не имеет значения. $(ARCHS_STANDARD_32_BIT) - это просто переменная, которая равна "armv7" в новейшем XCode.

  • Не меняйте базовый SDK, "Последние iOS (iOS5.0)" в порядке. В разделе "Сводка" изменится "Цель развертывания" до версии 4.0 или любой другой версии iOS, которую вы хотите иметь как минимум.

  • Новые шаблоны в Xcode 4 имеют стандартную настройку в Info.plist, которую вы должны изменить. Найдите "Требуемые возможности устройства" и удалите "armv7".

Если вы делаете шаги 1 + 2, но забываете шаг 3, вы получаете ошибки "Не удалось получить USB-сообщение" в журнале устройства, а в XCode в противном случае нет сообщения об ошибке. Почему он это делает, вместо того, чтобы показывать вам сообщение об ошибке, которое подсказывает вам "Необходимые возможности устройства" - это другой вопрос.

Вкратце: Apple начала отказываться от поддержки платформы armv6 с обновлением до iOS 4.3. Более новое оборудование работает с другим набором команд, armv7. Если вы хотите поддерживать iOS 4 с XCode 4, вам действительно нужно убедиться, что вы также правильно создали свой проект для armv6 с помощью приведенных выше шагов.

Ответ 3

Похоже, что у вас установлен IOS 5.0 SDK. Правильно ли я это читаю? Если это так, то это управляется Apple Developer NDA и не следует обсуждать здесь. Я бы опубликовал на форумах разработчиков.

У вас есть другие устройства под управлением 4.2.1, которые работают с вашей установкой Xcode? У вас есть другие устройства вообще, которые работают с вашей установкой Xcode?

Ответ 4

Помните, что, по-видимому, настройка архитектуры чувствительна к регистру. Я вручную добавил "Armv6", и ничего еще не работало. Изменение этого на "armv6" сделало трюк.