Xcode 8 ทำการคอมไพล์โค้ดใหม่ทุกครั้ง


131

ด้วยการเปลี่ยนแปลงรหัสใด ๆ (แม้ว่าไฟล์จะไม่ได้อยู่ใน. pch) ให้ทำการคอมไพล์โครงการใหม่ทุกครั้ง


31
ทำไมถึงถูกลดคะแนน?! นี่เป็นปัญหาที่ชอบด้วยกฎหมาย ใช้เวลา 4 นาทีในการรวบรวมทุกครั้งช่วยเพิ่มประสิทธิภาพการทำงานของทีมทั้งหมด
Josh

1
ฉันได้รับปัญหานี้เช่นกัน
AJ9

3
คุณกำลังแก้ไข xib / สตอรี่บอร์ดด้วยสิ่งของที่ออกแบบได้ IBD หรือไม่?
Larme

1
ฟอรั่มแอปเปิ้ลที่เกี่ยวข้อง: forums.developer.apple.com/thread/62737 ยังไม่มีวิธีแก้ปัญหา
ldiqual

1
อย่าลืมเปิดรายงานข้อบกพร่องตามที่แนะนำในฟอรัมของ Apple
Leo Natan

คำตอบ:


34

อัปเดต 2017/1/2

ปัญหานี้ยังไม่ได้รับการแก้ไขที่ Xcode 8.2.1 (สำหรับโครงการของฉัน)

จะอยู่รอดได้อย่างไร?

Code IDE: Xcode/Atom
Build: xcrun
Debug: Xcode (Control + Command + R)

อัปเดต 2016/12/17

ปัญหานี้ยังไม่ได้รับการแก้ไขที่ Xcode 8.2

อัพเดท 2016/12/12

Atom เพื่อโค้ดและบรรทัดคำสั่งในการสร้างและแก้ไขจุดบกพร่องคือทางเลือกของฉันในตอนนี้ หวังว่า Apple จะแก้ไขข้อผิดพลาดนี้ในไม่ช้า

อัปเดต 2016/12/04

ปัญหานี้ดูเหมือนจะแก้ไขได้ด้วย Xcode 8.2 (เบต้า 2)

แต่สำหรับฉันมันไม่ได้รับการแก้ไขฉันประสบปัญหานี้แม้ว่าฉันจะใช้ Xcode 8.2 ก็ตาม คุณสามารถทดลองใช้งานได้ (ดาวน์โหลด Xcode8.2 beta2 ที่นี่ )

สร้างระบบ• Xcode จะไม่สร้างเป้าหมายใหม่ทั้งหมดเมื่อเกิดการเปลี่ยนแปลงเพียงเล็กน้อยเท่านั้น (28892475)


คำตอบเดิม: นี่คือวิธีแก้ปัญหา:

ป้อนคำอธิบายภาพที่นี่ แท็บ "Build Setting" -> "C Language Dialect" -> เปลี่ยนเป็น "Compiler Default"

สำหรับการอ้างอิง :

"สำเนียงภาษา C" ถูกตั้งค่าเป็น "GNU99" แทน "ค่าเริ่มต้นของคอมไพเลอร์" ก่อนหน้านี้มาตรฐานคือ GNU99 แต่ตอนนี้ไม่ใช่แล้ว ในบางจุด Xcode ไม่ได้ย้ายการตั้งค่าโปรเจ็กต์ไลบรารีอย่างถูกต้องดังนั้นจึงตั้งค่าเป็น GNU99 เมื่อฉันเปลี่ยนเป็น GNU99 มันจะหยุดการคอมไพล์โค้ดใหม่ทุกครั้ง!


1
ดีมาก !!! ให้เวลาฉันหนึ่งชั่วโมงและเงินรางวัลของคุณถ้ามันยังคงอยู่
Adam Waite

7
กลับมารวบรวมทุกอย่างใหม่แล้ว
Adam Waite

1
ฉันก็มีพฤติกรรมเหมือนกัน ถ้าฉันล้างข้อมูลที่ได้รับ (หรือเปลี่ยนภาษา C) มันจะใช้ได้ประมาณ 10 บิลด์ หลังจากนั้นก็กลับไปสร้างใหม่ทุกอย่าง
bluebamboo

1
Xcode 8.2 (เบต้า 2) ใช้งานได้กับ 10 รุ่นจากนั้นสร้างทุกอย่างใหม่ตั้งแต่ต้น แต่ก็ยังดีกว่ารุ่นก่อนหน้า
Markus

3
น่าเสียดายที่ปัญหายังคงมีอยู่ใน Xcode 8.3 beta 2 (อย่างน้อยก็สำหรับเรา) ไม่สามารถวัดการปรับปรุงที่เห็นได้ชัดเจนในโครงการของเรา
Kasper Munck

20

ไปที่ Product -> Scheme -> Edit Scheme เลือกสร้างในคอลัมน์ด้านซ้ายและยกเลิกการเลือก " ค้นหาการอ้างอิงโดยนัย "

แต่ควรตรวจสอบแฟล็กนี้เมื่อคุณสร้างโครงการเป็นครั้งแรก ..


@ Josh คุณกำลังใช้โครงการหลายโครงการภายในโครงการของคุณ (เช่นโครงการย่อยหรือรวม) และคุณแน่ใจหรือไม่โดยดูที่เอาต์พุตการสร้างของคุณว่ากำลังสร้างทุกอย่างขึ้นมาใหม่อย่างแท้จริง?
Mobile Ben

3
มันเป็นพื้นที่ทำงานพื้นฐานกับ cocoapods และโครงการหลัก CocoaPods ยังคงสร้างอยู่ แต่โครงการหลักจะสร้างใหม่ทุกไฟล์ ดูเอาต์พุตการสร้างและการสร้างไฟล์ใหม่ทั้งหมด 100 ไฟล์
Josh

1
อัปเดต: ดูเหมือนว่าโซลูชันนี้จะใช้ได้กับงานสร้างไม่กี่รุ่นหลังจากทำเช่นนั้นอย่างไรก็ตามการทำความสะอาดโครงการทั้งหมดและการสร้างใหม่ อย่างไรก็ตามเมื่อสร้างใหม่ครั้งที่ 2-8 จะเริ่มรวบรวมทุกอย่างอีกครั้ง ความคิดใด ๆ ? เกินกว่าที่จะทำลาย
Josh

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

7

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


1
มันเป็นเรื่องง่ายมาก :)
manmal

5

ปรับปรุง

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

ตอนนี้ฉันใช้วิธีการคอมไพล์ไฟล์เดียวสำหรับบิวด์ดีบักที่เพิ่มขึ้นอย่างรวดเร็ว

มีคำแนะนำที่ดีอื่น ๆ ในลิงค์นี้รวมถึงการปรับโครงสร้างโค้ด https://medium.com/rocket-fuel/optimizing-build-times-in-swift-4-dc493b1cc5f5

OLD

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

จนถึงตอนนี้ฉันได้รับผลลัพธ์ที่ดีที่สุดด้วยการตั้งค่าต่อไปนี้ ฉันขอแนะนำให้คุณลองใช้ดูว่ามันเหมาะกับคุณอย่างไร

  • Schema -> Build -> "Find Implicit Dependencies" = TRUE
  • สร้างการตั้งค่า -> การเพิ่มประสิทธิภาพเวลาเชื่อมโยง = เพิ่มขึ้น
  • สร้างการตั้งค่า -> ระดับการเพิ่มประสิทธิภาพ (ดีบัก) = ไม่มี [-OO]
  • สร้างการตั้งค่า -> ระดับการเพิ่มประสิทธิภาพ (รุ่น) = เร็วที่สุด, เล็กที่สุด [-Os]
  • สร้างการตั้งค่า -> เพิ่มการแบ่งปันส่วนหัวที่คอมไพล์ล่วงหน้า = ใช่
  • สร้างการตั้งค่า -> เปิดใช้งานการกลั่นที่เพิ่มขึ้น = ใช่

เพิ่มการตั้งค่าการสร้างที่กำหนดโดยผู้ใช้ที่กำหนดเอง

  • สร้างการตั้งค่า -> HEADERMAP_USERS_VFS = ใช่

หมายเหตุ: ฉันไม่มีการตั้งค่าที่ผู้ใช้กำหนดเองสำหรับการเพิ่มประสิทธิภาพโมดูลทั้งหมด


3

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

  1. ลบการนำเข้าใด ๆ จากส่วนหัวคำนำหน้าซึ่งเป็นไฟล์จากไดเร็กทอรีผลิตภัณฑ์ที่สร้างขึ้นเพื่อให้คุณสามารถเปลี่ยนการตั้งค่าการสร้างสำหรับสิ่งนี้ ("ส่วนหัวที่คอมไพล์ล่วงหน้าใช้ไฟล์จาก Build Directory") เป็น "ไม่ใช่" ตรวจสอบให้แน่ใจว่าไม่ได้นำเข้าทางอ้อมผ่านการนำเข้าอื่น ๆ ด้วย
  2. ลบการนำเข้าใด ๆ ออกจากส่วนหัวคำนำหน้าที่ใช้โมดูล Clang (ไลบรารีหรือเฟรมเวิร์กที่มีไฟล์ module.modulemap ในไดเร็กทอรี Headers เพื่อให้คุณสามารถเขียนโค้ดเช่น @import MyModule ) (สำหรับฉันนี่และขั้นตอนที่ 1 เป็นหนึ่งเดียวกัน)
  3. ตั้งค่าการสร้างสำหรับการแชร์ส่วนหัวคำนำหน้าเป็น "ใช่" (ฉันไม่คิดว่านี่เป็นสิ่งที่จำเป็นและมันไม่น่าจะมีผลอะไรกับโปรเจ็กต์ของฉันฉันแค่พูดแบบนี้เพราะฉันเปลี่ยนมันเพราะฉันเต็มใจที่จะลองทุกอย่าง :))
  4. ออกจาก Xcode และลบไดเร็กทอรี DerivedData / ModuleCache ของคุณ (กำหนดค่าให้อยู่ที่ ~ / Library / Developer ถ้าจำไม่ผิด)

หากยังไม่ได้ผลคุณสามารถลองลบการนำเข้าเพิ่มเติมบางส่วนออกจากส่วนหัวคำนำหน้าของคุณ อาจมีบางอย่างสะดุดขึ้น ...


3

ดูเหมือนว่าพวกเขากำลังทำงานอย่างแข็งขันตามhttps://forums.developer.apple.com/thread/62737แต่วิธีแก้ปัญหาคือการเพิ่ม

HEADERMAP_USES_VFS = YES

ภายใต้การตั้งค่าการสร้างของเป้าหมายของคุณ (Project -> Target -> Build Settings -> User Defined)

วิธีนี้ใช้ได้ผลกับฉันทุกครั้งในวันนี้หลังจากไม่มีวิธีอื่นใดที่ใช้ได้ผลอย่างสม่ำเสมอในเดือนที่ผ่านมา

แก้ไข: บางครั้งการคอมไพล์ใหม่ทุกอย่างแม้ว่าจะดูเหมือนว่าจะทำน้อยกว่ามากเมื่อกำหนดการตั้งค่านี้


ฉันได้เพิ่มค่านี้ด้วยเวลาในการสร้างเร็วขึ้น แต่ไม่ได้แก้ปัญหาการสร้างที่เพิ่มขึ้น ฉันเปลี่ยน Swift Compiler - Code Generation / Debug เป็น Fast, Whole Module Optimization ... เป็นผลลัพธ์ที่ดีที่สุดจนถึงตอนนี้
Antonio Junior

ฉันไม่พบ User Defined)
David Seek

2
@DavidSeek ที่ด้านล่างสุดของ Build Settings
Laser Hawk

1
หากคุณไม่เห็นให้อ่านmeandmark.com/blog/2011/03/xcode-4-accessing-build-settings
Laser Hawk

3

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


เราใช้@IBDesignableคำสั่งค่อนข้างมาก... มีอะไรเป็นพิเศษที่เราควรมองหาหรือไม่?
สแตน

ฉันคิดว่าเป็นไปได้ที่จะหาพวกเขาโดยการยกเว้นทีละรายการและตรวจสอบผลลัพธ์กรณีของฉันมันเป็นเพียง 2 คำสั่ง @IBDesignable ในโครงการทั้งหมด
ua24

2

Madhuri Mane เหมาะสมกับเรื่องนี้โดยสิ้นเชิง เพื่อเพิ่มความชัดเจนอีกเล็กน้อยประเด็นสำคัญที่ควรทราบ:

สิ่งนี้ใช้ได้เฉพาะในกรณีที่คุณมีการพึ่งพาไลบรารี / เฟรมเวิร์กโดยนัยที่เป้าหมายของคุณอาศัยอยู่

หาก "ค้นหาการพึ่งพาโดยนัย" ถูกปิดใช้งาน:

ผลลัพธ์: ไลบรารีจะไม่ถูกสร้างขึ้นก่อนที่จะสร้างแอปพลิเคชันเป้าหมาย แอปพลิเคชันเป้าหมายไม่สามารถสร้างได้

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

ที่มาและอ่านเพิ่มเติมในหัวข้อ: https://pewpewthespells.com/blog/managing_xcode.html#scheme-action

ตอนนี้ถ้าโปรเจ็กต์ทั้งหมดของคุณอยู่ในเป้าหมายเดียวและใช้เวลา 4 นาทีในการคอมไพล์คุณจะไม่สามารถทำอะไรได้มากนักนอกจากแยกมันออกเป็นเฟรมเวิร์กเพื่อใช้ประโยชน์จากข้างต้นหรือดูว่าการคอมไพล์ล่าช้าไปที่ใด หากคุณใช้บางอย่างเช่น PaintCode หรือมีโค้ด UIKit จำนวนมากอย่างรวดเร็วให้เปลี่ยนเป็น Objective-c มันจะรวบรวมได้เร็วกว่ามาก


2

ไปที่เป้าหมายของการตั้งค่าการสร้างและการตั้งค่าไปDefines ModuleYes

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


2

Apple เปิดตัว Xcode เวอร์ชันเบต้าใหม่เมื่อวานนี้ (14 พ.ย. )

Xcode 8.2 beta 2

และปัญหานี้ได้รับการทำเครื่องหมายว่าได้รับการแก้ไขแล้วในบันทึกประจำรุ่น

สร้างระบบ

• Xcode จะไม่สร้างเป้าหมายทั้งหมดใหม่เมื่อเกิดการเปลี่ยนแปลงเพียงเล็กน้อยเท่านั้น (28892475)

มันทำงานให้ฉัน ความเร็วในการสร้างกลับมาตามปกติ ทุกคนที่กำลังเผชิญกับปัญหานี้ควรลองดู!

https://developer.apple.com/download/


2

โปรดไปที่การตั้งค่าการสร้างของโครงการและเปลี่ยน "สำเนียงภาษา C"

"สำเนียงภาษา C" ถูกตั้งค่าเป็น "GNU99" แทนที่จะเป็น "ค่าเริ่มต้นของคอมไพเลอร์" เมื่อคุณอัปเดตเวอร์ชัน xcode ในบางจุด Xcode ไม่ได้ย้ายการตั้งค่าโปรเจ็กต์ไลบรารีอย่างถูกต้องดังนั้นจึงตั้งค่าเป็น GNU99 วิธีนี้จะช่วยแก้ปัญหาได้


1

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

สิ่งนี้ดูเหมือนจะเป็นจุดบกพร่องใน Xcode

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

หากคุณเห็นว่าแอปกำลังสร้างแบบเต็มให้หยุดการสร้างและลองใช้เคล็ดลับนี้อีกครั้ง

หากคุณไม่ได้ทำการเปลี่ยนแปลงโค้ดให้ใช้ CMD + CTRL + R เพื่อรันโดยไม่ต้องสร้างแอพที่แนบดีบักเกอร์ จะไม่สร้างแอพ แต่สามารถช่วยประหยัดเวลาที่ไม่จำเป็นได้


วิธีนี้ใช้งานได้จริง แต่บางครั้ง XCode จะล้มเหลวด้วยรหัส 1 และคุณจะต้องสร้าง Clean Build มันคือฝันร้าย
Antonio Junior

มีสถานการณ์อื่น ๆ ที่ Xcode จะสร้างแบบเต็มเสมอ ฉันพบว่าหากคุณแก้ไขไฟล์. h ที่รวมอยู่ในส่วนหัวของการเชื่อมต่อมันจะสร้างไฟล์ Swift ทั้งหมดขึ้นมาใหม่ อาจมีสถานการณ์อื่น ๆ ที่ไม่เกี่ยวข้องกับข้อผิดพลาด Xcode
Vlad

มีสถานการณ์จำลองที่การเปลี่ยนแปลงเพียงอย่างเดียวคือการเปลี่ยนชื่อฟังก์ชันหรือคุณสมบัติใหม่ที่เพิ่มลงในคลาส / โครงสร้างที่มีอยู่ซึ่งส่งผลให้เกิดการสร้างใหม่ทั้งหมด
Antonio Junior

อ้างถึงคำถาม / คำตอบนี้เธรดนี้ซ้ำกัน: มีวิธีแก้ปัญหาที่ทำงานได้ดีกว่า: stackoverflow.com/questions/39456223/…
Vlad

1

ปัญหาจากฝั่งของฉันได้รับการแก้ไขโดยใช้การยกเลิกการเลือกโซลูชัน "ค้นหาการพึ่งพาโดยนัย"

แต่อย่าลืมว่าคุณกำลังใช้ cocoapods ให้ใช้การตั้งค่านี้กับโครงการพ็อดของคุณด้วยโดยเลือกจาก

ผลิตภัณฑ์ -> โครงการ -> พ็อด - "yourProjectName"

ยังใช้ใน:

ผลิตภัณฑ์ -> Scheme -> "yourProjectName"

มันช่วยฉันได้ดังนั้นฉันหวังว่าคำใบ้นี้จะช่วยคนอื่นได้

ขอบคุณ


1

ลองทำดังนี้ 1. ไปที่ Project 2. คลิก Build Settings 3. ตรวจสอบว่า OptimizationLevel ถูกตั้งค่าเป็น None สำหรับการดีบัก 4. คลิกเพิ่มการตั้งค่าที่ผู้ใช้กำหนด 5. ตั้งค่า SWIFT_WHOLE_MODULE_OPTIMIZATION เป็น YES

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


ไม่มีอะไรจะทำงานมันยังคงรวบรวมเมื่อฉันเขียนจดหมายฉบับเดียว
Chandni

-2

เพื่อเพิ่มเวลาในการรวบรวม xcode สามารถใช้ IRAMDISK (ดิสก์หน่วยความจำเสมือน) วิธีที่มีประโยชน์และมีประสิทธิภาพในการลดเวลาในการรวบรวม

ยังสามารถใช้เพื่อเร่งความเร็วแอปพลิเคชันที่ใช้บ่อย

อ้างอิงลิงค์ต่อไปนี้เพื่อดาวน์โหลดและใช้งาน: http://iramdisk.findmysoft.com/mac/


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