Показаны сообщения с ярлыком link. Показать все сообщения
Показаны сообщения с ярлыком link. Показать все сообщения

вторник, 22 января 2013 г.

Как прицеплять в Xcode-проект статические либы отдельно для Debug и Release

Это касается только Xcode 4 и более поздних версий:

ПЕРВЫЙ ТРУДОЁМКИЙ СПОСОБ: прицепить либы к дереву проекта намертво (вероятно можно и мышкой добавить нужные либы из Finder-папки перетаскивая их прямо в дерево проекта), но я делал это выходя в свойства проекта, потом переключался на вкладку Target, выбирал там Build Phases -> Link Binary With Libraries.

Этот первый способ плох тем, что Xcode порой глючит, и не в состоянии отличить дебаг-либу от релизной и может прицеплять дебаг-либу при релизной сборке приложения. Поэтому мне пришлось написать shell-скрипты, которые прятали в Temp-папки те либы, которые мне мешали и shell-скрипты для возвращения этих либ на прежние места. То есть перед Release-сборкой приложения все дебаг-либы можно аккуратно убрать одним запуском скрипта - при этом эти либы окрасятся в тревожный красный цвет в дереве проекта, но пусть это вас не пугает - приложение будет исправно собираться с оставшимися релизными либами.

НОВЫЙ ХОРОШИЙ СПОСОБ (пока плохо мной оттестирован): не добавлять либы первым способом в дерево проекта. Добавьте пути к нужным либам (включая имена файлов этих собранных либ) в настройках проекта и настройках таргета  -> Build Settings -> Linking -> Other Linker Flags (в подраздел Debug добавьте пути к дебаг-либам, в подраздел Release - к релиз-либам). Кроме того, вы можете в Debug/Release подразделы добавить вложенные подразделы для разных таргетов (для симуляторов и девайсов) - для этого найдите + кнопку справа внизу "Add Build Settings", нажмите на неё и выберите "Add Conditional Settings" (укажите пути для симуляторных и девайсовских дебаг/релиз либ).

вторник, 27 апреля 2010 г.

Проблемы со статическими библиотеками при разработке iPhone-приложений

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

Вот что мне удалось выяснить опытным путём, потратив на это многие часы.

1) Если что-то изменяется в одной из библиотек, от которой зависят одна или несколько других библиотек, то лучше всего сразу же радикально уничтожить не только сами устаревшие бинарные файлы этих библиотек, но и все промежуточные объектные файлы.

2) При переходе с Debug на Release или обратно разработчики нередко удаляют для подстраховки ненужные библиотеки (например из дерева проекта удаляют Debug-версии статических либ и добавляют Release-версии тех же самых статических либ, т.е. библиотек). Я поддерживаю такое решение, так как невозможно определённо сказать, будет ли Xcode правильно подбирать нужную либу из 2-х вариантов при сборке приложения. Увы, это уже подтверждается опытом. Но оказывается этой меры недостаточно! Нужно либо физически удалить ставшие ненужными (даже ненужными на время) бинарные файлы библиотек, либо просто переместить их в другое место (или хотя бы переименовать папку, где они были собраны в одном месте). Оказывается, часто случается так, что Xcode упорно отказывается линковать к приложению указанную в дереве проекта нужную вам библиотеку (например, Release) и линкует ту прежнюю библиотеку, которую вы уже убрали из дерева проекта. НО И ЭТОГО БЫВАЕТ МАЛО!!! Нужно удалять даже промежуточные объектные файлы (особенно в случаях, когда вы решили вообще отказаться использовать какую-то библиотеку, переместив её код непосредственно в проект.

Очень надеюсь, что Apple когда-нибудь исправит эти баги в Xcode (или в iPhone SDK).

Постоянные читатели