SourceKitService ใช้ CPU และ Grinds Xcode เพื่อหยุด


110

นี่ไม่ใช่ปัญหาเบต้า ฉันใช้ Xcode 6.0.1 รุ่นที่ใช้งานจริง ปัญหาที่ฉันพบคือเมื่อฉันพยายามสร้างหรือเรียกใช้โค้ดที่ฉันกำลังทำงานอยู่ Xcode จะไม่ตอบสนองเป็นระยะเวลานานและ SourceKitService ใช้ CPU มากกว่า 400% (ตามการตรวจสอบกิจกรรม) ปัญหานี้เป็นปัญหาใหม่เมื่อไม่กี่วันที่ผ่านมาแม้ว่าฉันจะใช้ Xcode 6.0 อย่างผิดปกติตั้งแต่เปิดตัวอย่างเป็นทางการเมื่อวันที่ 17 กันยายนฉันอัปเกรดเป็น 6.0.1 โดยหวังว่าจะมีการแก้ไขสำหรับปัญหานี้

มีความคิดว่าปัญหาจะเป็นอย่างไร?


คุณตรวจสอบการใช้หน่วยความจำแล้วหรือยัง? ฉันไม่ได้มีปัญหานี้มาระยะหนึ่งแล้ว แต่มันแย่มากใน betas ที่มันจะใช้ RAM ทั้งหมดแล้วก็ HCF โดยทั่วไปเกิดจากบรรทัดของการคำนวณที่ยาวขึ้นโดยเฉพาะอย่างยิ่งเมื่อมีตัวห้อย คุณจะต้องแบ่งและพิชิตเพื่อค้นหารหัสที่กระทำผิด (แต่ถูกกฎหมาย) เมื่อคุณพบบรรทัดโปรดลองทำซ้ำใน Playground และส่งรายงานข้อบกพร่อง
Chris Conover

ดูโพสต์ที่ลงวันที่ที่ยอมรับเหล่านี้ด้วย: stackoverflow.com/questions/24873219/…และstackoverflow.com/questions/24873219/…
Chris Conover

ยังคงมีข้อบกพร่องบางอย่างที่คุณสามารถอ่านได้ในหลายเธรดในฟอรัมนักพัฒนา Apple Xcode 6.1 Beta 3 แก้ไขการใช้ CPU ที่สูง แต่แนะนำตัวที่แตกต่างกัน น่าผิดหวังมาก.
Klaas

1
ฉันมีปัญหาที่คล้ายกัน ฉันมีปัญหากับ Xcode 7 และตอนนี้ในวันที่ 8 สิ่งเดียวที่เปลี่ยนแปลงคือรหัสที่มาใน Xcode ของคุณ ฉันเดาว่าการจัดทำดัชนีใหม่หรือรหัสใหม่เป็นสาเหตุ สิ่งนี้มักเกิดขึ้นเมื่อคุณดึงโค้ดจากต้นน้ำหรือไม่
น้ำผึ้ง

คำตอบ:


151

พบปัญหานี้กับ Xcode 6.1.1 เมื่อช่วงบ่ายที่ผ่านมา (ไม่ใช่เบต้าเวอร์ชันที่วางจำหน่ายอย่างเป็นทางการ) ฉันใช้โค้ดบางอย่างใน Playground และสงสัยว่าเป็นสาเหตุ CPU ถูกตรึงไว้ที่เกือบ 100% และ Xcode ไม่สามารถสร้างงานให้เสร็จสมบูรณ์ได้

นี่คือสิ่งที่ฉันทำ:

1. เปิด "Activity Monitor" ซึ่งแสดง SourceKitService เป็น CPU หลัก

2. ภายใน "การตรวจสอบกิจกรรม" ให้ดับเบิลคลิกที่ SourceKitService และคลิกที่ส่วน "Open Files and Ports" ซึ่งแสดงว่าทำงานกับไฟล์ภายใต้ไดเร็กทอรี / Users / myname / Library / Developer / Xcode / DerivedData / ModuleCache / สำหรับโฟลเดอร์เฉพาะ

3. ลบโฟลเดอร์ที่ระบุ (จากบรรทัดคำสั่งโดยใช้ rm -rf) แคชถูกสร้างใหม่โดยอาศัยฉันสามารถลบเนื้อหาของโฟลเดอร์ข้อมูล Xcode Derived ได้อย่างปลอดภัยหรือไม่ .

4. ใช้การตรวจสอบกิจกรรมอีกครั้งบังคับให้ออกจาก SourceKitServer เห็นสัญลักษณ์ที่คุ้นเคยใน Xcode ซึ่งบอกว่า SourceKitService ขัดข้อง (นั่นคือสาเหตุที่ SourceKitService ฟังดูคุ้นเคย!)

5. ทำซ้ำขั้นตอนที่ 3.

Mac สงบสุขอีกครั้ง ไม่มีข้อมูลสูญหายและ Xcode ก็ไม่จำเป็นต้องเริ่มต้นใหม่ (ซึ่งฉันลองแล้วไม่สำเร็จ) บรรทัดล่างคือ ModuleCache ดูเหมือนว่าจะได้รับ SourceKitService แบบวนซ้ำและการลบโฟลเดอร์ดูเหมือนจะแก้ไขได้ หวังว่านี่จะเหมาะกับคุณเช่นกัน

Bootnote:

อย่างไรก็ตามสาเหตุของปัญหา SourceKitService คือฉันมีการประกาศอาร์เรย์ในคลาส Swift ของฉันนานเกินไป ฉันมีรายการมากกว่า 200 รายการในอาร์เรย์ ลดลงเหลือ 30 และข้อผิดพลาดก็หายไป ดังนั้นปัญหาอาจเกิดขึ้นเนื่องจากสแต็คล้นในรหัสแอปเปิ้ล (ตั้งใจเล่นสำนวน)


ขอบคุณสำหรับคำตอบ. คุณควรแก้ไขคำตอบแทนที่จะแสดงความคิดเห็นด้วยตัวคุณเอง
Axalo

3
ฉันมีปัญหาคล้ายกันกับการประกาศอาร์เรย์แบบยาวใน Swift ที่อาศัยการอนุมานประเภทระหว่างการเริ่มต้น ฉันพบว่าการใส่คำอธิบายประกอบประเภทอย่างชัดเจนช่วยแก้ปัญหาได้
jay492355

2
ปัญหาเดียวกัน. อาร์เรย์ขนาดใหญ่พร้อมพจนานุกรม ฉันใส่ข้อมูลทั้งหมดในไฟล์. PLIST แล้วอ่าน
Bruno Paulino

64
มันรบกวนคนอื่นหรือไม่ที่ในปี 2559 เราไม่สามารถจัดการอาร์เรย์ 200 องค์ประกอบได้? ฉันใช้อาร์เรย์ที่ยาวขึ้นใน BASIC บน Atari 600 ในยุค 80
Eddie Sullivan

2
ตอนนี้ฉันมีปัญหาเดียวกันและตามที่ @ jay492355 กล่าวถึงคุณต้องพิมพ์อาร์เรย์ของคุณอย่างชัดเจน
Guy Kogus

24

ฉันพบปัญหาเพราะฉันกำลังประกาศอาร์เรย์ที่มีองค์ประกอบประมาณ 60 รายการที่มีลักษณะดังนี้:

let byteMap = [

["ECG" : (0,12)],
["PPG" : (12,3)],
["ECG" : (15,12)],
["PPG" : (27,3)],
["ECG" : (30,12)]

โดยการใส่คำอธิบายประกอบประเภทอย่างชัดเจนดังนี้:

let byteMap : [String: (Int, Int)] = [

["ECG" : (0,12)],
["PPG" : (12,3)],
["ECG" : (15,12)],
["PPG" : (27,3)],
["ECG" : (30,12)],

ฉันสามารถทำให้มันหยุดได้ ฉันคิดว่ามันต้องมีอะไรบางอย่างเกี่ยวกับการอนุมานประเภทและการตรวจสอบประเภทของ Swift ที่ทำให้มันวนซ้ำเมื่อเจออาร์เรย์ที่ยาว

นี่คือใน Xcode 6.2 ฉันยังลบ ModuleCache ตามที่อธิบายไว้ข้างต้นและตอนนี้ทุกอย่างเรียบร้อยดี


2
ใช่ปัญหานี้โด่งดังspin.atomicobject.com/2016/04/26/swift-long-compile-time
onmyway133

1
ปัญหาที่คล้ายกันสำหรับฉันใน Xcode 8.1 ฉันมีอาร์เรย์ของวัตถุ NSConstraintLayout ทำงานได้ดีกับ 4 ทำงานได้ดีกับ 6 ไม่ค่อยดีกับ 7 และใช้ไม่ได้เลยกับ 8 ฉันสร้างอาร์เรย์สองอาร์เรย์ที่มี 4 อ็อบเจกต์แต่ละอันและทำงานได้ดี
Dan Loughney

@ onmyway133 ผมสงสัยว่าทำไมมันไม่ได้เกิดขึ้นตลอดเวลาและมันจะเกิดขึ้นเป็นครั้งคราว
น้ำผึ้ง

คุณคิดว่าถ้าคุณมีบางอย่างเช่นreturn ["a", "b", "c", "d", "e", "f"]ในฟังก์ชันที่ส่งกลับ[String]ว่ามันจะยังคงมีปัญหากับการอนุมานประเภทหรือไม่?
ชิม

10

ปัญหานี้เกิดขึ้นเช่น 10 ครั้ง 8 ครั้งเกิดขึ้นเมื่อฉันเชื่อมต่ออุปกรณ์จริงและไม่ได้ทำงานผ่านโปรแกรมจำลอง

ฉันไม่แน่ใจว่าวิธีการแก้ปัญหาของฉันดีหรือไม่ แต่สำหรับฉันฉันเชื่อว่าปัญหาเกิดจากการสลับระหว่างโปรแกรมจำลองและอุปกรณ์จริง มันอาจฟังดูแปลก ๆ แต่มันก็เป็นถ้ามันเป็นสร้างรบกวนระหว่างไฟล์แคช

สิ่งที่ช่วยแก้ปัญหาของฉัน:

  • Clean Build Folder: (บน Xcode)Alt + Shift + Command + K
  • เนื้อหารีเซ็ตและการตั้งค่า: (บน Command + Shift + KSimulator)
  • รอนานกว่าปกติเล็กน้อยและใช้ Xcode มากเกินไปด้วยการคลิกคงที่

โดยพื้นฐานแล้วก่อนที่คุณจะพยายามรันบนอุปกรณ์ใหม่ให้ลบแคชใด ๆ

แก้ไข

ฉันเพิ่งประสบปัญหาโดยไม่มีการเชื่อมต่ออุปกรณ์ใด ๆ ฉันเพิ่งออกจาก Xcode และเปิดอีกครั้งปัญหาก็หายไป ไม่แน่ใจว่าการคาดเดาของฉันอาจเป็นปัญหาการจัดทำดัชนีใหม่หลังจากที่คุณดึง / ดึงรหัสใหม่


ฉันหวังว่าสิ่งนี้จะได้ผลเพราะฉันหมดหวังแล้ว น่าเสียดายที่มันเริ่มหมุนออกจากการควบคุมอีกครั้งหลังจากที่ฉันเริ่มเขียนโค้ด
นายที

ฉันไม่แน่ใจ แต่บางครั้งแค่เปลี่ยนสาขาการดึงจากต้นน้ำก็ช่วยแก้ปัญหาของฉันได้ จุดของฉันคือฉันไม่ได้ทำในสิ่งที่เป็นคำตอบที่ได้รับการยอมรับจะแนะนำและยังปัญหาของฉันได้รับการแก้ไขอย่างใดผมยังไม่ได้แตก: /
น้ำผึ้ง

4

ฉันแก้ไขปัญหาอื่นที่ทำให้ SourceKitService ใช้หน่วยความจำสูงสุด 13GB ...

ฉันมี String (รูปแบบบรรทัดที่มีอาร์กิวเมนต์มากมาย:

return String(format: "%d,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f", samples.count,sum1.x,sum1.y,sum1.z,sum1.rx,sum1.ry,sum1.rz,sum2.x,sum2.y,sum2.z,sum2.rx,sum2.ry,sum2.rz,sum3.x,sum3.y,sum3.z,sum3.rx,sum3.ry,sum3.rz)

เมื่อแทนที่ด้วยสิ่งนี้มันทำงานได้ดี (ไม่มีการสร้างหน่วยความจำและการใช้ CPU ตามปกติ)

    var output: String = ""

    output += String(format: "%d,", samples.count)
    output += String(format: "%.3f,%.3f,%.3f,", sum1.x, sum1.y, sum1.z)
    output += String(format: "%.3f,%.3f,%.3f,", sum1.rx, sum1.ry, sum1.rz)
    output += String(format: "%.3f,%.3f,%.3f,", sum2.x, sum2.y, sum2.z)
    output += String(format: "%.3f,%.3f,%.3f,", sum2.rx, sum2.ry, sum2.rz)
    output += String(format: "%.3f,%.3f,%.3f,", sum3.x, sum3.y, sum3.z)
    output += String(format: "%.3f,%.3f,%.3f", sum3.rx, sum3.ry, sum3.rz)

    return output

4
คุณรู้ได้อย่างไรว่าโค้ดชิ้นนี้เป็นปัญหา
KK

3

ฉันพบปัญหานี้กับXcode 9และได้สำรวจวิธีแก้ปัญหาหลายอย่าง สำหรับฉันการปิดการใช้งาน Source Controlดูเหมือนจะเป็นการหลอกลวง

Xcode -> Preferences -> Source Control -> uncheck "Enable Source Control"

หากยังไม่สามารถทำงานผมจะแนะนำให้ใช้reniceคำสั่งที่ขั้ว เพิ่มเติมเกี่ยวกับที่นี่

ปิดการใช้งาน Source Control

ขั้นตอนอื่น ๆ ที่ฉันพยายาม แต่ไม่ได้ช่วย:

  1. ปิด Xcode -> ลบข้อมูลที่ได้มา
  2. เครื่องปั่นจักรยาน
  3. โครงการ "สะอาด"

2

สำหรับฉันมันใช้งานได้ในการลบข้อมูลที่ได้รับ เลือก 'Product' จากเมนูและกดปุ่ม Alt ค้างไว้แล้วเลือก 'Clean Build Folder' คีย์ลัด: Alt + Shift + Command + K


2
  1. ออกจาก Xcode
  2. ทำงานใน Terminal:

rm -rf ~/Library/Developer/Xcode/DerivedData/ModuleCache/*


สังเกตความแตกต่างระหว่างคำตอบที่ยอมรับของ LNI กับคำตอบนี้:

  1. การไม่ผิดพลาดดีกว่าการผิดพลาดเสมอ โดยเฉพาะอย่างยิ่งเมื่อพูดถึงกระบวนการ / ส่วนประกอบ Xcode
  2. ฉันไม่ใช่นักพัฒนาของ Apple แต่การลบแคชบางส่วนอาจทำลายความสมบูรณ์ของมันได้ ฉันไม่สังเกตเห็นความล่าช้าใด ๆ หลังจากทำความสะอาดแคชทั้งหมด

2

ฉันใช้เวลา 4 ชั่วโมงเพื่อหาปัญหาในการรวบรวมโครงการที่ยาวนาน การคอมไพล์ครั้งแรกใช้เวลา 42 นาที

ฉันล้างแคชทั้งหมดจาก/Users/myname/Library/Developer/Xcode/DerivedData/ModuleCache/ตามที่ @LNI แนะนำหลังจากรีสตาร์ทSourceKitServiceและใช้การเปลี่ยนแปลงเล็กน้อยสำหรับรหัส:

1) ถึง

    var initDictionary:[String:AnyObject] = [
                    "details" : "",
                    "duration" : serviceDuration,
                    "name" : serviceName,
                    "price" : servicePrice,
                    "typeId" : typeID,
                    "typeName" : typeName,
                    "url" : "",
                    "serviceId" : serviceID,
                    "imageName" : ""
                ]

จาก

    var initDictionary= [
                    "details" : "",
                    "duration" : serviceDuration,
                    "name" : serviceName,
                    "price" : servicePrice,
                    "typeId" : typeID,
                    "typeName" : typeName,
                    "url" : "",
                    "serviceId" : serviceID,
                    "imageName: "" ]

2) ถึง

            if let elem = obj.property,
                let elem2 = obj.prop2,
                etc
                 {
                 // do stuf here
            }

จาก

           let value1 = obj.property ?? defaultValue

3)

ถึง

           let serviceImages = images.filter { $0.serviceId == service.id }
           let sorted = serviceImages.sort { $0.sort > $1.sort }

จาก

            let serviceImages = images.filter { $0.serviceId == service.id }. sort { $0.sort > $1.sort }

เวลารวบรวมผลลัพธ์ - 3 นาทีไม่เร็วนัก แต่ดีกว่าสำหรับ 42 นาที

เป็นผลให้ก่อนSourceKitService- ใช้หน่วยความจำ ~ 5,2Gb และหลัง ~ 0.37Gb

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


2

ฉันมีปัญหาเดียวกันกับ SourceKitService

ฉันแก้ไข ไม่เคยเพิ่ม SUBVIEWS สำหรับ LOOP

ในการตรวจหาปัญหาที่ฉันใช้: https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode


คุณแก้อย่างไร ฉันเพิ่มมุมมองย่อยของฉันด้วยสำหรับลูปและตอนนี้การล้างแคชไม่สามารถแก้ไขได้ @Zhanserik
10donovanr

1
@ 10donovanr ไม่เคยเพิ่ม SUBVIEWS ด้วยสำหรับ LOOP หลังจากนั้นลองล้างแคชแอปด้วย CMD + SHITF + K
Zhanserik

2

อย่าสร้างพจนานุกรมอย่างรวดเร็วโดยไม่ระบุประเภทข้อมูลหรือใช้ [String: Any]

หากเราใช้ประเภท 'Any' คอมไพเลอร์อาจทำงานเป็นวงรอบที่ไม่มีที่สิ้นสุดเพื่อตรวจสอบประเภทข้อมูล

มันจะไม่สร้างข้อผิดพลาดในการคอมไพล์มันจะทำให้ mac ของเราหยุดที่ 'การรวบรวมไฟล์ซอร์สที่รวดเร็ว' พร้อมกับการรับหน่วยความจำจำนวนมากสำหรับงานที่ชื่อ 'swift' & 'SourceKitService'


2

ฉันประสบปัญหาดังกล่าว บริการชุดแหล่งที่มาใช้การใช้งาน 10 gb กระบวนการที่รวดเร็วในการตรวจสอบกิจกรรมใช้งานได้เกิน 6 GB ฉันใช้รหัสต่อไปนี้:

รายละเอียด var: [String: Any] = ["1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, "8": 8, "9": 9, "10": 10, "11": 11, "12": 12, "13": 13, "14": 14, "15": 15, "16": 16]

ฉันได้เปลี่ยนรหัสเป็นต่อไปนี้เพื่อแก้ไขปัญหานี้:

รายละเอียด var: [String: Any] = [:]

รายละเอียด ["1"] = 1

รายละเอียด ["2"] = 2

รายละเอียด ["3"] = 3

รายละเอียด ["4"] = 4

รายละเอียด ["5"] = 5

รายละเอียด ["6"] = 6

รายละเอียด ["7"] = 7

รายละเอียด ["8"] = 8

รายละเอียด ["9"] = 9

รายละเอียด ["10"] = 10

รายละเอียด ["11"] = 11

รายละเอียด ["12"] = 12

รายละเอียด ["13"] = 13

รายละเอียด ["14"] = 14

รายละเอียด ["15"] = 15

รายละเอียด ["16"] = 16


ผู้ชาย .... ใครจะคิดว่า .... ฉันมีรหัสที่คล้ายกันและมี SourceKitService ดูดชีวิตออกจาก CPU การเปลี่ยนรหัสทำให้มันหายไป
AnBisw

2

ปัญหายังคงเกิดขึ้นใน XCode 10.0 คุณสามารถแก้ไขได้โดยปิดใช้งาน "Show Source Control changes" ในตัวเลือก Source Control

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


เจ๋ง แต่น้อยเกินความจำเป็นหากบด Xcode ให้หยุดลง
Shayne

1

ประสบปัญหาเดียวกันเมื่อ Xcode 7.2 (7C68)

วิธีแก้ปัญหาคือการใช้วิธีการของโปรโตคอลซึ่งคลาสของฉันมีอยู่ในคำจำกัดความ


1

นี่ยังคงเป็นปัญหาใน xcode เวอร์ชัน 7.3.1 (7D1014) สาเหตุสำหรับฉันคือเช่น LNI ชี้ให้เห็นอาร์เรย์ที่ยาวเกินไปไม่นานนัก ฉันแก้ไขปัญหาของฉันด้วยการแบ่งอาร์เรย์ออกเป็นอาร์เรย์ต่างๆดังนี้:

let firstLevel = [
            [1, 0, 1, 0, 1],
            [0, 0, 0, 0, 0],
            [1, 0, 1, 0, 1],
            [0, 0, 0, 0, 0],
            [1, 0, 1, 0, 1],
            [0, 0, 0, 0, 0]
        ]
        let secondLevel = [
            [0, 0, 0, 0, 0],
            [0, 1, 0, 1, 0],
            [0, 0, 0, 0, 0],
            [0, 1, 0, 1, 0],
            [0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0]
        ]
        let thirdLevel =     [
            [0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0],
            [0, 0, 1, 0, 0],
            [0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0]
        ]
        let map = [firstLevel, secondLevel, thirdLevel]

1

ฉันมีปัญหาเดียวกันกับ XCode 8.2.1 (8C1002) และรหัสต่อไปนี้:

import UIKit
import AVFoundation
import Photos
import CoreMotion
import Foundation


class TestViewController: UIViewController
{
    let movieFileOutput = AVCaptureMovieFileOutput()


var anz_total_frames = 0, anz_total_miss = 0

@IBOutlet weak var tfStatistics: UITextView!


func showVideoStatistics()
{
    let statisticText:String =             "frames: \(self.anz_total_frames)" + String.newLine +

        "frames/s: \(self.anz_total_frames / self.movieFileOutput.recordedDuration.seconds)" + String.newLine +

        "miss: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
    "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine +
        "nicht erkannt: " + formatText4FramesPercent(self.anz_total_miss) + String.newLine


    self.tfStatistics.text = statisticText
}

func formatText4FramesPercent(_ anz:Int) -> String
    {
        let perc = Double(anz)*100.0/Double(anz_total_frames)
        return String(perc.format(".1") + "%")
    }
}

และส่วนขยายเหล่านี้:

extension String {
    var localized: String {
        return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
    }

    static var newLine: String {
        return "\r\n"
    }
}

extension Int {
    func format(_ f: String) -> String {
        return String(format: "%\(f)d", self)
    }
}

extension Double {
    func format(_ f: String) -> String {
        return String(format: "%\(f)f", self)
    }
}

ฉันแก้ไขได้โดยแสดงความคิดเห็นบรรทัดนี้ใน TestViewController:

        "frames/s: \(self.anz_total_frames / self.movieFileOutput.recordedDuration.seconds)" + String.newLine +

ฉันใช้เวลามากกว่าหนึ่งชั่วโมงในการค้นหามันฉันหวังว่าจะช่วยประหยัดเวลาของคนอื่นได้บ้าง ฉันยื่นรายงานข้อผิดพลาดไปยัง Apple พร้อมหมายเลข 30103533


1

ฉันประสบปัญหาเดียวกันหลังจากที่ย้ายโปรเจ็กต์ไปที่ swift 3 ค้นหาวิธีแก้ปัญหาที่ต้องใช้เวลาเนื่องจากพจนานุกรมและอาร์เรย์ที่สร้างขึ้นโดยไม่มีประเภทข้อมูล


1

พฤติกรรมนี้ปรากฏในโครงการของฉันเมื่อฉันประกาศคลาสที่สืบทอดมาจากตัวเองโดยไม่ได้ตั้งใจ Xcode 8.2.1 โดยใช้ Swift 3


1

ฉันมีปัญหานี้เช่นกันในกรณีของฉันฉันกำลังประกาศอาร์เรย์ขนาดใหญ่เช่นนี้:

var myArray: [(String, Bool?)]?
myArray = [("someString", someBool),
("someString", someBool),
("someString", someBool),
("someString", someBool),
("someString", someBool)
.
.
("someString", someBool)]

ฉันแก้ไขปัญหาโดยการเพิ่มรายการ 1 รายการต่อบรรทัดแทนทั้งหมดในเวลาเดียวกัน:

var myArray = [(String, Bool?)]()
myArray.append(("someString", someBool))
myArray.append(("someString", someBool))
myArray.append(("someString", someBool))
myArray.append(("someString", someBool))
myArray.append(("someString", someBool))
.
.
.

สิ่งนี้ช่วยแก้ปัญหาได้


1

สำหรับโครงการ Objective-C:

ฉันมีปัญหาเดียวกันและไม่มีรหัส Swift ในโครงการของเราดังนั้นจึงไม่ใช่ตัวตรวจสอบการอนุมานประเภท

ฉันลองใช้วิธีแก้ปัญหาอื่น ๆ ที่นี่แล้วและไม่มีอะไรได้ผล - สิ่งที่แก้ไขได้ในที่สุดสำหรับฉันคือการรีบูตคอมพิวเตอร์ในโหมดการกู้คืนและเรียกใช้การซ่อมแซมดิสก์ ในที่สุดฉันก็สามารถทำงานอย่างสงบสุขได้อีกครั้ง!

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


1

ฉันมีปัญหาคล้ายกันกับ Xcode 8.2.1 - โดยมีโค้ดมากกว่า 1,000 บรรทัดแสดงความคิดเห็นผ่าน / * * / การแสดงความคิดเห็นส่วนนี้ทำให้เกิดปัญหาและการลบรหัสที่แสดงความคิดเห็นออกได้รับการแก้ไขแล้ว


1

ฉันพบสิ่งที่คล้ายกันรวมหลาย ๆ ?? ตัวดำเนินการเพื่อระบุค่าเริ่มต้นสำหรับค่าสตริงที่เป็นทางเลือก

ฉันกำลังทดลองกับโค้ดดีบักด้านล่างเมื่อแฟน ๆ บน MacBook Pro ที่ไว้ใจได้ของฉันกลางปี ​​2010 เริ่มทำงานหนัก SourceKitService กำลังดูดทุกรอบ CPU ที่จะได้รับ การแสดงความคิดเห็นและการไม่แสดงความคิดเห็นในบรรทัดที่ไม่เหมาะสมทำให้ชัดเจนมากว่า SourceKitService กำลังสำลักอะไร ดูเหมือนว่าจะใช้มากกว่าหนึ่ง ?? ตัวดำเนินการที่ให้ค่าเริ่มต้นเป็นปัญหาในเครื่องเก่า การทำงานเป็นเพียงอย่าทำ แบ่งออกเป็นงานหลาย ๆ งานซึ่งทำให้โค้ดดีบักบางอย่างน่าเกลียดน่าเกลียด

placeMark เป็นอินสแตนซ์ของ CLPlacemark คุณสมบัติที่ใช้ที่นี่ส่งคืนสตริงที่เป็นทางเลือก

ฉันใช้ Xcode เวอร์ชัน 8.3.2 (8E2002) ที่ทำงานบน OS 10.12.4 (16E195)

// one term is not an issue
let debugString1 = (placeMark.locality ?? "")

// two terms pushes SourceKitService CPU use to 107% for about 60 seconds then settles to 0%
let debugString1 = (placeMark.locality ?? "")  + ", " +  (placeMark.administrativeArea ?? "") 

// three terms pushes SourceKitService CPU use to 187% indefinitely 
let debugString1 = (placeMark.locality ?? "")  + ", " +  (placeMark.administrativeArea ?? "")  + (placeMark.postalCode ?? "")

// ugly but it's safe to use
var debugString1 = placeMark.locality ?? ""
debugString1 = debugString1 + ", " +  (placeMark.administrativeArea ?? "")
debugString1 = debugString1 + " " + (placeMark.postalCode ?? "")

ฉันเชื่อว่านี่เป็นปัญหาเกี่ยวกับการต่อสตริงไม่ใช่หรือ ?? ควรลองใช้"\() \()" (การแก้ไขสตริง) แทน
Brooks DuBois

1

การแปลงอาร์เรย์แบบยาวเป็นฟังก์ชันดูเหมือนจะช่วยแก้ปัญหาให้ฉันได้:

var color: [UIColor] {
    return [
        UIColor(...),
        UIColor(...),
        ...
    ]
}

ถึง:

func color() -> [UIColor] {
    return [
        UIColor(...),
        UIColor(...),
        ...
    ]
}

1

ทำงานในเทอร์มินัล:

killall Xcode
rm -rf ~/Library/Developer/Xcode/DerivedData/ModuleCache
open /Applications/Xcode.app

คุณยังสามารถสร้างคำสั่งเทอร์มินัลโดยใช้นามแฝงนี้:

echo alias xcodeFix='killall Xcode;rm -rf ~/Library/Developer/Xcode/DerivedData/ModuleCache;open /Applications/Xcode.app' >> ~/.profile
source ~/.profile

จากนั้นก็เรียกใช้

xcodeFix

1

เกิดขึ้นกับฉันใน XCode 11.4.1 เมื่อเรียกตัวห้อย @dynamicMemberLookup ภายในบล็อก SwiftUI @ViewBuilder


ฉันประสบปัญหาที่คล้ายกันใน XCode 11.6 สร้างคลาสผู้สังเกตการณ์ ซึ่งพยายามออกอากาศ (เผยแพร่) องค์ประกอบ "ไม่บังคับ" ฉันสังเกตเห็นสถานะ AVPlayer (ทางเลือก) ในคลาส SourceKitService ใช้หน่วยความจำเต็มดังนั้น Mac จึงเหมือนถูกแขวนคอ ฉันแก้ไขและลบองค์ประกอบ 'ทางเลือก' อาจเป็น XCode จะแก้ปัญหาในเวอร์ชันถัดไป เราอาจเก็บ "Activity Monitor" ของ Application -> Utilities ไว้เพื่อตรวจสอบหน่วยความจำขณะพัฒนา :)
SHS

0

https://www.logcg.com/en/archives/2209.html

SourceKitService รับผิดชอบงานการอนุมานประเภทของ Swift

private lazy var emojiFace = ["?", "?", "?", "?"]

เปลี่ยนเป็นการพิมพ์อย่างชัดเจน

private lazy var emojiFace:[String] = ["?", "?", "?", "?"]

การใช้งาน CPU SourceKitService เลื่อนลงทันที。


0

ฉันมีปัญหาเดียวกันและเกิดจากข้อผิดพลาดในการเขียนโปรแกรม

ในกรณีของฉันฉันใช้โปรโตคอลที่เทียบเคียงและเท่าเทียมกันและ lhs.param และ rhs.param ไม่สอดคล้องกับพารามิเตอร์ของคลาส lhs และ rhs

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