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

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ł.


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/

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.


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

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

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


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


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.


0

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

$(inherited)
$(PROJECT_DIR)/Carthage/Build/iOS
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.