Mô-đun được biên dịch với Swift 5.1 không thể được nhập bởi trình biên dịch Swift 5.1.2


91

Tôi có một khung (trong trường hợp này là RxSwift) mà tôi đã biên dịch bằng Xcode 11.0 vào RxSwift.frameworkgói kiểu truyền thống

Điều này đã nhập tiền phạt vào Xcode 11.0 và 11.1 không bao giờ có bất kỳ vấn đề nào với nó

Hôm nay, khi Apple phát hành Xcode 11.2, tôi đã nâng cấp và tôi gặp lỗi:

Mô-đun được biên dịch với Swift 5.1 không thể được nhập bởi trình biên dịch Swift 5.1.2

Tôi đã sử dụng để nhanh chóng không khớp trình biên dịch và tôi biết rằng tôi chỉ có thể biên dịch lại RxSwift bằng Xcode 11.2 và tiếp tục, nhưng tính năng tiêu đề của Swift 5.1 là tính ổn định của mô-đun .

Tôi có ấn tượng rằng bây giờ chúng tôi có sự ổn định của mô-đun, các khung sẽ không cần phải được biên dịch lại với mỗi bản phát hành Xcode mới, nhưng điều này rõ ràng không phải là trường hợp.

Nếu bất cứ ai có thể giải thích những gì đang xảy ra ở đây tôi sẽ đánh giá cao nó. Xcode 11.2 có lỗi không? hoặc bằng cách nào đó tôi cần phải nói với nó rằng tôi muốn sự ổn định của mô-đun khi tôi biên dịch ban đầu với Xcode 11.0?



Đối với tôi Toolchain với phiên bản swift cũ hơn đã hoạt động: stackoverflow.com/a/43142147/5846135
Zeero0

Câu trả lời:


108

OK, hóa ra nếu bạn xem video WWDC, họ sẽ giải thích nó: https://developer.apple.com/ideo/play/wwdc2019/416/

Bạn cần đặt tùy chọn Thư viện xây dựng cho phân phối thành trong cài đặt bản dựng của khung của bạn, nếu không trình biên dịch nhanh không tạo ra cần thiết.swiftinterface tệp là chìa khóa để trình biên dịch trong tương lai có thể tải thư viện cũ của bạn.

Điều này kết thúc trong tệp project.pbxproj của bạn dưới dạng:

BUILD_LIBRARY_FOR_DISTRIBUTION = YES;

Sau khi đặt cờ này, một khung tôi đã biên dịch bằng Xcode 11.0 (swift 5.1) đã có thể được sử dụng bởi Xcode 11.2 (swift 5.1.2) và mọi thứ dường như hoạt động chính xác.

Hy vọng rằng câu hỏi / câu trả lời này sẽ đóng vai trò là tài liệu tham khảo hữu ích cho tất cả những người chưa xem tất cả các video WWDC

Nếu lỗi vẫn còn, hãy chuyển đến Sản phẩm > Làm sạch Thư mục Xây dựngXây dựng lại.


1
Tuyệt vời! Bây giờ, hãy hy vọng tất cả các nhà phát triển khung bên thứ 3 khám phá điều này - ha ha :)
Mihai Fratu

25
Điều này không giúp ích gì trong trường hợp của tôi. Tôi đặt nó thành "CÓ" nhưng tôi vẫn nhận được lỗi. Có ý kiến ​​gì không?
davidOhara

3
Tôi đang làm việc với Carthage và 10 khung ... ish. Là carthageđủ thông minh để nhận điều này từ tệp .pbxproj của tôi , hoặc như @MihaiFratu nói ở trên, có phải tất cả các nhà phát triển khung bên thứ ba cần phải tự đặt nó trong các dự án khung của họ không?
nteissler

9
@davidOhara trong trường hợp của tôi, nó đã xảy ra với sự cố đã biết này trong Xcode 11.2: Nếu một mô-đun được xây dựng với BUILD_LIBRARIES_FOR_DISTRIBNING và chứa một loại công khai có cùng tên với chính mô-đun, khách hàng sẽ không thể nhập mô-đun. (19481048) (FB5863238) trong ghi chú phát hành Xcode 11.2: developer.apple.com/documentation/xcode_release_notes/
Richard Chirino

2
@davidOhara Đáng buồn là tôi không tìm thấy cách giải quyết. Đối với chúng tôi, việc đổi tên lớp cũng không thể thực hiện được vì đây là lớp chính trong khung của chúng tôi và sẽ phá vỡ mã của khách hàng. Nếu tôi xây dựng khung bằng Xcode 11.2 thì nó sẽ biên dịch trên Xcode 11.2 nhưng nó sẽ không biên dịch vào ngày 11.1 hoặc sớm hơn. Phiên bản Xcode 11.2.1 GM ngày nay chưa khắc phục được sự cố. Đây là vé trên trình theo dõi vấn đề nhanh chóng trong trường hợp bạn muốn để mắt đến nó: bug.swift.org/browse/SR-11704 Ngoài ra còn có một radar gắn vào nó.
Richard Chirino

2

Tôi đã có cùng một lỗi khi nhập thư viện bên thứ 3. Tôi đã sửa nó bằng các toolchains trong Xcode và lấy bản phát hành ngày 19 tháng 9 năm 2019 từ đây https://swift.org/doad/#release . Sau đó tôi phải nhập lại thư viện của mình và nó đã hoạt động.


đây là giải pháp đơn giản nhất nhờ một bó
Krishan Patel

Tôi gặp sự cố về Mô-đun khung được biên dịch với Swift 5.1.2 không thể được nhập bởi Swift 5.2.2, làm cách nào để giải quyết vấn đề này?
Kishan Suthar

0

Bạn có thể sử dụng Carthage để thêm khung RxSwift.

Về cơ bản, Carthage cung cấp cho bạn gói kiểu RxSwift.framework truyền thống tương tự .

Sau đó thử carthage update --no-use-binaries.


Downvote vì với carthage bạn chỉ cần xây dựng lại thư viện của mình trên trình biên dịch mới. Câu hỏi rõ ràng là về việc tải các thư viện nhị phân được xây dựng bởi trình biên dịch trước
Orion Edwards

0

Điều này làm cho lỗi biên dịch của tôi biến mất.

  1. carthage bootstrap --platform ios
  2. brew bundle
  3. pod repo update

brew bundle? nó làm gì?
skywinder

Downvote vì với carthage bạn đang xây dựng lại thư viện của mình trên trình biên dịch mới. Câu hỏi rõ ràng là về việc tải các thư viện nhị phân được xây dựng bởi trình biên dịch trước
Orion Edwards
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.