Ostrzeżenie Xcode: „Wiele poleceń kompilacji dla pliku wyjściowego”


494

Otrzymuję taki błąd:

[WARN] Ostrzeżenie: wiele poleceń kompilacji dla pliku wyjściowego /Developer/B/Be/build/Release-iphonesimulator/BB.app/no.png

[WARN] Ostrzeżenie: wiele poleceń kompilacji dla pliku wyjściowego /Developer/B/Be/build/Release-iphonesimulator/BB.app/d.png

[WARN] Ostrzeżenie: wiele poleceń kompilacji dla pliku wyjściowego /Developer/B/Be/build/Release-iphonesimulator/BB.app/n.png

Ale sprawdziłem Xcode i nie widzę żadnych duplikatów takich plików. Jak mówi ten post na listach mailingowych Apple, nie ma duplikatów.

Odpowiedzi:


809

W Nawigatorze projektów wybierz plik projektu Xcode. Spowoduje to wyświetlenie ustawień projektu oraz celów w projekcie. Przejrzyj fazę kompilacji „Kopiuj zasoby pakietu”. Powinieneś znaleźć dwukrotnie obrażające pliki na tej liście. Usuń zduplikowane odwołanie.

Xcode narzeka, że ​​próbujesz dwa razy spakować ten sam plik ze swoją aplikacją.


1
Zdarza mi się, gdy usuwam niektóre zasoby z folderu kompilacji (za pomocą Findera). Zasoby zastąpiono tymi zaktualizowanymi o tych samych nazwach i przeciągając je w XCode oznaczając opcje „dodaj do celu”. Wygląda na to, że XCode nie synchronizuje powielania tych wpisów w zasobach pakietu kopii
brainondev,

1
Chciałem dodać do tego jedną rzecz. Jeśli jakoś skończy się z mnóstwem zduplikowanych referencji (tak jak ja), możesz po prostu kliknąć „Sprawdź ustawienia”, a to automatycznie usunie duplikaty referencji. Znacznie łatwiej niż ręczne wyszukiwanie
Jon Mattingly,

1
Miałem podobny problem. Ta odpowiedź była najbliższa. Plik <projName> .xcodeproj / project.pbxproj zawierał zduplikowane wpisy, mimo że projekt pokazał pliki tylko raz. To był problem łączący się. edytowanie za pomocą vi zrobiło lewę :) Dzięki za wskazanie mi właściwego kierunku :)
javatarz

11
Warto zauważyć, że jeśli masz dużą liczbę zduplikowanych plików w fazie kopiowania zasobów pakietu, możesz kliknąć „Sprawdź ustawienia” na dole tej strony, a XCode wyświetli monit o duplikaty i usunie je wszystkie, jeśli klikniesz „ Wprowadź zmiany ”. Piekło o wiele szybsze niż polowanie na nich indywidualnie.
Yeti42,

1
Miałem podobny problem z szablonami SpriteBuilder, kiedy ponownie dodałem do projektu „Opublikowany system iOS”. Okazuje się, że chce, aby było to „odwołanie do folderu”, a nie grupa, i dodał ten cały folder do „Kopiuj zasoby pakietu”. Więc nawet jeśli pojedynczy zasób nie pojawia się na tej liście, sprawdź, czy nie jest dodawany z folderu.
samkass

127

Jest to łatwo spowodowane po dodaniu podprojektów opartych na git. Xcode nie jest wystarczająco inteligentny, aby zignorować podfolder .git, nawet jeśli nie widzisz go z wyszukiwarki, więc bardzo się pomyli, że istnieje wiele plików o nazwie „master” lub „exclude” (standardowe pliki git repo). Z Xcode4 przejdź do projektu (root lewego drzewa), następnie kliknij cel aplikacji i rozwiń „Kopiuj zasoby pakietu”, a następnie usuń wszystkie odniesienia do .git, nie powinieneś ich upieczone w aplikacji.


43
Szperałem przez chwilę, więc może to komuś pomóc: cel aplikacji -> fazy budowania -> kopiowanie zasobów pakietu
jaime

2
Miałem wiele plików o tej samej nazwie (ale w różnych katalogach) w moim projekcie Xcode. Przez przypadek jedno z moich miało oba w kroku Kopiowanie zasobów pakietu, co spowodowałoby zastąpienie jednego z nich w wynikowym pakiecie aplikacji. Wystarczy usunąć jeden z nich.
BastiBen

112

W rzeczywistości odpowiedź na to pytanie jest dość prosta.

W projekcie Xcode wyszukaj pliki, które powodują ostrzeżenie, i po prostu usuń jeden z nich.

Xcode wyświetli tylko jedno odniesienie do tego pliku w wynikach wyszukiwania, ale nie przestawaj, kontynuuj i usuń go. (lepiej jest wykonać kopię zapasową pliku projektu przed usunięciem)

Teraz zbuduj projekt ponownie. Ostrzeżenie powinno teraz zniknąć. (ta odpowiedź dotyczy poprzedniej wersji xcode)


Ale pliki nie pojawiają się w grupach i okienku plików XCode. O co ci chodzi?
Tejaswi Yerukalapudi

1
Jeśli nadal masz z tym problem, po prostu usuń wszystkie pliki z Xcode (nie usuwaj ich z dysku). Następnie przeciągnij je wszystkie z powrotem. Jeśli nadal występują problemy po tym czasie, faktycznie masz zasoby o tej samej nazwie (być może w różnych folderach) - znajdź i zmień nazwę / usuń. Dane wyjściowe Xcode trafiają do płaskiego folderu, więc struktura katalogów jest ignorowana.
n13

52

To nie jest błąd Xcode, chociaż komunikat ostrzegawczy nie jest wystarczająco pomocny, aby opisać prawdziwą przyczynę.

Ten komunikat o błędzie pojawia się, gdy w projekcie jest kilka plików o tej samej nazwie. Wystarczy usunąć lub zmienić nazwy plików ze zduplikowanymi nazwami, a problem zostanie rozwiązany.


1
Tak, to poprawna odpowiedź. Sytuacja może łatwo nadejść, gdy masz pliki zasobów, np. Pliki PNG o tej samej nazwie, ale w osobnych katalogach w systemie plików - podczas procesu kompilacji wszystkie są kopiowane do 1 katalogu, a mianowicie pakietu aplikacji.
Brynjar,

@Brynjar jest jakieś rozwiązanie pozwalające na tworzenie obrazów o tej samej nazwie? lub aby zapobiec łączeniu obrazów?
Andy

Właściwie doszedłem do wniosku, że można utworzyć odwołania do folderów, aby uniknąć łączenia.
Andy,

Oto sposób na znalezienie plików o zduplikowanej nazwie, niezależnie od katalogu, find . | grep -v \.git | rev | cut -d/ -f1 | rev | sort | uniq -c | sortjednak to nie rozwiązało mojego problemu
William Entriken

26

Dzieje się tak, jeśli masz 2 pliki o tej samej nazwie w projekcie. Mimo że pliki są w grupach w XCode podczas kompilacji projektu, wszystkie pliki trafiają do tego samego katalogu. Innymi słowy, jeśli masz /group1/image.jpg i /group2/image.jpg, skompilowany projekt będzie miał tylko jeden z dwóch plików image.jpg.


17

Jak wspomniano wcześniej, ten problem można zobaczyć, jeśli masz wiele plików o tej samej nazwie, ale w różnych grupach (żółte foldery) w nawigatorze projektu. W moim przypadku było to celowe, ponieważ miałem wiele podkatalogów z „Preview.jpg”, które chciałem skopiować do pakietu aplikacji:

odniesienia do grupy

W tej sytuacji musisz upewnić się, że Xcode rozpoznaje odniesienie do katalogu (niebieska ikona folderu), a nie tylko grupy.

Usuń niepoprawne pliki i wybierz „Usuń odniesienie” (więc nie usuwamy ich całkowicie):

usuń odniesienia do grupy


Ponownie dodaj je do projektu, przeciągając je z powrotem do nawigatora projektu. W wyświetlonym oknie dialogowym wybierz „Utwórz odwołania do folderów dla dowolnych dodanych folderów”:

dodaj jako odwołania do folderów


Zauważ, że pliki mają teraz niebieską ikonę folderu w nawigatorze projektu:

odniesienia do folderów


Jeśli spojrzysz teraz na sekcję „Kopiuj zasoby pakietu” faz kompilacji celu, zauważysz, że istnieje jeden wpis dla całego folderu, a nie wpisy dla każdego elementu zawartego w katalogu. Kompilator nie będzie narzekał na wiele poleceń kompilacji dla tych plików.


15

To nie jest błąd. Xcode Assist może Ci pomóc. Wybierz cel po lewej stronie w Nawigatorze projektu. Kliknij „Zatwierdź ustawienia” na dole ustawień. Xcode sprawdzi ustawienia i usunie duplikaty, jeśli to możliwe.


14

inna wersja tej sytuacji może wystąpić, gdy w fazie kompilacji nagłówków występują duplikaty .

naprawić to…

  1. przejdź do celu projektu
  2. wybierać Build Phases
  3. wybierz Headersfazę kompilacji
  4. wprowadź nazwę pokazaną w ostrzeżeniu
  5. zwróć uwagę na dwa (lub więcej) elementy
  6. znajdź +|-pola w lewym dolnym rogu
  7. wybierz jeden z elementów i kliknij -przycisk

7

W moim przypadku przyczyną problemu była ta sama nazwa celu i folderu w grupie.

Po prostu zmień nazwę konfliktu pliku lub folderu, aby rozwiązać problem.


6

Znalazłem całkiem proste rozwiązanie tego:

  1. Wybierz plik powodujący problem z nawigatora projektu
  2. Odznacz docelowe członkostwo w inspektorze plików
  3. Zbuduj projekt
  4. Ponownie sprawdź docelowe członkostwo w pliku

Ostrzeżenie zniknęło! Sprawdź to zdjęcie w celach informacyjnych.

wprowadź opis zdjęcia tutaj


5

Jestem prawie pewien, że może to być spowodowane błędem XCode 4, przynajmniej w przypadkach, w których go spotkałem.

Dzieje się tak, jeśli do projektu dodaje się jednocześnie wiele plików zależnych od języka. Dowiedziałem się tego, przeglądając różnice git. Nic nie zrobiłem w zatwierdzeniu, ale dodałem kilka nowych zlokalizowanych plików stalówki. Ale patrząc wstecz na różnicę pliku project.pbxproj, pokazał on kilka nowych zduplikowanych odniesień dodanych do plików, które były już wcześniej w projekcie. Pliki, które to zrobiła, również wydawały mi się przypadkowe.

Wielokrotnie odtworzyłem to samo dokładne zachowanie.

Usunięcie tych plików z projektu nie rozwiązuje problemu, ponieważ usuwa tylko oryginalne odniesienie i pozostawia duplikaty. Jedynym sposobem, aby to naprawić, jest cofnięcie zatwierdzenia i rozpoczęcie od nowa lub ręczna edycja pliku projektu, co jest naprawdę dobrym sposobem, aby go jeszcze bardziej zepsuć, ponieważ trudno jest powiedzieć, które duplikaty usunąć i musisz to zrobić w tonach różnych miejsc.

Xcode 4 to dla mnie ogromne rozczarowanie.


Wygląda na to, że zostało to naprawione w XCode 4.2. We wcześniejszych wersjach można uniknąć tego błędu, umieszczając najpierw plik, dla którego chcesz dodać lokalizacje, do jego własnej „grupy” (folder wirtualny w projekcie). Po zakończeniu dodawania lokalizacji możesz umieścić go z powrotem na swoim miejscu i usunąć utworzoną grupę tymczasową.
Steve,

To nie jest błąd. Wynika to z posiadania w projekcie więcej niż jednego pliku o tej samej nazwie.
Todd Hopkinson,

1
Kiedy lokalizujesz plik, powinieneś mieć taką samą nazwę pliku dla każdej lokalizacji, z wyjątkiem różnych katalogów. To był rzeczywiście błąd.
Steve,

4

Dzieje się tak, ponieważ twoje „no.png” „d.png” i „n.png” są zduplikowane w zasobach. Po prostu usuń zdublowane pliki i usuń.


3

Błąd pojawia się, gdy masz więcej niż jedno odwołanie do tego samego pliku. Miałem 2 pliki o tej samej nazwie i otrzymałem ten błąd. Po usunięciu jednego z nich błąd zniknie.


2

Kolejna odmiana w tej kwestii. Pojawił się ten sam komunikat, żadne z wcześniej sugerowanych rozwiązań nie rozwiązało problemu (zdecydowanie miałem na przykład tylko jedną kopię szkodliwego pliku).

Moje rozwiązanie polegało na edycji pliku project.pbxproj w edytorze tekstów (po zamknięciu XCode i oczywiście utworzeniu kopii zapasowej pliku) i usunięciu wszystkich odniesień do szkodliwego pliku. Następnie, po ponownym uruchomieniu XCode, ręcznie dodałem plik z powrotem do projektu i wszystko było w porządku.

(Podejrzewam, że ten problem przytrafił mi się z powodu instrukcji, tj .: non-XCode, scalenie pliku projektu.)


1

Otwórz folder Frameworks w swoim projekcie i upewnij się, że wewnątrz są tylko frameworki. Przez pomyłkę dodałem cały folder programisty!


1

Miałem ten sam problem kilka minut temu. Wspomniałem, że zmiana „celu wdrożenia” rozwiązała mój problem.


1

Dla mnie Cel> Ustawienia kompilacji> Opakowanie> Nazwa produktu został ustawiony na to samo, co inna wartość wymieniona w pliku .plist, który był niestandardowy dla mojej aplikacji. Ostatecznie z powodu naszego procesu kompilacji tworzy to zduplikowane pliki.


1
To był dla mnie problem, dzięki!
Leon

0

Swift 3 : (ale także starsze wersje) dzieje się tak, gdy mam zasoby z duplikatami. Po prostu zmień nazwę plików z tym problemem i wszystko idzie dobrze.

Może się to zdarzyć również po utworzeniu Assets.xcassetsi zmianie nazwy duplikatów na nowe nazwy, więc po pewnym czasie zapomniałeś go i usunąłeś, aby dodać odniesienia do folderów, ale ten powraca do problemu duplikatów plików.


0

Jednym z prostych sposobów jest

  • Przejdź do celu aplikacji
  • Przejdź do Fazy kompilacji
  • Pliki wyjściowe
  • Usuń ścieżkę plików wyjściowych, a następnie skompiluj projekt. Będzie działać poprawnie.

0

Kluczem było zrobić pod deintegratei rm *.workspacezłożyć! Co za strata czasu !


0

Użytkownicy React-Native. plik goto -> ustawienia obszaru roboczego -> system budowania -> zmień go na starszy system budowania. i powinno się teraz dobrze budować. React-Native nie jest jeszcze kompatybilny z nowym systemem plików.


0

Komentowanie use_frameworks! w PodFile pracował dla mnie.

#use_frameworks!

Uwaga: Czy to zrobiono na XCode 10.1, wersja pod 1.8.4


-1

Chociaż jestem pewien, że jest lepszy sposób, nukowanie zajęło mi mniej niż 60 sekund i było to jedyne, co mogłem znaleźć, które zadziałało.

  1. Przeciągnij repozytorium do kosza.
  2. ponownie sklonuj swoje repozytorium.
  3. skonfiguruj swoje repozytorium z prawidłowym zdalnym śledzeniem. git remote add <url.git>lubgit remote set-url <url.git>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.