Xcode 4.5 и iOS 4.2.1 несовместимость
Последние примечания к выпуску указывают на 4.2.1, и ниже не будет поддерживаться, теперь мы должны использовать 2 версии Xcode для разработки при поддержке более старых устройств? Это будет сложно поддерживать более старые устройства, если мы хотим разработать iOS6 и поддержку 4.2 и ниже.
Я не думаю, что Xcode 4.4 будет поддерживать iOS6. Так что это проблема. Как разработчики могли бы легко поддерживать эту платформу без лишних хлопот?
- Использование примера, включающего представления стека, представления таблиц и прокрутки в Swift 2 / Xcode7
- Ручная настройка состояния UIButton
- Преобразование NSString в Date
- Как изменить интервал / отслеживание букв в основном тексте?
- делегат для объекта singleton
- Как установить цвет панели навигации в файле экрана запуска iOS 8?
- Как загрузить несколько изображений без использования ASIHTTPRequest
- Вычисляет ли автоматический подсчет ссылок объект, если я устанавливаю указатель на нуль?
- EKEventStoreChangedNotification вызывается несколько раз
- Сетка изображений в iOS
- Как загрузить NSData в AVPlayerItem?
- Скрыть кнопку отмены UISearchBar
- Можете ли вы программно вызывать сири?
Вы можете это сделать, но для этого требуется небольшой взлом 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 варианта:
- Продолжайте использовать XCode 4.4. Вы сможете настроить таргетинг до 4.3 iOS. Вы не сможете воспользоваться преимуществами функций iOS 6, но ваше приложение должно работать нормально, предполагая, что вы выполняете адекватное тестирование на реальных устройствах iOS 6.
- Перейдите к XCode 4.5. Вы не сможете настроить таргетинг на iOS до 4.3, но вы сможете воспользоваться функциями iOS 6.
- Сделайте две версии вашего приложения. Создайте одну версию с 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