Подтвердить что ты не робот

Координирует все неправильно на iPhone 3G? Это может быть ваш компилятор

Примечание: Это вопрос, на который я уже нашел ответ. Кажется, что вопрос после поиска интересного ответа рекомендуется, поэтому я публикую это. У кого-то еще, вероятно, будет такая же проблема и найти это полезным.


У меня есть приложение iOS, которое создает диаграммы. Вскоре после публикации обновления пользователь отправил мне эту паническую электронную почту:

"последнее обновление изменило кривые... не видно больше роста кривые и вставленные данные представлены в виде нисходящей линии... прежде чем вы сможете прекрасно видеть

Помогите мне"

Я заставлю его отправить скриншот и дать более подробную информацию. У него iPhone 3G, и именно так выглядит диаграмма. Большинство точек рисуются в неправильных координатах: они, как представляется, рисуются в (x, x) вместо (x, y).

Screenshot of the buggy display

Сравните с тем, как это должно выглядеть (игнорируйте разницу в цветах - розовый для девочек, синий для мальчиков):

Screenshot of a correct display

После долгих экспериментов я отправил ему переработанную версию предыдущей версии (которая работала нормально для него), и она все еще не работает. Поэтому, в конце концов, кажется, что изменения кода в обновлении не имеют к этому никакого отношения. Что может быть объяснением?

4b9b3361

Ответ 1

Оригинальный iPhone и iPhone 3G используют архитектуру armv6, позже модели armv7. Ответ на этот вопрос о переполнении стека и тема форума разработчиков Apple. проблема в коде armv6 Thumb, созданная компилятором XCode 4.2, который выдает арифметические операции над определенными структурами данных, в частности CGPoint, чтобы вернуть совершенно неправильные результаты. Например, значение x записывается в значение y.

Решение заключается в добавлении опции компилятора -mno-thumb в проект XCode. Это говорит компилятору не генерировать код режима Thumb, тем самым минуя ошибку. Другим решением является переход на более ранний XCode (pre-iOS5 SDK), который не имеет этой ошибки.

Итак, ошибка в компиляторе ! Как это круто?:) В течение двух десятилетий развития я еще не сталкивался с такой ситуацией.

Вот скриншот, показывающий, где добавить этот параметр компилятора, если он кому-то поможет:

enter image description here