Предупреждение XCode: «Несколько команд сборки для выходного файла»


494

Я получаю ошибку, как это:

[ПРЕДУПРЕЖДЕНИЕ] Предупреждение. Несколько команд сборки для выходного файла /Developer/B/Be/build/Release-iphonesimulator/BB.app/no.png

[WARN] Предупреждение: несколько команд сборки для выходного файла /Developer/B/Be/build/Release-iphonesimulator/BB.app/d.png

[ПРЕДУПРЕЖДЕНИЕ] Предупреждение: несколько команд сборки для выходного файла /Developer/B/Be/build/Release-iphonesimulator/BB.app/n.png

Но я проверил Xcode и вообще не вижу дубликатов таких файлов. Как говорится в этом сообщении в списках рассылки Apple, дубликатов нет.

Ответы:


809

В навигаторе проекта выберите файл проекта Xcode. Это покажет вам настройки проекта, а также цели в проекте. Посмотрите на фазу сборки «Копирование комплекта ресурсов». Вы должны найти оскорбительные файлы в этом списке дважды. Удалить дубликат ссылки.

XCode жалуется, что вы пытаетесь связать один и тот же файл с вашим приложением два раза.


1
Случается со мной, когда я удаляю некоторые ресурсы из папки сборки (используя Finder). Активы заменяются на обновленные с теми же именами и перетаскивают их в XCode с пометкой «добавить в цель». Кажется, что XCode не синхронизируется, дублируя эти записи в ресурсах Copy Bundle
brainondev

1
Я хотел добавить одну вещь к этому. Если у вас получится куча дубликатов ссылок (как я сделал), вы можете просто нажать «Проверить настройки», и он автоматически удалит дубликаты ссылок. Гораздо проще, чем искать их вручную
Джон Маттингли

1
У меня была похожая проблема. Этот ответ был самым близким. Файл <projName> .xcodeproj / project.pbxproj содержал повторяющиеся записи, хотя проект показывал файлы только один раз. Это была проблема слияния. редактирование с помощью vi сделало
свое дело

11
Стоит отметить, что если у вас есть большое количество дублированных файлов на этапе «Копировать комплекты ресурсов», вы можете нажать «Проверить настройки» в нижней части этой страницы, и XCode предложит вам дубликаты и удалит все из них, если вы нажмете « Выполнить изменения ». Черт возьми, намного быстрее, чем охотиться на них по отдельности.
Yeti42

1
У меня была похожая проблема с шаблонами SpriteBuilder, когда я снова добавил «Опубликовано-iOS» в проект. Оказывается, он хочет, чтобы это была «ссылка на папку», а не группа, и добавил всю эту папку в «Копирование комплекта ресурсов». Поэтому, даже если отдельный ресурс не отображается в этом списке, убедитесь, что он не добавляется из папки.
Самкасс

127

Это легко вызывается при добавлении подпроектов на основе git. XCode не достаточно умен, чтобы игнорировать подпапку .git, даже если вы не можете увидеть ее из Finder, поэтому он очень запутается, что существует несколько файлов с именами «master» или «exclude» (стандартные файлы git repo). С Xcode4, перейдите в проект (корень левого дерева), затем нажмите на цель вашего приложения и разверните «Копировать ресурсы комплекта», затем удалите все ссылки на .git, вам не нужно, чтобы они все равно запекались в вашем приложении.


43
Я возился на секунду, так что это может кому-то помочь: цель приложения -> фазы сборки -> скопировать ресурсы пакета
jaime

2
У меня было несколько файлов с одним и тем же именем (но в разных каталогах) в моем проекте XCode. Случайно у одного из них были оба в шаге Копировать комплект ресурсов, что привело к перезаписи одного из них в результирующем комплекте приложений. Просто удалите одну из них.
BastiBen

112

На самом деле, ответ на это довольно прост.

В вашем проекте XCode найдите файлы, которые вызывают предупреждение, и просто удалите один из них.

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

Теперь соберите проект снова. Предупреждение должно исчезнуть сейчас. (этот ответ для предыдущей версии xcode)


Но файлы больше не отображаются в панели групп и файлов XCode. Что за дело с этим?
Теджасви Йерукалапуди

1
Если у вас продолжаются проблемы с этим, просто удалите все файлы из Xcode (не удаляйте их на диске). Затем перетащите их обратно. Если после этого у вас все еще есть проблемы, у вас действительно есть ресурсы с одинаковым именем (возможно, в разных папках) - найдите и переименуйте / удалите. Вывод XCode идет в плоскую папку, поэтому структура каталогов игнорируется.
n13

52

Это не ошибка XCode, хотя предупреждающее сообщение недостаточно полезно для описания реальной причины.

Это сообщение об ошибке возникает, когда в вашем проекте несколько файлов с одинаковым именем. Вам просто нужно удалить или переименовать файлы с повторяющимися именами, и проблема решена.


1
Да, это правильный ответ. И ситуация может легко возникнуть, когда у вас есть файлы ресурсов, например, png с тем же именем, но в разных каталогах в вашей файловой системе - в процессе сборки все они копируются в 1 каталог, а именно в пакет приложения.
Бриньяр

@ Brynjar есть ли способ разрешить использование изображений с одинаковыми именами? или для предотвращения объединения изображений?
Энди

На самом деле я понял, что вы можете создавать ссылки на папки, чтобы избежать связывания.
Энди

Вот способ найти файлы с повторяющимся именем, независимо от каталога, find . | grep -v \.git | rev | cut -d/ -f1 | rev | sort | uniq -c | sortоднако это не решило мою проблему
Уильям Энтрикен

26

Это происходит, если у вас есть 2 файла с одинаковым именем в проекте. Несмотря на то, что файлы находятся в группах в XCode, когда проект компилируется, все файлы оказываются в одном каталоге. Другими словами, если у вас есть /group1/image.jpg и /group2/image.jpg, скомпилированный проект будет иметь только один из двух файлов image.jpg.


17

Как упоминалось ранее, эту проблему можно увидеть, если у вас есть несколько файлов с одинаковым именем, но в разных группах (желтые папки) в навигаторе проекта. В моем случае это было сделано намеренно, так как у меня было несколько подкаталогов, каждый с файлом «preview.jpg», который я хотел скопировать в пакет приложения:

групповые ссылки

В этой ситуации вам нужно убедиться, что XCode распознает ссылку на каталог (синий значок папки), а не только группы.

Удалите поврежденные файлы и выберите «Удалить ссылку» (чтобы мы не удаляли их полностью):

удалить групповые ссылки


Повторно добавьте их в проект, перетащив их обратно в навигатор проекта. В появившемся диалоговом окне выберите «Создать ссылки на папки для любых добавленных папок»:

добавить в папку ссылки


Обратите внимание, что файлы теперь имеют синий значок папки в навигаторе проекта:

ссылки на папки


Если вы сейчас загляните в раздел «Copy Bundle Resources» на этапах сборки цели, то заметите, что для всей папки существует одна запись, а не записи для каждого элемента, содержащегося в каталоге. Компилятор не будет жаловаться на множественные команды сборки для этих файлов.


15

Это не ошибка. Ассистенты XCode могут помочь вам. Выберите цель, слева в навигаторе проекта. Нажмите «Подтвердить настройки» в нижней части настроек. Xcode проверит настройки и удалит дубликаты, если это возможно.


14

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

чтобы исправить это …

  1. перейти к цели вашего проекта
  2. выбирать Build Phases
  3. выберите Headersэтап сборки
  4. введите имя, указанное в предупреждении
  5. обратите внимание на два (или более) предметов
  6. найдите +|-коробки в левом нижнем углу
  7. выберите один из пунктов и нажмите -кнопку

7

В моем случае проблема была вызвана тем же именем цели и папки внутри группы.

Просто переименуйте конфликтующий файл или папку, чтобы решить проблему.


6

Я нашел довольно простое решение для этого:

  1. Выберите файл, вызывающий проблему, из навигатора проекта
  2. Снимите флажок целевого членства с инспектора файлов
  3. Постройте проект
  4. Еще раз проверьте целевое членство для файла

Предупреждение ушло! Проверьте это изображение для справки.

введите описание изображения здесь


5

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

Это происходит, если вы одновременно добавляете в проект несколько файлов, зависящих от языка. Я выяснил это, просматривая различия в git. Я ничего не сделал в коммите, но добавил несколько новых локализованных файлов пера. Но, оглядываясь назад на разницу в файле project.pbxproj, он показал кучу новых дублирующих ссылок, добавленных для файлов, которые уже были в проекте ранее. Файлы, которые он делал, тоже казались мне случайными.

Я воспроизвел это же точное поведение несколько раз.

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

Xcode 4 просто огромное разочарование для меня.


Похоже, это исправлено в XCode 4.2. В более ранних версиях вы можете избежать этой ошибки, сначала поместив файл, для которого вы собираетесь добавить локализации, в свою собственную «Группу» (виртуальную папку в проекте). Как только вы закончите добавление локализаций, вы можете вернуть его туда, где он был, и удалить созданную вами временную группу.
Стив

Это не ошибка. Это связано с тем, что в вашем проекте более одного файла с одинаковым именем.
Тодд Хопкинсон

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

4

Это происходит потому, что ur "no.png", "d.png" и "n.png" дублируются в ресурсах. Просто посмотрите на удаление дублированных файлов и удалите.


3

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


2

Еще один вариант по этому вопросу. У меня было такое же сообщение, что ни одно из предложенных ранее решений не решило проблему (например, у меня была только одна копия файла-нарушителя).

Мое решение состояло в том, чтобы отредактировать файл project.pbxproj в текстовом редакторе (после выхода из XCode и, конечно, резервного копирования файла) и удалить все ссылки на поврежденный файл. Затем, после запуска XCode снова, я вручную добавил файл обратно в проект, и все было в порядке.

(Я подозреваю, что эта проблема возникла у меня из-за руководства, то есть: не XCode, слияние файла проекта.)


1

Откройте папку Frameworks в своем проекте и убедитесь, что внутри есть только фреймворки. Я добавил по ошибке всю папку разработчика!


1

У меня была такая же проблема несколько минут назад. Я упоминал, что изменение «цели развертывания» решило мою проблему.


1

Для меня Target> Build Settings> Packaging> Product Name было установлено то же самое, что и другое значение, указанное в файле .plist, который был настроен для моего приложения. В конечном итоге благодаря процессу сборки создаются дубликаты файлов.


1
Это была проблема для меня, спасибо!
Леон

0

Swift 3 : (но также и более старые версии) это происходит, когда у меня есть активы с дубликатами. Просто переименуйте файлы с этой проблемой, и все идет хорошо.

Это также может произойти, когда вы сделали Assets.xcassetsи переименовали дубликаты с новыми именами, так что со временем вы забыли и удалили его, чтобы добавить ссылки на папки, но этот возврат к проблеме дубликатов файлов.


0

Одним из простых способов является,

  • Перейти к цели приложения
  • Перейти к этапам сборки
  • Выходные файлы
  • Удалите путь из выходных файлов, затем соберите проект. Это будет успешно работать.

0

Ключ должен был сделать pod deintegrateи rm *.workspaceфайл! Что за трата времени !


0

React-Native пользователи. Перейти к файлу -> настройки рабочего пространства -> система сборки -> изменить его на устаревшую систему сборки. и он должен построить хорошо сейчас. React-Native пока не совместим с новой файловой системой.


0

Комментирование use_frameworks! у меня в PodFile работал.

#use_frameworks!

Примечание: сделал это на XCode 10.1, версия pod 1.8.4


-1

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

  1. Перетащите репо в корзину.
  2. повторно клонировать ваш репо.
  3. настройте репо с правильным удаленным отслеживанием. git remote add <url.git>, илиgit remote set-url <url.git>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.