Можете ли вы сослаться на файлы Xib из статических библиотек на iPhone? - PullRequest
31 голосов
/ 02 апреля 2009

В моем приложении в настоящее время весь мой код разделен на статическую библиотеку, чтобы упростить настройку целей проекта xcode для реального приложения и для модульных тестов для моего кода. Проблема в том, что я хочу поместить большинство моих файлов xib в статическую библиотеку, но, похоже, что когда я запускаю свое приложение и пытаюсь ссылаться на xib, оно не может найти его, если оно не включено в фактическую цель приложения вместо статической библиотеки. Можно ли включить файлы xib и другие ресурсы в статические библиотеки, на которые может ссылаться код из той же библиотеки, и если да, то как?

Ответы [ 5 ]

38 голосов
/ 28 апреля 2009

Нет, это невозможно, потому что статическая библиотека - это не то же самое, что "комплект".

Пакет - это каталог, который может содержать всевозможные файлы, включая файлы ресурсов (xib), исполняемые файлы и статические библиотеки. Он существует в файловой системе как группа отдельных файлов.

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

Хотя было бы возможно поместить туда данные для XIBS, XCode не будет иметь возможности узнать, что они там были, поскольку он ищет их как отдельные файлы в файловой системе.

В Mac OS вы можете создать «Framework», который, по сути, представляет собой набор кода, ресурсов, настроек и т. Д., Которые могут быть повторно использованы несколькими проектами. Однако Apple, похоже, не поддерживает создание пользовательских рамок для iPhone OS.

Связки https://developer.apple.com/library/content/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html#//apple_ref/doc/uid/10000123i-CH101-SW1

Статические библиотеки http://en.wikipedia.org/wiki/Static_library

14 голосов
/ 29 апреля 2009

Ответить на комментарий (не помещается в поле для комментариев)

Не беспокойтесь, я пытался сделать почти то же самое, что и вы, на прошлой неделе - я хотел бы отправить «фреймворк» из xibs, включить файлы и .a libs клиенту, не давая их весь исходный код. Я не мог найти хороший способ сделать это с помощью комплектов.

По какой-то причине, Apple особенно тупит это - я не вижу причины, по которой они так поступают в случае статических библиотек (динамические библиотеки достаточно справедливы).

Мое решение на данный момент - вручную создать папку пакета "Foo", которая содержит следующие подпапки:

  1. "включить" -> положить сюда файлы .h
  2. "res" -> положить сюда файлы .xib
  3. "lib" -> содержит вложенные папки "iphoneos" и "iphonesimulator", каждая с libFoo.a

Тогда архивируйте это и отправьте клиенту. Клиент тогда:

  1. Распаковывает упаковку куда угодно.
  2. Добавляет папку res в группу ресурсов.
  3. Изменяет следующие настройки цели:
    Другие флаги компоновщика = -Objc -lfoo
    Пути поиска в заголовке = / include
    Пути поиска в библиотеке = / lib / $ (PLATFORM_NAME)

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

4 голосов
/ 22 декабря 2011

Я нашел для этого идеальное решение, которое делает все вышеперечисленное автоматически и более https://github.com/kstenerud/iOS-Universal-Framework Это плагин xCode

Это сработало для меня как шарм, Работает только для XCode 4 и выше

2 голосов
/ 10 января 2012

Да, Вы можете. добавьте xib-файл в вашу библиотеку, как если бы вы делали это для любого обычного проекта. Затем в целевом проекте библиотеки добавьте xib-файл в раздел Copy files вместе с .a файлом. В главном проекте, где вы используете библиотеку, перетащите файл xib, в котором находится файл .a для библиотеки.

0 голосов
/ 20 сентября 2010

При распространении вы также можете создать SDK. JSON.framework сделал это в своем SVN, и я успешно повторил это. Вы можете увидеть, как это было сделано в http://hltypes.svn.sf.net/ в hltypes-ios.xcodeproj и папке iOS в проекте.

Прежде всего вам необходимо «установить» в папку сборки, а затем вам нужно скопировать специально отформатированный SDKSettings.plist. Затем добавьте путь к SDK в список «Дополнительные SDK» в проекте приложения. Недостатком составных SDK является необходимость перезапуска Xcode 3.x при каждом обновлении этого mini-SDK и настойчивость Xcode в создании составного SDK, созданного из базового SDK Apple и вашего mini-SDK (что означает, что вам нужно немного подождать) .

В проекте приложения по-прежнему необходимо добавить .xib и другие ресурсы, добавленные вручную.

...