Wersja języka Xcode 9 Swift (SWIFT_VERSION)

115

Niedawno zaktualizowałem xcode do wersji 9. Wcześniej w Xcode 8.x za każdym razem, gdy go używam pod update, wyświetla mi się kod aktualizacji, aby przekonwertować kod do Swift 3 i zrobić to, aby rozwiązać błędy. Ale teraz daje mi ten błąd:

Ustawienie kompilacji „Swift Language Version” (SWIFT_VERSION) musi mieć wartość obsługiwaną dla celów, które używają języka Swift. To ustawienie można ustawić w edytorze ustawień kompilacji.

W przypadku tego błędu próbowałem Build Settings > Swift Language Versioni był to Swift 3.2. Ale ponieważ wezwanie aktualizacji ponownie zainstalowało niektóre strąki, takie jak Alamofire, i mówi, aby zainstalować Xcode 8.x, aby przekonwertować kod na Swift 3, więc muszę zainstalować dodatkowa wersja z najnowszym Xcode? Jeśli tak, to jak mogę zainstalować Xcode 8 z Xcode 9?

Chaudhry Talha
źródło
spróbuj wyczyścić pochodne dane i skompiluj projekt na Xcode 9.
iAviator
Jaka jest twoja szybka wersja w Xcode 8?
santhoshkumar
chyba było 8.3.3. to był ostatni przed xcode 9.
Chaudhry Talha

Odpowiedzi:

181

Odpowiedź na pytanie:
Możesz pobrać Xcode 8.x z portalu Apple Download Portal lub pobrać Xcode 8.3.3 (lub zobacz: Skąd pobrać starszą wersję Xcode ), jeśli masz konto programisty premium (identyfikator Apple). Możesz zainstalować i pracować z Xcode 9 i Xcode 8.x w pojedynczym systemie (Mac). (Upewnij się, że Command Line Toolsobsługujesz obie wersje Xcode, aby pracować z terminalem (patrz: Jak zainstalować 'Narzędzie wiersza poleceń' ))


Wskazówka: Jak przeprowadzić migrację kodu Wersje Swift zgodne z Xcode 9 (Swift 3.2 lub 4)
Xcode 9 umożliwia tylko konwersję / migrację z Swift 3.0na Swift 3.2/4.0. Jeśli więc aktualna wersja języka Swift Twojego projektu jest niższa niż 3.0, musisz przeprowadzić migrację kodu w wersji zgodnej ze Swift 3 przy użyciu Xcode 8.x.

Jest to typowy komunikat o błędzie, który Xcode 9 wyświetla, jeśli podczas migracji identyfikuje język Swift w wersji poniżej 3.0.

wprowadź opis obrazu tutaj


Swift 3.2 jest obsługiwany zarówno przez Xcode 9, jak i Xcode 8.

Projekt ► (Wybierz cel projektu) ► Ustawienia kompilacji ► (Wpisz „swift” w pasku wyszukiwania) Język kompilatora Swift ► Wersja języka Swift ► Kliknij listę języków, aby ją otworzyć.

wprowadź opis obrazu tutaj



Przekonwertuj swój kod źródłowy z Swift 2.0 na 3.2 przy użyciu Xcode 8, a następnie kontynuuj z Xcode 9 (Swift 3.2 lub 4).


Aby ułatwić migrację kodu, wykonaj następujące kroki: (pomoże ci to przekonwertować do najnowszej wersji swift obsługiwanej przez narzędzie Xcode)

Xcode: Menu: Edytuj ▶ Ukryj ▶ Do bieżącej składni Swift

wprowadź opis obrazu tutaj

Krunal
źródło
9
Jeśli przybyłeś tutaj, ponieważ dopiero teraz (grudzień 2018) odkurzasz jakiś kod Swift 2, będziesz rozczarowany, gdy dowiesz się, że Xcode 8 nie działa na Mojave.
bugloaf
53

W przypadku projektów celu C utworzonych przy użyciu Xcode 8, a teraz otwieranych w Xcode 9, wyświetla ten sam błąd, jak wspomniano w pytaniu.

Aby to naprawić, naciśnij przycisk + w Ustawieniach kompilacji i wybierz Dodaj ustawienie zdefiniowane przez użytkownika, jak pokazano na poniższym obrazku

ustawienie kompilacji

Następnie w nowo utworzonym wierszu dodaj SWIFT_VERSIONjako klucz i 3.2jako wartość, jak poniżej.

wprowadź opis obrazu tutaj

Naprawi błąd dla projektów z celem c.

R. Mohan
źródło
2
To mi pomogło. Dzięki.
Andreas Kraft
9
Jeśli masz ten problem z CocoaPods, może być konieczne dodanie tego ustawienia kompilacji do sekcji pods.xcodeproject.
Stewart Macdonald
1
To zadziałało dla mnie, musiałem również zmodyfikować „ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES” w ustawieniach kompilacji na „$ (inherited)”
F-1
1
Jeszcze raz dziękuję 2 miesiące później
stycznia
1
Doceń rozwiązanie.
user366584
4

Właśnie otrzymałem to po utworzeniu nowego projektu Objective-C w Xcode 10, po dodaniu pliku modelu Core Data do projektu.

Znalazłem dwa sposoby, aby to naprawić:

  1. Prosty sposób: otwórz Inspektor plików modelu podstawowych danych ( - 1) i zmień język z Swift na Objective-C

Zmień język modelu danych podstawowych

  1. Dłuższa i bardziej niebezpieczna metoda

Model zawiera plik „zawartość” z następującym wierszem:

<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="14460.32" systemVersion="17G5019" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">

Tam jest sourceLanguage="Swift"wpis. Zmień to na, sourceLanguage="Objective-C"a błąd zniknie.

Aby znaleźć plik „zawartość”, kliknij prawym przyciskiem myszy .xcdatamodeldw Xcode i wykonaj „Pokaż w Finderze”. Kliknij prawym przyciskiem myszy rzeczywisty plik (Findera) i wykonaj „Pokaż zawartość pakietu”

Ponadto: zmiana języka modelu uniemożliwi Xcode generowanie plików podklas obiektów zarządzanych w języku Swift.

Nevan King
źródło
1

Może się to zdarzyć po dodaniu danych podstawowych do istniejącego projektu.
Sprawdź plik :
<Name> / <Name> .xcdatamodeld / <Name> .xcdatamodel / content
.
Ten plik zawiera wpis „sourceLanguage”, który (domyślnie) mógł mieć wartość „Swift”. Zmień to na „Cel-C”.

digitaldaemon
źródło
0

Po prostu klikam najnowszy przycisk szybkiej konwersji i ustawiam docelową kompilację aplikacji-> Swift wersja językowa: swift 4.0,

Mam nadzieję, że to pomoże.

Atal Singh
źródło
0

To rozwiązanie działa, gdy nic innego nie działa:

Spędziłem ponad tydzień, aby przekonwertować cały projekt i doszedłem do rozwiązania poniżej:

Najpierw odintegruj zależność kokopodów z projektu, a następnie zacznij konwertować projekt do najnowszej szybkiej wersji.

Przejdź do katalogu projektów w terminalu i wpisz:

pod deintegrate

Spowoduje to dezintegrację kokonodów z projektu i żadne ślady CocoaPods nie pozostaną w projekcie. Ale jednocześnie nie usunie xcworkspace i podfiles. W porządku, jeśli są obecne.

Teraz musisz otworzyć xcodeproj (nie xcworkspace), a otrzymasz wiele błędów, ponieważ w swoich głównych projektach wywołałeś metody zależności cocoapods.

Aby usunąć te błędy, masz dwie opcje:

  1. Skomentuj cały kod, którego użyłeś z biblioteki cocoapods.
  2. Utwórz klasę opakowującą, która ma fikcyjne metody podobne do biblioteki cocopods, a następnie wywołaj ją.

Po usunięciu wszystkich błędów możesz przekonwertować kod do najnowszej szybkiej wersji.

Czasami, jeśli otrzymujesz dziwne błędy, spróbuj wyczyścić dane pochodne i spróbuj ponownie.

Shubham Mishra
źródło
0

może potrzebujesz pobrać toolchain. Ten błąd występuje, gdy nie masz odpowiedniej wersji kompilatora Swift.

dalmata
źródło
-3

W moim przypadku wszystkie ostrzeżenia zniknęły po bezpośredniej zmianie wersji Swift z 2.x na 4.0 w ustawieniach kompilacji, z wyjątkiem dwóch ostrzeżeń.

Te ostrzeżenia związane z folderem myprojectnameTestsi myprojectnameUITests. Nie zauważyłem i pomyślałem, że ma to związek z bezpośrednią imigracją z Xcode 7 do Xcode 9 i pomyślałem, że nie mogę rozwiązać tego problemu i powinienem zainstalować brakującą wersję Xcode 8.

W moim przypadku usunąłem te foldery i wszystkie ostrzeżenia zniknęły, ale możesz odtworzyć ten folder i zawiera za pomocą tego:

file > new > target > (uitest or unittest extensions)

i użyj tego artykułu do tworzenia przypadków testowych: https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/04-writing_tests.html

iman kazemayni
źródło
a ktoś mi powie, jaki jest mój błąd !?
iman kazemayni
2
Osobiście nie przegłosowałbym tego, nie ma nic złego w Twojej odpowiedzi, ale najlepiej będzie skomentować pytanie OP. Możesz również zajrzeć na stackoverflow.com/help/how-to-answer, który pomoże Ci znaleźć właściwy sposób odpowiadania na pytania.
grassyburrito