Moduł skompilowany w Swift 4.0 nie może być importowany w Swift 4.0.1

92

Jednak ponownie skompilowałem framework przy użyciu tego samego Xcode i nadal daje mi ten błąd.

  • Podstawowy pakiet SDK iOS 11.1 dla obu
  • Swift Language Version Swift 4.0 dla obu
  • Nie używam Pods / Carthage

Mam nadzieję, że ktoś może wiedzieć

Szymon
źródło
Wygląda na to, że Apple musi ponownie rozważyć 10-letnie powiadomienie o wycofaniu Celu C: ^) To ugryzło mnie teraz w ponad 1 projekcie i w obu są to binarne frameworki trzeciej strony.
Anton Tropashko,

Odpowiedzi:

139

Aktualizacja:

W przypadku wersji Xcode:

Ten błąd (i podobne błędy dotyczące Swift 4.1, 4.2 itd.) Wystąpi podczas otwierania projektu z Xcode 9.1, 9.2, 9.3, 9.4, 10 itd., Który korzysta ze struktur zbudowanych przy użyciu wcześniejszych narzędzi Xcode.

Aby rozwiązać ten problem, zaktualizuj i carthage update --platform iOSodbuduj struktury za pomocą Carthage ( ), Cocoapods ( pod updatelub pod install) lub ręcznie, za pomocą nowych zaktualizowanych narzędzi Xcode. Narzędzia powinny być aktualizowane automatycznie podczas aktualizacji Xcode, ale jeśli nie, możesz wykonać kroki opisane poniżej w oryginalnej odpowiedzi.

Może być również konieczne wyczyszczenie projektu cmd + shift + ki prawdopodobnie folderu kompilacji, cmd + option + shift + kaby Xcode nie używał buforowanych kompilacji platformy.

W niektórych przypadkach może być również konieczne usunięcie folderu danych pochodnych (można go łatwo znaleźć, przechodząc do Preferencje Xcode -> Lokalizacje -> Folder danych pochodnych ( dzięki Stunner )

W przypadku wersji beta Xcode:

Zobacz oryginalną odpowiedź poniżej, a następnie wykonaj powyższe kroki.

Oryginalna odpowiedź:

Prawdopodobnie nadal masz narzędzia xcodebuild ustawione na Xcode 9.0, które kompilują się ze Swift 4.0 i są niezgodne z Xcode 9.1 beta Swift 4.0.1.

Sprawdź w terminalu za pomocą polecenia:

xcodebuild -version

Lub po prostu przejdź do preferencji Xcode -> Lokalizacje i sprawdź / zmień narzędzia wiersza poleceń na Xcode 9.1. W takim razie powinieneś być ustawiony.

Zig
źródło
1
Wyczyściłem również dane pochodne i wyczyściłem projekt, nie wiem, czy to konieczne dla wszystkich, ale wydawało się, że tak jest. Dzięki
Simon
3
Cześć @Zig. Repozytorium, którego używam na github (mattdonnelly / swifter) jest w Swift 4.0, ale oczywiście zostało skompilowane przy użyciu XCode 9.0, więc mam ten problem. Jakie kroki są potrzebne, aby ponownie skompilować czyjś cocoapod na Github dla XCode 9.1 i nowszych?
Mama Josepha Beuysa
1
czy istnieje sposób na dodanie narzędzia wiersza poleceń? Po prostu mam Xcode 9.3 w menu rozwijanym w wierszu poleceń. i ja też mam ten problem
tara tandel
1
Niektóre z moich strąków nie są gotowe na Swift 4.2, dlatego musiałem przypiąć Swift Language Versiondo Swift 4nich. Wtedy zadziałało.
skofgar,
1
Plus 1 za skrót do czyszczenia folderu kompilacji - nie było to coś, co wiedziałem, jak zrobić odręcznie.
Matt
25

Mój problem był spowodowany tym, że zewnętrzna struktura nie była kompilowana dla Swift 4.0.2. Dodałem ten plik przez Carthage , więc uruchomiłem:

carthage update --platform iOS

A potem wyczyszczenie cmd + shift + kfolderu projektu i kompilacji cmd + option + shift + koraz usunięcie folderu danych pochodnych (po prostu przeniesienie go do kosza również działa) działało dla mnie.

Szlagier
źródło
2
w istocie jest to zasadniczo rozwiązanie. To samo wydarzyło się dzisiaj (18 kwietnia), dzięki najnowszej szybkiej aktualizacji Apple! :)
Fattie
cmd + option + shift + k, co załatwiło sprawę po aktualizacji Kartaginy. Dzięki!
Leonardo Leite
15

W moim przypadku pobrałem wersję beta xCode 11, aby przetestować SwiftUI. Kiedy uruchamiam projekt, pojawia się błąd „Moduł skompilowany w Swift 5.1 nie może być zaimportowany przez kompilator Swift 5.0.1: ...” .

Aby rozwiązać ten problem. Zmieniłem narzędzie wiersza poleceń xCode na nowe narzędzie wiersza komentarzy xCode 11. Następnie możesz utworzyć nowy projekt xcode za pomocą SwiftUI.

Xcode -> Preferencje -> Lokalizacja -> Narzędzie wiersza poleceń XCode

Narzędzie Xcode Commend Line

mam nadzieję, że pomoże to komuś, kto chce przetestować nowy freamework :)

Emre Gürses
źródło
9

Zainstaluj Xcode Toolchain określonej wersji Xcode, która pracowała dla Ciebie stąd .

Łańcuch narzędzi Xcode zawiera kopię kompilatora, lldb i innych powiązanych narzędzi potrzebnych do zapewnienia spójnego środowiska programistycznego do pracy w określonej wersji Swift.

Otwórz preferencje Xcode, przejdź do Components> Toolchains i wybierz zainstalowany Swift toolchain.

Umożliwi to skompilowanie i uruchomienie aplikacji na razie.

Tina
źródło
Po 2 dniach poszukiwań i próbuje wszelkich możliwych rozwiązanie z aktualizacją Kartaginie, bootstrap, ustawień językowych Swift itp znalazłem właściwą odpowiedź tutaj :)
memresubasi
7

Trafiłem na ten problem z Xcode 10 beta, który dodaje Swift 4.2. Mój problem nie był związany z Kartaginą ani żadnymi zewnętrznymi zależnościami.

Przejdź do YourTarget > Build Settings > Swift Language Versiondla wszystkich swoich celów Xcode.

Moje były ustawione na Swift 4.

Po dodaniu fazy tworzenia kopiowania plików zacząłem otrzymywać błąd

: 0: błąd: moduł skompilowany ze Swift 4.1.2 nie może zostać zaimportowany przez kompilator Swift 4.2: /Users/user/Library/Developer/Xcode/DerivedData/MyApp-faskfrihumfcdibjxisjvbfshppp/Build/Intermediates.noindex/MyApp.build/Debug/ MyAppExtension.build/Objects-normal/x86_64/MyClass~partial.swiftmodule

Polecenie MergeSwiftModule nie powiodło się z niezerowym kodem zakończenia

I następnie ustawić każdy cel na Swift Language Versioncelu Swift 4.2, który wyeliminował ten błąd.

Nie jestem jednak pewien, dlaczego ten błąd wystąpił w pierwszej kolejności, ponieważ ustawienie wszystkich celów Swift 4powinno być równie ważne.

pkamb
źródło
1
Mam problem ze znalezieniemBuild Settings
Chandrew
@Chandrew najpierw kliknij swój cel. Zaktualizowana odpowiedź.
pkamb
3

W moim przypadku (Xcode 9.2):

Poszedłem do Xcode Preferences > Locations > Derived Data

Następnie usunąłem dane i wykonałem czystą kompilację i wszystko było w porządku.

user3288482
źródło
1

W moim przypadku użyłem CocoaPods z wtyczką cocoapods-binarydo wstępnego kompilowania bibliotek do plików binarnych. Po uaktualnieniu Xcode z 10 do 11 Xcode wyświetla ten błąd:

Module compiled with Swift 5.0.1 cannot be imported by the Swift 5.1 compiler

Naprawiam to, usuwając /Podskatalog i uruchamiając pod install.

Benjamin Wen
źródło
0

W moim przypadku ponownie skompilowałem framework z dowolną wersją, na którą narzekał.

Aby ponownie skompilować, uruchom pod updatelub zaktualizuj Kartaginę (której kiedykolwiek używasz) i skompiluj projekt.

Następnie wyszukaj strukturę w wyszukiwarce. Skopiuj i wklej theFramework.frameworkdo swojego projektu i upewnij się, że „Kopiuj elementy w razie potrzeby”. Zbuduj projekt ponownie i powinien działać.

Joseph Francis
źródło