Xcode 4.5 и iOS 4.2.1 несовместимость

Последние примечания к выпуску указывают на 4.2.1, и ниже не будет поддерживаться, теперь мы должны использовать 2 версии Xcode для разработки при поддержке более старых устройств? Это будет сложно поддерживать более старые устройства, если мы хотим разработать iOS6 и поддержку 4.2 и ниже.

Я не думаю, что Xcode 4.4 будет поддерживать iOS6. Так что это проблема. Как разработчики могли бы легко поддерживать эту платформу без лишних хлопот?

Вы можете это сделать, но для этого требуется небольшой взлом Xcode и некоторые жертвы. В зависимости от того, что вы подразумеваете под «поддержкой iOS 6» , этого может быть или не быть достаточно для вас. Если вы просто хотите, чтобы ваше приложение запускалось на iOS 6, это должно работать. Если вам также понадобится ваше приложение для включения новых функций iOS 6, то этого не произойдет.

(Примечание для других, у которых нет проблемы с использованием нескольких версий Xcode: у этого похожего вопроса есть ответы, которые позволяют вам также использовать новые API iOS 6 и напрямую нацеливать на armv7s)

См. Основные инструкции в блоге chpwn здесь (но также прочитайте остальную часть этого ниже!)

В принципе, вы можете использовать Xcode 4.5 для сборки для iOS 4 и выше, но тогда вы не сможете воспользоваться новыми функциями iOS 6. Итак, вы действительно строите для iOS 4 и 5 и считаете, что приложение будет отлично работать на iOS 6 (это должно быть правдой, но вам нужно будет проверить это самостоятельно).

Вам необходимо скопировать папку SDK iOS 5

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.*.sdk 

от старой установки Xcode (которую вам нужно будет хранить ненадолго или переустановить в нестандартное место). Затем вы установите параметр « Развертывание цели» в настройках сборки на iOS 4.0 (или любую минимальную ОС, которая вам нужна). Возможно, вам придется открыть файл project.pbxproj в текстовом редакторе, чтобы установить это вручную:

 IPHONEOS_DEPLOYMENT_TARGET = 4.0; 

Вам также нужно будет установить Архитектуры в armv6 и armv7 . Вы также не можете напрямую нацелиться на armv7s . Но это не значит, что ваше приложение не будет работать на iPhone 5. armv7 файлы armv7 должны запускаться на iPhone 5, просто без каких-либо оптимизаций, добавленных в armv7s . Просто совместимость не работает в другом направлении (например, исполняемые файлы armv7 не запускаются на armv6 iPhone 3G).

введите описание изображения здесь

Также есть шаг, который может понадобиться, что не упоминается в блоге chpwn. Вы можете получить эти предупреждения (которые действительно являются ошибками, поскольку Xcode не будет генерировать ваш исполняемый файл должным образом):

предупреждение: нет правила для обработки файла '$ (PROJECT_DIR) /main.m' типа sourcecode.c.objc для архитектуры armv6

Чтобы исправить это, вам нужно настроить собственное правило сборки для своей цели, которое сообщает Xcode использовать LLVM GCC 4.2 для генерации кода armv6. Определите правило для файлов, соответствующих шаблону *.[mc] :

введите описание изображения здесь

Это будет другой компилятор, чем по умолчанию для Xcode, и вам может потребоваться настроить некоторый синтаксис в коде Objective-C. Несмотря на то, что многие люди, желающие сделать это, вероятно, написали свои приложения перед ARC, важно отметить, что LLVM gcc 4.2 не поддерживает ARC .

Наконец, вы, вероятно, по-прежнему будете видеть предупреждения Xcode о целях развертывания iOS менее 4.3, а armv6 не поддерживается. Я обнаружил, что это не проблема, и ее можно игнорировать:

введите описание изображения здесь

Запуск lipo -info в моем исполняемом приложении после этого показывает желаемый результат:

 lipo -info MyAppName Architectures in the fat file: MyAppName are: armv6 armv7 

Xcode 4.5 делает iOS 4.3 самой ранней поддерживаемой операционной системой, которая эффективно ухаживает за оригинальным iPhone и 3G.

Если вы хотите поддерживать версии iOS раньше, чем 4.3, вам нужно будет поддерживать версию Xcode версии 4.4.

Чтобы быть немного яснее: вы не можете легко (то есть Xcode не из коробки) поддерживать до 4.3 устройства и использовать функции iOS 6 в том же приложении. Это связано с тем, что для iOS 6 требуется XCode 4.5, который также устанавливает iOS 4.3 как минимальную поддерживаемую ОС.

Итак, у вас есть 3 варианта:

  1. Продолжайте использовать XCode 4.4. Вы сможете настроить таргетинг до 4.3 iOS. Вы не сможете воспользоваться преимуществами функций iOS 6, но ваше приложение должно работать нормально, предполагая, что вы выполняете адекватное тестирование на реальных устройствах iOS 6.
  2. Перейдите к XCode 4.5. Вы не сможете настроить таргетинг на iOS до 4.3, но вы сможете воспользоваться функциями iOS 6.
  3. Сделайте две версии вашего приложения. Создайте одну версию с XCode 4.4 (как в варианте 1), а другой с 4.5 (как в варианте 2). С точки зрения распространения, это будут 2 отдельных приложения, каждый из них будет иметь свой собственный идентификатор пакета и т. Д. У вас будет две записи в магазине приложений.

Если вам удобно идти дальше того, что поддерживается непосредственно Xcode, см. Ответ Nate.

Оригинальные iPhone и iPhone 3G – это единственные устройства, которые не поддерживают iOS 5. iPhone 3G теперь составляет 4 года. Вы можете захотеть отказаться от поддержки iOS 4. Если вы не хотите этого делать, я думаю, вам придется разрабатывать в двух разных версиях Xcode.

Я предполагаю, что потерянная поддержка iOS 4.2.1 не является основной проблемой. Фактически, я попытался обойти это и сделать следующее:

  • Создайте приложение с помощью iOS 6 SDK, установив цель установки в iOS 4.2.1 (которая работает).
  • Упакуйте приложение для установки ad hoc и установите приложение на устройстве iOS 4.2.1 (iPod touch 2G).
  • Проверьте приложение.

Однако установка не выполняется. Причина здесь – afaik – не версия iOS. Причина в архитектуре. XCode 4.5 больше не позволяет создавать для armv6. Он только строит для armv7. С другой стороны: все устройства, которые имеют armv7 или лучше, могут запускать iOS 5. Единственными устройствами, которые не поддерживают armv7, являются iPhone, iPhone 3G, iPod touch 1G и iPod touch 2G.

Поэтому для меня возникает вопрос: можете ли вы построить для armv6 с XCode 4.5 и iOS 6 в качестве базового SDK?

Изменить: что вы не можете сделать, потому что базовый SDK для iOS 6 недоступен для armv6. Правильно?

Попробуйте установить параметры проекта вручную, используя IPHONEOS_DEPLOYMENT_TARGET=4.0 . Однако я не знаю, есть ли побочный эффект.

Я думаю, что таргетинг на 4.3 – лучший выбор, согласно статистике версий ios

  • iPhone: обнаружение Tap в MKMapView
  • Как сделать эффект виньетки на iOS?
  • Как назвать изображения для размера экрана iPhone 5?
  • Получить программный идентификатор Bundle Identifier
  • Как контролировать более 20 регионов с помощью CLLocationManager
  • Вложенные UINavigationControllers
  • UIActivityIndicator в ячейке UICollectionView случайным образом не скрывает
  • iOS UITableView numberOfRowsInSection BAD ACCESS
  • установить размеры фонового изображения IOS
  • Пользовательская обработка удаленных событий в приложении с экрана блокировки iOS
  • разделенный UITableView, полученный из pList
  • Давайте будем гением компьютера.