Mam framework (w tym przypadku jest to RxSwift), który skompilowałem za pomocą Xcode 11.0 do tradycyjnego RxSwift.framework
pakietu stylów
To zaimportowane w porządku do Xcode 11.0, a także 11.1 nigdy nie miało z tym żadnych problemów
Dzisiaj, po wydaniu przez Apple Xcode 11.2, zaktualizowałem i pojawia się błąd:
Moduł skompilowany ze Swift 5.1 nie może zostać zaimportowany przez kompilator Swift 5.1.2
Jestem przyzwyczajony do szybkiego niedopasowania kompilatora i wiem, że mogę po prostu ponownie skompilować RxSwift za pomocą Xcode 11.2 i kontynuować, ale główną cechą Swift 5.1 była stabilność modułu .
Miałem wrażenie, że teraz, gdy mamy stabilność modułów, frameworki nie będą musiały być ponownie kompilowane z każdą nową wersją Xcode, ale najwyraźniej tak nie jest.
Jeśli ktoś mógłby wyjaśnić, co się tutaj dzieje, byłbym bardzo wdzięczny. Czy Xcode 11.2 wykazuje błąd? czy też musiałem jakoś powiedzieć, że chciałem mieć stabilność modułu, kiedy oryginalnie skompilowałem z Xcode 11.0?
Odpowiedzi:
OK, okazuje się, jeśli oglądasz wideo WWDC, wyjaśniają to: https://developer.apple.com/videos/play/wwdc2019/416/
Musisz ustawić opcję Build Libraries for Distribution na Yes w ustawieniach kompilacji twojego frameworka, w przeciwnym razie szybki kompilator nie wygeneruje niezbędnych
.swiftinterface
plików, które są kluczem do tego, aby przyszłe kompilatory mogły załadować starą bibliotekę.To kończy się w pliku project.pbxproj jako:
Po ustawieniu tej flagi, środowisko skompilowane za pomocą Xcode 11.0 (swift 5.1) było w stanie używać Xcode 11.2 (swift 5.1.2) i wszystko wydaje się działać poprawnie.
Mam nadzieję, że to pytanie / odpowiedź będzie przydatne jako odniesienie dla każdego, kto nie obejrzał wszystkich filmów WWDC
Jeśli błąd nadal występuje, przejdź do opcji Produkt > Wyczyść folder kompilacji i ponownie skompiluj .
źródło
carthage
wystarczająco inteligentny, aby pobrać to z mojego pliku .pbxproj lub, jak mówi powyżej @MihaiFratu, czy wszyscy zewnętrzni programiści frameworków muszą to ustawić w swoich projektach ramowych?Miałem ten sam błąd podczas importowania bibliotek stron trzecich. Naprawiłem to za pomocą łańcuchów narzędzi w Xcode i biorąc wydanie 19 września 2019 r. Tutaj https://swift.org/download/#releases . Potem musiałem ponownie zaimportować biblioteki i działało.
źródło
Możesz użyć Carthage, aby dodać środowisko RxSwift.
Zasadniczo Carthage daje podobny tradycyjny pakiet w stylu RxSwift.framework .
Więc spróbuj
carthage update --no-use-binaries
.źródło
To spowodowało, że mój błąd kompilatora zniknął.
carthage bootstrap --platform ios
brew bundle
pod repo update
źródło
brew bundle
? co to robi?