Управление проектом статической библиотеки в виде модуля, подобного Framework на проекте iOS в Xcode4 - PullRequest
3 голосов
/ 19 июня 2011

Многие люди, включая меня, пытаются создать некую платформу статической библиотеки для iOS, чтобы архивировать какую-то модульность. Framework - лучший способ сделать это, но он не предоставлен Apple, и обходные пути не работают.

https://github.com/kstenerud/iOS-Universal-Framework/tree/master/Fake%20Framework/Templates

  1. На фальшивый фреймворк нельзя ссылаться на вкладке ссылок в фазах сборки.
  2. Реальный фреймворк нуждается в модификации настроек системы. И до сих пор не работают плавно на каждой части.

Проблема в том, что статической библиотеке нужны заголовочные файлы, и невозможно ссылаться на заголовочные файлы проекта в другом месте другого проекта без какого-либо сценария. И скрипт нарушает абстракцию управления файлами в IDE.

Как я могу использовать статический проект библиотеки как удобный способ модуля? (просто перетащите проект в другой проект для завершения встраивания)

Ответы [ 3 ]

5 голосов
/ 22 июля 2011

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

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

С поддельной структурой XCode не распознает целевой тип, поэтому вам нужно добавить команду ссылки вручную.Например, если ваш фреймворк называется Foo:

  1. Разверните группу «Продукты» вашего фреймворка, затем перетащите «Foo.framework» в фазу сборки «Связать двоичные файлы с библиотеками»цели вашего приложения.

  2. В цели вашего приложения отредактируйте «Другие флаги компоновщика» в настройках сборки и добавьте: «-framework Foo»

Ссылка на шаблон фреймворка для тех, кто не знает, о чем мы говорим: https://github.com/kstenerud/iOS-Universal-Framework

2 голосов
/ 19 июня 2011

Решение.

  1. Перейти Проект или Цель Настройки сборки .
  2. Найти Путь к общей папке заголовков . (определение имени = PUBLIC_HEADERS_FOLDER_PATH)
  3. Установите его как YourLibrary.framework/Headers. Я использовал ${PRODUCT_NAME}.framework/Headers для автоматической синхронизации с именем проекта.
  4. Перейти к Фазы сборки и найти Копировать заголовки шаг.
  5. Переместить все требуемые заголовки на панель Public .

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

Это трюк. Созданная структура каталогов не является реальной структурой. Потому что он не содержит двоичных файлов. Однако нам не нужен реальный каркас для архивации только этой функциональности. IDE работает с фреймворками без каких-либо двоичных файлов. И я не хочу взламывать IDE без документации о внутренней структуре.


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

  1. Для каждого проекта встроенной библиотеки SKIP_INSTALL = YES в настройках целевой сборки.
  2. Для проекта конечного продукта, FRAMEWORK_SEARCH_PATHS = "${OBJROOT}/UninstalledProducts". Позаботьтесь о том, чтобы этот параметр был установлен только для Release режима сборки.

Теперь все будет хорошо заархивировано.


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

Это ошибка Xcode. Отображение IDE зависит от SDKROOT из Project настройки сборки. Так что если вы установите SDKROOT по-другому на Target , это не сработает. Вы можете проверить, что продукт станет черным после изменения SDKROOT настройки Project . Подробности смотрите в этой записи в открытом радаре.

http://openradar.appspot.com/9636211

Если вы хотите исправить эту ошибку, сообщите об этом Радар Apple . Дублированные ошибки привлекут внимание Apple. Просто скопируйте и вставьте мой отчет:)

1 голос
/ 23 июня 2011

Я нашел это: http://db -in.com / blog / 2011/05 / creation-universal-framework-to-iphone-ios /

Кажется, работает.

...