Как включить комплект в основной проект xcode 4.1 - PullRequest
31 голосов
/ 14 июля 2011

[ОБНОВЛЕНИЕ 03/04/2015]

Вопросу уже 4 года, и он относится к конкретной версии XCode, которую я сейчас указал в теме.


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

У меня есть рабочее пространство с двумя разными проектами A и B.

B имеет две цели: одну, которая создает статическую библиотеку Blib.a, и другую, которая создает пакет B.bundle. Все они встроены в производный каталог.

В проекте A я могу легко добавить статическую библиотеку на этапах сборки. Однако я не могу найти способ включить комплект. B.bundle не отображается на вкладке «Копировать ресурс» в A. Поэтому мне нужно добавить вручную, со всеми вытекающими последствиями. Я также подумал об использовании скрипта, но я хотел бы использовать это как самый последний вариант.

Есть ли у кого-нибудь решение для этого? Я что-то пропустил?

спасибо

Ответы [ 6 ]

19 голосов
/ 19 августа 2011

После долгого расследования выяснилось, что сделать это нелегко.B.bundle никогда не виден проекту A, и в рабочей области нет настроек для его изменения.На данный момент есть три решения:

  • Включить пакет вручную из «Копировать ресурсы-> Прочее», я начал с этого, но каждый раз, когда есть изменение, вы должны отбросить и включить пакет снова
  • Создайте сценарий для запуска на этапе сборки, если все встроено в каталог PRODUCTS, вы можете легко найти пакет и автоматически скопировать его в app.bundle.Это не плохое решение.Если вы используете svn, скрипт был включен в проект, и пользователи имеют его бесплатно без дополнительной работы.
  • В соответствии с рекомендациями службы технической поддержки Apple, используйте ссылки на папки. Создайте пакет B в папку и добавьте такую ​​папку впроект A, используя опцию «Создать ссылки на папки для любых добавленных папок».Xcode 4 будет обновлять ваш пакет в эту папку каждый раз, когда вы его создали.Добавленная папка будет выделена синим цветом, как только она будет включена в ваш проект A.

Вот и все, я лично использую сценарий, потому что это решение не зависит от пути, если вы используете стандартную ссылочную переменную xcode, такую ​​как BUILT_PRODUCTS_DIR и т. Д.и сценарий оболочки просто cp -rf

[ОБНОВЛЕНИЕ 03/04/2015]

Я хотел бы отметить, что вопрос сейчас 4лет.В то время не было много «официальных» вариантов.Я даже говорил с Apple Tech Support, которая предложила решение 3 в качестве единственного доступного решения.Конечно, очень вероятно, что сейчас все изменилось, и есть гораздо лучшее решение.Если говорить просто, я также хотел бы добавить, что три вышеперечисленных являются не «взломами», а «решениями», возможно, технически устаревшими, но они все еще могут использоваться в наши дни.Я имею в виду "взломать" как ... "взломать", что означает, что он, вероятно, не будет работать в будущем выпуске программного обеспечения.

8 голосов
/ 20 марта 2015

Вот как я это сделал.

  1. Перетащите B.bundle из Проекта B → Продукты → B.bundle в Copy Bundle Resources фаза сборкивашего приложения в проекте A (при запросе выберите Создать группы ).Это добавит B.bundle в корень вашего проекта А.При желании вы можете переместить его в каталог Frameworks рядом с Blib.a.

  2. Выберите B.bundle и проверьте его Местоположение вправая панель Identity and Type ( Область утилит ).По умолчанию XCode выбирает Относительно Проекта .Это неправильно, выберите Относительно продуктов сборки .

  3. Путь к B.bundle теперь будет выглядеть примерно как ../../../../../../../../Projects/MyApp/B.bundle.Это не то, что вы хотите, но вы можете легко это исправить.Откройте ProjectA.xcodeproj/project.pbxproj в текстовом редакторе, найдите этот путь и удалите в нем все, кроме B.bundle.Ваш project.pbxproj должен выглядеть следующим образом:

    explicitFileType = wrapper.cfbundle; name = B.bundle; path = "B.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
    
  4. Сохраните файл project.pbxproj.Xcode автоматически перезагрузит ваш проект, и ваше приложение должно нормально работать.

4 голосов
/ 19 марта 2013

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

Абсолютно рекомендуется:

https://github.com/jverkoey/iOS-Framework

1 голос
/ 11 июня 2014

Начиная с Xcode 5.1.1 мне удалось перетащить B.bundle из Навигатора проекта в список ресурсов «Копировать комплекты» проекта «Фазы сборки». Я предполагаю, что создание цели B.bundle не является проблемой.

1 голос
/ 03 августа 2011

В проекте A является ли продукт проекта B зависимостью в действии Build вашей схемы? Я думаю, что вам, возможно, придется настроить эту зависимость (иногда лучше отключить опцию автоматического обнаружения зависимостей), чтобы она отображалась и была доступна для копирования в другую цель. Я полагаю, что это потому, что он на самом деле не существует (как файл ресурса изображения), пока он не собран, и Xcode должен убедиться, что он собран, прежде чем работать с ним из другой цели.

0 голосов
/ 30 апреля 2019
  1. Переключить сборку на Generic iOS Device.Этот шаг необходим для создания ссылки без симулятора.
  2. Перетащите .bundle на Copy Bundle Resources.

Убедитесь, что ваш .bundle добавлен в Target Dependencies вашей статической библиотеки

...