Как создать публичную статическую библиотеку, которая опирается на частную статическую библиотеку в XCode? - PullRequest
1 голос
/ 27 декабря 2011

Моя компания хотела бы предложить два разных SDK для разработки под iOS вместе с примером приложения, которое использует каждый. Оба SDK используют много общего кода, который не является частью общедоступного интерфейса любого из SDK.

Я бы хотел структурировать проекты так, чтобы у меня был общий код в одной статической библиотечной инфраструктуре (которую мы храним конфиденциально), и чтобы каждый SDK представлял собой собственную статическую библиотечную среду (которую мы опубликуем). Каждая структура SDK зависит от общей платформы.

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


Есть предложения, как решить эту проблему? Вот самые важные приоритеты:

  • Клиенты могут загрузить единый фреймворк и заставить его просто работать
  • Мы не дублируем код в нескольких проектах

Ответы [ 3 ]

0 голосов
/ 28 декабря 2011

Вам просто нужно добавить эти общие файлы заголовков в обе платформы в качестве ссылок в XCode. Файл проекта XCode может ссылаться на файлы, внешние по отношению к этой папке проекта. Затем вы можете опубликовать их, используя фазу сборки Copy Header Files.

0 голосов
/ 03 января 2012

Пожалуйста, посмотрите мой пост в блоге.

Нажмите здесь

Это полный справочник по созданию статической библиотеки.

0 голосов
/ 27 декабря 2011

Наличие класса с более высокой видимостью, чем у его предков, является сложной проблемой. На самом деле, некоторые очень популярные языки и среды выполнения запрещают это (например, языки, использующие .NET Framework).

Нет очевидного решения. Самым простым, на мой взгляд, является публикация заголовков для частных классов только с полями. Методы могут быть опущены. Вот как «приватные» методы скрыты в каркасах Apple (это в основном делало бы класс «публичным», но все методы были бы скрыты).

Другим решением будет использование композиции, а не наследования для получения функций. Сделайте так, чтобы ваши публичные классы наследовали от NSObject, и дайте им экземпляр вашего частного класса (скрыть его тип с полем id).

...