Modułu skompilowanego w Swift 3.0 nie można zaimportować w Swift 3.0.1

87

Zaktualizowałem Xcode do 8.1 GM i teraz otrzymuję poniższy błąd dla SwiftyJSON. Wydaje się, że inne zaimportowane frameworki działają. Czy istnieje sposób, aby wymusić to, aby działało w Swift 3, dopóki SwiftyJSON nie zaktualizuje ich struktury? Użyłem Carthage do importu / aktualizacji frameworków. Próbowałem też zmieniać Use Legacy Swift language versionOn i Off bezskutecznie.

Modułu skompilowanego w Swift 3.0 nie można zaimportować w Swift 3.0.1: Modules / SwiftyJSON.swiftmodule / arm64.swiftmodule

HH887
źródło

Odpowiedzi:

171

SwiftyJson jest pobierany prekompilowany przez Kartaginę. Wstępnie skompilowany plik do pobrania jest w wersji Swift 3.0. To sprawia, że ​​kompilator narzeka, że ​​wersja jest nieprawidłowa. Używając następującego polecenia:

carthage update --platform iOS --no-use-binaries

SwiftyJson (i wszystkie inne frameworki w Carthage) zostaną skompilowane lokalnie przy użyciu lokalnej wersji Swift (3.0.1), a kompilator nie będzie już narzekał.

zirinisp
źródło
7
Prawdopodobnie zaoszczędziłeś mi godzinę poszukiwań. Dziękuję Ci.
djv
24
Zapraszamy. Szczerze mówiąc kartagina powinna być nieco bardziej inteligentna i sprawdzić szybki numer wersji.
zirinisp
Jakieś inne pomysły? Ponieważ to nie zadziałało, chociaż w moim przypadku mam problemy z
Unboxem
To było doskonałe. Czy istnieje sposób na osadzenie tego w Cartfile, abym mógł po prostu pisać carthage updatebez znajomości / martwienia się innymi programistami o dodatkowe flagi?
Craig Otis
1
Miałem podobny błąd z PromiseKit 4.0 po aktualizacji z XCode 8.0 do XCode 8.1. Wystąpił błąd EXC_BAD_ACCESS. Ostatecznie PromiseKit musiał zostać ponownie skompilowany ze swift 3.0.1 i problem został rozwiązany.
Ricardo Anjos
21

Usuń pamięć podręczną aplikacji z DerivedData i odbuduj. błąd można naprawić.

Ścieżka DerivedData w następujący sposób:

~/Library/Developer/Xcode/DerivedData/
i-chou
źródło
Pracowałem dla mnie, usuwam to folter, usuwam folder pod i używam "pod install". I naprawione.
Jose Pose S
Cześć. To rozwiązanie zadziałało dla mnie. Czy możesz szczegółowo wyjaśnić, co się dzieje, gdy usuwamy dane pochodne? Jak znika błąd?
iPhoneDeveloper
Dla mnie też pracował, dzięki.
Hasya
10

Upewnij się, że umieściłeś nowy pakiet XCode 8.1 GM w folderze Aplikacje. Napotkaliśmy ten problem, gdy jeden z nas uruchamiał Carthage, aby zaktualizować nasze zależności, ale nie zastąpił starej aplikacji XCode 8.0 w folderze aplikacji (8.1 GM działał poza pulpitem).

Chcesz się upewnić, że po uruchomieniu następującego w terminalu: xcrun swift -versionże zwróci Apple Swift version 3.0.1.

Clay Garrett
źródło
To zadziałało dla mnie, dziękuję! Również polecenie, które działało w terminalu, to xcrun swift
-version
2
Nadal pojawia się ten sam problem. Wszelkie inne sugestie
harsh_v
2
To polecenie zadziałało dla mnie: aktualizacja kartaginy - platforma iOS - no-use-binaries
HH887
2
Skończyłem carthage update --platform iOS --no-use-binariesi nadal nie działa. Wyczyściłem projekt i zrestartowałem Xcode i nadal otrzymuję błąd. Coś jeszcze mogę spróbować?
Clifton Labrum
1
Próbowałem tego. WracaApple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Target: x86_64-apple-macosx10.9
Clifton Labrum
9

Aktualizacja domyślna Xcodedo nowej na terminalu zadziałała dla mnie.

Krok 1: Użyj następującego polecenia, aby zaktualizować wersję Xcode do najnowszej w Terminalu. Nr ref

sudo xcode-select -switch <path/to/>Xcode.app

Krok 2: Teraz wypróbuj polecenie aktualizacji kartaginy

carthage update --platform iOS
Mohammad Zaid Pathan
źródło
9

Tylko po to, aby podać najnowsze aktualizacje:

Carthage wydała wersję 0.20 27 lutego 2017 r.

Carthage używa teraz pliku binarnego przed kompilacją tylko wtedy, gdy dostępny plik binarny przed kompilacją jest zgodny .

To powiedziawszy, nie musisz już używać: --no-use-binariesaby uniknąć niezgodnego środowiska przed kompilacją.

Więc upewnij się, że masz wersję kartaginy większą niż0.20 i po prostu zrób:

carthage update --platform iOS
kanekin
źródło
XCode 8.3.3 Po aktualizacji Carthage do wersji 0.25 i po wykonaniu poniższych czynności, działała aktualizacja kartaginy - platforma iOS - no-use-binaries
anoop4real
@ anoop4real To nie działa dla Ciebie bez --no-use-binaries? Carthage powinien być w stanie wykryć, czy plik binarny jest zgodny z wersją kompilatora. Jeśli nie jest kompatybilny, powinien automatycznie porzucić pobrany plik binarny i zbudować szkielet lokalnie.
kanekin
5

Tak jak powiedział @zirinisp:

  1. Możesz użyć następującego polecenia:carthage update --platform iOS --no-use-binaries
  2. Używając następującego polecenia: xcrun swift -versionaby zobaczyć wersję Swift
  3. Zrób to: Xcode->preferences->locationsaby wyczyścić dane pochodne i dane archiwalne, najważniejsze jest, aby zmienić narzędzia wiersza poleceń na „Xcode 8.1 "
  4. Używając następującego polecenia xcrun swift -version:, możesz zobaczyć, że wersja szybka to 3.0.1
  5. Zestaw Use Legacy Swift Language Version = NO

Mam nadzieję, że ci to pomoże

kris
źródło
1
  1. Przenieś wersję beta / GM, jeśli Xcode do folderu / Applications i nazwij go Xcode-beta

  2. Sprawdź wynik:

    xcrun swift --version

uruchamiając to polecenie w terminalu, jego dane wyjściowe powinny być zgodne z wersją Swift, którą ma skompilować aplikacja, ponieważ Carthage używa danych wyjściowych tego polecenia do określenia lokalnej wersji Swift.

  1. Zaktualizuj Xcode do najnowszej wersji na Terminalu, uruchamiając następujące polecenie:

    sudo xcode-select -s /Applications/Xcode-beta.app/

  2. Zbuduj biblioteki dla iOS i uniemożliwia Carthage pobieranie istniejących (ale niekompatybilnych) prekompilowanych plików binarnych, uruchamiając następujące polecenie:

    carthage update --platform iOS --no-use-binaries

  3. Oczyść i zbuduj

Tul
źródło
0

Miałem dokładnie ten sam problem z biblioteką XCTest_Gherkin, co dla mnie zadziałało to:

  1. Product-> Scheme->XCTest-Gherkin
  2. Product -> Build

Mam nadzieję, że to pomoże. Używam Cocoapods.

Alan Steiman
źródło
0

W ustawieniach kompilacji Xcode upewnij się, że ścieżki wyszukiwania struktury zawierają odpowiedni folder kompilacji Kartaginy:

$(inherited)
$(PROJECT_DIR)/Carthage/Build/iOS
John Cromie
źródło