Jedź w środku; budowa może dawać niewiarygodne wyniki: Xcode 10 Error


80

Próbuję przejść do nowego systemu kompilacji podczas kompilacji z Xcode 10. Jednak powoduje to następujący błąd:

Cycle details:
→ Target 'project' : LinkStoryboards

Target 'project' has compile command with input '/Users/project/Commons/Components/ScreenshotSharing/ViewController/AppShare.storyboard'

Target 'project' : ValidateEmbeddedBinary /Users/project/Xcode/DerivedData/project-hgqvaddkhmzxfkaycbicisabeakv/Build/Products/Debug-iphoneos/project.app/PlugIns/stickers.appex

Target 'project' has process command with input '/Users/project/Resources/Info.plist'

Target 'project' has compile command with input '/Users/project/Commons/Components/ScreenshotSharing/ViewController/AppShare.storyboard'

Dodano zrzut ekranu

Nawet po usunięciu pliku powodującego problem otrzymuję to samo dla innego xib / storyboardu. Jak mogę rozwiązać ten błąd bez powrotu do starszego systemu kompilacji?


Miałem podobny błąd i naprawiłem go, usuwając „dane pochodne” i czyszcząc projekt. To zadziałało dla mnie jak urok!
Jayprakash Dubey

Odpowiedzi:


62

Dla każdego, kto ma problem z systemem kompilacji Xcode 10, wykonaj następujące kroki, aby go naprawić:

  1. W Xcode przejdź do Plik-> Ustawienia projektu / obszaru roboczego.
  2. Zmień system kompilacji na system Legacy Build.

To rozwiąże problem z kompilacją z nowym Xcode.

Jeśli chcesz pracować z nowym systemem kompilacji, możesz znaleźć pomoc dotyczącą rozwiązywania problemów na tej stronie pomocy Apple Xcode .


50
Cały problem polega na przejściu do najnowszego systemu kompilacji.
Sahil Kapoor

4
Następnie powinieneś wspomnieć, że w pytaniu nie chcesz rozwiązania ze zmianą systemu kompilacji. Wspomniałem również, że jeśli chcesz pracować z nowym systemem kompilacji, możesz postępować zgodnie z instrukcjami podanymi w centrum wsparcia Xcode. Podaj również ważny powód, kiedy głosujesz przeciw. Dzięki! @SahilKapoor
Akshay Sunderwani

1
Dziękuję miły nieznajomy. Moim jedynym zainteresowaniem jest ponowne uruchomienie mojej kompilacji, aby dotrzymać terminu, więc Twoja odpowiedź jest dokładnie tym, czego potrzebowałem.
Dan Loughney

6
To nie jest właściwe rozwiązanie problemu. Nie należy zmieniać systemu kompilacji na Legacy z powodu czegoś tak prostego.
Varun Goyal

38

Miałem ten problem z Cocoapods. Rozwiązaniem było wyczyszczenie folderu kompilacji, ponowne zainstalowanie wszystkich podów, a następnie ponowne skompilowanie aplikacji. W ten sposób problem rozwiązał się sam.


2
To zadziałało również dla mnie. Zrobiłem czystą i instalację pod.
Cloud9999Strife

W moim przypadku właśnie wykonałem instalację pod, więc musiałem tylko wyczyścić folder kompilacji. Ten błąd pojawił się dopiero po tym, jak zezwoliłem Xcode na aktualizację ustawień kompilacji.
Stonetip

miał problem z Alamofire.
Wykonałem ``

25

Rozwiązałem problem, przenosząc fazę tworzenia „Kopiuj zasoby paczki” przed wszystkimi fazami tworzenia „Kopiuj pliki” i „Połącz plik binarny z bibliotekami”


+1, ale użyłem niewielkiej zmiany. Nie musiałem niczego przesuwać przed "Link Binary with Libraries", czego bym nie zrobił, ponieważ nowy domyślny projekt w Xcode nie jest taki. Właśnie przeniosłem „Kopiuj zasoby pakietu” przed „Kopiuj narzędzia pomocnicze” (które kopiuje niektóre narzędzia wiersza poleceń i aplikację pomocniczą do zawartości / pomocników produktu aplikacji macOS). Ale skoro kolejność tych dwóch powinna mieć jakiekolwiek znaczenie - to tylko kopiowanie plików - nie ma to sensu. Więc zgłosiłem błąd: 42927301. Moje zmodyfikowane rozwiązanie: Zamień różne fazy tworzenia kopii XXX, aż
zadziała

2
To samo dotyczy mnie, przeniosłem zasoby kopii paczek powyżej fazy kopiowania plików i gotowe, teraz działa. Oszukam twój błąd @JerryKrinock
Peter N Lewis

Dla mnie problem był związany z zależnościami Embed Frameworks, więc przeniosłem Embed Framework powyżej Copy Bundle Resources i pomogło.
Elena

19

Nowy system kompilacji Xcode 10 wykrywa cykle zależności w kompilacji i zapewnia diagnostykę, która pomaga w ich rozwiązywaniu. Naprawienie tych cykli zależności poprawia niezawodność kompilacji, dzięki czemu prawidłowe produkty są wytwarzane konsekwentnie (cykle są możliwą przyczyną konieczności usunięcia danych pochodnych). Poprawia również przyrostowe czasy kompilacji, ponieważ cykle w kompilacji powodują, że coś na wykresie kompilacji jest zawsze nieaktualne dla każdej kompilacji, co powoduje, że ponowne tworzenie kompilacji działa niepotrzebnie za każdym razem, gdy budujesz.

W Pomocy Xcode znajduje się dokumentacja dotycząca rozwiązywania niektórych typowych typów cykli zależności: https://help.apple.com/xcode/mac/current/#/dev621201fb0

To powiedziawszy, ta diagnostyka cyklu wygląda trochę dziwnie. Wygląda na to, że udało Ci się go rozwiązać, zmieniając fazy kompilacji, ale nie sądzę, aby diagnostyka naprawdę wyjaśniła problem. Jeśli nie masz nic przeciwko, raport o błędzie dotyczący ulepszenia tej diagnostyki dla tego konkretnego przypadku byłby bardzo mile widziany. Możesz go złożyć na https://bugreport.apple.com . Podaj wszystkie szczegóły dotyczące projektu, które Twoim zdaniem mogą być istotne; przykładowy projekt, który odtwarza problem, jest idealny, ale jeśli nie możesz tego załączyć, diagnostyka i pewne wyobrażenie o strukturze projektu są nadal pomocne.


18

Miałem ten problem z Cocoapods i znalazłem tymczasowe obejście:

  1. Zainstaluj najnowszą wersję cocoapods (1.5.3): sudo gem update cocoapods
  2. Usuń otrzymane dane: rm -rf ~/Library/Developer/Xcode/DerivedData/*
  3. pod install

Źródło tutaj i jestem na Xcode 10 beta 4.

EDYCJA : teraz w Xcode 10.0 i nadal aktualne.


przydarzyło mi się to ponownie w zeszłym tygodniu na Xcode 10.1 (10B61) i nadal działało. Upewnij się, że wykonałeś Clean Build Folder(i zamknięcie Xcode również może pomóc) przed wykonaniem kroków 2.i 3..
gabuchan

Działał jak urok!
flagman

16

Miałem podobny problem z mieszaną interakcją między Swift, Objective-C i CoreData : w moim projekcie (napisanym w języku Swift) korzystałem również z automatycznie generowanych klas Swift firmy Core Data.

Ale w pewnym momencie potrzebowałem klasy Objective C z właściwościami publicznymi (zdefiniowanymi w jej odpowiedniku w nagłówku), odwołujących się do podstawowych jednostek danych.

#import "ProjectName-Swift.h" // this is to import the swift entities into ObjC

@interface myObjCClass : NSObject

@property (nonatomic) MyCoreDataClass*myEntity;

@end

Jak tylko zmieniłem model CoreData, XCode próbował odbudować klasy i zawiesiłem się ze wskazanym błędem kompilacji cyklu.

Po początkowej chwili rozpaczy, ponieważ nie miałem żadnych faz kompilacji nagłówka w moim projekcie, aby zmienić kolejność, stwierdziłem, że rozwiązanie jest dość proste:

W myObjCClass.husunąłem udostępnioną instrukcję importu nagłówka Swift i zmieniłem ją za pomocą @classdyrektywy:

@class MyCoreDataClass; // tell the compiler I will import the class definition somewhere else

// the rest stays the same
@interface myObjCClass : NSObject

@property (nonatomic) MyCoreDataClass*myEntity;

@end

i przeniosłem #import "ProjectName-Swift.h"instrukcję do myObjCClass.mpliku definicji klasy.

#import "myObjCClass.h"
#import "ProjectName-Swift.h"

@implementation myObjCClass

@end

I to nie budziło zmartwień.


Wow, wielkie dzięki. Zmagałem się z tym całą noc, ale kiedy dokładnie wdrożyłem tę sugestię, problem został rozwiązany!
Erik van der Neut

14

W końcu udało mi się rozwiązać ten problem, przenosząc Embed App Extensionsskrypt Build Phasesz głównego celu na ostatnią pozycję.


Mam ten błąd w Xcode 10.0 beta 4 (10L213o) - to obejście rozwiązało problem :-)
StackUnderflow

11

W rzeczywistości wystarczy zwrócić uwagę na monit Xcode This usually can be resolved by moving the target's Headers build phase before Compile Sources , a następnie możesz to zrobić.

Kiedy napotkałem ten problem, Xcode wyświetla monit:

:-1: Cycle inside XXXX; building could produce unreliable results. This usually can be resolved by moving the target's Headers build phase before Compile Sources.
Cycle details:
→ Target 'XXXX': LinkStoryboards
○ Target 'XXXX: Ditto Path/XXXX-Swift.h /Path/XXXX-Swift.h
○ Target 'XXXX has compile command for Swift source files
○ That command depends on command in Target 'XXXX: script phase “Run Script”

Zrobiłem tylko jedną rzecz i rozwiązałem problem doskonale:

Wybierz, Targeta następnie wybierz, Build Phaseaby przesunąć Run Scriptna przód Compile Sources.

Uruchom, skompilowano pomyślnie.

Zasada jest prosta, wystarczy zmienić kolejność kompilacji.

zdjęcie 1

Xcode 10.2 i Swift 5


2
to działa, ale tylko raz, a następnie w następnym poleceniu kompilacji problem powraca.
Swati

6

Miałem ten sam problem: poniżej był błąd

Cykl w zależnościach między obiektami docelowymi „Pods-MyAppName” i „RxCocoa”; budowa może przynieść niewiarygodne wyniki. Zwykle można to rozwiązać, przenosząc fazę budowania nagłówków celu przed kompilacją źródeł. Ścieżka rowerowa: Pods-MyAppName → RxCocoa → Pods-MyAppName

Rozwiązałem to, wykonując poniższe kroki:

1). Przejdź do docelowego RxCocoa w projekcie Pods-MyAppName

2) Przejdź do faz budowy

3) Przeciągnij fazę nagłówków i przenieś ją nad fazę budowy kompletnych źródeł.

To rozwiązało mój problem. Mam nadzieję, że to pomoże!


6

W docelowego Scheme, znaleźć wytwórnię Build, i upewnić się, że Find Implicit Dependenciesnie jest zaznaczone. Te kroki mogą działać.


Kiedy mówisz „blisko”, czy masz na myśli, że powinno mieć kolor i znacznik wyboru? Albo że powinno być puste, bez haczyka?
Ben Leggiero,

1
Cześć @BenLeggiero. „Zamknij” oznacza, że ​​powinien być pusty, bez znacznika wyboru.
Nh Xu

3

Moje rozwiązanie polegało po prostu na wyczyszczeniu folderu kompilacji, a następnie ponownej kompilacji.


Niesamowite, jak nikt nie ocenił tego rozwiązania. Proste, ale to musi być pierwsza rzecz, którą powinniśmy spróbować, zanim zagłębimy się w problem.
Hoon

3

Mój problem był związany z cykliczną zależnością między moim szybkim nagłówkiem mostkującym a obiektywnymi plikami c.

W moich obiektywnych plikach nagłówkowych c miałem rozszerzenie #import "...-swift.h" plik, a następnie w kilku moich szybkich plikach włączałem te pliki do wspomnianego importu, powodując w ten sposób cykliczną zależność.

To jest StackOverflow, który doprowadził mnie do znalezienia rozwiązania:

Cel C, problem szybkiej interoperacyjności z powodu zależności cyklicznej

Jak zapobiec odwołaniu cyklicznemu, gdy nagłówek mostkowania Swift importuje plik, który importuje sam plik Hopscotch-Swift.h

EDYTOWAĆ:

Skończyło się na konwersji powyższych plików do formatu szybkiego i to rozwiązało mój problem.


2

Wygląda na to, że musisz zmienić kolejność faz budowy w swoich celach w Podach. Dla mnie przeniesienie nagłówków nad resztę zadziałało. Możesz to zautomatyzować w swoim pliku Podfile:

require 'xcodeproj'

post_install do |installer|
  installer.pods_project.targets.each do |target|
    headers_phase = target.build_phases.find { |p| p.kind_of?(Xcodeproj::Project::Object::PBXHeadersBuildPhase) }
    if headers_phase
      puts "#{target.name}: Moving Headers build phase to top"
      target.build_phases.insert(0, target.build_phases.delete_at(target.build_phases.index(headers_phase)))
    end
  end
end

1

Ten sam problem Version 10.0 beta 3 (10L201y)i chciałem mieć nowy system kompilacji .

Problem został wyłączony Enable Modules (C and Objective-C)

w Build Settings -> Apple Clang - Language - Modules

Po włączeniu (ustawieniu na TAK) pozbyłem się błędu.


1

Spotkałem podobny problem, gdy próbowałem zarchiwizować mój projekt w Xcode 10. Oto szczegółowy tekst:

→ Target 'mytarget': CodeSign /path/to/mytarget.app

○ Target 'mytarget': SetGroup staff /path/to/mytarget.app

○ Target 'mytarget': SetMode u+w,go-w,a+rX /path/to/mytarget.app

○ Target 'mytarget': SetGroup staff /path/to/mytarget.app

Poprawiony poprzez ustawienie $(USER)wmytarget -> Build Settings -> Deployment -> Install Owner


1

Core_Data

Miałem ten sam problem i błąd, ale mój wystąpił, gdy utworzyłem podklasę NSManagedObject dla mojej encji i napotkałem ten błąd. Więc jeśli uważasz, że twój błąd jest taki sam jak mój dotyczący danych podstawowych, prawdopodobnie może ci pomóc (i pomógł mi):

  • kliknij swoją Jednostkę w swoim pliku „xcdatamodel”
  • przejdź do prawego paska i kliknij Data Model Inspector
  • zmień „Moduł” na „Bieżący moduł produktu”
  • i na koniec zmień „Codegen” na „Ręczny / Brak”
  • wyczyść i zbuduj

Myślę, że ponieważ w innych scenariuszach Xcode tworzy plik automatycznie, a kiedy tworzymy kolejny, powoduje konflikt.


1

Xcode 10.2.1 / Cel testu jednostkowego. Mój cel testu jednostkowego jest niezależny od celu hosta, aby skrócić czas tworzenia. Rozwiąż go usuń zaznaczenie Find Implicit Dependenciesw Scheme- Buildopcje, jak ja określić wszystkie zależności w Build Settings- Compile Sources.


0

Możesz to naprawić tutaj:

Plik -> Ustawienia obszaru roboczego -> Buduj system: nowy system kompilacji

Ustawienia obszaru roboczego


0

Próbowałem różnych rzeczy z tej strony, ale jedyną rzeczą, która mi pomogła, było to, że zrobiłem kopię celu i zaktualizowałem nazwę kopii (usunąłem przyrostek kopii), usunąłem starą, a następnie zainstalowałem pod.


0

Napotkałem ten problem po aktualizacji Xcode do wersji 11.4. Powrót do wersji 11.2.1 naprawił to.


0

Xcode: 11.3.1 Cel: cel XCUITest

  1. Uruchom polecenie, aby wyczyścić folder kompilacji: rm -rf ~ / Library / Developer / Xcode / DerivedData / *

  2. Zmień ustawienia obszaru roboczego: wybierz opcję Legacy Build System

wprowadź opis obrazu tutaj


-1

Pomogły mi dwie opcje: Plik-> Ustawienia projektu / obszaru roboczego.

1, Zmień system kompilacji na „Legacy Build system” w menu Plik-> Ustawienia projektu

2, Edytuj schemat i wybierz opcję „Parallelize Build” w sekcji Build.


To nie jest powiązane. Nowoczesny system budowania nie spowodowałby tego.
Raptor

-1

W okienku projektu na LHS dla produktów kompilacji nie wybieraj ich na liście członkostwa docelowego w panelu RHS.

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.