Архивирование проекта в XCode неправильно создает пакет из нескольких приложений - PullRequest
169 голосов
/ 05 марта 2011

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

"[имя проекта] не содержит приложения из одного пакета или содержит несколько продуктов. Выберите другой архив или настройте схему для созданияприложение из одного пакета. "

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

Кстати, я использую Xcode 4.0.

Ответы [ 5 ]

250 голосов
/ 05 марта 2011

ОК, отвечая на мой собственный вопрос. Оказывается, это проблема с зависимыми проектами в XCode 4. Если это произойдет с вами, пройдите настройки сборки для всех ваших зависимых проектов (например, статических библиотек) и убедитесь, что опция «Пропустить установку» в разделе «Развертывание» установлена ДА.

Подробнее здесь: http://flakasoft.com/developer-tips/xcode-4-bug-solution-for-archiving-build-with-static-library/

151 голосов
/ 16 марта 2011

Для решения этой проблемы в подпроекте (ах) необходимо исправить две вещи:

  1. Как обнаружил Джаред, в настройках сборки установите для параметра «Пропустить установку» значение «Да».
  2. В разделе «Этапы сборки» изучите раздел «Копировать заголовки».Если есть какие-либо заголовочные файлы, перечисленные как Личные или Публичные, перетащите их вниз в раздел «Проект».
10 голосов
/ 27 февраля 2013

Я сделал следующее, чтобы он работал для меня:

  1. для статической библиотеки three20, я использовал cocoapods , чтобы включить файлы в основной проект ... это простоИзбавившись от всех проблем, которые мне доставляла Three20 (а их много ..), кстати, я попытался заменить Three20 на Nimbus ... но в Nimbus не было некоторых функций, для которых мой проект использовал Three20.поэтому Nimbus не помог.
  2. установил для параметра skip install значение yes в настройках сборки для всех других подпроектов / статических библиотек и переключил заголовки копирования с открытого на проектный на этапах сборки
  3. самое главное: в под-библиотеках .. на этапах сборки я гарантировал, что копирование файлов место назначения было изменено с Absolute path на products directory.

и все!

подсказка: , чтобы получить представление о проблемных файлах, из-за которых ваш архив создает архивный файл, а не ipa:

  1. Выберите архиви нажмите кнопку Распространить.
  2. Выберите «Сохранить встроенные продукты».
  3. Нажмите Далее и Сохранить.
  4. Просмотр созданного каталога в Finder.
  5. Подкаталог 'библиотеки' будет определять библиотеки, для которых вам нужно установить для параметра Пропустить установку значение Да.
  6. в некоторых случаях usr/local/include идентифицирует файлы заголовков преступников, которые необходимо переместить из Public в Project, или файлы, которые вы должны изменить с абсолютного пути к каталогу продуктов.но этот каталог (т. е. usr / local / include) варьируется в зависимости от вашей структуры библиотечного каталога
1 голос
/ 22 февраля 2013

У меня была фаза сборки файлов копирования, о которой я забыл (скопировал некоторые шрифты в ~ / Library / Fonts). После удаления этого этапа сборки он работал нормально.

Если ни один из приведенных выше ответов не устранил проблему, я рекомендую экспортировать архив в Finder и посмотреть, что находится за пределами пакета .app.

Редактировать: см. https://github.com/RestKit/RestKit/wiki/Xcode-4-Archiving-Issue:--'Does-not-contain-a-single-bundle'

0 голосов
/ 08 января 2014

У меня также была такая же проблема: «[имя проекта] не содержит приложения из одного пакета или содержит несколько продуктов. Выберите другой архив или настройте схему для создания приложения из одного пакета».после обновления до xcode5.

проблема заключалась в том, что куча полей в моих настройках сборки для 'release' были пустыми.Я предполагаю, что xcode4 автоматически переключился на настройку отладки.

anwyays - мое исправление состояло в том, чтобы найти все те настройки 'release', которые были пустыми, и установить их в настройку отладки.В частности, это была настройка файла Info.plist.

...