2016-07-01 1 views
1

ich ein cocoapod zu einem Projekt installiert und lief den Konverter auf, um es zu Swift wechseln 3.Swift-Compiler ist verwirrend Version 2 und 3

Das Problem ist der Compiler denkt, dass ich bin mit Swift 2 und wirft Fehler auf die richtige Swift 3-Syntax (eine satte 129 Fehler). Zum Beispiel:

internal enum Error: ErrorProtocol { 
    case noCentralManagerSet 
    case busy 
    case interrupted 
} 

Wirft use of undeclared type 'ErrorProtocol'.

enter image description here

Was ist falsch?

Der Swift 3 Code, den ich schrieb, ist nicht werfen Compilerfehler. Hier

ist die Ausgabe von xcodebuild -showsdks:

2016-07-01 14:16:05.850 xcodebuild[30824:2848916] [MT] PluginLoading: Required plug-in compatibility UUID 1637F4D5-0B27-416B-A78D-498965D64877 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/WebDevSupport.xcplugin' not present in DVTPlugInCompatibilityUUIDs 
2016-07-01 14:16:05.864 xcodebuild[30824:2848916] [MT] PluginLoading: Required plug-in compatibility UUID 1637F4D5-0B27-416B-A78D-498965D64877 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/WebDevelopment.xcplugin' not present in DVTPlugInCompatibilityUUIDs 
2016-07-01 14:16:05.911 xcodebuild[30824:2848916] [MT] PluginLoading: Required plug-in compatibility UUID 1637F4D5-0B27-416B-A78D-498965D64877 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/WakaTime.xcplugin' not present in DVTPlugInCompatibilityUUIDs 
2016-07-01 14:16:05.944 xcodebuild[30824:2848916] [MT] PluginLoading: Required plug-in compatibility UUID 1637F4D5-0B27-416B-A78D-498965D64877 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/Rayrolling.xcplugin' not present in DVTPlugInCompatibilityUUIDs 
2016-07-01 14:16:05.967 xcodebuild[30824:2848916] [MT] PluginLoading: Required plug-in compatibility UUID 1637F4D5-0B27-416B-A78D-498965D64877 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/CocoaPods.xcplugin' not present in DVTPlugInCompatibilityUUIDs 
2016-07-01 14:16:05.997 xcodebuild[30824:2848916] [MT] PluginLoading: Required plug-in compatibility UUID 1637F4D5-0B27-416B-A78D-498965D64877 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/Alcatraz.xcplugin' not present in DVTPlugInCompatibilityUUIDs 
OS X SDKs: 
    OS X 10.12      -sdk macosx10.12 

iOS SDKs: 
    iOS 10.0      -sdk iphoneos10.0 

iOS Simulator SDKs: 
    Simulator - iOS 10.0   -sdk iphonesimulator10.0 

tvOS SDKs: 
    tvOS 10.0      -sdk appletvos10.0 

tvOS Simulator SDKs: 
    Simulator - tvOS 10.0   -sdk appletvsimulator10.0 

watchOS SDKs: 
    watchOS 3.0      -sdk watchos3.0 

watchOS Simulator SDKs: 
    Simulator - watchOS 3.0   -sdk watchsimulator3.0 

Antwort

3

können Sie einstellen, Swift-Version für jedes Ziel:

Legacy Swift Language Version

Ihr Projekt Yes wurde wahrscheinlich eingestellt.

Das SDK hat keinen Teil im Kompilierungsprozess.

1

Ich glaube, ich weiß, was das Problem ist. Sie haben alle Dateien direkt von Swift2.0 in Swift3 konvertiert. Es wird nicht so funktionieren. Ich schlage vor, Sie löschen die Pods und klonen die Swift3 Zweig von this (die ich glaube, dass Sie verwenden) und kopieren Sie das Quellverzeichnis für Ihr Projekt für jetzt, wie es nicht sagt, welche Version dieses Repo ist swift-3 verwendbar. Es sollte dein Problem lösen. :)

+0

Was soll der Befehl 'xcodebuild -showsdks' sagen? Und ich benutze nur Xcode 8. –

+0

Ich habe es dir gesagt. Es zeigt Ihnen die Liste der SDKs, die Xcode gerade benutzt. Sie haben Xcode 7 überhaupt nicht? – Dershowitz123

+0

Ja, ich habe Xcode 7 gelöscht, weil ich im harten Tauchgang wenig Platz habe. Ich habe die Ausgabe des Befehls zur Frage hinzugefügt. –

0

Zwei Dinge helfen mir, Fälle wie diese zu verwalten.

Da Xcode Projekte, die nie geschlossen wurden, automatisch öffnet, wenn Sie in Xcode 7 Projekt A öffnen, öffnen Sie Xcode 8, um etwas Neues zu starten. Xcode 8 öffnet auch das gleiche Projekt A. Sie müssen also Projekt A schließen Xcode 8, sonst werden Sie viele Fehler bekommen und Sie denken vielleicht, dass Sie in Xcode 7 arbeiten, weil Projekt A offen ist. An diesem Punkt ist Projekt A offen in Xcode 7 und Xcode 8.

Auch ich meinen Projektordner benennen projectName - Swift 2 dann duplizieren und den Namen, dass ein `Projektname - Swift 3.

Natürlich haben wir die Kontrolle Version aber nur um sicher zu gehen, habe ich gerne zwei separate Ordner für Swift 2/3, da es mit dem gleichen Projekt in zwei Versionen von Xcode auch verrückt werden kann.

Da Sie dem Terminal auch mitteilen müssen, dass separate Verzeichnisse für Pod-Installationen verwendet werden sollen, ist es sicherer, da es keine Überschneidungen gibt.