Как я могу построить фреймворк без включения необходимого фреймворка? - PullRequest
1 голос
/ 11 декабря 2010

Этот вопрос основан на этом .

TL; DR: я разбил свой код на фреймворки и создал мета-фреймворк, содержащий код (в основном константы и строки)это будет использоваться во всех моих рамках.

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

Ответы [ 2 ]

2 голосов
/ 11 декабря 2010

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

Затем для включения одной из ваших подфреймворков в приложение (пакет, что угодно) сделайте следующее:

  1. Ссылка цель проекта для обеих ваших под-фреймворков и для вашей мета-фреймворка .
  2. Добавить " Копировать (Framework) файлы " этап сборки в проект, если его еще нет.
  3. Добавьте оба, ваши подкаркас и ваш мета-каркас к указанной фазе сборки .
  4. По желанию вы также можете добавить в качестве зависимостей все проекты, от которых зависит ваш проект. (Для ваших подпроектов, которые будут вашим метапроектом, и для вашего приложения, которые будут вашими подпроектами.)
  5. ...
  6. Прибыль.

Это в основном то, что я делаю в моей DLAppKit.framework , которая опирается на мою DLFoundationKit.framework и во всех приложениях, использующих DLAppKit.framework .

alt text

0 голосов
/ 11 декабря 2010

Ради этого ответа я собираюсь предположить, что вы создаете стандартные, заурядные фреймворки, используя встроенные цели XCode. Если это так, то ваш фреймворк содержит динамические библиотеки, скорее всего, в виде файлов .dylib. Любой код, который ссылается на такую ​​платформу, не будет включать код из библиотеки во время компиляции, он загрузит платформу и разрешит символы во время выполнения.

Результатом этого является то, что вам не нужно беспокоиться о раздувании кода; ссылка прочь! Если ваши дочерние структуры зависят от символов, определенных в вашей родительской структуре, вам необходимо связать их с родительской структурой. В некоторых случаях вы можете поиграть с метапрограммированием Objective-C ужасными способами, чтобы обойти, включая непосредственно фреймворки, но, вероятно, не в этом случае, если вы включаете в основном константы и строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...