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.