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.