2012-05-01 9 views
3

Я пытаюсь построить iOS-библиотеку/фреймворк, который, ради простоты, мы скажем, предоставляет класс A проектам, использующим его. Теперь проблема в том, что класс A зависит от класса B, который не предназначен для отображения (или даже включенного в качестве символа) в вывод сборки для библиотеки. Это вызывает проблемы, потому что в нем есть другая библиотека с классом C, которая также полагается на класс B.iOS Library/Framework, как исключить определенные классы из продукта сборки?

Что происходит, если я попытаюсь включить обе библиотеки в проект, компоновщик жалуется на наличие нескольких определений класса B.

Каков наилучший способ обойти эту проблему? Можно ли установить класс B при слабой связи при создании двух библиотек (или, по крайней мере, одной из двух библиотек), и если да, то как?

Или должен ли класс B быть извлечен в его собственную библиотеку/структуру, а две библиотеки изменены для ссылки, вместо того чтобы включать класс B в качестве исходного файла?

ответ

2

Я думаю, что лучший способ - сделать несколько целых целей в вашем проекте. Самый простой способ сделать это - щелкнуть файл проекта в списке файлов в левой части XCode, щелкнуть правой кнопкой мыши по объекту в разделе «ЦЕЛИ» в средней панели и выбрать Дублировать. Затем вы можете включить A и C в одну цель, а B и C - в другую. Вы можете скомпилировать их отдельно, и в основном это похоже на наличие двух проектов, за исключением того, что они имеют общие файлы. Это похоже на то, что вы хотите?

EDIT На второй взгляд это звучит не так. Ваша проблема возникает, когда вы компилируете библиотеку, а затем связываете с ней другой проект, верно?

Не похоже, что есть способ иметь слабо связанные объекты внутри скомпилированной библиотеки. Вероятно, вам лучше будет расщепить их на отдельные библиотеки (что похоже на сценарий, описанный внизу this page)

+0

Да, проблема, обсуждаемая на странице, - это именно та проблема, с которой я столкнулся. У меня есть сторонняя библиотека, которая внутренне использует 'SBJson' (путем интеграции источников SBJson в проект/код библиотеки) и встроенную библиотеку, которая делает то же самое. Попытка связать их с обоими из них в третьем проекте вызывает конфликты между двумя экземплярами «SBJson». – aroth

+0

У вас есть источник сторонней библиотеки? – borrrden

+0

В этом случае да, хотя, конечно, это не всегда так, учитывая популярность 'SBJson'. Поэтому, если бы возникло общее решение этой проблемы, которое не требовало модификации самих проектов библиотеки, мне определенно было бы интересно узнать об этом. – aroth

Смежные вопросы