Подтвердить что ты не робот

Как включить пакет в основной проект xcode 4.1

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

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


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

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

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

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

У кого-то есть решение? Я что-то пропустил?

спасибо

4b9b3361

Ответ 1

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

  • Включите пакет вручную из "copy resources- > other", я начал с этого, но каждый раз, когда вам нужно отбросить изменения и снова включить пакет,
  • Создайте script для запуска в фазе сборки, если все встроено в каталог ПРОДУКТОВ, вы можете легко найти этот комплект и автоматически скопировать его в app.bundle. Это не плохое решение. Если вы используете svn, script включен в проект, а пользователи бесплатно могут без дополнительной работы.
  • Как предложено технической поддержкой Apple, используйте ссылки на папки. Добавьте пакет B в папку и добавьте такую ​​папку в проект A, используя опцию "Создать папку для любых добавленных папок". Xcode 4 будет обновлять ваш пакет в этой папке каждый раз, когда вы его создадите. Добавленная папка будет казаться синей, как только включена в ваш проект A.

Это я лично использую script, потому что это решение не зависит от пути, если вы используете стандартную переменную xcode, такую ​​как BUILT_PRODUCTS_DIR и т.д., а оболочка script - это просто cp -r-f

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

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

Ответ 2

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

  • Перетащите B.bundle из Project B → Products → B.bundle в фазу сборки ресурсов копирования Bundle вашего приложения в Project A (при необходимости выберите опцию "Создать группы" ). Это добавит B.bundle в корень контура вашего проекта. Вы можете переместить его в каталог Frameworks рядом с Blib.a, если он вам больше подходит.

  • Выберите B.bundle и проверьте его местоположение на правой панели "Идентификация и тип" ( "Область служб" ). По умолчанию Xcode выбирает "Относительно проекта". Это неверно, вместо этого выберите "Относительно сборки".

  • Путь к 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; };
    
  • Сохраните файл project.pbxproj. Xcode автоматически перезагрузит ваш проект, и ваше приложение должно просто отлично работать.

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

  1. Переключить сборку на Generic iOS Device. Этот шаг необходим для создания ссылки не на симуляторе.
  2. Перетащите .bundle в другой проект Copy Bundle Resources.
  3. Выберите .bundle в Project navigator проекта другого проекта и измените его Location на Relative to Build Products