Попередження Xcode: "Кілька команд побудови для вихідного файлу"


494

Я отримую таку помилку:

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

[ПОПЕРЕДЖЕННЯ] Попередження: Кілька команд збірки для вихідного файлу /Developer/B/Be/build/Release-iphonesimulator/BB.app/d.png

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

Але я перевірив Xcode і взагалі не бачу копій таких файлів. Як йдеться у цій публікації у списках розсилки Apple, дублікатів немає.

Відповіді:


809

У Навігаторі проектів виберіть файл Xcode Project. Це покаже вам параметри проекту, а також цілі в проекті. Подивіться фазу нарощування "Копіювання ресурсів". Ви повинні знайти файли, що порушують цей список, двічі. Видаліть дублікат посилання.

Xcode скаржиться, що ви намагаєтесь два рази поєднати один і той же файл зі своєю програмою.


1
Стається зі мною, коли я видалив деякі елементи з папки збірки (за допомогою Finder). Активи замінюються на ті, що оновлюються тими самими іменами та перетягують їх у параметри "додавання в ціль" для позначення XCode. Здається, XCode виходить із синхронного дублювання цих записів у ресурсах Copy Bundle Resources
brainondev

1
Я хотів до цього додати одне. Якщо ви отримаєте тонну дублікатів посилань якось (як я), ви можете просто натиснути «Валідація налаштувань», і воно автоматично видалить повторювані посилання. Набагато простіше, ніж шукати їх вручну
Джон Маттінглі

1
У мене було подібне питання. Ця відповідь була найближчою. Файл <projName> .xcodeproj / project.pbxproj мав повторювані записи, хоча проект показував файли лише один раз. Це було питання злиття. редагування з vi зробило трюк :) Дякую, що вказували мене в правильному напрямку :)
javatarz

11
Варто зазначити, що якщо у вас є велика кількість дублюваних файлів у фазі Copy Bundle Resources, ви можете натиснути "Validate Settings" внизу цієї сторінки, і XCode повідомить про дублікати та видалить їх усі, якщо натиснути " Внесіть зміни ". Пекло набагато швидше, ніж полювання на них окремо.
Yeti42

1
У мене була аналогічна проблема із шаблонами SpriteBuilder, коли я знову додав до програми "Опублікований iOS". Виявляється, він хоче, щоб це був "посилання на папки", а не група, і додав цю всю папку до "Копіювати ресурси ресурсу". Тож навіть якщо окремий ресурс не відображається у цьому списку, переконайтеся, що він не доданий із папки.
самкас

127

Це легко викликається, коли ви додаєте підпроекти на основі git. Xcode недостатньо розумний, щоб ігнорувати папку .git, навіть якщо ви не можете побачити її у пошуку, тому він дуже заплутається в тому, що є кілька файлів з назвою "master" або "виключити" (стандартні файли git repo). За допомогою Xcode4 перейдіть до проекту (корінь лівого дерева), потім натисніть ціль програми та розгорніть «Копіювати ресурси ресурсу», а потім видаліть усі посилання на .git, у будь-якому випадку вони вам не потрібні.


43
Я роздумував на секунду, тому це може допомогти комусь: ціль програми -> фази збірки -> копіювати ресурси пакету
Джайме

2
У моєму проекті Xcode було декілька файлів з однаковим іменем (але в різних каталогах). Несподівано один із моїх провів обох на кроці "Копіювати ресурси ресурсів", в результаті чого один із них буде перезаписаний у отриманому пакеті додатків. Просто видаліть одну з них.
BastiBen

112

Власне, відповідь на це досить проста.

У проекті Xcode знайдіть файли, які викликають попередження, та просто видаліть один із них.

Xcode покаже лише одну посилання на цей файл у результатах пошуку, але не зупиняйтесь на цьому, продовжуйте та видаляйте його. (краще зробити резервну копію файлу проекту перед тим, як видалити його)

Тепер будуйте проект заново. Попередження має зникнути зараз. (ця відповідь стосується попередньої версії xcode)


Але файли більше не з’являються в групах XCode і файли вже не є панелями. У чому справа з цим?
Tejaswi Yerukalapudi

1
Якщо у вас все ще виникають проблеми з цим, просто видаліть усі файли з Xcode (не видаляйте їх на диску). Потім перетягніть їх усі. Якщо у вас залишаються проблеми після цього, у вас фактично є ресурси з тим самим іменем (можливо, в різних папках) - знайдіть і перейменуйте / видаліть. Вихід Xcode переходить у плоску папку, тому структура каталогів ігнорується.
n13,

52

Це не помилка Xcode, хоча попередження не є достатньо корисним для опису справжньої причини.

Це повідомлення про помилку виникає, коли у вашому проекті є кілька файлів, які мають однакове ім’я. Вам просто потрібно видалити або перейменувати файли з повторюваними іменами, і проблема вирішена.


1
Так, це правильна відповідь. І ситуація може легко скластись, коли у вас є файли ресурсів, наприклад, png з тим самим іменем, але в окремих режимах у вашій файловій системі - під час процесу збирання всі вони копіюються в 1 dir, а саме в комплект програм.
Брінджар

@Brynjar чи є робота над тим, щоб дозволити зображення з тим самим ім'ям? або для запобігання збору зображень?
Енді

Насправді я зрозумів, що ви можете створити посилання на папки, щоб уникнути розшарування.
Енді

Ось спосіб знайти файли з повторюваним іменем, незалежно від каталогу, find . | grep -v \.git | rev | cut -d/ -f1 | rev | sort | uniq -c | sortале це не вирішило моєї проблеми
William Entriken

26

Це трапляється, якщо у проекті є два файли з тим самим іменем. Навіть незважаючи на те, що файли знаходяться в групах у XCode, коли компільований проект, усі файли потрапляють до одного каталогу. Іншими словами, якщо у вас є /group1/image.jpg та /group2/image.jpg, складений проект матиме лише один із двох файлів image.jpg.


17

Як уже згадувалося, цю проблему можна побачити, якщо у навігаторі проекту у вас є кілька файлів з одним іменем, але в різних групах (жовті папки). У моєму випадку це було навмисно, оскільки у мене було декілька підкаталогів, у кожному з яких було "preview.jpg", який я хотів скопіювати у додаток:

групові посилання

У цій ситуації вам потрібно переконатися, що Xcode розпізнає посилання на каталог (синій значок папки), а не лише групи.

Видаліть образливі файли та виберіть "Видалити довідку" (щоб ми не видаляли їх повністю):

видалити посилання на групи


Повторно додайте їх до проекту, перетягнувши їх назад у навігатор проектів. У діалоговому вікні, яке з'явиться, виберіть "Створити посилання на папки для будь-яких доданих папок":

додати як посилання на папки


Зауважте, що у файлах тепер синій значок папки в навігаторі проекту:

посилання на папки


Якщо ви зараз заглянете в розділ «Копіювати ресурси ресурсу» на етапах збирання цілі, ви помітите, що є одна запис для всієї папки, а не записи для кожного елемента, що міститься в каталозі. Компілятор не скаржиться на кілька команд збірки для цих файлів.


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

Це трапляється тому, що ур "no.png" "d.png" і "n.png" дублюються в ресурсах. Просто шукайте видалення дублюваних файлів та видалення.


3

Здається, помилка з'являється, коли у вас є більше посилань на один і той же файл. У мене було 2 однойменних файли, і я отримав цю помилку. Коли я видаляю одну з них, помилка зникає ..


2

Ще одна варіація щодо цього питання. У мене було те саме повідомлення, що жодне з запропонованих раніше рішень не вирішило цю проблему (у мене, безумовно, була лише одна копія файла, що порушує порушення).

Моє рішення полягало в тому, щоб відредагувати файл project.pbxproj у текстовому редакторі (після виходу з XCode та резервної копії файлу, звичайно) та видалення всіх посилань на файл, що порушує право. Потім, знову запустивши XCode, я вручну додав файл в проект і все було нормально.

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


1

Відкрийте папку Frameworks у вашому проекті та переконайтесь, що всередині є лише рамки. Я помилково додав всю папку розробника!


1

У мене була така ж проблема хвилини тому. Я вже згадував, що зміна "цілі розгортання" вирішила мою проблему.


1

Для мене ціль> Налаштування збірки> Упаковка> Ім'я продукту було встановлено так само, як і інше значення, на яке посилається файл .plist, який був призначений для мого додатка. Зрештою, завдяки нашому процесу збирання, це створює копії файлів.


1
Це було проблемою для мене, дякую!
Леон

0

Swift 3 : (але і старіші версії) це трапляється, коли у мене є активи з дублікатами. Просто перейменуйте файли з цим випуском і все пройде добре.

Це може статися і тоді, коли ви зробили Assets.xcassetsі ви перейменували дублікати з новими іменами, тож після того, як ви забули його та видалите, щоб додати посилання на папку, але ця повернеться до проблеми дублікатів файлів ..


0

Один з простих способів -

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

0

Ключовим було зробити pod deintegrateі rm *.workspaceподати! Яка трата часу!


0

Користувачі React-Native. goto-файл -> налаштування робочої області -> побудувати систему -> змінити його на застарілу систему збирання. і це має зараз добре будуватись. React-Native ще не сумісний з новою файловою системою.


0

Коментуючи use_frameworks! в PodFile працював на мене.

#use_frameworks!

Примітка: Це робилося на XCode 10.1, версія версії 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.