2017-03-02 7 views
1

Ich habe ein Projekt, das mit Swift 2 in xcode 7 gestartet wurde. Ich verwende jetzt Swift 2.3 in xcode 8. Wenn ich versuche, auf Pro 3 zu migrieren, bekomme ich mehrere Fehler, kein Projekt. Sowohl von den Bibliotheken als auch von meinem Code. Zuerst aktualisiere ich meine Pods und mache dann eine automatische Konvertierung des Projekts. Meine Zweifel sind: Falls einige Bibliothek Fehler verursachen kann, kann ich es entsperren und konvertieren? Muss ich etwas vorbereiten, bevor ich mit der Konversation anfange? In den Artikeln, die ich darüber gelesen habe, habe ich nichts anderes darüber gesagt. Wenn Sie fortfahren, schnell 2.3 zu verwenden, haben Sie irgendwelche zukünftigen Probleme?swift 2.3 bis swift 3.0

Die Anwendung ist sehr groß, was wäre die beste Option?

+1

Wir gingen durch vor kurzem eine solche Umwandlung. Es war schrecklich, gelinde gesagt.Wir haben eine Mischung von Ansätzen verfolgt, um es zu schaffen. Auto-Konvertierung, manuelle Code-Änderungen, Bugfixing und eine Menge Tests. – humblePilgrim

+2

Mozilla hat es kürzlich getan: https://mozilla-mobile.github.io/ios/firefox/swift/core/2017/02/22/migrating-to-swift-3.0.html In wenigen Worten, es kann lang und kompliziert sein. Swift 4 sollte "alten Swift-Code" erlauben, aber ich empfehle dringend, Swift 3 zumindest für die zukünftigen Versionen zu verwenden. Überprüfen Sie vorher, ob alle Ihre Abhängigkeiten (Pods zum Beispiel, haben eine Swift 3-Version). – Larme

+0

Es ist eine gute Idee, eine Kopie des Projekts zu haben. Ich habe diese Option verwendet, um eine relativ kleine Anwendung ein konvertieren i wie eine Stunde benötigt, um alle Fehler zu beheben (und viele hatten die Möglichkeit, diese automatisch zu beheben) – i6x86

Antwort

9

Ehrlich? Jedes Projekt, das mit Swift seit 2014 gebaut wird, sollte mit einem Verständnis des Codes wird brechen mit jede neue Version durch Swift 3.X. (Ich bin überhaupt nicht kritisch, nur praktisch.) In diesem Jahr arbeitet Swift 4.X hart daran, Swift 3.X Code nicht zu brechen.

Also mit diesem Ausgangspunkt, hier ist meine Gedanken:

  • 1 Nehmen Sie eine Sicherung einer Arbeits App Swift 2.X und archivieren. Backup dass Backup.
  • 2 Akzeptieren Sie den Preis, sollte bekannt gewesen sein, wenn Sie eine Version vor 3.X verwenden - die Umwandlung wird schmerzhaft und zeitaufwendig sein.
  • 3 Wo immer möglich, nicht Drittanbieter-Add-Ins verwenden. Sie können die Komplexität der Migration auf die neueste Version erhöhen.
  • 4 Überlegen Sie, auf Swift 4 zu warten. Ich bin nicht empfehle dies überhaupt, aber sagen, das große Bild zu betrachten. Aber denk immer daran, dass du irgendwann Dinge portieren musst. (Die gute Nachricht ist, dass Swift 3 stabil genug ist, um zu sagen, dass zukünftiges Upgrade nicht (zumindest) so schmerzhaft ist.
  • 5 Ziehen Sie in Betracht, alles zu verschieben auf einmal. (Wenn Sie dieses goldene Backup an mehreren Stellen dupliziert haben Es ist einfacher.) Ja, es gibt Möglichkeiten, um einzelne Projekte, Dateien usw. von 2.X auf 3.X zu migrieren - und 4.X (zusammen mit dem, was wahrscheinlich Xcode 9 ist) macht es einfacher, vorwärts zu gehen, aber nur Wenn Sie von 3.X.
  • starten
  • 6 Grüße zu Swift 2.3 ... die neueste Version von Xcode wird Swift 2.3 nicht kompilieren/bauen.Nehmen Sie das als ein Zeichen - eines Tages wird es nicht mehr im App Store akzeptiert Dieser Tag kann 2-3 Jahre entfernt sein (oder nicht), aber es ist fast 2 Jahre seit Die Versprechen von ABI und Versionskompatibilität waren für Swift 3.0 gedacht. Übrigens, nur letzteres ist passiert.

Willkommen in der Welt der sich schnell entwickelnden Sprache!

EDIT: Grüße # 3 Punkt (Vermeidung von Dritten in hinzufügen, wo möglich), fand ich zwei Links, um die Probleme zum Ausdruck, die nach oben kommen können:

Analyzing Third Party Libraries

Avoiding Third Party UI Libraries

+3

Ich neige dazu, in einem "Plan für das Schlimmste, hoffe auf den besten" Weg zu antworten. Meine Apps funktionierten ohne Probleme - aber ich hatte drei Vorteile. (1) Ich habe mit der frühesten Beta von Swift/Xcode begonnen. Während es Probleme und Änderungen gab, war ich vom ersten Tag an bereit. (2) Mein schlimmster Bereich waren CoreImage-Kernel, und ich hatte eine fantastische Quelle, die * auch * gebloggt hat über das, was gebraucht wurde. Aber am wichtigsten - und ich versuchte, dies in meiner Antwort zu betonen - entschied ich mich bewusst dafür, ** keinen ** Code von Dritten zu verwenden, wo es möglich war. Ich weiß, dass das anderswo nicht praktikabel ist, aber das ist das Schwierigste, was ich meine. – dfd

+0

sollte gerade mit obj c festgefahren sein – YaBoiSandeep