Fahren Sie hinein; Gebäude kann zu unzuverlässigen Ergebnissen führen: Xcode 10 Fehler

80

Ich versuche beim Kompilieren mit Xcode 10 auf das neue Build-System zu wechseln. Es wird jedoch der folgende Fehler angezeigt:

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'

Screenshot hinzugefügt

Selbst nach dem Entfernen der Problemdatei erhalte ich dasselbe für ein anderes xib / Storyboard. Wie kann ich diesen Fehler beheben, ohne zum alten Build-System zurückzukehren?

Sahil Kapoor
quelle
Ich hatte einen ähnlichen Fehler und konnte ihn beheben, indem ich 'abgeleitete Daten' löschte und das Projekt bereinigte. Das hat mir sehr gut gefallen!
Jayprakash Dubey

Antworten:

62

Führen Sie die folgenden Schritte aus, um Probleme mit dem Xcode 10-Buildsystem zu beheben:

  1. Gehen Sie in Xcode zu Datei-> Projekt- / Arbeitsbereichseinstellungen.
  2. Ändern Sie das Build-System in Legacy Build-System.

Das Build-Problem mit dem neuen Xcode wird behoben.

Wenn Sie mit dem neuen Build-System arbeiten möchten, finden Sie die Hilfe zur Fehlerbehebung auf dieser Apple Xcode-Hilfeseite .

Akshay Sunderwani
quelle
48
Der springende Punkt der Frage ist, auf das neueste Build-System umzusteigen.
Sahil Kapoor
4
Dann sollten Sie erwähnen, dass Sie keine Lösung für das Ändern des Build-Systems wünschen. Außerdem habe ich erwähnt, dass Sie, wenn Sie mit einem neuen Build-System arbeiten möchten, die im Xcode-Supportcenter angegebenen Schritte ausführen können. Geben Sie auch einen gültigen Grund an, wenn Sie abstimmen. Vielen Dank! @ SahilKapoor
Akshay Sunderwani
1
Danke freundlicher Fremder. Mein einziges Interesse ist es, meinen Build wieder zum Laufen zu bringen, damit eine Antwort genau das ist, was ich brauchte.
Dan Loughney
4
Dies ist keine geeignete Lösung für das Problem. Das Build-System sollte für etwas so Einfaches nicht in Legacy geändert werden.
Varun Goyal
37

Ich hatte dieses Problem mit Cocoapods. Die Lösung bestand darin, den Build-Ordner zu bereinigen, alle Pods neu zu installieren und dann die App neu zu erstellen. Das Problem löste sich auf diese Weise von selbst.

JAL
quelle
2
Das hat auch bei mir funktioniert. Ich habe eine saubere und eine Pod-Installation durchgeführt.
Cloud9999Strife
In meinem Fall hatte ich gerade eine Pod-Installation durchgeführt und musste nur den Build-Ordner bereinigen. Dieser Fehler trat erst auf, nachdem ich Xcode erlaubt hatte, die Build-Einstellungen zu aktualisieren.
Stonetip
hatte das Problem mit Alamofire. Hat einen 'Clean Build Folder' erstellt, ohne Kakaofrüchte neu zu installieren, und hat
einwandfrei
25

Ich habe mein Problem behoben, indem ich die Erstellungsphase "Bundle-Ressourcen kopieren" vor alle Erstellungsphasen "Dateien kopieren" und "Binär mit Bibliotheken verknüpfen" verschoben habe

gypsyDev
quelle
+1 aber ich habe eine leichte Variation verwendet. Ich musste nichts vor "Link Binary with Libraries" verschieben, was ich nicht tun würde, da ein neues Standardprojekt in Xcode nicht so ist. Ich habe gerade "Copy Bundle Resources" vor "Copy Helper Tools" verschoben (das einige Befehlszeilentools und eine Helfer-App in den Inhalt / Helfer des macOS-App-Produkts kopiert). Da jedoch die Reihenfolge dieser beiden Elemente einen Unterschied machen sollte - sie kopieren nur Dateien -, ist dies nicht sinnvoll. Also habe ich einen Fehler gemeldet: 42927301. Meine modifizierte Lösung: Tauschen Sie verschiedene Copy XXX Build-Phasen aus, bis es funktioniert :(
Jerry Krinock
2
Gleiches gilt für mich. Ich habe meine Copy Bundle-Ressourcen über die Phase "Dateien kopieren" verschoben und es funktioniert jetzt. Ich werde Ihren Fehler @JerryKrinock
Peter N Lewis
Für mich lag das Problem bei den Abhängigkeiten von Embed Frameworks, daher habe ich Embed Frameworks über Copy Bundle Resources verschoben, und es hat geholfen.
Elena
18

Das neue Build-System von Xcode 10 erkennt Abhängigkeitszyklen in Ihrem Build und bietet Diagnosen, mit denen Sie diese beheben können. Das Korrigieren dieser Abhängigkeitszyklen verbessert die Zuverlässigkeit Ihres Builds, sodass die richtigen Produkte konsistent produziert werden (Zyklen sind eine mögliche Ursache dafür, dass Ihre abgeleiteten Daten gelöscht werden müssen). Es verbessert auch Ihre inkrementellen Erstellungszeiten, da Zyklen im Build dazu führen, dass etwas in Ihrem Build-Diagramm bei jedem Build immer veraltet ist, sodass die Neuerstellung des Builds bei jedem Build unnötig funktioniert.

In der Xcode-Hilfe finden Sie eine Dokumentation zum Auflösen einiger gängiger Arten von Abhängigkeitszyklen: https://help.apple.com/xcode/mac/current/#/dev621201fb0

Trotzdem sieht diese Zyklusdiagnose etwas seltsam aus. Es hört sich so an, als ob Sie es lösen konnten, indem Sie Ihre Build-Phasen neu arrangierten, aber ich glaube nicht, dass die Diagnose das Problem wirklich erklärt hat. Wenn es Ihnen nichts ausmacht, wäre ein Fehlerbericht über die Verbesserung dieser Diagnose für diesen speziellen Fall sehr willkommen. Sie können eine unter https://bugreport.apple.com einreichen . Bitte geben Sie alle Details zu Ihrem Projekt an, die Sie für relevant halten. Ein Beispielprojekt, das das Problem reproduziert, ist ideal. Wenn Sie dies jedoch nicht anhängen können, sind die Diagnose und eine Vorstellung von der Projektstruktur weiterhin hilfreich.

Rick Ballard
quelle
17

Ich hatte dieses Problem mit Cocoapods und fand eine vorübergehende Problemumgehung:

  1. Installieren Sie die neueste Version von Cocoapods (1.5.3): sudo gem update cocoapods
  2. Löschen Sie Ihre abgeleiteten Daten: rm -rf ~/Library/Developer/Xcode/DerivedData/*
  3. pod install

Quelle hier und ich bin auf Xcode 10 Beta 4.

EDIT : jetzt auf Xcode 10.0 und immer noch relevant.

Gabuchan
quelle
es ist mir letzte Woche wieder auf Xcode 10.1 (10B61) passiert und es hat immer noch funktioniert. Stellen Sie sicher, dass Sie einen ausführen Clean Build Folder(und das Beenden von Xcode kann ebenfalls hilfreich sein), bevor Sie die Schritte 2.und ausführen 3..
Gabuchan
Lief wie am Schnürchen!
Flagman
13

Ich konnte dies endlich beheben, indem ich das Embed App ExtensionsSkript Build Phasesdes Hauptziels an die letzte Position verschob.

Sahil Kapoor
quelle
Habe diesen Fehler in Xcode 10.0 Beta 4 (10L213o) - diese Problemumgehung hat ihn behoben :-)
StackUnderflow
13

Ich hatte ein ähnliches Problem mit einer gemischten Interaktion zwischen Swift, Objective-C und CoreData : In meinem Projekt (geschrieben in Swift) habe ich auch die automatisch generierten Swift-Klassen von Core Data verwendet.

Aber irgendwann brauchte ich eine Objective C-Klasse mit öffentlichen Eigenschaften (definiert in ihrem Header-Gegenstück), die auf die Kerndatenentitäten verweisen.

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

@interface myObjCClass : NSObject

@property (nonatomic) MyCoreDataClass*myEntity;

@end

Sobald ich das CoreData-Modell geändert habe, hat XCode versucht, die Klassen neu zu erstellen, und ich wurde mit dem angegebenen Zykluserstellungsfehler aufgehängt.

Nach einem ersten Moment der Verzweiflung stellte ich fest, dass die Lösung recht einfach war, da ich in meinem Projekt keine Kompilierungsheaderphasen hatte, um die Reihenfolge zu ändern:

In der habe myObjCClass.hich die gemeinsam genutzte Swift-Header-Importanweisung entfernt und durch eine @classDirektive geändert :

@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

und ich habe die #import "ProjectName-Swift.h"Anweisung in die myObjCClass.mKlassendefinitionsdatei verschoben .

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

@implementation myObjCClass

@end

Und es machte sich keine Sorgen.

Lookaji
quelle
Wow, vielen Dank. Ich hatte die ganze Nacht damit zu kämpfen, aber als ich diesen Vorschlag gründlich umsetzte, war das Problem behoben!
Erik van der Neut
10

Tatsächlich müssen Sie nur auf die Eingabeaufforderung von Xcode achten This usually can be resolved by moving the target's Headers build phase before Compile Sources, und dann können Sie es tun.

Als ich auf dieses Problem stieß, forderte mich Xcode auf:

:-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”

Ich habe nur eines getan und das Problem perfekt gelöst:

Wählen Sie Targetund dann auswählen Build Phase, um die Run Scriptnach vorne zu verschieben Compile Sources.

Ausführen, erfolgreich kompiliert.

Das Prinzip ist einfach, ändern Sie einfach die Kompilierungsreihenfolge.

Bild 1

Xcode 10.2 & Swift 5

ShevaKuilin
quelle
1
Dies funktioniert jedoch nur einmal und beim nächsten Build-Befehl tritt das Problem erneut auf.
Swati
6

Ich hatte das gleiche Problem: Unten war der Fehler

Wechsel in Abhängigkeiten zwischen den Zielen 'Pods-MyAppName' und 'RxCocoa'; Gebäude können zu unzuverlässigen Ergebnissen führen. Dies kann normalerweise behoben werden, indem die Erstellungsphase der Header des Ziels vor dem Kompilieren von Quellen verschoben wird. Radweg: Pods-MyAppName → RxCocoa → Pods-MyAppName

Ich habe es mit den folgenden Schritten gelöst:

1). Gehen Sie im Pods-MyAppName-Projekt zum Ziel RxCocoa

2) Gehen Sie, um Phasen zu erstellen

3) Ziehen Sie die Header-Phase und verschieben Sie sie über die Build-Phase "Quellen vervollständigen".

Dies hat mein Problem behoben. Ich hoffe es hilft!

Nishu_Priya
quelle
6

In dem Ziel ist Scheme, finden Sie das Etikett Build, und sicherzustellen , dass Find Implicit Dependenciesnicht geprüft wird. Diese Schritte können funktionieren.

Nh Xu
quelle
Wenn Sie "Schließen" sagen, meinen Sie damit, dass es eine Farbe und ein Häkchen haben sollte? Oder dass es leer sein soll, ohne Häkchen?
Ben Leggiero
1
Hallo, @BenLeggiero. "Schließen" bedeutet, dass es leer sein sollte, ohne ein Häkchen.
Nh Xu
3

Meine Lösung bestand einfach darin, den Build-Ordner zu bereinigen und dann neu zu erstellen.

onemoreanimal
quelle
Erstaunlich, wie niemand diese Lösung bewertet hat. Einfach, aber es muss das erste sein, was wir versuchen sollten, bevor wir uns näher mit dem Thema befassen.
Hoon
3

Mein Problem hatte mit einer zyklischen Abhängigkeit zwischen meinem schnellen Bridging-Header und meinen objektiven c-Dateien zu tun.

In meinen Ziel-C-Header-Dateien hatte ich eine #import "...-swift.h"Datei und in einigen meiner schnellen Dateien habe ich diese Dateien mit diesem Import aufgenommen und damit eine zyklische Abhängigkeit verursacht.

Dies ist der StackOverflow, der mich dazu gebracht hat, die Lösung zu finden:

Ziel C, Problem der schnellen Interoperabilität aufgrund zirkulärer Abhängigkeit

So verhindern Sie Zirkelverweise, wenn der Swift-Bridging-Header eine Datei importiert, die Hopscotch-Swift.h selbst importiert

BEARBEITEN:

Ich habe die oben genannten Dateien schnell konvertiert und dies hat mein Problem gelöst.

Konstantin
quelle
2

Es scheint, dass Sie die Reihenfolge der Erstellungsphasen innerhalb Ihrer Pods-Ziele ändern müssen. Für mich hat es funktioniert, Header über den Rest zu bewegen. Sie können dies in Ihrem Podfile automatisieren:

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
Bcherry
quelle
1

Gleiches Problem Version 10.0 beta 3 (10L201y)und ich wollte das New Build System haben .

Problem ist deaktiviert Enable Modules (C and Objective-C)

im Build Settings -> Apple Clang - Language - Modules

Nach dem Aktivieren (auf YES gesetzt) ​​wurde der Fehler behoben.

Opel
quelle
1

Beim Versuch, mein Projekt auf Xcode 10 zu archivieren, ist ein ähnliches Problem aufgetreten. Hier ist der Detailtext:

→ 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

Fest es durch das Setzen $(USER)inmytarget -> Build Settings -> Deployment -> Install Owner

Likecatfood
quelle
1

Kerndatei

Ich hatte das gleiche Problem und den gleichen Fehler, aber meiner ist aufgetreten, als ich für meine Entität "NSManagedObject-Unterklasse erstellt" habe und dieser Fehler aufgetreten ist. Wenn Sie also der Meinung sind, dass Ihr Fehler in Bezug auf Core Data mit meinem identisch ist, können Sie wahrscheinlich (und haben mir geholfen) Folgendes tun:

  • Klicken Sie auf Ihre Entität in Ihrer "xcdatamodel" -Datei
  • Gehen Sie in die rechte Leiste und klicken Sie auf Data Model Inspector
  • Ändern Sie "Modul" in "Aktuelles Produktmodul".
  • und schließlich "Codegen" in "Manual / None" ändern
  • reinigen und bauen

Ich denke, weil Xcode in anderen Szenarien automatisch eine Datei erstellt und wenn wir eine andere erstellen, verursacht dies einen Konflikt.

Alireza aj
quelle
1

Xcode 10.2.1 / Unit Test Target. Mein Unit-Test-Ziel ist unabhängig vom Host-Ziel, um die Bauzeit zu verbessern. Lösen Sie es, indem Sie Find Implicit Dependenciesin Scheme- BuildOptionen deaktivieren , da ich alle Abhängigkeiten in Build Settings- spezifiziere Compile Sources.

Jimmy
quelle
0

Möglicherweise können Sie dies hier beheben:

Datei -> Arbeitsbereichseinstellungen -> Build-System: Neues Build-System

Arbeitsbereichseinstellungen

SepCode
quelle
0

Ich habe Dinge von dieser Seite ausprobiert, aber das einzige, was mir geholfen hat, war, dass ich eine Kopie des Ziels erstellt und den Namen der Kopie aktualisiert (das Kopiersuffix entfernt), die alte gelöscht und anschließend die Pod-Installation durchgeführt habe.

Vladimír Slavík
quelle
0

Ich hatte dieses Problem, nachdem ich Xcode auf Version 11.4 aktualisiert hatte. Ein Downgrade auf 11.2.1 hat das Problem behoben.

Deepseey
quelle
0

Xcode: 11.3.1 Ziel: XCUITest-Ziel

  1. Führen Sie den Befehl aus, um den Build-Ordner zu bereinigen: rm -rf ~ / Library / Developer / Xcode / DerivedData / *

  2. Arbeitsbereichseinstellungen ändern: Wählen Sie Legacy Build System

Geben Sie hier die Bildbeschreibung ein

Kshama Singh
quelle
-1

Ich habe dieses Problem gelöst, indem ich das "Run Script" an den Anfang der Build-Phasen verschoben habe.

Mokka
quelle
-1

Die folgenden zwei Optionen haben bei mir funktioniert: Datei-> Projekt- / Arbeitsbereichseinstellungen.

1, Ändern Sie das Build-System unter Datei-> Projekteinstellungen in "Legacy-Build-System"

2, Schema bearbeiten und im Abschnitt "Erstellen" die Option "Build parallelisieren" auswählen.

gsr
quelle
Das hat nichts damit zu tun. Ein modernes Build-System würde dies nicht verursachen.
Raptor
-1

Wählen Sie im Projektbereich auf der LHS für Ihre Build-Produkte diese nicht in der Liste für die Zielmitgliedschaft im RHS-Bereich aus.

user10658782
quelle