Xcode 9 เวอร์ชันภาษา Swift (SWIFT_VERSION)


115

ฉันเพิ่งอัปเดต xcode เป็นเวอร์ชัน 9 ก่อนหน้านั้นใน Xcode 8.x เมื่อใดก็ตามที่ฉันใช้เพื่อpod updateแสดงรหัสอัปเดตเพื่อแปลงรหัสเป็น Swift 3 และทำการแก้ไขข้อผิดพลาด แต่ตอนนี้มันทำให้ฉันเกิดข้อผิดพลาดนี้:

ต้องตั้งค่าการสร้าง "เวอร์ชันภาษา Swift" (SWIFT_VERSION) เป็นค่าที่รองรับสำหรับเป้าหมายที่ใช้ Swift การตั้งค่านี้สามารถตั้งค่าได้ในตัวแก้ไขการตั้งค่าบิลด์

สำหรับข้อผิดพลาดนี้ฉันได้ลองBuild Settings > Swift Language Versionแล้วและเป็น Swift 3.2 แต่เนื่องจากการโทรอัปเดตได้ติดตั้งพ็อดบางตัวเช่น Alamofire อีกครั้งและแจ้งว่าให้ติดตั้ง Xcode 8.x เพื่อแปลงรหัสเป็น Swift 3 ดังนั้นฉันจึงต้องติดตั้ง รุ่นเพิ่มเติมที่มี Xcode ล่าสุด? ถ้าใช่ฉันจะติดตั้ง Xcode 8 กับ Xcode 9 ได้อย่างไร


ลองทำความสะอาดข้อมูลที่ได้รับและสร้างโครงการบน Xcode 9
iAviator

เวอร์ชันที่รวดเร็วของคุณใน Xcode 8 คืออะไร ??
santhoshkumar

มันคือ 8.3.3 ฉันคิดว่า เป็นไฟล์ล่าสุดก่อน xcode 9
Chaudhry Talha

คำตอบ:


181

คำตอบสำหรับคำถามของคุณ:
คุณสามารถดาวน์โหลด Xcode 8.x ได้จากพอร์ทัลดาวน์โหลดของ Appleหรือดาวน์โหลด Xcode 8.3.3 (หรือดู: จะดาวน์โหลด Xcode เวอร์ชันเก่าได้ที่ไหน ) หากคุณมีบัญชีนักพัฒนาระดับพรีเมียม (apple id) คุณสามารถติดตั้งและทำงานกับทั้ง Xcode 9 และ Xcode 8.x ในระบบเดียว (mac) (ตรวจสอบให้แน่ใจว่าคุณCommand Line Toolsรองรับ Xcode ทั้งสองเวอร์ชันเพื่อทำงานกับเทอร์มินัล (ดู: วิธีการติดตั้ง 'Command Line Tool' ))


คำแนะนำ: วิธีย้ายรหัส Xcode 9 เวอร์ชัน Swift ที่เข้ากันได้ (Swift 3.2 หรือ 4)
Xcode 9 อนุญาตให้แปลง / โยกย้ายจากSwift 3.0ไปยังSwift 3.2/4.0เท่านั้น ดังนั้นหากเวอร์ชันปัจจุบันของภาษา Swift ในโครงการของคุณต่ำกว่า 3.0 คุณต้องย้ายรหัสของคุณในเวอร์ชันที่เข้ากันได้กับ Swift 3 โดยใช้ Xcode 8.x.

นี่เป็นข้อความแสดงข้อผิดพลาดทั่วไปที่ Xcode 9 แสดงว่าระบุภาษา Swift ต่ำกว่า 3.0 หรือไม่ระหว่างการย้ายข้อมูล

ใส่คำอธิบายภาพที่นี่


Swift 3.2 รองรับ Xcode 9 และ Xcode 8 ทั้งคู่

โครงการ► (เลือกเป้าหมายโครงการของคุณ) ►สร้างการตั้งค่า► (พิมพ์ 'รวดเร็ว' ในแถบค้นหา) Swift Compiler Language ►เวอร์ชันภาษา Swift ►คลิกที่รายการภาษาเพื่อเปิด

ใส่คำอธิบายภาพที่นี่



แปลงซอร์สโค้ดของคุณจาก Swift 2.0 เป็น 3.2 โดยใช้ Xcode 8 แล้วดำเนินการต่อด้วย Xcode 9 (Swift 3.2 หรือ 4)


เพื่อให้การย้ายรหัสของคุณง่ายขึ้นให้ทำตามขั้นตอนเหล่านี้: (จะช่วยให้คุณสามารถแปลงเป็นเวอร์ชันล่าสุดของ swift ที่เครื่องมือ Xcode ของคุณรองรับ)

Xcode: เมนู: แก้ไข▶แอบแฝง▶ถึงไวยากรณ์ Swift ปัจจุบัน

ใส่คำอธิบายภาพที่นี่


9
หากคุณมาที่นี่เพราะตอนนี้คุณเพิ่ง (ธันวาคม 2018) ปัดฝุ่นโค้ด Swift 2 บางโค้ดคุณจะต้องผิดหวังเมื่อทราบว่า Xcode 8 ไม่ทำงานบน Mojave
bugloaf

53

สำหรับโครงการ Objective C ที่สร้างโดยใช้ Xcode 8 และตอนนี้เปิดใน Xcode 9 แสดงข้อผิดพลาดเดียวกันกับที่กล่าวไว้ในคำถาม

ในการแก้ไขให้กดปุ่ม + ใน Build Settings และเลือก Add User-Defined Setting ดังแสดงในภาพด้านล่าง

สร้างการตั้งค่า

จากนั้นในแถวใหม่ที่สร้างขึ้นให้เพิ่มSWIFT_VERSIONเป็นคีย์และ3.2เป็นค่าด้านล่าง

ใส่คำอธิบายภาพที่นี่

จะแก้ไขข้อผิดพลาดสำหรับวัตถุประสงค์ c โครงการ


2
สิ่งนี้ช่วยฉันได้ ขอบคุณ
Andreas Kraft

9
หากคุณมีปัญหากับ CocoaPods คุณอาจต้องเพิ่มการตั้งค่ารุ่นนี้ในส่วน pods.xcodeproject
Stewart Macdonald

1
สิ่งนี้ใช้ได้ผลสำหรับฉันฉันยังต้องแก้ไข 'ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES' ในการตั้งค่าการสร้างเป็น '$ (สืบทอด)'
F-1

1
ขอขอบคุณอีกครั้ง 2 เดือนต่อมา
ม.ค.

1
ชื่นชมการแก้ปัญหา
user366584

4

ฉันเพิ่งได้รับสิ่งนี้หลังจากสร้างโปรเจ็กต์ Objective-C ใหม่ใน Xcode 10 หลังจากที่ฉันเพิ่มไฟล์โมเดลข้อมูลหลักลงในโปรเจ็กต์

ฉันพบสองวิธีในการแก้ไขปัญหานี้:

  1. วิธีง่ายๆ: เปิดตัวตรวจสอบไฟล์ของโมเดลข้อมูลหลัก ( - 1) และเปลี่ยนภาษาจาก Swift เป็น Objective-C

เปลี่ยนภาษาของโมเดลข้อมูลหลัก

  1. วิธีที่ยาวกว่าและอันตรายกว่า

โมเดลมีไฟล์ "เนื้อหา" ในบรรทัดนี้:

<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="14460.32" systemVersion="17G5019" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">

ในนั้นมีsourceLanguage="Swift"รายการ เปลี่ยนเป็นsourceLanguage="Objective-C"และข้อผิดพลาดหายไป

หากต้องการค้นหาไฟล์ "เนื้อหา" ให้คลิกขวาที่.xcdatamodeldใน Xcode และทำ "Show in Finder" คลิกขวาที่ไฟล์ (Finder) จริงแล้วทำ "Show Package Contents"

นอกจากนี้: การเปลี่ยนภาษาของโมเดลจะหยุด Xcode ไม่ให้สร้างไฟล์คลาสย่อยของอ็อบเจ็กต์ที่มีการจัดการใน Swift


1

สิ่งนี้สามารถเกิดขึ้นได้เมื่อคุณเพิ่ม Core Data ลงในโครงการที่มีอยู่
ตรวจสอบ:
<ชื่อ> / <ชื่อ> .xcdatamodeld / <ชื่อ> .xcdatamodel / เนื้อหา
ไฟล์
ไฟล์นี้มีรายการ "sourceLanguage" ซึ่ง (โดยค่าเริ่มต้น) อาจถูกตั้งค่าเป็น "Swift" เปลี่ยนเป็น "Objective-C"


0

ฉันเพียงแค่คลิกที่ปุ่มแปลงด่วนล่าสุดและตั้งค่าการสร้างเป้าหมายของแอป -> เวอร์ชันภาษา Swift: swift 4.0,

หวังว่านี่จะช่วยได้


0

โซลูชันนี้ใช้งานได้เมื่อไม่มีอะไรทำงาน:

ฉันใช้เวลามากกว่าหนึ่งสัปดาห์ในการแปลงโครงการทั้งหมดและหาวิธีแก้ไขด้านล่าง:

ขั้นแรกให้ยกเลิกการรวมการพึ่งพา cocopods จากโปรเจ็กต์แล้วเริ่มการแปลงโปรเจ็กต์เป็นเวอร์ชันที่รวดเร็วล่าสุด

ไปที่ Project Directory ใน Terminal แล้วพิมพ์:

pod deintegrate

สิ่งนี้จะยกเลิกการรวม cocopods จากโครงการและจะไม่มีร่องรอยของ CocoaPods ในโครงการ แต่ในขณะเดียวกันจะไม่ลบ xcworkspace และ podfiles ไม่เป็นไรถ้าพวกเขาอยู่

ตอนนี้คุณต้องเปิด xcodeproj (ไม่ใช่ xcworkspace) และคุณจะได้รับข้อผิดพลาดมากมายเนื่องจากคุณได้เรียกวิธีการพึ่งพา cocoapods ในโครงการหลักของคุณ

ดังนั้นในการลบข้อผิดพลาดคุณมีสองทางเลือก:

  1. แสดงความคิดเห็นเกี่ยวกับรหัสทั้งหมดที่คุณใช้จากห้องสมุด cocoapods
  2. สร้างคลาส Wrapper ซึ่งมีเมธอดจำลองคล้ายกับไลบรารี cocopods จากนั้นเรียกใช้

เมื่อข้อผิดพลาดทั้งหมดถูกลบออกคุณสามารถแปลงรหัสเป็นเวอร์ชันที่รวดเร็วล่าสุดได้

บางครั้งหากคุณได้รับข้อผิดพลาดแปลก ๆ ให้ลองทำความสะอาดข้อมูลที่ได้รับแล้วลองอีกครั้ง


0

บางทีคุณอาจต้องดาวน์โหลด toolchain ข้อผิดพลาดนี้เกิดขึ้นเมื่อคุณไม่มีคอมไพเลอร์ที่รวดเร็วในเวอร์ชันที่ถูกต้อง


-3

ในกรณีของฉันคำเตือนทั้งหมดหายไปหลังจากที่ฉันเปลี่ยนเวอร์ชันที่รวดเร็วจาก 2.x เป็น 4.0 โดยตรงในการตั้งค่าการสร้างยกเว้นสองคำเตือน

คำเตือนเหล่านี้เกี่ยวข้องกับmyprojectnameTestsและmyprojectnameUITestsโฟลเดอร์ ฉันไม่ได้สังเกตเห็นและฉันคิดว่ามันเกี่ยวข้องกับการอพยพโดยตรงจาก Xcode 7 เป็น Xcode 9 และฉันคิดว่าฉันไม่สามารถแก้ปัญหานี้ได้และฉันควรติดตั้ง Xcode 8 เวอร์ชันที่ไม่ได้รับ

ในกรณีของฉันฉันลบโฟลเดอร์เหล่านี้และคำเตือนทั้งหมดหายไป แต่คุณสามารถสร้างโฟลเดอร์นี้ใหม่และมีการใช้สิ่งนี้:

file > new > target > (uitest or unittest extensions)

และใช้บทความนี้เพื่อสร้างกรณีทดสอบ: https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/04-writing_tests.html


แล้วมีคนมาบอกว่าฉันผิดอะไร!?
iman kazemayni

2
ฉันจะไม่ลงคะแนนสิ่งนี้เป็นการส่วนตัวไม่มีอะไรผิดปกติกับคำตอบของคุณ แต่สถานที่ที่ดีที่สุดคือการแสดงความคิดเห็นในคำถามของ OP นอกจากนี้คุณสามารถดูที่stackoverflow.com/help/how-to-answerซึ่งจะช่วยคุณในการหาวิธีตอบคำถามที่ถูกต้อง
grassyburrito
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.