Не так давно столкнулся с тем что перестали компилироваться проект под iPhone. После того как я в дополнение к iPad добавил в проект графику под iPhone 3G и 4G. Чего только не прочитал на форумах. Но ошибка 1 от компилятора GCC 4.2 никуда не девалась. Поступил просто. Заменил его в настройках проекта на LLVM GCC 4.2 и все заработало.
И вот захотелось сделать на основе проекта еще одну демку. Похожую настолько, что я просто скопировал проект и решил добавить к нему несколько классов. Откомпилировал, запустил. И получил полный бред в отладчике.
Previous frame inner to this frame (gdb could not unwind past this frame)
Вот такое веселое сообщение. Почитал форумы. А там вообще не советуют использовать LLVM GCC 4.2 для отладки. Вернулся на GCC 4.2. Снова ошибка 1 Так и написано. Компилятор совершил ошибку и вышел с ошибкой 1!
Причем в новом проекте уже в двух файлах.
Что же в них было общего? Оказалось вот что.
Для определения устройства, на котором запущено приложение я использовал такой макрос
#ifdef UI_USER_INTERFACE_IDIOM()
#define IS_IPAD() (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#else
#define IS_IPAD() (false)
#endif
А там где нужно было загружать много графики просто завернул две здоровые ветки кода в такую конструкцию
if (IS_IPAD())
{
Ipad код
}
else
{
другой код
}
И вот эта конструкция стала компилятору поперек горла.
Заменил код на простую установку флага Ipad/не Ipad и подставил ее вместо макроса. Заработало.
В общем с проблемой я своей разобрался. Но почему нельзя было написать об этом в ошибке - для меня не понятно. И вот так с Apple на каждом шагу. Они никогда не пишут о своей продукции ничего плохого. Везде только положительная информация. Просто если что-то не работает - то уже конкретно не работает.
Journal information