web-dev-qa-db-de.com

Xcode 8 Beta 4: Build schlägt fehl mit Fehler "Die folgenden Binaries verwenden inkompatible Versionen von Swift:"

Mit dem neuen Xcode 8 beta 4 ist in der CopySwiftLibs-Erstellungsphase folgender Fehler aufgetreten:

Effective srcDirs: {(

    <DVTFilePath:0x7f865961e970:'/Volumes/Data/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/Swift/iphonesimulator'>,

    <DVTFilePath:0x7f8657d02b20:'/Volumes/Data/Xcode-beta.app/Contents/Developer/Toolchains/Swift_2.3.xctoolchain/usr/lib/Swift/iphonesimulator'>

)}

fehler: Die folgenden Binärdateien verwenden inkompatible Versionen von Swift:

/Users/user/Projects/git/iphone-Swift-1/DerivedData/myApp/Build/Products/Debug-iphonesimulator/myApp.app/myApp

/Users/user/Projects/git/iphone-Swift-1/myApp/myAppApi.framework/myAppApi

myAppApi ist ein Unterprojekt im Arbeitsbereich, das gemeinsam genutzten Code enthält (es verwendet Alamofire).

Eine Anmerkung: Ursprünglich haben wir das Projekt von Swift 2.2 auf Swift 2.3 konvertiert und dann manuell auf 3.0 aktualisiert.

Hat jemand eine Idee, was diesen Fehler verursachen könnte?

Vielen Dank!

27
iGA

Ich hatte das gleiche Problem, aber es gelang mir, zu beheben durch:

  1. Reinigen Sie das Projekt.
  2. Schließen Sie das Projekt und beenden Sie Xcode.
  3. Abgeleitete Daten bereinigen.
  4. Öffnen Sie das Projekt erneut und es ist da, alles Nizza und funktioniert.

Ich habe dies auf Xcode 8 mit Swift 3 gemacht. 

63
ossmalpha

Dieses Problem kann auch auftreten, wenn Swift 2.3 als Code für die Container-App verwendet wird und Sie eine neue Erweiterung in Xcode 8 erstellen.

Um das obige Szenario zu lösen ... 

Hinweis: Der gesamte Code muss sich in derselben Swift (kompatiblen) Version befinden, damit er ohne Fehler kompiliert werden kann. 

Eine Möglichkeit, dieses Problem zu lösen, besteht jedoch darin, dass Sie auf Swift 2.3 bleiben und dann Use Legacy Swift Language Version Ihres Erweiterungsziels auf "Ja" setzen.

Sie finden diese Option, während Xcode 8 wie folgt geöffnet ist:

  1. Wählen Sie Ihren App-Projektstamm im Projektnavigator (auf der linken Seite).
  2. Wählen Sie auf der rechten Seite Ihre Erweiterung unter TARGETS Aus
  3. Wenn die Erweiterung ausgewählt ist, klicken Sie auf die Registerkarte Build Settings
  4. Scrollen Sie nach unten und suchen Sie Use Legacy Swift Language Version und setzen Sie es aus dem Dropdown-Menü auf Yes.
  5. Sie können das Projekt jetzt erstellen

Hinweis: Möglicherweise müssen Sie den überschriebenen Code in den Erweiterungsvorlagen korrigieren, da diese ursprünglich in Swift 3 enthalten waren.

15
iAmcR

Bevor Sie etwas tun ...

(Wenn Sie Xcode 8.0-kompatibel mit Ihrem Projekt verwenden können)

Ihr Projekt ist standardmäßig auf Xcode 3.2-kompatibel eingestellt

  • Wählen Sie Ihr App-Projekt im Navigator (auf der linken Seite) aus.
  • Wählen Sie Projektdokument im Dienstprogrammfenster (auf der Rechten Seite) aus.
  • Ändern Sie Project Format in Xcode 8.0-kompatible

Versuchen Sie, Ihr Projekt zu erstellen.

Wenn dies nicht funktioniert, probieren Sie die anderen vorgeschlagenen Lösungen aus.

Hinweis: Nachdem Sie den Fehler behoben haben, können Sie sogar wieder auf Xcode 3.2-kompatible Geräte umstellen. Der Fehler sollte funktionieren, aber es können "später" andere Build-Probleme auftreten.

Empfehlung: Vor dem Debuggen eines vorhandenen Projekts. Schließen Sie Ihr Projekt und komprimieren Sie eine Kopie Ihrer Projektdatei, wenn Sie beim Erstellen Ihres Projekts kein Git-Repository erstellt haben.

6
ShakeMan

Dies wurde behoben, indem die eingebetteten Binärdateien im Projekt gelöscht wurden. Um dies zu tun:

  1. Öffnen Sie Ihren Arbeitsbereich/Projekt in Xcode.
  2. Navigieren Sie zur aktuellen Projektdatei (mit der Multifunktionsleiste Allgemein, Funktionen usw.).
  3. Gehen Sie zu Allgemein> Eingebettete Binärdateien und entfernen Sie, indem Sie die gewünschten auswählen und dann auf das Minuszeichen klicken.

Hinweis 1: Sie sollten sie nicht aus dem Abschnitt "Verknüpfte Frameworks und Bibliotheken" löschen müssen (sie werden automatisch entfernt, wenn Sie sie aus den "Embedded Binaries" entfernen).

Anmerkung 2: Ich habe viele Abhängigkeiten und verwende CocoaPods. Ich habe nichts in den "Embedded Binaries" und nur das "Pods_ [YourApplicationName] .framework" im Abschnitt "Linked Frameworks and Libraries".

3
Clayton

Ich hatte gerade das gleiche Problem, nachdem ich Xcode auf 9.3 aktualisiert hatte. Ich habe das Problem einfach durch das Reinigen des Build-Ordners behoben. Dies kann mit Command-Option-Shift-K oder im Optionsmenü "Produkt" -> "Bereinigen" (siehe Screenshot) erfolgen.

 You can clean the build folder with Command-Option-Shift-K or in the option menu "Product" -> "Clean"

2
Samir

Ich hatte verschiedene Bibliotheken über Karthago integriert. Während des Prozesses habe ich jedoch einige von ihnen auf Cocoapods umgestellt und vergessen, die alte .frameworks-Datei vom Projektziel zu entfernen.

Durch das Entfernen wurde der Build-Fehler behoben.

2
ph1lb4

Ich hatte das gleiche Problem ... Meine Lösung bestand darin, das 'myApp'-Verzeichnis in' myAppmyApp 'umzubenennen und dann die App erneut auszuführen. Ein neues "myApp" -Verzeichnis wurde erstellt und die App lief auf meinem iPhone wieder gut.

Ein Unterschied in Ihrer Situation könnte der folgende sein: Der Name meiner App, sagen wir 'myApp' im Verzeichnis 'DerivedData', war myApp verkettet mit: '-'

Vielleicht hilft dir das.

Mit freundlichen Grüßen.

1
user6832423

Ich hatte die gleiche Fehlermeldung, nachdem ich eine Swift 3-Version eines Frameworks hinzugefügt hatte. 

Mein Ziel framework search path war immer noch so konfiguriert, dass sowohl die Swift 2- als auch die Swift 3-Version desselben Frameworks gefunden werden konnte, sodass mein Projekt an der Swift 2.3-Version hängen blieb. 

Für mich bestand die Lösung darin, das alte Framework aus meinem Projektverzeichnis zu entfernen und die Ordnerreferenz aus dem framework search path zu löschen. 

0
vmeyer

Also poste ich einfach die Lösung, die ich nach einer Stunde Debugging gefunden habe.

Seit Xcode 9 kann dies vom Compilerprotokoll verfolgt werden.

Wenn Sie bis zum Ende des Compilerprotokolls scrollen, werden Sie feststellen, dass dieses Problem durch einen Absturz der Typüberprüfung verursacht wird.

 enter image description here

0
Zigii Wong

Sie müssen alle Abhängigkeiten auf Swift 3 umstellen. In Ihrem Fall muss Alamofire auf Swift 3 verzweigt werden

0
Martin Romañuk