Không thể nhập mô-đun được biên dịch bằng Swift 4.0 trong Swift 4.0.1


91

Tuy nhiên, tôi đã biên dịch lại khuôn khổ bằng cách sử dụng cùng một Xcode và nó vẫn cho tôi lỗi này.

  • SDK cơ sở iOS 11.1 cho cả hai
  • Swift Language Version Swift 4.0 cho cả hai
  • Không sử dụng Pods / Carthage

Tôi hy vọng ai đó có thể biết


Có vẻ như Apple cần phải xem xét lại thông báo ngừng sử dụng 10 năm đối với Mục tiêu C: ^) Điều này đã khiến tôi phải hứng thú với hơn 1 dự án bây giờ và trên cả hai đều là các khung nhị phân của bên thứ ba.
Anton Tropashko

Câu trả lời:


138

Cập nhật:

Đối với các phiên bản phát hành của Xcode:

Lỗi này (và các lỗi tương tự liên quan đến Swift 4.1, 4.2, v.v.) sẽ xảy ra khi mở một dự án với Xcode 9.1, 9.2, 9.3, 9.4, 10, v.v. sử dụng các khung được xây dựng bằng các công cụ Xcode trước đó.

Để khắc phục sự cố, hãy cập nhật và xây dựng lại các khuôn khổ của bạn bằng Carthage ( carthage update --platform iOS), Cocoapods ( pod updatehoặc pod install) hoặc theo cách thủ công, với các công cụ Xcode mới được cập nhật. Các công cụ sẽ được cập nhật tự động khi bạn cập nhật Xcode, nhưng nếu không, bạn có thể làm theo các bước được nêu bên dưới trong câu trả lời gốc.

Bạn cũng có thể cần phải làm sạch dự án của mình cmd + shift + kvà có thể là thư mục xây dựng của bạn cmd + option + shift + kđể lấy Xcode để không sử dụng các bản dựng khung được lưu trong bộ nhớ cache.

Trong một số trường hợp, bạn cũng có thể cần phải xóa thư mục dữ liệu dẫn xuất của mình (Dễ dàng tìm thấy bằng cách đi tới Tùy chọn Xcode -> Vị trí -> Thư mục Dữ liệu gốc ( Cảm ơn Stunner )

Đối với phiên bản beta của Xcode:

Xem câu trả lời gốc bên dưới và sau đó làm theo các bước ở trên.

Câu trả lời gốc:

Có thể bạn vẫn có công cụ xcodebuild của mình được đặt thành Xcode 9.0 được xây dựng bằng Swift 4.0 và không tương thích với Swift 4.0.1 của Xcode 9.1 beta.

Kiểm tra thiết bị đầu cuối bằng lệnh:

xcodebuild -version

Hoặc chỉ cần vào tùy chọn Xcode -> Vị trí và kiểm tra / thay đổi các công cụ dòng lệnh thành Xcode 9.1. Bạn sẽ được thiết lập sau đó.


1
Tôi cũng đã xóa dữ liệu Derived và làm sạch dự án, không biết có cần thiết cho mọi người không nhưng ở đây dường như là như vậy. Cảm ơn
Simon

3
Xin chào @Zig. Một repo tôi sử dụng trên github (mattdonnelly / swifter) là Swift 4.0, nhưng rõ ràng đã được biên dịch bằng XCode 9.0, vì vậy tôi đang gặp sự cố này. Các bước cần thiết để biên dịch lại cocoapod của người khác trên Github cho XCode 9.1 trở lên là gì?
Joseph Beuys 'Mum

1
có cách nào để thêm công cụ dòng lệnh? Tôi vừa có Xcode 9.3 trong trình đơn thả xuống dòng lệnh của mình. và tôi có vấn đề này quá
tara tandel

1
Một số nhóm của tôi chưa sẵn sàng cho Swift 4.2, do đó tôi phải ghim Swift Language Versionvào Swift 4cho các nhóm đó. Sau đó, nó hoạt động.
skofgar 14/09/18

1
Thêm 1 cho phím tắt để dọn dẹp thư mục xây dựng - không phải là điều tôi biết cách làm.
Matt

25

Vấn đề của tôi là do khuôn khổ bên ngoài không được biên dịch cho Swift 4.0.2. Tôi đã thêm tệp này qua Carthage , vì vậy đang chạy:

carthage update --platform iOS

Và sau đó làm sạch dự án cmd + shift + kvà thư mục xây dựng cmd + option + shift + kvà xóa thư mục dữ liệu có nguồn gốc (chỉ đơn thuần là chuyển nó vào thùng rác cũng hoạt động) đã làm việc cho tôi.


2
thực sự, đây thực chất là giải pháp. Điều tương tự vừa xảy ra vào ngày hôm nay (18 tháng 4), do bản cập nhật nhanh mới nhất của Apple! :)
Fattie

cmd + option + shift + k là mẹo sau khi cập nhật Carthage. Cảm ơn!
Leonardo Leite

15

Trong trường hợp của tôi, tôi đã tải xuống phiên bản xCode 11 Beta để thử nghiệm SwiftUI. Khi tôi chạy dự án của mình, tôi gặp lỗi "Không thể nhập mô-đun được biên dịch bằng Swift 5.1 bằng trình biên dịch Swift 5.0.1: ..." .

Để khắc phục sự cố này. tôi đã thay đổi công cụ dòng lệnh xCode thành công cụ dòng chú thích xCode 11 mới. Sau đó, bạn có thể tạo dự án xcode mới bằng SwiftUI.

Xcode -> Preferences -> Location -> XCode command Line Tool

Công cụ dòng khen thưởng Xcode

tôi hy vọng, điều này sẽ giúp ích cho những ai muốn thử nghiệm với công việc miễn phí mới :)


9

Cài đặt Xcode Toolchain của phiên bản Xcode cụ thể đang hoạt động cho bạn từ đây .

Chuỗi công cụ Xcode bao gồm một bản sao của trình biên dịch, lldb và các công cụ liên quan khác cần thiết để cung cấp trải nghiệm phát triển gắn kết để làm việc trong một phiên bản Swift cụ thể.

Mở Preferences của Xcode, điều hướng đến Components> Toolchains và chọn chuỗi công cụ Swift đã cài đặt.

Điều này sẽ cho phép bạn biên dịch và chạy ứng dụng ngay bây giờ.


Sau 2 ngày tìm kiếm và cố gắng mỗi giải pháp khả thi với bản cập nhật carthage, bootstrap, cài đặt ngôn ngữ nhanh chóng vv Tôi tìm thấy câu trả lời đúng ở đây :)
memresubasi

7

Tôi đã gặp vấn đề này với Xcode 10 beta, bổ sung Swift 4.2. Vấn đề của tôi không liên quan đến Carthage hoặc bất kỳ phụ thuộc bên ngoài nào.

Chuyển đến YourTarget > Build Settings > Swift Language Versiontất cả các mục tiêu Xcode của bạn.

Của tôi đã được đặt tất cả Swift 4.

Sau khi thêm Giai đoạn tạo tệp sao chép, tôi bắt đầu gặp lỗi

: 0: error: không thể nhập mô-đun được biên dịch bằng Swift 4.1.2 bằng trình biên dịch 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

Lệnh MergeSwiftModule không thành công với mã thoát khác không

Sau đó, tôi đặt từng mục tiêu Swift Language Versionthành Swift 4.2, điều này đã loại bỏ lỗi.

Tuy nhiên, tôi không chắc tại sao lại xảy ra lỗi ngay từ đầu vì việc đặt tất cả các mục tiêu Swift 4phải hợp lệ như nhau.


1
Tôi gặp sự cố khi tìm kiếmBuild Settings
Chandrew

@Chandrew nhấp vào Mục tiêu của bạn trước. Cập nhật câu trả lời.
pkamb

3

Trong trường hợp của tôi (Xcode 9.2):

Tôi đã đến Xcode Preferences > Locations > Derived Data

Sau đó tôi đã xóa dữ liệu và thực hiện một bản dựng sạch sẽ và ổn.


1

Trong trường hợp của tôi, tôi đã sử dụng CocoaPods với plugin cocoapods-binaryđể tạo trước thư viện thành tệp nhị phân. Sau khi tôi nâng cấp Xcode từ 10 lên 11, Xcode cho tôi lỗi này:

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

Tôi sửa nó bằng cách xóa /Podsthư mục và chạy pod install.


0

Trong trường hợp của tôi, tôi đã biên dịch lại framework với bất kỳ phiên bản nào mà nó phàn nàn.

Để biên dịch lại, hãy chạy pod updatehoặc cập nhật carthage (cái mà bạn đang sử dụng) và xây dựng dự án.

Sau đó tìm kiếm khuôn khổ trong công cụ tìm. Sao chép-dán theFramework.frameworkdự án của bạn và đảm bảo "Sao chép các mục nếu cần." Xây dựng lại dự án và nó sẽ hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.