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


87

Tôi đã nâng cấp Xcode lên 8.1 GM và hiện gặp lỗi bên dưới cho SwiftyJSON. Các khuôn khổ nhập khẩu khác dường như hoạt động. Có cách nào để buộc điều này hoạt động trong Swift 3 cho đến khi SwiftyJSON nâng cấp khung của họ không? Tôi đã sử dụng Carthage để nhập / cập nhật các khuôn khổ. Tôi cũng đã thử thay đổi Use Legacy Swift language versionBật và Tắt nhưng không có kết quả.

Không thể nhập mô-đun được biên dịch bằng Swift 3.0 trong Swift 3.0.1: Mô-đun / SwiftyJSON.swiftmodule / arm64.swiftmodule

Câu trả lời:


171

SwiftyJson đang được tải xuống bởi carthage. Bản tải xuống được biên dịch trước là phiên bản Swift 3.0. Điều đó làm cho trình biên dịch phàn nàn rằng phiên bản không đúng. Sử dụng lệnh sau:

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

SwiftyJson (và tất cả các khuôn khổ khác trong Carthage) sẽ được biên dịch cục bộ bằng cách sử dụng phiên bản cục bộ của Swift (3.0.1) và trình biên dịch sẽ không phàn nàn nữa.


7
Bạn có thể đã tiết kiệm cho tôi một giờ tìm kiếm. Cảm ơn bạn.
djv

24
Không có gì. Thành thật mà nói carthage nên thông minh hơn một chút và kiểm tra số phiên bản nhanh chóng.
zirinisp

Bất kỳ ý tưởng khác? Bởi vì đây không làm việc cho tôi, mặc dù trong trường hợp của tôi, tôi đang gặp vấn đề với Unbox
Xernox

Điều này là tuyệt vời. Có cách nào để nhúng cái này vào Cartfileđể tôi có thể chỉ cần gõ carthage updatemà không cần các nhà phát triển đồng nghiệp biết / lo lắng về các cờ bổ sung không?
Craig Otis

1
Tôi đã gặp lỗi tương tự với PromiseKit 4.0 sau khi cập nhật từ XCode 8.0 lên XCode 8.1. Tôi gặp lỗi EXC_BAD_ACCESS. Cuối cùng, PromiseKit đã phải được biên dịch lại với 3.0.1 nhanh chóng và vấn đề đã được giải quyết.
Ricardo Anjos

21

Xóa ứng dụng khỏi DerivedData và xây dựng lại. lỗi có thể được sửa.

Đường dẫn DerivedData như thế này:

~/Library/Developer/Xcode/DerivedData/

Làm việc cho tôi, tôi xóa folter này, xóa thư mục pod và sử dụng "pod install". Và đã sửa.
Jose Pose S

Chào. Giải pháp này đã làm việc cho tôi. Bạn có thể giải thích chi tiết điều gì xảy ra khi chúng tôi xóa dữ liệu có nguồn gốc không? Làm thế nào lỗi biến mất?
iPhoneDeveloper

Làm việc cho tôi quá, Cảm ơn.
Hasya

10

Đảm bảo bạn đã đặt gói XCode 8.1 GM mới trong thư mục Ứng dụng của mình. Chúng tôi gặp phải sự cố này khi một người trong chúng tôi đang chạy Carthage để cập nhật các phụ thuộc của mình, nhưng chưa thay thế ứng dụng XCode 8.0 cũ trong thư mục ứng dụng (8.1 GM đang chạy trên Máy tính để bàn).

Bạn muốn đảm bảo rằng khi bạn chạy dòng lệnh sau trong terminal: xcrun swift -versionnó sẽ trả về Apple Swift version 3.0.1.


Điều này làm việc cho tôi, cảm ơn bạn! Ngoài ra lệnh mà làm việc trong thiết bị đầu cuối là xcrun nhanh chóng -version
HH887

2
Vẫn nhận được cùng một vấn đề. Bất kỳ lời đề nghị khác
harsh_v

2
Lệnh này làm việc cho tôi: carthage cập nhật --platform iOS --no-use-nhị phân
HH887

2
Tôi đã làm carthage update --platform iOS --no-use-binariesvà nó vẫn không hoạt động. Tôi đã làm sạch dự án của mình và khởi động lại Xcode và tôi vẫn gặp lỗi. Tôi có thể thử bất cứ điều gì khác?
Clifton Labrum

1
Tôi đã thử điều đó. Nó trở lạiApple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Target: x86_64-apple-macosx10.9
Clifton Labrum

9

Cập nhật mặc định Xcodethành mới trên thiết bị đầu cuối đã làm việc cho tôi.

Bước 1: Sử dụng lệnh sau để cập nhật phiên bản Xcode mới nhất trên Terminal. Tham khảo

sudo xcode-select -switch <path/to/>Xcode.app

Bước 2: Bây giờ hãy thử lệnh cập nhật carthage

carthage update --platform iOS

9

Chỉ để cung cấp các bản cập nhật mới nhất:

Carthage đã phát hành phiên bản 0.20 vào ngày 27 tháng 2 năm 2017.

Carthage hiện chỉ sử dụng nhị phân tiền xây dựng nếu hệ nhị phân tiền tạo sẵn có tương thích .

Điều đó đang được nói, bạn không còn phải sử dụng: --no-use-binariesđể tránh khuôn khổ xây dựng trước không tương thích.

Vì vậy, hãy đảm bảo rằng bạn có phiên bản carthage lớn hơn0.20 và chỉ cần làm:

carthage update --platform iOS

XCode 8.3.3 Sau khi cập nhật Carthage lên phiên bản 0,25 và sau khi thực hiện bên dưới, nó đã hoạt động đối với tôi bản cập nhật Carthage - định dạng iOS --no-use-binaries
anoop4real

@ anoop4real Nó không hoạt động cho bạn nếu không có --no-use-binaries? Carthage sẽ có thể phát hiện xem tệp nhị phân có tương thích với phiên bản trình biên dịch của bạn hay không. Nếu không tương thích, nó sẽ tự động loại bỏ tệp nhị phân đã tải xuống và xây dựng khung cục bộ.
kanekin

5

Giống như @zirinisp đã nói:

  1. Bạn có thể sử dụng lệnh sau:carthage update --platform iOS --no-use-binaries
  2. Sử dụng lệnh sau: xcrun swift -versionđể xem phiên bản Swift
  3. Thực hiện việc này: Xcode->preferences->locationsđể xóa dữ liệu bắt nguồn và dữ liệu lưu trữ, điều quan trọng nhất là thay đổi công cụ dòng lệnh thành " Xcode 8.1"
  4. Sử dụng lệnh sau:, xcrun swift -versionbạn có thể thấy phiên bản nhanh chóng là 3.0.1
  5. Bộ Use Legacy Swift Language Version = NO

Tôi hy vọng nó sẽ giúp bạn


1
  1. Di chuyển phiên bản beta / GM nếu thư mục Xcode đến / Applications và đặt tên là Xcode-beta

  2. Kiểm tra đầu ra của:

    xcrun swift --version

bằng cách chạy lệnh này trong terminal, đầu ra của nó phải khớp với phiên bản nhanh mà bạn muốn ứng dụng biên dịch, vì Carthage sử dụng đầu ra của lệnh này, để xác định phiên bản Swift cục bộ.

  1. Cập nhật phiên bản Xcode lên phiên bản mới nhất trên Terminal bằng cách chạy lệnh sau:

    sudo xcode-select -s /Applications/Xcode-beta.app/

  2. Xây dựng các thư viện cho iOS và ngăn Carthage tải xuống các tệp nhị phân được biên dịch sẵn (chưa tương thích) hiện có, bằng cách chạy lệnh sau:

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

  3. Làm sạch & Xây dựng


0

Tôi đã gặp vấn đề chính xác với thư viện XCTest_Gherkin, những gì nó làm việc cho tôi là:

  1. Product-> Scheme->XCTest-Gherkin
  2. Product -> Build

Hy vọng nó giúp. Tôi đang sử dụng Cocoapods.


0

Trong Cài đặt Bản dựng Xcode, hãy đảm bảo rằng Đường dẫn Tìm kiếm Khung của bạn chứa thư mục Bản dựng Carthage thích hợp:

$(inherited)
$(PROJECT_DIR)/Carthage/Build/iOS
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.