Xcode 8 Beta 3 Sử dụng sự cố Legacy Swift


201

Tôi có một dự án Objective-C trong Xcode 8 Beta 3. Kể từ khi cập nhật, bất cứ khi nào tôi cố gắng xây dựng, tôi nhận được lỗi sau:

Sử dụng phiên bản ngôn ngữ Swift kế thừa Swift (SWIFT_VERSION) được yêu cầu phải được cấu hình chính xác cho các mục tiêu sử dụng Swift. Sử dụng menu [Chỉnh sửa> Chuyển đổi> sang Cú pháp Swift hiện tại] để chọn phiên bản Swift hoặc sử dụng trình chỉnh sửa Cài đặt bản dựng để định cấu hình cài đặt bản dựng trực tiếp.

Có ai gặp phải điều này? Vì đó là dự án Objective-C, không có cài đặt xây dựng để định cấu hình Swift. Tôi cũng đã đảm bảo rằng không có sự phụ thuộc nào của dự án hoặc các Cốc Cốc đang sử dụng Swift. Giải pháp duy nhất tôi có là sử dụng Beta 2. Mọi ý tưởng về cách tôi có thể khắc phục vấn đề này?

Tôi cũng nên đề cập đến việc tôi đang chạy OSX 10.12 Beta 2.


Tôi cũng đang gặp vấn đề này ...
rockdaswift

Câu trả lời:


364

Nếu bạn đang sử dụng CocoaPods và muốn nó được sửa tự động mỗi khi bạn thực hiện pod install, thì bạn có thể thêm các dòng này vào cuối Podfile của mình:

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['SWIFT_VERSION'] = '3.0'
        end
    end
end

EDIT: Vấn đề này hiện đã được khắc phục nếu bạn sử dụng CocoaPods v1.1.1 trở lên. Đừng quên xóa ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIEScài đặt khỏi các mục tiêu dự án chính của bạn.


24
Nếu bạn đang cố gắng sử dụng 2.3 trong cơ sở mã của bạn trong thời gian này, hãy sử dụng 2.3thay vì 3.0 giải pháp tuyệt vời! Này có hiệu quả làm cho "Use Legacy Swift Language Version"đến No (hoặc nếu bạn thay đổi nó để 2.3Yes). Tuy nhiên, lợi ích của tùy chọn này là mỗi khi bạn pod installđặt cài đặt đó tự động! Tuyệt vời. Tôi thấy SWIFT_VERSIONđược thiết lập trên các dự án Obj-C là tốt. Tôi cho rằng không có bất kỳ ảnh hưởng bất lợi?
Herbal7ea

8
Điều này thật tuyệt, nhưng thật đáng lo ngại khi không có chuyên gia Ruby về StackOverflow, hàng ngàn và hàng triệu dự án là SOL. Tôi đã thay đổi thủ công cài đặt Xcode SWIFT_VERSION thành 2.3 trong mọi mô-đun và trong dự án Pod, sử dụng Cài đặt bản dựng và nó không hoạt động, nhưng điều này đã làm. Ý nghĩa ẩn giấu ma thuật. Tôi ghét điều đó.
BaseZen

5
Tôi thực sự đăng nhập chỉ để cung cấp cho bạn đạo cụ về điều này
Dnaso

1
Tôi có một dự án Obj-C với Charts (trong Swift), AfNetworking và một số nhóm Obj-C khác. Tôi đã sử dụng kịch bản trên trong tập tin pod của tôi. Tất cả các lỗi / cảnh báo liên quan đến swift đã biến mất nhưng bây giờ dự án của tôi không thể tìm thấy khung AFNetwoking.
ibnetariq

1
@ Mr.Bista Giải pháp stackoverflow.com/a/38597681/2854405 được phê duyệt làm cho nó hoạt động từ cài đặt Xcode. Nhưng bạn có thể phải làm điều đó với mỗi repo Pod duy nhất mà bạn có mỗi khi bạn thực hiện pod install / update. Giải pháp này làm cho mọi thứ nhanh hơn. Bạn cũng có thể cập nhật phiên bản Cocoapods của mình ngay bây giờ: nó cũng nên khắc phục vấn đề này.
Tulleb

119

Tôi chỉ tìm cách sửa nó.

Chuyển đến cài đặt Build của dự án hoặc thư viện và đặt thuộc tính Phiên bản trình biên dịch Swift "Sử dụng phiên bản ngôn ngữ Swift kế thừa" từ Không xác định thành Có hoặc KHÔNG.

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


13
Tôi không thấy tùy chọn này trong dự án Objective-C của mình
Bryan

Bạn có thư viện dự án Swift nào trong dự án Obj-C của mình không?
rockdaswift

2
Nếu bạn đang sử dụng swift và cocoapods, lệnh trên trong cocoapods thực hiện điều này một cách hiệu quả. Nếu bạn không muốn phải thay đổi điều này mỗi lần bạn pod installkhuyên bạn nên sử dụng câu trả lời của @Tulleb ở trên.
Herbal7ea

Bây giờ lỗi của tôi là Lỗi Trình biên dịch Swift trong một lớp tự
Eduardo Oliveros

1
Tùy chọn này không còn có sẵn.
Hemang

33

Tôi đã bỏ qua vấn đề này một thời gian và bây giờ chỉ làm việc với những thứ khác - cuối cùng tôi đã tìm ra giải pháp cho vấn đề của mình.

Vì dự án của tôi là Objective-C, tôi nghĩ có lẽ một trong những Pod tôi đang sử dụng đang sử dụng Swift, tôi đã kiểm tra từng Pod và không ai trong số chúng.

Giải pháp cuối cùng là mô hình Dữ liệu lõi của tôi đã được đặt để tạo mã trong Swift mặc dù tôi đã tạo thủ công chúng trong menu Tệp> Mới> NSManagedObjectSub class. Tất cả những gì tôi phải làm là chuyển nó sang Objective-C.

ảnh chụp màn hình


1
Làm thế nào bạn tìm thấy điều này? Xcode không nói gì về điều này. Bạn đã cứu tôi.
Ryan

2
Quả thực là giải pháp của tôi và vị cứu tinh của tôi. Cảm ơn! Thật ngu ngốc khi Apple làm cho các mô hình Coredata tự động 'Swifty' khi toàn bộ Ứng dụng là khách quan-c ....
Bob de Graaf

18

Vấn đề này cũng được hiển thị trong Xcode-8.1. Khi chúng tôi thêm Mục tiêu mới như Tiện ích mở rộng hoặc Tiện ích và thư viện của bên thứ ba được tích hợp vào mục tiêu mới với sự trợ giúp của cocepads. Sau khi cài đặt Pod . Chúng ta có thể phải đối mặt với lỗi tương tự như trên.

Thay đổi Phiên bản ngôn ngữ Swift sử dụng trong mọi cài đặt xây dựng thư viện thành

Không .

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


Trong trường hợp của tôi, sử dụng Phiên bản ngôn ngữ Swift kế thừa để Có giải quyết vấn đề.
Jayprakash Dubey

Đảm bảo rằng với mỗi lib có vấn đề này, bạn có thể đặt Có hoặc Không .. trong trường hợp của tôi Không hoạt động
hanzolo

Điều này làm việc cho tôi. Vui lòng đảm bảo rằng bạn cũng làm tương tự cho mục tiêu Thử nghiệm
zizutg

@zizutg: - Chúng tôi phải kiểm tra chéo tất cả các mục tiêu. Cảm ơn trong việc chỉ một lần nữa.
ShINA

9

Nếu bạn đang sử dụng Xcode 8 trở lên

  1. Chuyển đến Cài đặt bản dựng
  2. Tìm sử dụng phiên bản ngôn ngữ swift kế thừa
  3. Có - Swift 2.3
  4. Không - Swift 3.0 nhập mô tả hình ảnh ở đây

5

Thêm mã dưới đây vào cuối podfile.

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '3.0'
    end
  end
end

4

Tôi đang làm việc với một dự án có mã mục tiêu hỗn hợp và mã nhanh chóng mà trước đây tôi đã sử dụng phiên bản 2.3 nhanh chóng và sau khi nâng cấp lên swift 3, tôi không thể xây dựng dự án. Xcode phàn nàn với thông báo lỗi được đề cập.

Rõ ràng, vẫn còn một số phiên bản Swift lỗi thời được chỉ định trong tệp project.pbxproj của tôi. Đã có 3.0.1 được chỉ định:

SWIFT_VERSION = 3.0.1;

Trong khi đó, tôi đã cài đặt 3.0.2:

$ xcrun swift -version
Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
Target: x86_64-apple-macosx10.9

Vì vậy, tôi đã sửa nó bằng cách thay đổi phiên bản Swift trong tệp project-pbxproj thành:

SWIFT_VERSION = 3.0;

Có vẻ như specifier phiên bản cấp vá là quá cụ thể.


4

Trong trường hợp của tôi, tôi chỉ cần làm những việc sau đây

Chọn mục tiêu dự án => Chuyển đến Cài đặt bản dựng => Tìm kiếm Phiên bản ngôn ngữ Swift Swift => cung cấp Giá trị cho phiên bản Swift hiện tại

Đó là tất cả Nó đã khắc phục vấn đề của tôi

Theo dõi hình ảnh này


4

Tôi đã nhận được cùng một lỗi. Tôi đã cố gắng tìm kiếm "Sử dụng phiên bản ngôn ngữ Swift kế thừa" nhưng không tìm thấy. Tôi đang sử dụng Xcode 8.3.3 Sau khi lướt quá nhiều và làm việc xung quanh tôi đã tìm thấy giải pháp này và nó đã hoạt động với tôi.nhập mô tả hình ảnh ở đây

Here are the steps.
1=> select your target from Xcode
2=> go to build setting
3=> search for "Swift Language Version"
4=> change it to swift 3. (or accordingly.)

3

đặt "Sử dụng phiên bản ngôn ngữ Swift kế thừa" thành "CÓ" nếu bạn sử dụng phiên bản cũ của swift trong dự án của bạn hoặc bất kỳ bên thứ 3 nhanh chóng nào. "Không" nếu dự án của bạn nâng cấp lên phiên bản nhanh chóng hiện tại. nếu bạn không định cấu hình phiên bản nhanh của mình, sau mỗi lần cập nhật và Cài đặt, khung Pod cần chỉ định điều này.


2

Tôi thực sự phải thực hiện tìm kiếm "Legacy Swift" để có thể thay đổi nó từ không xác định thành "Có" Khi tôi chỉ đơn giản cuộn xuống phần được mô tả ở trên, tôi không thể thay đổi nó. Tôi hy vọng điều này sẽ giúp được ai đó.


2

Dự án của tôi được viết bằng Swift. Tôi đã nhận được cùng một lỗi với fastlane. Điều xảy ra là Xcode của tôi được cập nhật tự động nên tôi phải cập nhật dự án của mình lên Swift 3.0. Có rất nhiều lỗi. Việc sửa lỗi và gỡ lỗi mất quá nhiều thời gian và nó không có giá trị tại thời điểm đó nên tôi quyết định cài đặt phiên bản Xcode cũ hơn. Hoàn nguyên mã của tôi thành 2.3. Sau đó fastlane betakhông hoạt động nữa. Hóa ra, tôi cần đặt Công cụ dòng lệnh thành 7.3. nhập mô tả hình ảnh ở đây


1

Tôi đã có vấn đề tương tự và giải quyết nó bằng cách làm như sau:

Trong Project> Build Settings:

Always Embed Swift Standard Libraries = $(inherited) Use Legacy Swift Language Version = YES

Sau đó, trong Podfile của tôi:

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

Sử dụng ba cài đặt này đã loại bỏ tất cả các cảnh báo và cho phép tôi biên dịch đúng.

Điều tối nghĩa nhất và những gì thực sự đạt được tiến trình biên dịch là thay đổi SWIFT_VERSION trong Podfile từ 3 thành 3.0 như đề xuất ở đây .


1

Từ XCode 8 trở đi, bạn có thể sử dụng swift 2.3 mặc dù XCode 8 sử dụng swift 3.x làm phiên bản swift mặc định. Để sử dụng swift 2.3, chỉ cần bật cờ Sử dụng Phiên bản ngôn ngữ Swift kế thừa sang CÓ từ Cài đặt bản dựng, sau đó XCode sẽ sử dụng Swift 2.3 cho mục tiêu dự án đó.


1

Trước khi thử các giải pháp phức tạp, đây là một kiểm tra cơ bản bạn cần làm nếu bạn chưa quen với Cocoapods và bạn đang gặp vấn đề này.

Bạn có thể cần phải:

  • Mở Podfile của bạn một lần nữa
  • Kiểm tra xem dòng cho nền tảng không được nhận xét bằng '#'. Nó cuối cùng sẽ trông giống như:

platform :ios, '10.1' # Put the right version and no #platform here use_frameworks! # For swift pod "MyPod" # Your mean pod :)

  • Lưu Podfile của bạn, Đóng Xcode và Chạy pod installlại
  • Mở dự án của bạn.xcworkspace

Có lẽ chỉ có vậy thôi.

Nếu không, bạn có thể đi phía trên ;-)


1

Tôi gặp vấn đề tương tự sau khi cập nhật lên xcode 8.3.2 nhưng tùy chọn "Sử dụng ngôn ngữ Swift kế thừa" đã biến mất. Đây dường như là tùy chọn để thay đổi ngay bây giờ: Phiên bản Swift Lang

Đã sử dụng bản sửa lỗi này với Alamofire và các lib khác và tất cả đều hoạt động tốt.


1

Chuyển đến Cài đặt xây dựng dự án cho dự án và Target thực hiện bên dưới hai.

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
And
Swift Compiler - Version  = Swift 3

Thay đổi mới nhất Swift 3.

Lỗi đã được giải quyết.

Nếu nó được giải quyết sửa lỗi của bạn, xin vui lòng thích nó.


1

Trong Xcode 9 beta. Chuyển đến Cài đặt dự án, Cài đặt bản dựng, tìm kiếm Phiên bản ngôn ngữ Swift. Trong Xcode 9, bạn phải chỉ định nếu bạn đang sử dụng Swift 3.2 hoặc Swift 4.


Tôi đã có một dự án trong 9.0b khi cài đặt cả dự án và mục tiêu cho Swift 4 tiếp tục gây ra lỗi, đặt cả hai cho Swift 3.2 đã loại bỏ nó và đặt cả hai trở lại Swift 4 bây giờ đều ổn, vì vậy mọi người có thể làm mọi thứ đúng và vẫn nhận được một lỗi.
green_knight

1

Nếu bạn thay đổi ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES thành NOvẫn không hoạt động, đó là do vấn đề xcode chứ không phải vấn đề của bạn. Thực hiện các bước sau:

1. Thay đổi ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES tính để được YESnhắm mục tiêu cảnh báo

2. sau đó nó sẽ hiển thị một cảnh báo trên thanh bên trái khuyên bạn nên đổi sang swift 3.0

3. sau đó thay đổi trở lại NO . Xây dựng lại dự án, xcode cuối cùng cũng phát hiện ra sự thay đổi của bạn NO!

Vấn đề được giải quyết trong trường hợp này!

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.