В iOS5 Apple отказывается от архитектуры armv6 из ARCHS_STANDARD_32_BIT .
Чтобы сохранить поддержку iPhone3G, я все еще хочу скомпилировать в armv6 даже в iOS5.
Кто-нибудь нашел для этого решение?
Ответы:
Я только что построил что-то сегодня, указав цель развертывания 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 он ведет себя так, как ожидалось.
С уважением
Не уверен, что это на самом деле решение, но я обнаружил, что замена определенной строки в «архитектурах», которая была $ (ARCHS_STANDARD_32_BIT), на «armv6 armv7» позволила мне скомпилировать с iOS5 в качестве основы и iOS4 в качестве развертывания target и пройти проверку.
Я не использую какие-либо эксклюзивные библиотеки или вызовы для IOS5, но собираюсь использовать их в следующем выпуске.