Архивирование проекта в XCode неправильно создает пакет из нескольких приложений

170

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

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

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

Я использую Xcode 4.0, кстати.

Джаред Фридман
источник

Ответы:

251

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

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

Джаред Фридман
источник
1
Вы, сэр, мой герой! Я не нашел бы это легко: P
Андрей Натоли
6
Изменил это на "ДА" ... все еще терпит неудачу. :(
Джо д'Андреа
8
Для параметра «Пропустить установку» должно быть установлено значение «Да» только для статической библиотеки, но не для вашего проекта или цели. Этот пост в блоге, посвященный раздаче ad hoc, в равной степени относится к сборкам в магазине приложений и содержит раздел, посвященный пропущенной
jj0b
8
Некоторые библиотеки (например, CorePlot) требуют, чтобы вы также изменили раздел Copy Headers на этапе сборки. Поэтому убедитесь, что вы смотрите на ответ Райана тоже.
Тим Сваст
2
Я также должен переместить все файлы заголовков (из статической библиотеки) в целевой «Этапы сборки», в «Копировать заголовки» я переместил их из «Public» в «Project».
Хлунг
151

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

  1. Как Джаред обнаружил, в настройках сборки установите «Пропустить установку» на «Да»
  2. Под этапами сборки, изучите раздел Копировать заголовки. Если есть какие-либо заголовочные файлы, перечисленные как Личные или Публичные, перетащите их вниз в раздел «Проект».
Райан Гримм
источник
7
Я действительно люблю тебя, чувак! : D
arielcamus
5
Я исправил все настройки «Пропустить установку», но мне не хватало раздела «Заголовок копии», спасибо!
Томас Эйнваллер
2
Я использую Three20. В этом проекте заголовочные файлы перечислены как Личные или Публичные, но если я переместу их в раздел проекта, он не скомпилируется. Любое предложение?
Бризайт
19
Прекратите использовать Three20, даже если вы справитесь с этой проблемой XCode. Я полностью серьезен!
Адам Эбербах
2
Если у вас есть многочисленные библиотечные проекты, как у нас, и вам трудно понять, для какой из библиотек для Skip Install установлено значение No или какие заголовочные файлы вызывают проблему, попробуйте следующее: Выберите архив и нажмите кнопку Distribute. Выберите «Сохранить встроенные продукты». Нажмите Далее и Сохранить. Просмотрите созданный каталог в Finder. Подкаталог 'библиотеки' будет определять библиотеки, которые вам нужны, чтобы установить для Пропуск установки значение Да. Usr / local / include идентифицирует заголовочные файлы преступника, которые вам нужно переместить из Public в Project.
Сунил Говда
10

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

  1. для статической библиотеки three20 я использовал cocoapods, чтобы включить файлы в основной проект ... она просто избавилась от всех проблем, которые доставляла мне три20 (и их много ..), кстати, я попытался заменить три20 на 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) варьируется в зависимости от вашей структуры библиотечного каталога
abbood
источник
Я бы дал вам 10 звезд, количество решений, которые я прочитал, пока не нашел тот, который помог. Я просто щелкнул файлы, найденные на шаге 6, и отметил их в целевой области членства от общего доступа к проекту, ничего не нужно.
Cristi Băluță
Рад, что смог помочь! причина, по которой я это написал, была в том, что б / у прошел то, что ты сделал ... я прочитал примерно 20 ответов, прежде чем начал понимать, что происходит .. :)
abbood
Может кто-нибудь объяснить, пожалуйста, шаг 6? Я не понимаю, что означает «usr / local / include будет определять файлы заголовков виновника» и где / как я должен проверять эти файлы
Андрей Ф
@ CristiBăluță Как именно вы нашли файлы и где в настройках / меню? У меня та же проблема с XCode 11.2.1, и у меня нет большого опыта работы с xcode. Спасибо.
Андрей Ф
Я обнаружил, что / usr / local / include - это папка внутри архива (вместе с папкой библиотек), но в моем универсальном архиве их нет
Андрей Ф
1

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

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

Изменить: см. Https://github.com/RestKit/RestKit/wiki/Xcode-4-Archiving-Issue:--'Does-not-contain-a-single-bundle '

Auco
источник
0

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

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

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

roocell
источник