it-swarm.com.ru

Как собрать архитектуру для armv6 и armv7 с iOS 5

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

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

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

96
iGranDav

Сегодня я только что что-то создал, указав цель развертывания 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 обратно довольно просто.

97
Mark Granoff

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

Correct settings for armv6 and armv7

51
adjwilli

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

11
ubert

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

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

9
jfieres

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

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

7
Peter Johnson

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

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

1
Johan