Xcode 8 Beta 3 ใช้ปัญหา Legacy Swift


201

ฉันมีโครงการ Objective-C ใน Xcode 8 Beta 3 ตั้งแต่อัพเดตทุกครั้งที่ฉันพยายามสร้างฉันได้รับข้อผิดพลาดต่อไปนี้:

ต้องใช้“ Legacy Swift Language Version” (SWIFT_VERSION) เพื่อกำหนดค่าอย่างถูกต้องสำหรับเป้าหมายที่ใช้ Swift ใช้เมนู [แก้ไข> แปลง> เป็นปัจจุบันไวยากรณ์ของ Swift ... ] เพื่อเลือกเวอร์ชัน Swift หรือใช้เครื่องมือแก้ไขการตั้งค่าการสร้างเพื่อกำหนดค่าการตั้งค่าการสร้างโดยตรง

มีใครพบกับสิ่งนี้หรือไม่? เนื่องจากเป็นโครงการ Objective-C จึงไม่มีการตั้งค่าการสร้างเพื่อกำหนดค่า Swift ฉันได้ตรวจสอบด้วยว่าไม่มีการพึ่งพาโครงการหรือ CocoaPods กำลังใช้ Swift ทางออกเดียวที่ฉันต้องใช้คือ Beta 2 ความคิดใดที่ฉันจะแก้ไขปัญหานี้

ฉันควรจะพูดถึงว่าฉันใช้ OSX 10.12 Beta 2


ฉันยังมีปัญหานี้ ...
rockdaswift

คำตอบ:


364

หากคุณใช้ CocoaPods และต้องการให้แก้ไขโดยอัตโนมัติทุกครั้งที่คุณทำpod installคุณสามารถเพิ่มบรรทัดเหล่านี้ไปยังจุดสิ้นสุด 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

แก้ไข: ปัญหานี้ได้รับการแก้ไขแล้วถ้าคุณใช้ CocoaPods v1.1.1 หรือใหม่กว่า อย่าลืมลบการALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESตั้งค่าจากเป้าหมายหลักของโครงการ


24
หากคุณพยายามใช้2.3ใน codebase ของคุณในขณะนี้ให้ใช้2.3แทน3.0 วิธีที่ยอดเยี่ยม! ได้อย่างมีประสิทธิภาพทำให้"Use Legacy Swift Language Version"การNo (หรือถ้าคุณเปลี่ยนไป2.3ของมันYes) ประโยชน์ของตัวเลือกนี้คือทุกครั้งที่คุณpod installตั้งค่านั้นโดยอัตโนมัติ! น่ากลัว ฉันเห็นว่าSWIFT_VERSIONตั้งไว้ในโครงการObj-Cเช่นกัน ฉันคิดว่าจะไม่มีผลเสียใด ๆ
Herbal7ea

8
นี่เป็นเรื่องที่ดี แต่ก็ค่อนข้างรบกวนอยู่ดีหากไม่มีผู้เชี่ยวชาญ Ruby ใน StackOverflow โครงการนับพัน ๆ โครงการนั้นเป็น SOL ฉันเปลี่ยนการตั้งค่า Xcode SWIFT_VERSION ด้วยตนเองเป็น 2.3 ในทุกโมดูลและในโครงการ Pod โดยใช้การตั้งค่าการสร้างและใช้งานไม่ได้ แต่สิ่งนี้ทำได้ หมายถึงเวทย์มนตร์รบกวนซ่อนเร้น ฉันเกลียดที่
BaseZen

5
แท้จริงฉันลงชื่อเข้าใช้เพียงเพื่อมอบอุปกรณ์ประกอบฉากให้คุณในเรื่องนี้
Dnaso

1
ฉันมีโครงการ Obj-C กับ Charts (ใน Swift), AfNetworking และ Pod Obj-C อื่น ๆ ฉันใช้สคริปต์ด้านบนในไฟล์พ็อดของฉัน ข้อผิดพลาด / คำเตือนทั้งหมดที่เกี่ยวข้องกับ swift หายไป แต่ตอนนี้โครงการของฉันไม่พบเฟรมเวิร์ก AFNetwoking
ibnetariq

1
@ Mr.Bista stackoverflow.com/a/38597681/2854405โซลูชันที่ผ่านการอนุมัติทำให้ทำงานได้จากการตั้งค่า Xcode แต่คุณอาจจะต้องทำมันด้วยทุก Pod repo pod install / updateเดียวที่คุณมีทุกครั้งที่คุณกำลังทำ วิธีนี้ทำให้สิ่งต่าง ๆ เร็วขึ้น คุณสามารถอัปเดตเวอร์ชัน Cocoapods ของคุณได้ในขณะนี้: ควรแก้ไขปัญหานี้ด้วย
Tulleb

119

ฉันเพิ่งพบวิธีแก้ไข

ไปที่การตั้งค่า Build ของโครงการหรือไลบรารีและตั้งค่าแอตทริบิวต์ Swift Compiler Version "Use Legacy Swift Language Version" จาก Unspecified เป็น Yes หรือ NO

ป้อนคำอธิบายรูปภาพที่นี่


13
ฉันไม่เห็นตัวเลือกนี้ในโครงการ Objective-C
Bryan

คุณมีห้องสมุดโครงการ Swift ในโครงการ Obj-C ของคุณหรือไม่
rockdaswift

2
หากคุณกำลังใช้งานอย่างรวดเร็วและ cocoapods คำสั่งข้างต้นใน cocoapods ทำสิ่งนี้ได้อย่างมีประสิทธิภาพ หากคุณไม่ต้องการเปลี่ยนแปลงสิ่งนี้ทุกครั้งที่pod installฉันแนะนำให้ใช้ @Tulleb คำตอบของด้านบน
Herbal7ea

ตอนนี้ข้อผิดพลาดของฉันคือข้อผิดพลาด Swift Compiler ในชั้นเรียนตัวเอง
Eduardo Oliveros

1
ตัวเลือกนี้ไม่สามารถใช้ได้อีกต่อไป
Hemang

33

ฉันไม่สนใจปัญหานี้มาระยะหนึ่งแล้วเพิ่งจะทำสิ่งอื่น ๆ ในระหว่างนี้ - ในที่สุดฉันก็พบวิธีแก้ปัญหาของฉัน

เนื่องจากโปรเจ็กต์ของฉันคือ Objective-C ฉันคิดว่าอาจเป็นหนึ่งในพ็อดที่ฉันใช้กำลังใช้สวิฟท์ฉันจึงตรวจสอบพ็อดแต่ละอันและไม่มีเลย

ทางออกสุดท้ายคือโมเดล Core Data ของฉันถูกตั้งค่าให้สร้างรหัสใน Swift แม้ว่าฉันจะสร้างด้วยตนเองในเมนูไฟล์> ใหม่> NSManagedObjectSubclass สิ่งที่ฉันต้องทำก็แค่เปลี่ยนเป็น Objective-C

ภาพหน้าจอ


1
คุณพบสิ่งนี้ได้อย่างไร Xcode ไม่ได้พูดอะไรเกี่ยวกับเรื่องนี้ คุณช่วยฉันไว้.
Ryan

2
แน่นอนทางออกของฉันและผู้ช่วยให้รอดของฉัน ขอบคุณ! โง่ว่า Apple สร้าง Coredata รุ่น 'Swifty' โดยอัตโนมัติอย่างไรเมื่อทั้ง App นั้นเป็นวัตถุประสงค์ -c ....
Bob de Graaf

18

ปัญหานี้ยังปรากฏใน Xcode-8.1 เมื่อเราเพิ่มเป้าหมายใหม่เช่นส่วนขยายหรือวิดเจ็ตและห้องสมุดของบุคคลที่สามจะรวมอยู่ในเป้าหมายใหม่ด้วยความช่วยเหลือของ cocopods หลังจากPod ติดตั้ง เราสามารถเผชิญกับข้อผิดพลาดเช่นเดียวกับข้างต้น

เปลี่ยนการใช้ Legacy Swift Language Versionในการตั้งค่า Build Build ทุกครั้งเป็น

ไม่

ป้อนคำอธิบายรูปภาพที่นี่


ในการตั้งค่ากรณีของฉันใช้ Legacy Swift Language Version เป็น Yes เพื่อแก้ไขปัญหา
Jayprakash Dubey

ตรวจสอบให้แน่ใจว่าสำหรับแต่ละ lib ที่มีปัญหานี้ซึ่งคุณได้ตั้งค่าใช่หรือไม่ใช่ .. ในกรณีของฉันไม่ทำงาน
hanzolo

สิ่งนี้ใช้ได้สำหรับฉัน โปรดตรวจสอบให้แน่ใจว่าคุณทำเช่นเดียวกันกับเป้าหมายการทดสอบด้วย
zizutg

@zizutg: - เราต้องข้ามการตรวจสอบในทุกเป้าหมาย ขอบคุณที่ชี้อีกครั้ง
Shrawan

9

หากคุณใช้ Xcode 8 หรือใหม่กว่า

  1. ไปที่การตั้งค่าการสร้าง
  2. ค้นหาการใช้เวอร์ชันภาษา swift ดั้งเดิม
  3. ใช่ - รวดเร็ว 2.3
  4. ไม่ - Swift 3.0 ป้อนคำอธิบายรูปภาพที่นี่

5

เพิ่มรหัสด้านล่างในตอนท้ายของ 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

ฉันกำลังทำงานในโครงการที่มีการผสมผสานวัตถุประสงค์ -c และรหัส swift ฉันก่อนหน้านี้ใช้ swift เวอร์ชัน 2.3 และหลังจากอัปเกรดเป็น swift 3 ฉันไม่สามารถสร้างโครงการได้ Xcode บ่นกับข้อผิดพลาดดังกล่าว

เห็นได้ชัดว่ามีบางรุ่น Swift ที่ล้าสมัยที่ระบุในไฟล์ project.pbxproj ของฉัน มีการระบุ swift 3.0.1:

SWIFT_VERSION = 3.0.1;

ในขณะที่ฉันติดตั้ง 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

ดังนั้น, ฉันแก้ไขมันโดยการเปลี่ยนรุ่น Swift ในไฟล์ project-pbxproj เป็น:

SWIFT_VERSION = 3.0;

ดูเหมือนว่าตัวระบุรุ่นแพตช์ระดับนั้นเฉพาะเจาะจงเกินไป


4

ในกรณีของฉันฉันเพิ่งทำสิ่งต่อไปนี้

เลือกโครงการเป้าหมาย => ไปที่การตั้งค่าการสร้าง => ค้นหา“ Swift Language Version” => ให้ความคุ้มค่ากับเวอร์ชั่น Swift ปัจจุบัน

นั่นคือทั้งหมดได้แก้ไขปัญหาของฉันแล้ว

ติดตามภาพนี้


4

ฉันได้รับข้อผิดพลาดเดียวกัน ฉันพยายามค้นหา "Use Legacy Swift Language Version" แต่ไม่พบ ฉันใช้ Xcode 8.3.3 หลังจากท่องเว็บมากเกินไปและหลีกเลี่ยงฉันพบวิธีแก้ปัญหานี้และมันใช้งานได้สำหรับฉันป้อนคำอธิบายรูปภาพที่นี่

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

ตั้งค่า "ใช้ Legacy Swift Language Version" เป็น "YES" หากคุณใช้ swift เวอร์ชันเก่าในโครงการของคุณหรือบุคคลที่สามที่รวดเร็ว "ไม่" ถ้าโครงการของคุณอัปเกรดเป็นเวอร์ชันรวดเร็วปัจจุบัน หากคุณไม่ได้กำหนดค่าเวอร์ชัน swift หลังจากอัพเดตและติดตั้งทุกครั้งเฟรมเวิร์ก Pod จำเป็นต้องระบุสิ่งนี้


2

จริง ๆ แล้วฉันต้องค้นหา "Legacy Swift" เพื่อให้สามารถเปลี่ยนจากไม่ระบุเป็น "ใช่" เมื่อฉันเลื่อนลงไปที่ส่วนที่อธิบายไว้ข้างต้นฉันไม่สามารถเปลี่ยนได้ ฉันหวังว่านี่จะช่วยให้ใครบางคน


2

โครงการของฉันเขียนด้วยสวิฟท์ fastlaneผมได้รับข้อผิดพลาดเดียวกันว่า สิ่งที่เกิดขึ้นคือการอัปเดตอัตโนมัติ Xcode ของฉันดังนั้นฉันต้องอัปเดตโครงการเป็น Swift 3.0 มีข้อผิดพลาดมากมาย การแก้ไขและการดีบักใช้เวลานานเกินไปและมันก็ไม่คุ้มค่าในตอนนั้นดังนั้นฉันจึงตัดสินใจติดตั้ง Xcode เวอร์ชันเก่า เปลี่ยนรหัสของฉันกลับเป็น 2.3 จากนั้นfastlane betaไม่ทำงานอีกต่อไป ปรากฎว่าฉันต้องตั้งค่า Command Line Tool เป็น 7.3 ป้อนคำอธิบายรูปภาพที่นี่


1

ฉันมีปัญหาเดียวกันนี้และแก้ไขได้ด้วยการทำสิ่งต่อไปนี้:

ในโครงการ> การตั้งค่าการสร้าง:

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

จากนั้นใน Podfile ของฉัน:

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

การใช้การตั้งค่าทั้งสามนี้ลบคำเตือนทั้งหมดและอนุญาตให้ฉันรวบรวมได้อย่างถูกต้อง

ความคืบหน้าชัดเจนและสิ่งที่มีจริงมากที่สุดสำหรับการรวบรวมก็เปลี่ยน SWIFT_VERSION ใน Podfile 3-3.0 ตามที่แนะนำที่นี่


1

ตั้งแต่ XCode 8 เป็นต้นไปคุณสามารถใช้ swift 2.3 ได้แม้ว่า XCode 8 จะใช้ swift 3.x เป็นเวอร์ชัน swift เริ่มต้น หากต้องการใช้ swift 2.3 เพียงเปิดแฟล็กใช้รุ่นภาษา Legacy Swift เป็น YES จากการตั้งค่า Build จากนั้น XCode จะใช้ Swift 2.3 สำหรับเป้าหมายโครงการนั้น


1

ก่อนที่จะลองวิธีแก้ปัญหาที่ซับซ้อนนี่คือการตรวจสอบขั้นพื้นฐานที่คุณต้องทำหากคุณยังใหม่กับ Cocoapods และคุณกำลังมีปัญหานี้

คุณอาจต้อง:

  • เปิด Podfile ของคุณอีกครั้ง
  • ตรวจสอบว่าบรรทัดสำหรับแพลตฟอร์มนั้นไม่ได้ถูกคอมเม้นต์ด้วย '#' ในที่สุดมันควรมีลักษณะเหมือน:

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

  • บันทึก Podfile ของคุณปิด Xcode และเรียกใช้pod installอีกครั้ง
  • เปิด project.xcworkspace ของคุณ

อาจเป็นเพียงแค่นั้น

ถ้าไม่คุณสามารถไปได้ ;-)


1

ฉันมีปัญหาเดียวกันนี้หลังจากอัปเดตเป็น xcode 8.3.2 แต่ตัวเลือก "ใช้ภาษา Legacy Swift" หายไป นี่ดูเหมือนจะเป็นตัวเลือกในการเปลี่ยนแปลงในขณะนี้: เวอร์ชั่นของ Swift Lang

ใช้การแก้ไขนี้กับ Alamofire และ libs อื่น ๆ และใช้งานได้ดี


1

ไปที่การตั้งค่าการสร้างโครงการสำหรับโครงการและเป้าหมายทำด้านล่างสอง

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
And
Swift Compiler - Version  = Swift 3

Swift 3เปลี่ยนไปล่าสุด

แก้ไขข้อผิดพลาด

หากแก้ไขข้อผิดพลาดของคุณได้แล้วโปรดชอบ


1

ใน Xcode 9 เบต้า ไปที่การตั้งค่าโครงการสร้างการตั้งค่าค้นหาเวอร์ชั่นภาษา Swift ใน Xcode 9 คุณต้องระบุว่าคุณใช้ Swift 3.2 หรือ Swift 4


ฉันมีโครงการใน 9.0b ซึ่งการตั้งค่าทั้งโครงการและเป้าหมายไปที่ Swift 4 ยังคงสร้างข้อผิดพลาดต่อไปการตั้งค่าทั้งสองเป็น Swift 3.2 จะลบออกและการตั้งค่าทั้งสองกลับไปที่ Swift 4 เป็นสิ่งที่ดี ยังคงได้รับข้อผิดพลาด
green_knight

1

หากคุณเปลี่ยนALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESเป็นNOยังไม่ทำงานอาจเป็นเพราะปัญหา xcode ไม่ใช่ปัญหาของคุณ ทำตามขั้นตอนดังนี้:

1. เปลี่ยนALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESทรัพย์สินให้เป็นYESอยู่ในเป้าหมายการเตือน

2. จากนั้นจะแสดงคำเตือนบนแถบด้านซ้ายซึ่งแนะนำให้คุณเปลี่ยนเป็น swift 3.0

NOการเปลี่ยนแปลงกลับไป 3.then สร้างโครงการอีกครั้ง xcode ตรวจจับการเปลี่ยนแปลงของคุณในที่สุดNO !

ปัญหาได้รับการแก้ไขในกรณีนี้!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.