Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Вы можете это сделать, но для этого требуется небольшой взлом 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 (которую вам нужно будет кратко хранить или переустановить в нестандартное место). Затем вы установите Deploy Target в настройках сборки на iOS 4.0 (или любую минимальную ОС, которая вам нужна). Возможно, вам придется открыть файл project.pbxproj в текстовом редакторе, чтобы установить это вручную:

IPHONEOS_DEPLOYMENT_TARGET = 4.0;

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

enter image description here

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

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

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

enter image description here

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

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

enter image description here

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

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

Ответ 2

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 варианта:

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

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

Ответ 3

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

Ответ 4

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

  • Создайте приложение с помощью SDK iOS 6, установив цель установки в 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. Правильно?

Ответ 5

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

Ответ 6

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