Как собрать архитектуру для armv6 и armv7 с iOS 5
В iOS5 Apple отказывается от архитектуры armv6 от ARCHS_STANDARD_32_BIT.
Чтобы сохранить поддержку iPhone3G, я все еще хочу скомпилировать в armv6 даже в iOS5.
Кто-нибудь нашел решение для этого?
6 ответов
Сегодня я что-то создал, указав цель развертывания iOS 4.0. Поскольку в архитектуре указан только armv7, Xcode предупредил меня, что для поддержки чего-либо ниже iOS4.2 мне нужно было включить armv6 в архитектуру. Просто отредактируйте это поле, нажмите кнопку "+", когда появится диалоговое окно, и введите буквальное значение "armv6".
В моем случае мы хотим, чтобы наше приложение работало под iOS4 и iOS5. Нам пришлось внести некоторые изменения, чтобы он корректно работал под iOS5, но все эти изменения были сделаны с помощью удобных для iOS4 изменений кода.
Мы также добавили некоторые специфичные для iOS5 возможности, позволяющие запускать приложение без сбоев под iOS4. В частности, мы протестировали возможности iOS5, прежде чем пытаться их использовать, и связали библиотеки только для iOS5 как дополнительные.
Таким образом, поддержка iPhone3G в мире iOS5 может означать "мы хотим, чтобы наше приложение работало на iOS4 и выше (независимо от использования какой-либо функции iOS5)", а не "мы хотим убедиться, что наше приложение работает на более старом устройстве с iOS5". Здесь есть разница; думаю об этом.:-)
В любом случае, добавить поддержку armv6 обратно очень просто. И я думаю, суть в следующем: в какой-то момент, когда больше нет устройств armv6, о которых нужно беспокоиться (по какой-либо причине), вам не придется создавать их. Apple считает, что все должны обновиться до новейшего оборудования как можно скорее. Так что в этом мире нет необходимости использовать инструменты по умолчанию для чего-либо, кроме самого последнего и самого лучшего.:-) К счастью (или нет), мы, разработчики, живем в реальном мире и понимаем, что вам нужно некоторое время поддерживать старые вещи. И я думаю, что команда разработчиков Xcode тоже это знает, поэтому вы можете добавить поддержку armv6 обратно довольно просто.
Простой ответ заключается в том, что вы должны изменить текущие настройки с "Standard (armv7) - $(ARCHS_STANDARD_32_BIT)", чтобы они были просто "armv6" и "armv7". Смотрите изображение ниже. Вы должны удалить строку с предыдущими настройками, чтобы она работала.
Также убедитесь, что вы установили это в Project AND Targets ... мне понадобился час, чтобы понять это. установил это для одного, но не другого. надеюсь это поможет. GLTA
Я думаю, что есть причина, по которой Apple уронила armv6 из стандартных настроек.
Я скомпилировал armv7/armv6 с iOS5 SDK, однако компилятор armv6 выдал неправильный код в режиме релиза. После нескольких часов нахождения обходного пути (пробуя llvm или gcc с разными уровнями оптимизации) я сдаюсь.
Итак, я возвращаюсь к iOS SDK 4.x, пока поддерживаю старые устройства armv6.
Пример кода:
// myView center=(160, 100)
CGPoint p=myView.center;
// now p=(100,100) (what the heck?)
p.x=myView.center.x;
p.y=myView.center.y;
// now p=(160,100)
p.y+=100;
// now p =(200,200) (what the heck?)
Возможно, у меня есть некоторые повреждения памяти, однако на компиляторе armv7 и на iOSSDK < 5.0 он ведет себя как ожидалось.
С наилучшими пожеланиями
Не уверен, что это действительно решение, но я обнаружил, что замена определенной строки в "architectures", которая была $(ARCHS_STANDARD_32_BIT), на "armv6 armv7" позволила мне скомпилировать с iOS5 в качестве базы и iOS4 в качестве развертывания цель и пройти проверку.
Я не использую никаких IOS5-эксклюзивных библиотек или вызовов, но собираюсь сделать это в следующем выпуске.
Мне не нужно было заменять $(ARCHS_STANDARD_32_BIT) просто armv7, чтобы приложение компилировалось и загружалось в App Store.
Как предложил MarkGranoff, я просто добавил armv6 в виде обычного текста, нажав плюс и введя его во второй строке.