Xcode 9: Moduł skompilowany w Swift 3.1 nie może być importowany w Swift 4.0


79

Po aktualizacji do Xcode 9 próbowałem zbudować jeden z moich projektów.

Używam modułu FacebookLogin . Mam błąd kompilatora w FacebookLogin / LoginButton.swift

@testable import FacebookCore
❌ Module compiled with Swift 3.1 cannot be imported in Swift 4.0

W ustawieniach kompilacji mojego celu wersja językowa Swift jest ustawiona na Swift 3.2 .

Dodano zrzut ekranu

Chyba muszę poczekać, aż Facebook zaktualizuje ich pod? Albo jakaś inna sugestia?

Dzięki !


Możesz spróbować to ogłupiać.
JerryZhou

Odpowiedzi:


73

Aktualizacja:

Rozwiązanie przetestowane również i działające w Swift 5 i Xcode 11.

Oryginalny:

Chciałbym dodać, że jeśli używasz Carthage do kompilacji modułu w Swift 3.2, powinieneś przejść do terminala i uruchomić:

sudo xcode-select --switch /Applications/Xcode-beta.app/Contents/Developer

Aby użyć narzędzi wiersza poleceń Xcode 9, możesz uruchomić:

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

Spowoduje to skompilowanie biblioteki przy użyciu aktualnych narzędzi wiersza poleceń, może to być nieco powolne, ale teraz projekt powinien zostać zbudowany.

Uwaga

Aby przywrócić i używać stabilnych narzędzi wiersza poleceń Xcode, po prostu uruchom:

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

1
Miałem ten sam błąd, używając frameworka Algolia i skompilowałem go za pomocą narzędzia do obsługi kartaginy i Xcode 9 działało dobrze! Dzięki
vmeyer

3
Pracował dla mnie przy użyciu SwiftyJson. Dzięki!
leandrodemarco

2
Pracował dla mnie przy użyciu Alamofire
pachun

Cześć @xaviPedrals, potrzebuję twojej pomocy ... Próbuję uruchomić ten projekt " github.com/swiftingio/SingTest ", ale otrzymuję ten błąd "Moduł skompilowany w Swift 3.1 nie może być zaimportowany przez kompilator Swift 4.2.1: / Users / aliapple / Desktop / SingTestByAhtazaz / Pods / AudioKit / iOS / AudioKit.framework / Modules / AudioKit.swiftmodule / arm64.swiftmodule ". Czy możesz mi w tym pomóc?
Ahtazaz

Cześć @ Panie Ahtazaz, ten projekt jest sprzed 2 lat, więc prawdopodobnie został wykonany i skompilowany w Swift 3, najpierw projekt powinien zostać zaktualizowany do Swift 4 lub 5, a następnie spróbuj uruchomić polecenie carthage, carthage update NameOfTheLibrary --platform iOS --no-use-binariesaby zaktualizować biblioteki i powinno być dobrze
xavi.pedrals

26

Xcode 9 jest dostarczany z kompilatorem Swift 4, który rozumie zarówno Swift 3.2, jak i Swift 4, umożliwia nawet mieszanie i dopasowywanie między 2 wersjami. Niestety inne wersje nie są obsługiwane.

Nawet jeśli ustawisz język na Swift 3.2, użyje on kompilatora Swift 4.

Jeśli używasz cocoapods, możesz dodać to na końcu pliku pod, aby zmusić strąki do używania Swift 3.2 lub 4.0:

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['SWIFT_VERSION'] = '3.2'
        end
    end
end

Alternatywnie, możesz tymczasowo umieścić pliki z kapsuły bezpośrednio w swoim projekcie, dopóki FacebookLogin nie zostanie zaktualizowany do Swift 3.2 lub 4.

Uwaga: zmieniono na podstawie opinii Matta


1
Do Twojej wiadomości - jest to nieco zbyt agresywne, zmuszając wszystkie kapsułki do przełączenia w tryb Swift 4.0. Jeśli kapsuła jest zgodna ze standardem Swift 3, możesz bezpiecznie przejść do wersji Swift 3.2. Przejście do 4.0 najprawdopodobniej spowoduje problemy z kompilatorem dla wielu podów.
Matt S.,

19

Może uda ci się wyczyścić cel, zanim go zbudujesz. U mnie działa dobrze.


7
Nie działa dla mnie, wciąż szukam innego rozwiązania.
Arnaud,

11

Napotkałem ten sam problem na Xcode 9 Beta 3, który wskazywał na `` Alamofire '' i wypróbowałem kilka różnych rozwiązań, najłatwiejsze, które znalazłem, to

1. CMD+SHIFT+K to clean the build
2. Restart Xcode 9 <-- make sure you do this step, that's critical. `

11
Jest rok 2017 i nadal musimy ponownie uruchomić Xcode, aby rozwiązać błędy. Dziękuję, Apple. Dziękuję Ci.
Oded Harth

10

Wykonanie „czystego folderu kompilacji” i ponowne uruchomienie Xcode 9 usunęło błąd. Błąd nie zatrzymał również uruchomienia aplikacji na moim urządzeniu lub symulatorze.


1
„czysty folder kompilacji”: Aby uzyskać dostęp do opcji, otwórz menu Produkt i użyj klawisza Opcja, aby wyświetlić opcję Wyczyść folder kompilacji.
Hans

8

goto xcode DerivedData, a następnie usuń cały plik z niego i ponownie skompiluj projekt. to działa dla mnie.

a domyślny katalog DerivedData to: ~ / Library / Developer / Xcode / DerivedData.


8

Jeśli używasz Kartaginy , otwórz terminal i;

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

Jeśli używasz Pod , otwórz terminal i;

pod update

(Również jeśli nie działa w pod, możesz zmienić SWIFT_VERSION w podfile Ex:

config.build_settings['SWIFT_VERSION'] = '3.2'

)

Po;

Otwórz Xcode i użyj;

Command+Option+Shift+K

wprowadź opis obrazu tutaj


1
Nie publikuj identycznych odpowiedzi na wiele pytań. Opublikuj jedną dobrą odpowiedź, a następnie zagłosuj / oflaguj, aby zamknąć pozostałe pytania jako duplikaty. Jeśli pytanie nie jest powtórzeniem, dostosuj swoje odpowiedzi do pytania. Zobacz meta.stackexchange.com/q/104227/311792
paper1111

@ paper1111 Wyjaśniam wszystko w mojej odpowiedzi i działa
SwiftDeveloper

Używam kartaginy i to rozwiązanie zadziałało. aktualizacja kartaginy "My Framework" nie przerwała tego. Musiałem zaktualizować cały katalog kartaginy. Trwało to wieczność, ale udało się.
Matan Guttman

1
To rozwiązanie również działało u mnie. Aby być podwójnym, upewnij się, że zamknąłeś i ponownie uruchomiłeś xcode po wyczyszczeniu folderu kompilacji za pomocą Command + Option + Shift + K.
Torsten Ojaperv

@SwiftDeveloper Gdzie idzie config.build_settingsczęść?
Adrian,

4

Mi to pasuje.

1. Wyczyść swój projekt w Xcode 8

2. Zbuduj lub uruchom projekt w Xcode 9


3

Wyczyściłem projekt w Xcode 9, a następnie uruchomiłem aplikację, działa.


2

Miałem ten sam problem z Xcode 9 GM i to rozwiązało mój problem: Usuń go z projektu i przeciągnij ponownie do „Osadzonych plików binarnych”.


Miałem problem z Alamofire 4.5.1 i wypróbowałem wszystko inne na tej stronie, pod updateale bez rezultatu. W końcu dodałem framework bezpośrednio do mojego projektu i dodałem go do moich wbudowanych plików binarnych, które działały
Heki


1

mam

pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'
pod 'FBSDKShareKit'

w moim projekcie i import FBSDKLoginKit po wyczyszczeniu celu nie miałem żadnego problemu

Ponieważ kapsuła, z której korzystasz, działa szybko i jest kapsułą beta, jest prawdopodobne, że wystąpiłyby problemy z kompilatorem Swift 4, więc na razie powinieneś używać wersji z celem


0

Jeśli używasz z Pod:

  1. W Podfilekomentarzu FacebookLogin pod
  2. pod install

  3. W Podfileodkomentowaniu FacebookLogin pod
  4. pod install

  5. Uruchom ponownie swój projekt

0

W moim przypadku - rzeczywisty pod odwoływał się do statycznego zipa z gotowymi plikami binarnymi ukierunkowanymi na Swift 3.1. Więc jedynym rozwiązaniem jest przebudowa frameworka za pomocą kodu źródłowego z xcode 9.

https://github.com/AudioKit/AudioKit/issues/980


Mam podobny problem z odwołaniami do AudioKit w podach. Jednak Twoje rozwiązanie odnosi się do pliku build_frameworks.sh znajdującego się w „Framework”. Dodaj więcej szczegółów. Nie mogę znaleźć takiego pliku.
TomV

spróbuj wskazać plik podfile do nowszej wersji. wersja, która została zbudowana z najnowszym xcode 9 - / nie potrzeba żadnych zmian w skrypcie kompilacji. github.com/AudioKit/AudioKit/releases
johndpope

Dzięki za wskazówkę. Musiałem zaktualizować wersję AudioKit w cocoapods do najnowszej, która miała build_frameworks.sh. Build_frameworks.sh był potrzebny do „walidacji” AudioKit, aby powstrzymać Apple od odrzucania aplikacji.
TomV
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.