Разработка фреймворка Cocoa: совместное использование между проектами

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

Теперь самое сложное: я буду разрабатывать эту платформу по ходу дела, поэтому мне нужно, чтобы каждое из моих настольных приложений имело ссылку на нее, но я хочу иметь возможность редактировать исходный код платформы изнутри каждого приложения. проектов приложений и автоматически перестраивайте фреймворк по мере необходимости.

Например, предположим, что у меня открыт проект Xcode для DesktopAppNumberOne, и я решаю, что нужно изменить один из моих классов фреймворка. Я хотел бы:

  1. Откройте и отредактируйте исходный файл для этого класса фреймворка, не открывая проект фреймворка в Xcode.
  2. Нажмите «сборка» на DesktopAppNumberOne и сначала посмотрите, как перестроен фреймворк (поскольку один из его источников изменился), а затем посмотрите, как перестроены части DesktopAppNumberOne (поскольку один из фреймворков, с которыми он связан, изменился).

Я вижу, как это сделать только с одним приложением и одной инфраструктурой, но мне трудно понять, как это сделать с несколькими приложениями, использующими одну инфраструктуру.

Кто-нибудь добился успеха с этим подходом? Я, возможно, иду об этом неправильно? Любая помощь будет оценена по достоинству.


person e.James    schedule 12.05.2010    source источник
comment
Вы говорите, что видите, как это сделать с одним проектом... но не говорите, как. Во всяком случае, для двух, трех и более проектов это не отличается. Пожалуйста, объясните, как бы вы это сделали.   -  person hooleyhoop    schedule 12.05.2010
comment
Для одного проекта я бы включил все исходные файлы фреймворка, добавил цель для фреймворка и сделал цель приложения зависимой от цели фреймворка. Достаточно легко. Выполнение этого с более чем одним проектом требует большого количества повторений. Например, если я добавлю файлы в структуру, мне придется добавить эти файлы и в каждый из других проектов. То же самое касается изменения настроек сборки, переименования файла и т. д.   -  person e.James    schedule 12.05.2010
comment
Концептуально я хотел бы иметь возможность включать фреймворк в виде полного проекта Xcode в каждый из моих проектов приложений, если это вообще имеет смысл. Таким образом, каждый из проектов приложений будет зависеть от проекта фреймворка, но сам проект фреймворка будет автономным объектом, который нужно редактировать только в одном месте.   -  person e.James    schedule 12.05.2010


Ответы (1)


Создайте проект XCode для своей структуры.

На панели «Группы и файлы»> Видите синюю иконку проекта в самом верхнем левом углу? Перетащите его на панель «Группы и файлы» любого другого проекта, который вам нравится.

Итак, создайте проект приложения и перетащите значок проекта из своего проекта фреймворка.

CMD-i в целевом приложении. Здесь вы устанавливаете свою зависимость от фреймворка и связываете его.

Несколько баллов

Связывание нескольких приложений с одной структурой может вызвать стресс. Вам нужно будет либо установить свою структуру в /Library/Frameworks или эквивалентную ей, либо объединить ее в каждое приложение.

В целях разработки я считаю, что установка пользовательского общего каталога сборки для каждого из проектов упрощает задачу. Я настраиваю каждый проект для сборки в /Code/Build/Debug. Это означает, что путь поиска фреймворка для отладочной сборки может быть $CONFIGURATION_BUILD_DIR. Для ваших выпускных сборок вам все еще придется поработать с путями установки, rpaths и т. д. Заноза в заднице!

Файлы XConfig — ваши друзья. Набор инструментов Google Mac с открытым исходным кодом — хороший пример того, как их использовать. Вам, вероятно, потребуется как минимум файл Project_debug.xconfig, Project_release.xconfig, Target_framework.xconfig, Target_application.xconfig. .

person hooleyhoop    schedule 12.05.2010
comment
Выглядит многообещающе. Спасибо! я попробую - person e.James; 13.05.2010
comment
Прохладный. Это сделает трюк красиво! Я понятия не имел, что вы можете просто добавить проект в качестве зависимости. - person e.James; 14.05.2010
comment
если вы еще не знаете об этом - со сложными проектами с несколькими целями и т. д. я всегда включаю столбец «Целевое членство» (Cntrl щелкните «Группы и файлы»). Я не мог жить без него. - person hooleyhoop; 14.05.2010