ฉันกำลังมีปัญหากับ Xcode ซึ่งข้อผิดพลาด "Source Kit Service Terminated" กำลังปะทุขึ้นและการเน้นไวยากรณ์ทั้งหมดและการเติมโค้ดเสร็จสมบูรณ์ใน Swift ฉันจะแก้ไขสิ่งนี้ได้อย่างไร
นี่คือภาพตัวอย่าง:
ฉันกำลังมีปัญหากับ Xcode ซึ่งข้อผิดพลาด "Source Kit Service Terminated" กำลังปะทุขึ้นและการเน้นไวยากรณ์ทั้งหมดและการเติมโค้ดเสร็จสมบูรณ์ใน Swift ฉันจะแก้ไขสิ่งนี้ได้อย่างไร
นี่คือภาพตัวอย่าง:
คำตอบ:
คำตอบของฉัน (Xcode6-Beta7) เป็นเพียงการลบโฟลเดอร์ Derived Data
Preferences > Locations > Derived Data > click the arrow to open in Finder > trash it.
หวังว่านี่จะช่วยใครซักคน มีสาเหตุหลายประการที่ทำให้เกิดความผิดพลาดนี้ได้อย่างชัดเจน
ฉันเชื่อว่าฉันอาจพบวิธีแก้ปัญหาทั่วไปมากกว่า ด้านล่างเป็นขั้นตอนที่ฉันใช้เพื่อสนับสนุน Xcode ไม่ให้เกิดSourceKitService Terminated
ข้อผิดพลาด
Error running playground: Failed prepare for communication with playground.
ดูภาพนี้บน TwitterOS X
เป็นiOS
ฉันจะได้รับข้อผิดพลาดอีกครั้ง (โชคไม่ดีที่ฉันไม่ได้เขียนลงไป)SourceKitService Terminated
ปัญหาในเธรดนี้IDEPlaygroundDocument: Error encountered running playground
com.apple.CoreSimulator.CoreSimulatorService[3952]: The runtime for the selected device is not installed.
หากคุณมีปัญหาภายในบริบทของโครงการ Swift ให้ลองทำสิ่งนี้เพียงลำพังก่อน หากไม่ได้ผลให้ลองทำตามขั้นตอนทั้งหมดด้านล่าง
กระบวนการที่มีความยาวและเกี่ยวข้องมากขึ้น (3 ขั้นตอนแรกนั้นไม่ได้มีประโยชน์แน่นอน แต่ฉันทำไปแล้วบันทึกไว้ที่นี่)
OS X
iOS
ดูเหมือนว่าปัญหาเกิดขึ้นกับ Xcode6 ไม่สามารถค้นหาและเชื่อมต่อกับตัวจำลองได้อย่างถูกต้อง ฉันไม่สามารถระบุได้ว่าทำไมถึงเป็นเช่นนี้ แต่สิ่งนี้ทำให้ฉันสามารถพัฒนาต่อไปได้ด้วย Swift สิ่งนี้อาจเกี่ยวข้องกับข้อเท็จจริงที่ว่าไบนารีตัวจำลองดูเหมือนจะย้ายไปแล้ว
คุณเพียงแค่ต้องลบ "ModuleCache" นี่คือแคชบางประเภทที่ใช้โดย Xcode สำหรับการเติมข้อความอัตโนมัติ
คัดลอกและวางบรรทัดต่อไปนี้ในเทอร์มินัล:
rm -rf ~ / Library / Developer / Xcode / DerivedData / ModuleCache
SourceKitService ขัดข้องในระบบของฉันทันทีที่ฉันพิมพ์
extension foo {
ฉันใช้ Xcode 6 beta 6 และไม่สำคัญว่าฉันจะพิมพ์เป็นไฟล์ว่างเปล่าหรือเพิ่มลงในไฟล์ที่มีอยู่ ทันทีที่แหล่งมีหนึ่งextension
บล็อกมันจะพัง สิ่งนี้เกิดขึ้นแม้ในโครงการที่สร้างขึ้นใหม่
"โซลูชัน" ของฉันคือการหลีกเลี่ยงการขยายในแหล่งที่ฉันกำลังทำงานอยู่ ฉันคอมเม้นต์จุดสิ้นสุดของคลาสบล็อกและจุดเริ่มต้นของบล็อกส่วนขยาย ทันทีที่ฉันทำงานในชั้นเรียนเสร็จฉันก็แสดงความคิดเห็นอีกครั้ง:
class MyClass {
[... my stuff ...]
//}
//
//extension MyClass {
}
มันเริ่มเกิดขึ้นในโปรเจ็กต์ spritekit ของฉันหลังจากใส่ฟังก์ชั่น touchesMoved ฟังก์ชั่นนี้ใช้การบังคับแกะแบบเปิดซึ่งดูเหมือนว่าจะทำให้เกิดปัญหา:
override func touchesMoved(touches: NSSet!, withEvent event: UIEvent!)
หลังจากลบเครื่องหมายอัศเจรีย์และหยุดการบังคับให้เปิดเครื่องแล้ว SourceKitService จะหยุดทำงาน
หวังว่านี่จะช่วยได้!
ฉันพบวิธีแก้ไขปัญหาในฟอรัมนักพัฒนาซอฟต์แวร์ของ Apple (ซึ่งต้องมีการลงชื่อเข้าใช้ดังนั้นฉันจะอธิบายที่นี่ด้วย)
TLDR : ไม่ต้องนำเข้า@protocol
ในของคุณ Objective-C @interface
ถึงสวิฟท์ส่วนหัวของการเชื่อมโยงที่มีชื่อเดียวกันในฐานะที่เป็น ตัวอย่างเช่น SDK ของ Facebook มีทั้งโปรโตคอลและส่วนต่อประสานชื่อว่า "FBGraphObject"
นี่คือกระทู้ที่โพสต์:
การเพิ่ม Facebook SDK ทำให้ SourceKitService ขัดข้อง หากคุณต้องการใช้เบต้า 3 และคุณต้องใช้ SDK ของ Facebook หนึ่งในสิ่งที่ฉันพบและใช้งานได้สำหรับฉันคือการรีแฟคเตอร์ @protocol FBGraphObject @protocol ของ Facebook SDK และเปลี่ยนชื่อเป็น @protocol FBGraphObjectProtocol และเห็นได้ชัดว่า SourceKit ไม่ชอบ
แน่นอนว่านี่เป็นวิธีแก้ปัญหาชั่วคราวเพื่อให้คุณใช้งานได้และคุณจะต้องใช้ Cocoapods หรือสร้าง Facebook SDK ด้วยตัวคุณเองแทนที่จะใช้ไลบรารีเฟรมเวิร์ก
ในขณะนี้คุณจะต้องตรวจสอบให้แน่ใจว่าคุณไม่มีการประกาศ @protocol และ @interface ที่ขัดแย้งกันและมีห้องสมุดบุคคลที่สามที่คุณอาจใช้อยู่
ฉันเสียค่าใช้จ่ายในวันนี้หวังว่าจะช่วยได้!
โพสต์โดยe.partoเมื่อวันที่ 10 กรกฎาคม 2014
3.17.1
ใช้ชื่ออื่นที่ไม่ใช่ Swift สำหรับโครงการ "Swift" ถูกสงวนไว้
UIView
ของ
ฉันมีปัญหานี้ทุกสองสามวินาทีใน Xcode 6 Beta 3 และมันยังคงดำเนินต่อไปแม้ในโครงการใหม่ที่สมบูรณ์ ฉันเปลี่ยนเป้าหมายการปรับใช้จาก 8.0 เป็น 7.1 และหยุดทำงาน
โครงการของคุณชื่อSwift
? เมื่อเห็นข้อความนั้นบิวด์ก็จะล้มเหลวเช่นกัน ( <unknown>:0: error: module name "Swift" is reserved for the standard library
) SwiftTest
ลองใช้ชื่อโครงการอื่นเช่น มันจะทำงาน
เพื่อแก้ไขปัญหานี้คุณอาจมีปัญหาแปลก ๆ เกี่ยวกับรหัส Swift ของคุณ ตัวอย่างเช่นมีการขาด IBOutlet หลายครั้งเนื่องจากคุณอยู่ระหว่างการคัดลอกและวาง มักจะเป็นเพียงข้อผิดพลาดทางไวยากรณ์ที่ไม่สามารถจัดการได้
ฉันพบว่าการพิมพ์ประเภทตัวแปร (แบบคงที่) อย่างชัดเจนแทนที่จะอนุมานพวกเขาสามารถแก้ไขปัญหาให้ฉันได้
ออกจาก Xcode ถ้าเปิดอยู่ จากนั้นเรียกใช้ Terminal:
defaults delete com.apple.dt.Xcode
สิ่งนี้จะคืนค่า Xcode เป็นการตั้งค่าเริ่มต้น เปิด Xcode และทุกอย่างจะทำงานได้อีกครั้ง
สำหรับฉัน (xcode 6.1) เหตุผลก็คือฉันลืมที่จะนำคลาสย่อยของฉันไปใช้กับโปรโตคอล
เช่นนี้ผิด
protocol SomeProtocol { ... }
class A :NSObject, SomeProtocol {
...
}
class B : A {
...
}
และนี่ก็โอเค:
protocol SomeProtocol { ... }
class A : NSObject, SomeProtocol {
...
}
class B : A, SomeProtocol {
...
}
โปรแกรมที่ประกอบไปด้วยสองบรรทัดนี้เท่านั้น (อาจผิดในแง่ของไวยากรณ์ Swift) เพียงพอที่จะทำให้เกิดข้อผิดพลาด "SourceKitService Terminated" ที่นี่:
var x = 42
println("Hello", x)
การใช้let
แทนที่จะvar
ทำให้ตัวแก้ไขทำงานตามปกติอีกครั้ง Xcode เวอร์ชั่น 6.0 (6A215l)
มีปัญหาเดียวกันวันนี้สิ่งที่อยู่กับprintln
ฉันเพิ่งลองสไตล์ NSLog แบบเก่าเพื่อพิมพ์ค่า:
// something like this
println("value = %@", valueObj)
วิธีที่เราควรเขียนสตริงใน swift นั้นมีวิวัฒนาการมาจากสไตล์ printf เป็นสไตล์อินไลน์ดังนั้นตอนนี้คุณฝังค่าลงในสตริงรูปแบบดังนี้:
"Here goes \(YOUR_VARIABLE)"
ดังนั้นสำหรับตัวอย่างด้านบนทางออกคือ:
println("value =\(valueObj)")
ฉันมีปัญหาเดียวกันกับ Xcode6 beta 3 สำหรับโครงการที่สร้างใน beta 2
มันเป็นเพราะการเปลี่ยนแปลงใหม่ในภาษาที่รวดเร็วเช่นไวยากรณ์ประกาศอาร์เรย์
ตรวจสอบรหัสที่ได้รับผลกระทบเนื่องจากการเปลี่ยนแปลงที่เกิดขึ้นในเบต้า 3
หนึ่งในตัวอย่างในกรณีของฉันคือ:
ฉันต้องเปลี่ยน:
var tabBarController : UITabBarController = self.window?.rootViewController as UITabBarController;
ถึง
var tabBarController : UITabBarController = self.window!.rootViewController as UITabBarController
สรุป: ดูเหมือนว่ามีข้อผิดพลาดในซอร์สโค้ดในบางเงื่อนไขข้อผิดพลาดนี้ผลิตโดย Xcode
การแก้ไขจนถึงข้อผิดพลาดได้รับการแก้ไข: ตรวจสอบข้อผิดพลาดด้วยตนเอง :)
โชคดี!
ทางออกสำหรับฉันเกิดขึ้นกับการเปลี่ยนเครื่องจำลอง ฉันใช้ iPhone 5S เป็นเครื่องจำลองและเมื่อเปลี่ยนเป็น iPhone 5 ทุกอย่างทำงานได้อย่างสมบูรณ์ หวังว่ารุ่นในอนาคตจะแก้ไขได้ทั้งหมด
ฉันพบว่าการลบข้อมูลที่ได้รับจากเทอร์มินัลช่วยแก้ไขปัญหาจนกว่าจะเกิดข้อผิดพลาดครั้งถัดไป : S
ตั้งอยู่ที่: / Users / {ชื่อผู้ใช้} / Library / Developer / Xcode / DerivedData / {ชื่อโครงการ} - {Random char sequence}
ฉันหวังว่านี่จะช่วยได้.
ฉันคิดว่าฉันเข้าใจสาเหตุข้อหนึ่ง (เนื่องจากอาจมีมาก)
ในกรณีของฉันฉันกำลังนำเข้าไฟล์ Objective-C ผ่าน Bridging Header ซึ่งมีหนึ่งในความจริงต่อไปนี้:
การแก้ไขเป้าหมายของแอพในไฟล์ Objective-C หรือลบการนำเข้าไฟล์เหล่านั้นใน Bridging Header ทั้งหมดเข้าด้วยกันดูเหมือนจะแก้ไขปัญหาได้
FYI - หากคุณต้องการกำหนดเป้าหมายของไฟล์ Header (.h) ที่ไม่มีไฟล์ Implementation (.m) คุณสามารถทำตามขั้นตอนง่าย ๆ เหล่านี้: ไม่สามารถเปลี่ยนการเปิดเผยความเป็นสมาชิกเป้าหมายใน Xcode 4.5
เพียงเพิ่มโซลูชันที่มีศักยภาพมากขึ้นที่นี่ฉันได้ตั้งชื่อ class var โดยไม่ได้ตั้งใจกับประเภทของมัน:
class var Settings:Settings {
get { return classVarWorkAround.settings }
}
สิ่งนี้จะขัดข้อง SourceKit FOR SURE ข้อผิดพลาดทางไวยากรณ์โง่ แต่ในกรณีที่คนอื่นทำผิดพลาดเหมือนกัน
แก้ไข: ยังเป็นไปตาม @Portland Runner:
ในทำนองเดียวกันหากคุณตั้งค่าประเภทส่งคืนเป็นชื่อ func คุณจะได้รับข้อผิดพลาด
func foo() ->foo{}
func foo() ->foo{}
(อย่าลังเลที่จะเพิ่มลงในคำตอบของคุณ)
เมื่อข้อผิดพลาดนี้เริ่มต้นขึ้นให้ใส่ความคิดเห็นรหัสล่าสุด / ล่าสุดที่คุณเขียนและรอสักครู่ การเน้นไวยากรณ์ควรปรากฏขึ้นอีกครั้ง นี่คือวิธีที่ฉันแก้ไขปัญหา
func someFunc() -> (Int?, Int?, Int?) {
var retVal1:Int? = nil
var retVal2:Int? = nil
var retVal3:Int? = nil
//some other code
//commenting out the line below helped me
//(retVal1, retVal2, retVal3)
return (retVal1, retVal2, retVal3)
}
รายงานไปยัง Apple (# 17266321):
รายละเอียด:
สรุป: หากเราพยายามพิมพ์พจนานุกรมที่มีค่าเป็นอาร์เรย์ป๊อปอัพจะคอยบอกว่า - "SourceKit ถูกยกเลิกฟังก์ชั่นการแก้ไขชั่วคราว จำกัด " Xcode หยุดการทำงานและสูญเสียการจดจำบริบทซึ่งทำให้ข้อความถูกทำให้ดำคล้ำ
ขั้นตอนในการสร้างซ้ำ: 1. สร้างอาร์เรย์เป็น - "var iOSHistoryArray = [" iOS6 "," iOS7 "," iOS8 ",]"
สร้างพจนานุกรมในฐานะ - "var MacOSYosemiteFeatures: Dictionary = [" อุปกรณ์ ": iOSHistoryArray]"
พิมพ์พจนานุกรมเป็น - "println (" พจนานุกรมที่มีค่าอาร์เรย์:% @ \ n ", MacOSYosemiteFeatures)" (<< - ผู้ร้าย - >>)
ขั้นตอนที่ 3 ทำให้เกิดปัญหาในการแสดงความคิดเห็นซึ่งทำให้ Xcode ทำงานได้อีกครั้ง
ผลลัพธ์ที่ควรได้รับ: Xcode ควรทำงานตามปกติ
ผลลัพธ์ที่แท้จริง: Xcode ไม่ทำงาน, สูญเสียการจดจำบริบท (แบบอักษรทั้งหมดหายไปและข้อความทั้งหมดกลายเป็นสีดำล้วน), Xcode ทั้งหมดกลายเป็นไม่ทำงาน
เวอร์ชัน: เวอร์ชัน 6.0 (6A215l)
ลองมัน:
มีข้อผิดพลาดในตัวรวบรวม / ตัวสร้างดัชนีของ Swift บางบรรทัดหรือบรรทัดในโค้ดของคุณกำลังทำให้เกิดปัญหา คุณจะต้องแก้ไขรหัสของคุณด้วยเครื่องมือแก้ไขข้อความอื่น ๆ เพื่อแสดงความคิดเห็นบรรทัดที่ละเมิดก่อนที่คุณจะสามารถเปิดโครงการด้วย Xcode หากคุณไม่มีเงื่อนงำว่าปัญหาคืออะไรแสดงความคิดเห็นรหัสทั้งหมดของคุณ เมื่อคุณเปิดโครงการแล้วคุณสามารถเริ่มนำรหัสกลับมาทีละเล็กทีละน้อยจนกระทั่งกิจกรรม CPU เพิ่มขึ้นบอกคุณว่าคุณพบปัญหา
ปัญหา:
กรณีของฉัน: ติดตั้งโครงการเบต้า 3, OSX เท่านั้น, หนึ่งไฟล์ตรวจพบข้อผิดพลาด "ตัวดำเนินการช่วงปิดถูกเปลี่ยนจาก .. เป็น .. <" ข้อผิดพลาด ป๊อปอัปเริ่มปรากฏขึ้นและการไฮไลต์โค้ดเริ่มต้นล้มเหลว
สารละลาย:
ใน xcode ไปที่แถบเมนูของคุณ >> หน้าต่าง >> อุปกรณ์ (shift + cmd + 2) หน้าต่างใหม่จะปรากฏขึ้นและที่ด้านล่างซ้ายเพิ่มตัวจำลองใหม่โดยเฉพาะหนึ่งตัวที่ทำงานบน iOS 8.0 เพื่อแก้ไขรายการที่มีอยู่ : คุณอาจต้องรีสตาร์ท xcode
refrence: http://www.reddit.com/r/swift/comments/2bznfo/error_running_playground_unable_to_find_suitable/
ในกรณีของฉันฉันได้นำเข้าไฟล์ที่หายไปในส่วนหัวบริดจ์ หลังจากที่ฉันลบการนำเข้าผิดการแจ้งเตือนข้อผิดพลาดหายไป
ฉันมีข้อผิดพลาดเดียวกันกับโครงการ Objective-C ++ ที่ซ้อนกันซึ่งตอนนี้รวม Framework ด้วยรหัส Swift เพื่อแก้ไขปัญหานี้ฉันต้องสร้างกรอบงานอย่างชัดเจน เมื่อฉันทำปัญหานั้นหายไปและจะไม่กลับมา;)
ยังคงเกิดขึ้นกับ xcode 6 เวอร์ชัน 6.0 (6A313)
เกิดปัญหา
ps: mac mini รุ่นใหม่ไม่มีการติดตั้ง xcode ก่อนหน้านี้ไม่มีอะไรแปลกใหม่ ฉันคิดว่าเป็นเพียงผลิตภัณฑ์รุ่นเบต้า
Xcode 6.1 Beta 3:
ทันทีที่คุณกำหนดนามแฝงที่ไม่ใช่ส่วนตัว (เช่นtypealias Foo = Int
) ในไฟล์ Swift ไฟล์หนึ่งจะพิมพ์ตัวอักษรc
ในไฟล์อื่นที่ SourceKitService ขัดข้อง
โซลูชันอาจลาออกจากการใช้นามแฝงประเภทรอรุ่นเบต้าถัดไปหรือตัดชื่อแทนประเภทของคุณในคำจำกัดความของคลาส:
public class DummyClass {
public typealias Foo = String
}
และใช้มันเช่นนี้
var myVar:DummyClass.Foo?
การเปลี่ยนเป้าหมายการปรับใช้เป็น iOS 8.0 ได้ผลสำหรับฉัน ฉันรู้ว่ามีคนบอกว่าย้ายไปทำงาน <= 7.1 แต่ปัญหานี้ดูเหมือนว่ามาจากหลายแหล่งดังนั้นทางเลือกนี้อาจใช้งานได้