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.