2016-09-16 14 views
5

Tôi đã cập nhật lên Xcode 8 và chuyển đổi thành cú pháp Swift 3.0 mới nhất. Tôi có một số Cocoapod trong dự án của tôi, và một số có trên Swift 2.3 (ví dụ: một số nhóm cũ hơn yêu cầu Alamofire đặt thành v3.5, chạy Swift 2.3).Làm cách nào để biên dịch mô-đun với Swift 2.3 và 3.0?

tôi đã thiết lập các Pods để sử dụng Legacy Swift -> Có, nhưng khi xây dựng tôi nhận được lỗi:

Module complied with Swift 2.3 cannot be imported in Swift 3.0: /Users/....XSDK/XSDK.framework/swiftmodule/x86_64.swiftmodule 

tôi không sử dụng Carthage (tham chiếu trong các câu hỏi khác). Chỉ Cocoapods.

Tôi có cần chuyển đổi dự án của mình để sử dụng Swift 2.3 không? Hoặc tôi có thể sử dụng Swift 3.0 trong dự án của mình và vẫn sử dụng Cocoapods cũ không?

+0

Rất tiếc, tôi cũng gặp sự cố này. Dường như bạn không thể biên dịch nó, Chủ sở hữu của mã phải biên dịch nó và đẩy nó ra một lần nữa. Nhóm mà tôi đã cố gắng cài đặt đã đẩy một trang trên trang web đó nhưng chưa được đưa vào nhóm cacao. – Dallas

+4

Swift vẫn chưa được ABI ổn định, tức là nó không tương thích nhị phân. Bạn không thể kết hợp các khuôn khổ được viết trong Swift 2.3 với các ứng dụng hoặc các khung công tác khác sử dụng Swift 3 (hoặc bất kỳ phiên bản Swift nào khác cho vấn đề đó cho đến khi ABI ổn định). – HAS

+0

@hegranes bạn có tìm thấy giải pháp nào về vấn đề này không? –

Trả lời

0

Có hai bước để làm theo để có được cocoapod kế thừa làm việc trong dự án của bạn.

1) Nghiên cứu cocoapod và đảm bảo bạn đang cài đặt phiên bản chính xác của cocoapod, có thể không phải là phiên bản mới nhất, hoặc có thể nằm trên một nhánh riêng biệt, ví dụ.

$pod 'Your Cocoapod', :git => 'https://github.com/.....', :branch => 'branch_name' 

2) Trong tệp podfile, hãy đặt phiên bản Swift. Bạn cũng có thể thực hiện việc này theo cách thủ công trong cài đặt bản dựng của từng nhóm, nhưng mã này tự động đặt.

post_install do |installer| 
    installer.pods_project.targets.each do |target| 
    target.build_configurations.each do |config| 
     config.build_settings['SWIFT_VERSION'] = '2.3' # or '3.0' 
     #config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'NO' 
    end 
    end 
end 
1

Thật không may là Swift không phải là ABI Ổn định, bạn không thể kết hợp các nhóm như thế này. Lý do cho điều này là có thư viện tiêu chuẩn nhanh chóng rất lớn mà tất cả các pod nhanh chóng (và khung, dylibs, .a, .o, vv) cần phải tham khảo khi biên dịch. thư viện chuẩn là phụ thuộc vào ngôn ngữ và bạn không thể bao gồm nhiều bản sao của các thư viện chuẩn nhanh chóng trong một ứng dụng duy nhất.

Đã một vài tháng tốt kể từ khi 3 phát hành nhanh chóng. Tại thời điểm này, có thể bạn sẽ muốn thực hiện bước nhảy tới 3. Nếu bạn tìm thấy một nhóm chưa được cập nhật lên nhanh chóng 3, có thể là ngã ba nó và cập nhật nó và gửi một pr. Tác giả sẽ yêu bạn! :)

Các vấn đề liên quan