Как построить архитектуру armv6 и armv7 с iOS 5

В iOS5 Apple отбрасывает архитектуру armv6 с ARCHS_STANDARD_32_BIT.

Чтобы поддерживать поддержку iPhone3G, я все еще хочу скомпилировать в armv6 даже в iOS5.

Кто-нибудь нашел решение для этого?

Ответ 1

Я только что создал что-то сегодня, указав цель развертывания iOS 4.0. Только с armv7, указанным в Architectures, Xcode предупредил меня, что для поддержки чего-либо ниже iOS4.2 мне пришлось включить armv6 в Architectures. Просто отредактируйте это поле, нажмите кнопку "+", когда появится диалоговое окно и введите буквальное "armv6".

В моем случае мы хотим, чтобы наше приложение работало под iOS4 и iOS5. Мы должны были внести некоторые изменения, чтобы они работали корректно в iOS5, но все эти изменения были сделаны с изменениями кода, совместимыми с iOS4.

Мы также добавили некоторые возможности, специфичные для iOS5, таким образом, чтобы приложение запускалось без сбоев в iOS4. В частности, мы тестировали возможности iOS5, прежде чем пытаться их использовать, и связали только библиотеки iOS5 как необязательные.

Таким образом, поддержка iPhone3G в мире iOS5 также может означать "мы хотим, чтобы наше приложение запускалось на iOS4 и выше (независимо от использования функции iOS5)", а не "мы хотим убедиться, что наше приложение работает на более раннем устройство под управлением iOS5". Здесь разница; думаю об этом.: -)

В любом случае, добавление поддержки armv6 обратно очень просто. И я думаю, дело в следующем: в какой-то момент, когда больше нет устройств armv6, о которых можно беспокоиться (по какой бы то ни было причине), вам не придется строить для этого. Apple видят, что каждый должен как можно скорее обновиться до новейшего оборудования. Таким образом, в этом мире нет необходимости в инструментах по умолчанию, кроме как самого последнего, так и самого большого.:-) К счастью (или нет), мы, разработчики, живем в реальном мире и признаем, что вам нужно некоторое время поддерживать старые вещи. И я думаю, что команда разработчиков Xcode тоже это знает, поэтому вы можете просто добавить поддержку armv6.

Ответ 2

Простой ответ заключается в том, что вам нужно изменить текущие настройки с "Standard (armv7) - $(ARCHS_STANDARD_32_BIT)", чтобы просто быть "armv6" и "armv7". См. Изображение ниже. Вы должны удалить строку с предыдущими настройками, чтобы она работала.

Correct settings for armv6 and armv7

Ответ 3

также убедитесь, что вы установили это в Project AND Targets... стоили мне часа, чтобы понять это. установил его для одного, но не для другого. надеюсь это поможет. GLTA

Ответ 4

Я думаю, что есть причина, по которой 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 работает так, как ожидалось.

С наилучшими пожеланиями

Ответ 5

Не уверен, что это на самом деле решение, но я обнаружил, что замена определенной строки в "архитектурах", которая была $(ARCHS_STANDARD_32_BIT), с "armv6 armv7" позволила мне скомпилировать с iOS5 в качестве базы и iOS4 как цель развертывания, и пройти проверку.

Я не использую какие-либо эксклюзивные библиотеки или вызовы IOS5, но намереваюсь в своей следующей версии.

Ответ 6

Мне не нужно было заменять $(ARCHS_STANDARD_32_BIT) на просто armv7 для компиляции приложения и его загрузки в App Store.

Как предложил MarkGranoff, я просто добавил armv6 как обычный текст, нажав плюс и просто набрав его на второй строке.