2011-12-27 4 views
1

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

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

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


Любые предложения по решению этой проблемы? Вот наиболее важные приоритеты:

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

Не совсем уверен в вашей проблеме, не хотите ли вы публиковать заголовки для родительских классов? – joerick

+0

Нет, я не против этого. Проблема в том, что я * не могу получить * XCode, чтобы включить их в структуру SDK. –

+0

Вы когда-нибудь заставляли это работать? Как клиенты получат одну из государственных платформ, если они не будут предоставлены частным? Вы связываете общую структуру в двоичные файлы государственных структур? Если да, то что, если SDK A использует CommonSDK 1.0 и SDK B, используется CommonSDK 1.1? У вас возникнут проблемы с их соединением в одно приложение? – Liron

ответ

0

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

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

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

+0

Чтобы немного прояснить ... Я не слишком беспокоюсь о том, чтобы разоблачить заголовки родительских классов; меня больше беспокоит не разоблачение всего в общих рамках. –

+0

К сожалению, я не могу понять, как настроить проект XCode SDK, чтобы он скопировал нужные заголовки из общей структуры в инфраструктуру SDK. –

+0

@AndrewMiner, какая именно настройка? Вы публикуете объекты '.framework' или' .a' объекты с кучей заголовков? Меня путают с «статическими фреймами». – zneak

0

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

0

Пожалуйста, ознакомьтесь с этим моим блоге.

Нажмите here

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

+0

Это «полностью» неправильно. Это решает другую проблему, плохо. – Adam

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