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


79

Sau khi cập nhật lên Xcode 9, tôi đã cố gắng xây dựng một trong các dự án của mình.

Tôi sử dụng nhóm FacebookLogin . Tôi gặp lỗi trình biên dịch trong FacebookLogin / LoginButton.swift

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

Trong cài đặt xây dựng mục tiêu của tôi, phiên bản ngôn ngữ Swift được đặt thành Swift 3.2 .

Đã thêm ảnh chụp màn hình

Tôi đoán tôi cần phải đợi Facebook cập nhật nhóm của họ? Hoặc bất kỳ gợi ý nào khác?

Cảm ơn !


Bạn có thể thử dân gian đó.
JerryZhou

Câu trả lời:


73

Cập nhật:

Giải pháp cũng đã thử nghiệm và hoạt động trong Swift 5 và Xcode 11.

Nguyên:

Tôi muốn nói thêm rằng nếu bạn đang sử dụng Carthage để biên dịch một mô-đun trong Swift 3.2, bạn nên vào một thiết bị đầu cuối và chạy:

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

Để sử dụng các công cụ dòng lệnh Xcode 9, sau đó bạn có thể chạy:

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

Điều này sẽ biên dịch thư viện với các công cụ dòng lệnh hiện tại của bạn, nó có thể hơi chậm nhưng bây giờ dự án sẽ được xây dựng.

Ghi chú

Để hoàn nguyên và sử dụng các công cụ dòng lệnh Xcode ổn định của bạn, chỉ cần chạy:

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

1
Tôi đã gặp lỗi tương tự khi sử dụng khuôn khổ Algolia và xây dựng nó bằng carthage và công cụ lệnh Xcode 9 hoạt động tốt! Cảm ơn
vmeyer

3
Làm việc cho tôi bằng SwiftyJson. Cảm ơn!
leandrodemarco

2
Làm việc cho tôi sử dụng Alamofire
pachun

Xin chào @xaviPedrals, tôi cần sự trợ giúp của bạn ... Tôi đang cố chạy dự án đó " github.com/swiftingio/SingTest " nhưng gặp lỗi "Mô-đun được biên dịch bằng Swift 3.1 không thể nhập bằng trình biên dịch Swift 4.2.1: / Users / aliapple / Desktop / SingTestByAhtazaz / Pods / AudioKit / iOS / AudioKit.framework / Modules / AudioKit.swiftmodule / arm64.swiftmodule ". Bạn có thể giúp tôi trong việc này?
Ahtazaz

Chào @ Mr.Ahtazaz đó là dự án từ 2 năm trước nên có lẽ nó đã được làm và biên dịch bằng Swift 3, đầu tiên dự án nên được cập nhật lên Swift 4 hoặc 5, sau đó thử chạy lệnh carthage carthage update NameOfTheLibrary --platform iOS --no-use-binariesđể cập nhật các thư viện và bạn sẽ ổn
xavi.pedrals

26

Xcode 9 đi kèm với trình biên dịch Swift 4 hiểu cả Swift 3.2 và swift 4, thậm chí nó còn cho phép bạn trộn và kết hợp giữa 2 phiên bản. Rất tiếc, các phiên bản khác không được hỗ trợ.

Ngay cả khi bạn đặt ngôn ngữ của mình thành Swift 3.2, nó vẫn sử dụng trình biên dịch Swift 4.

Nếu đang sử dụng cocoapods, bạn có thể thêm phần này vào cuối tệp nhóm của mình để buộc các nhóm sử dụng Swift 3.2 hoặc 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

Ngoài ra, bạn có thể tạm thời đưa các tệp từ pod trực tiếp vào dự án của mình cho đến khi FacebookLogin được cập nhật lên Swift 3.2 hoặc 4.

Lưu ý: Đã chỉnh sửa dựa trên phản hồi của Matt


1
FYI - Điều này hơi quá khích khi buộc tất cả các nhóm phải sử dụng Swift 4.0. Nếu một nhóm tuân thủ Swift 3, bạn có thể chuyển sang Swift 3.2 một cách an toàn. Bumping lên 4.0 nhiều khả năng sẽ gây ra sự cố trình biên dịch cho nhiều nhóm.
Matt S.

19

Có thể bạn có thể làm sạch mục tiêu trước khi xây dựng nó. Việc này ổn với tôi.


7
Không hiệu quả với tôi, tôi vẫn đang tìm giải pháp khác.
Arnaud

11

Tôi đã gặp phải vấn đề tương tự trên Xcode 9 Beta 3, nó trỏ đến 'Alamofire' và đã thử một vài giải pháp khác nhau, giải pháp dễ nhất mà tôi tìm thấy là

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

11
Đó là năm 2017 và chúng tôi vẫn cần khởi động lại Xcode để giải quyết các lỗi. Cảm ơn Apple. Cảm ơn bạn.
Oded Harth

10

Thực hiện "thư mục xây dựng sạch" và khởi động lại Xcode 9 đã xóa lỗi cho tôi. Ngoài ra, lỗi không ngăn ứng dụng chạy trên thiết bị của tôi hoặc trình mô phỏng.


1
"thư mục bản dựng sạch": Để ​​truy cập tùy chọn, hãy mở menu Sản phẩm và sử dụng phím Tùy chọn để hiển thị tùy chọn Thư mục bản dựng sạch.
Hans

8

goto xcode DerivedData thư mục sau đó xóa tất cả các tệp bên trong nó và biên dịch lại dự án của bạn. nó làm việc cho tôi.

và thư mục DerivedData mặc định là: ~ / Library / Developer / Xcode / DerivedData.


8

Nếu sử dụng Carthage , Mở thiết bị đầu cuối và;

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

Nếu sử dụng Pod , Mở thiết bị đầu cuối và;

pod update

(Ngoài ra, nếu không hoạt động trong pod, bạn có thể thay đổi SWIFT_VERSION trong podfile. Ví dụ:

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

)

Sau;

Mở Xcode và sử dụng;

Command+Option+Shift+K

nhập mô tả hình ảnh ở đây


1
Vui lòng không đăng các câu trả lời giống hệt nhau cho nhiều câu hỏi. Đăng một câu trả lời hay, sau đó bình chọn / gắn cờ để đóng các câu hỏi khác là trùng lặp. Nếu câu hỏi không trùng lặp, hãy điều chỉnh câu trả lời của bạn cho phù hợp với câu hỏi. Xem meta.stackexchange.com/q/104227/311792
paper1111

@ paper1111 Tôi giải thích mọi thứ trong câu trả lời của mình và hoạt động
SwiftDeveloper 14/09/17

Tôi đang sử dụng carthage và đây là giải pháp phù hợp với tôi. Bản cập nhật carthage "My Framework" đã không cắt được nó. Tôi đã phải cập nhật toàn bộ danh mục carthage. Lấy mãi mà lừa.
Matan Guttman,

1
Giải pháp này cũng làm việc cho tôi. Để chắc chắn hơn, hãy đảm bảo rằng bạn đóng và khởi chạy lại xcode sau khi dọn dẹp thư mục xây dựng bằng Command + Option + Shift + K.
Torsten Ojaperv

@SwiftDeveloper config.build_settingsPhần này đi đâu?
Adrian

4

Nó làm việc cho tôi.

1.Làm sạch dự án của bạn trong Xcode 8

2. Xây dựng hoặc chạy dự án của bạn trong Xcode 9


3

Tôi đã làm sạch dự án trong Xcode 9, và sau đó chạy ứng dụng, nó hoạt động.


2

Tôi đã gặp vấn đề tương tự với Xcode 9 GM và điều này đã giải quyết được vấn đề của tôi: Xóa nó khỏi dự án và kéo lại vào "Embedded Binaries".


Tôi gặp sự cố với Alamofire 4.5.1 và đã thử mọi thứ khác trên trang này pod updatenhưng không có kết quả. Cuối cùng, tôi đã trực tiếp thêm khuôn khổ vào dự án của mình và thêm nó vào Hội thảo nhúng của tôi đã hoạt động
Heki


1

Tôi có

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

trong dự án của tôi và import FBSDKLoginKitsau khi làm sạch mục tiêu, tôi không gặp vấn đề gì

Vì nhóm bạn đang sử dụng ở dạng nhanh và là nhóm beta, có khả năng bạn sẽ gặp một số vấn đề với trình biên dịch swift 4, bạn nên sử dụng phiên bản aim-c của nhóm này vào lúc này


0

Nếu bạn sử dụng từ Pod:

  1. Trong Podfilebình luận FacebookLogin pod
  2. cài đặt pod

  3. Trong Podfilenhóm FacebookLogin bỏ ghi chú
  4. cài đặt pod

  5. Chạy lại dự án của bạn

0

Đối với trường hợp của tôi - nhóm thực tế đã tham chiếu đến một zip tĩnh với các tệp nhị phân được tạo sẵn nhắm mục tiêu nhanh chóng 3.1. Vì vậy, giải pháp duy nhất là xây dựng lại khung công tác với nguồn từ xcode 9.

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


Tôi gặp sự cố tương tự với AudioKit được tham chiếu bên trong các nhóm. Tuy nhiên, giải pháp của bạn đề cập đến build_frameworks.sh được tìm thấy trong 'Framework' Vui lòng thêm các chi tiết khác. Tôi không thể tìm thấy một tệp như vậy.
TomV

cố gắng trỏ podfile đến một bản phát hành mới hơn. phiên bản được tạo bằng xcode 9 mới nhất - / không cần thay đổi tập lệnh xây dựng. github.com/AudioKit/AudioKit/releases
johndpope

Cảm ơn vì tiền hỗ trợ. Tôi đã phải cập nhật phiên bản AudioKit trong cocoapods lên phiên bản mới nhất, có build_frameworks.sh. Build_frameworks.sh là cần thiết để 'xác thực' AudioKit, nhằm ngăn Apple từ chối ứng dụng.
TomV
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.