Xcode 8 Beta 3 Gunakan masalah Legacy Swift

201

Saya memiliki proyek Objective-C di Xcode 8 Beta 3. Sejak memperbarui, setiap kali saya mencoba membangun saya menerima kesalahan berikut:

“Gunakan Legacy Swift Language Version” (SWIFT_VERSION) harus dikonfigurasi dengan benar untuk target yang menggunakan Swift. Gunakan menu [Edit> Convert> To Current Swift Syntax…] untuk memilih versi Swift atau gunakan editor Build Settings untuk mengonfigurasi pengaturan build secara langsung.

Adakah yang mengalami ini? Karena ini adalah proyek Objective-C, tidak ada pengaturan build untuk mengonfigurasi Swift. Saya juga memastikan tidak ada dependensi proyek atau CocoaPods yang menggunakan Swift. Satu-satunya solusi yang saya miliki adalah menggunakan Beta 2. Ada ide bagaimana saya bisa memperbaiki masalah ini?

Saya juga harus menyebutkan saya menjalankan OSX 10.12 Beta 2.

Bryan
sumber
Saya juga mengalami masalah ini ...
rockdaswift

Jawaban:

364

Jika Anda menggunakan CocoaPods dan ingin memperbaikinya secara otomatis setiap kali Anda melakukan pod install, maka Anda dapat menambahkan baris ini ke akhir Podfile Anda:

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: Masalah ini sekarang diperbaiki jika Anda menggunakan CocoaPods v1.1.1 atau lebih baru. Jangan lupa untuk menghapus ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESpengaturan dari target proyek utama Anda.

Tulleb
sumber
24
Jika Anda mencoba untuk menggunakan 2.3 dalam basis kode Anda untuk saat ini, gunakan 2.3bukan 3.0 solusi Hebat! Hal ini secara efektif membuat "Use Legacy Swift Language Version"untuk No (atau jika Anda mengubahnya ke 2.3itu Yes). Manfaat dari opsi ini adalah setiap kali Anda pod installmenetapkan pengaturan itu secara otomatis! Luar biasa. Saya melihat SWIFT_VERSIONakan diatur pada proyek - proyek Obj-C juga. Saya berasumsi tidak ada dampak buruk?
Herbal7ea
8
Ini bagus, tetapi cukup mengganggu bahwa tanpa ahli Ruby di StackOverflow, ribuan dan jutaan proyek adalah SOL. Saya secara manual mengubah pengaturan Xcode SWIFT_VERSION ke 2.3 di setiap modul dan di proyek Pod, menggunakan Pengaturan Bangun, dan itu tidak berhasil, tetapi ini berhasil. Artinya sihir yang mengganggu yang tersembunyi. Aku benci itu.
BaseZen
5
Saya benar-benar masuk hanya untuk memberi Anda alat peraga untuk hal ini
Dnaso
1
Saya memiliki proyek Obj-C dengan Charts (dalam Swift), AfNetworking dan beberapa pod Obj-C lainnya. Saya menggunakan skrip di atas dalam file pod saya. Semua kesalahan / peringatan yang terkait dengan swift hilang tetapi sekarang proyek saya tidak dapat menemukan kerangka kerja AFNetwoking.
ibnetariq
1
@ Mr.Bista Solusi yang disetujui stackoverflow.com/a/38597681/2854405 membuatnya berfungsi dari pengaturan Xcode. Tetapi Anda mungkin harus melakukannya dengan setiap repo Pod yang Anda miliki setiap kali Anda melakukan pod install / update. Solusi ini membuat segalanya lebih cepat. Anda juga dapat memperbarui versi Cocoapods Anda sekarang: itu juga harus memperbaiki masalah ini.
Tulleb
119

Saya baru saja menemukan cara untuk memperbaikinya.

Buka pengaturan Bangun proyek atau pustaka dan atur atribut Versi Swift Compiler "Gunakan Legacy Swift Language Version" dari Tidak Ditentukan ke Ya atau Tidak.

masukkan deskripsi gambar di sini

rockdaswift
sumber
13
Saya tidak melihat opsi ini dalam proyek Objective-C saya
Bryan
Apakah Anda memiliki pustaka proyek Swift di proyek Obj-C Anda?
rockdaswift
2
Jika Anda menggunakan swift dan cocoapods, perintah di atas dalam cocoapods efektif. Jika Anda tidak ingin harus mengubahnya setiap kali Anda pod installsaya sarankan menggunakan jawaban @Tulleb di atas.
Herbal7ea
Sekarang kesalahan saya adalah Kesalahan Kompilasi Cepat di kelas mandiri
Eduardo Oliveros
1
Opsi ini tidak lagi tersedia.
Hemang
33

Saya telah mengabaikan masalah ini untuk sementara waktu sekarang dan hanya mengerjakan hal-hal lain sementara itu - saya akhirnya menemukan solusi untuk masalah saya.

Karena proyek saya adalah Objective-C, saya pikir mungkin salah satu Pod yang saya gunakan menggunakan Swift, saya memeriksa setiap Pod dan tidak ada satu pun.

Solusi terakhir adalah bahwa model Data Inti saya diatur untuk menghasilkan kode di Swift walaupun saya telah membuatnya secara manual di menu File> New> NSManagedObjectSubclass. Yang harus saya lakukan adalah beralih ke Objective-C.

tangkapan layar

Bryan
sumber
1
Bagaimana Anda menemukan ini? Xcode tidak mengatakan apa-apa tentang ini. Kamu menyelamatkanku.
Ryan
2
Memang solusi dan penyelamat saya. Terima kasih! Bodoh bagaimana Apple membuat model CoreData otomatis 'Swifty' ketika seluruh App adalah tujuan-c ....
Bob de Graaf
18

Masalah ini juga terlihat di Xcode-8.1. Ketika kami menambahkan Target baru seperti Extension atau Widget dan perpustakaan pihak ketiga terintegrasi dalam target baru dengan bantuan cocopods. Setelah Pod menginstal . Kita bisa menghadapi kesalahan yang sama seperti di atas.

Ubah Versi Pakai Versi Bahasa Swift di setiap Pengaturan Pembuatan Perpustakaan menjadi

Tidak ada .

masukkan deskripsi gambar di sini

Shrawan
sumber
Dalam pengaturan kasus saya Gunakan Versi Bahasa Swift Legacy untuk Ya menyelesaikan masalah.
Jayprakash Dubey
Pastikan bahwa untuk setiap lib memiliki masalah ini yang Anda tetapkan Ya atau Tidak .. dalam kasus saya Tidak berhasil
hanzolo
Ini berhasil untuk saya. Pastikan Anda juga melakukan hal yang sama untuk target Tes
zizutg
@zizutg: - Kita harus mengecek semua target. Terima kasih dalam menunjuk lagi.
Shrawan
9

Jika Anda menggunakan Xcode 8 atau lebih baru

  1. Pergi ke Pengaturan Bangun
  2. Temukan gunakan versi bahasa lawas yang cepat
  3. Ya - Cepat 2.3
  4. Tidak - Swift 3.0 masukkan deskripsi gambar di sini
Mohammad Kamran Usmani
sumber
5

Tambahkan kode di bawah ini di akhir 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
Sunil aruru
sumber
4

Saya sedang mengerjakan sebuah proyek yang menggabungkan kode objektif-c dan kode cepat yang sebelumnya saya gunakan versi cepat 2.3 dan setelah memutakhirkan ke swift 3 saya tidak dapat membangun proyek. Xcode mengeluh dengan pesan kesalahan yang disebutkan.

Rupanya, masih ada beberapa versi Swift yang ketinggalan zaman yang ditentukan dalam file project.pbxproj saya. Ada swift 3.0.1 yang ditentukan:

SWIFT_VERSION = 3.0.1;

Padahal, saya sudah menginstal 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

Sooo, saya memperbaikinya dengan mengubah versi Swift di file project-pbxproj menjadi:

SWIFT_VERSION = 3.0;

Tampaknya specifier versi level patch terlalu spesifik.

raksasa
sumber
4

Dalam kasus saya, saya hanya melakukan hal-hal berikut

Pilih Target proyek => Pergi ke pengaturan Bangun => Cari untuk "Versi Bahasa Swift" => beri Nilai versi Swift saat ini

Thats all Ini telah memperbaiki Masalah saya

Ikuti Gambar Ini

khusboo suhasini
sumber
4

Saya mendapat kesalahan yang sama. Saya mencoba mencari "Gunakan Versi Bahasa Legacy Swift", tetapi tidak ditemukan. Saya menggunakan Xcode 8.3.3 Setelah berselancar terlalu banyak dan bekerja di sekitar saya menemukan solusi ini, dan ini berhasil bagi saya.masukkan deskripsi gambar di sini

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.)
Aklesh Rathaur
sumber
3

atur "Gunakan Legacy Swift Versi Bahasa" ke "YA" jika Anda menggunakan versi cepat swift dalam proyek Anda atau pihak ke-3 cepat. "Tidak" jika proyek Anda diperbarui ke versi cepat saat ini. jika Anda tidak mengonfigurasi versi cepat Anda, setelah setiap pembaruan dan Instal, kerangka kerja Pod harus menentukan ini.

Mohammad Arifuzzaman
sumber
2

Saya sebenarnya harus melakukan pencarian untuk "Legacy Swift" untuk dapat mengubahnya dari yang tidak ditentukan ke "Ya" Ketika saya hanya menggulir ke bawah ke bagian yang dijelaskan di atas, saya tidak dapat mengubahnya. Saya harap ini akan membantu seseorang.

Manusia gunung
sumber
2

Proyek saya ditulis dalam bahasa Swift. Saya mendapat kesalahan yang sama dengan fastlane. Apa yang terjadi adalah Xcode saya diperbarui secara otomatis sehingga saya harus memperbarui proyek saya ke Swift 3.0. Ada banyak kesalahan. Memperbaiki dan men-debug membutuhkan banyak waktu dan itu tidak layak pada saat itu, jadi saya memutuskan untuk menginstal versi Xcode yang lebih lama. Kembalikan kode saya ke 2.3. Kemudianfastlane beta tidak bekerja lagi. Ternyata, saya perlu mengatur Command Line Tool ke 7.3. masukkan deskripsi gambar di sini

yoninja
sumber
1

Saya mengalami masalah yang sama dan menyelesaikannya dengan melakukan hal berikut:

Dalam Proyek> Pengaturan Bangun:

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

Kemudian di Podfile saya:

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

Menggunakan ketiga pengaturan ini menghapus semua peringatan dan memungkinkan saya untuk mengkompilasi dengan benar.

Yang paling tidak jelas dan apa yang sebenarnya mendapat kemajuan untuk kompilasi adalah mengubah SWIFT_VERSION di Podfile dari 3 menjadi 3.0 seperti yang disarankan di sini .

Hector Partidas
sumber
1

Dari XCode 8 dan seterusnya, Anda dapat menggunakan swift 2.3 meskipun XCode 8 menggunakan swift 3.x sebagai versi swift default. Untuk menggunakan swift 2.3, cukup nyalakan flag Gunakan Legacy Swift Language Version ke YES dari Build Setting, maka XCode akan menggunakan Swift 2.3 untuk target proyek itu.

arunjos007
sumber
1

Sebelum mencoba solusi yang rumit, berikut adalah pemeriksaan dasar yang perlu Anda lakukan jika Anda baru menggunakan Cocoapods dan Anda mengalami masalah ini.

Anda mungkin perlu:

  • Buka Podfile Anda lagi
  • Pastikan baris untuk platform tidak dikomentari dengan tanda '#'. Itu akhirnya akan terlihat seperti sesuatu seperti:

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

  • Simpan Podfile Anda, Tutup Xcode, dan Jalankan pod installlagi
  • Buka project.xcworkspace Anda

Mungkin hanya itu.

Jika tidak, Anda bisa pergi ke atas ;-)

Diphaze
sumber
1

Saya memiliki masalah yang sama setelah memperbarui ke xcode 8.3.2 tetapi opsi "Gunakan Legacy Swift Language" hilang. Ini tampaknya menjadi opsi untuk berubah sekarang: Versi Lang Swift

Digunakan perbaikan ini dengan Alamofire dan lib lainnya dan semua berfungsi ok.

Jorge Irún
sumber
1

Pergi ke Pengaturan Bangun Proyek untuk proyek dan Target lakukan di bawah dua.

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
And
Swift Compiler - Version  = Swift 3

Ubah ke yang terbaru Swift 3.

Kesalahan teratasi.

Jika sudah diperbaiki kesalahan Anda, silakan menyukainya.

kiran
sumber
1

Dalam Xcode 9 beta. Buka Pengaturan Proyek, Pengaturan Bangun, cari Versi Bahasa Swift. Dalam Xcode 9 Anda harus menentukan apakah Anda menggunakan Swift 3.2 atau Swift 4.

Niall Kehoe
sumber
Saya punya proyek di 9.0b di mana pengaturan baik proyek dan target ke Swift 4 terus menghasilkan kesalahan, pengaturan kedua ke Swift 3.2 dihapus, dan pengaturan kembali ke Swift 4 sekarang baik-baik saja, sehingga orang dapat melakukan semuanya dengan benar dan masih mendapatkan kesalahan.
green_knight
1

Jika Anda berubah ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESmenjadi NOmasih tidak berfungsi, itu karena masalah xcode, bukan masalah Anda. Melakukan langkah-langkah berikut:

1. Ubah ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESproperti menjadiYES sesuai dengan target peringatan

2.kemudian akan muncul peringatan di bilah kiri yang merekomendasikan Anda mengubah ke swift 3.0

3. lalu ubah kembali ke NO. Bangun kembali proyek, xcode akhirnya mendeteksi perubahan AndaNO !

Masalah terpecahkan dalam kasus ini!

Wangdu Lin
sumber