ปัญหาการคอมไพล์สร้างหรือเก็บถาวรด้วย Xcode 4 (และการอ้างอิง)


96

คำถามนี้มีการพัฒนาในช่วงหลายสัปดาห์ที่ผ่านมาเพื่อให้ครอบคลุมประเด็นทั่วไปมากขึ้นด้วย (และการอัปเกรดโครงการในรูปแบบเก่ากว่า s).

อย่างไรก็ตามหลายปัญหาสามารถแก้ไขได้โดยทำตามคำแนะนำชุดเดียวกัน

หากคุณมีปัญหาใด ๆ ต่อไปนี้ให้ลองใช้วิธีการในคำตอบที่ยอมรับ:

  • Xcode 4 ไม่สามารถจัดเก็บแอปได้
  • Xcode 4 สร้างที่เก็บถาวรที่ใช้ไม่ได้
  • Xcode 4 ไม่ได้สร้าง. ipa
  • Xcode 4 ไม่สามารถคอมไพล์ได้เนื่องจากข้อผิดพลาดของตัวประมวลผลล่วงหน้า
  • Xcode 4 ไม่พบส่วนหัว
  • รหัสของ Xcode 4 ไม่ทำงาน
  • การพึ่งพาโครงการจะไม่รวบรวม
  • การเพิ่มการพึ่งพาทำให้เกิดปัญหาข้างต้น

คำถามเดิม

หัวข้อ: "ไม่พบไฟล์ปัญหาคำศัพท์หรือตัวประมวลผลล่วงหน้า" ใน Xcode 4

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

In file included from /Volumes/Development/Path/LBProject/LBProject/LBProject-Prefix.pch:15:
In file included from /Volumes/Development/Path/LBProject/LBFDefines.h:23:
In file included from /Volumes/Development/Path/LBProject/Classes/LBProjectAppDelegate.h:11:
In file included from /Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDirectoryManager.h:10:
/Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDataModel.h:11:9: fatal error: 'Merchant.h' file not found [1]
 #import "Merchant.h"
         ^
1 error generated. 

Xcode ให้ข้อผิดพลาด

lexical or preprocessor issue file not found 

มาก Googling มีการแสดงหลาย ๆ คนมีปัญหานี้ แต่ยังไม่มีวิธีแก้ ใครมีวิธีแก้ไขหรือแม้แต่เบาะแส

ปรับปรุง:user headerเส้นทางการค้นหามีการกำหนดให้${BUILT_PRODUCTS_DIR}ในการกำหนดค่าทั้งหมด สร้างได้ดีโดยใช้การกำหนดค่าใด ๆ ยกเว้นเมื่อเก็บถาวร

อัปเดต 2: Merchant.hเป็นคลาสข้อมูลหลักที่สร้างขึ้นโดยอัตโนมัติดังนั้นจึงอยู่ใน.xcdatamodeldแพ็คเกจอย่างไรก็ตามส่วนหัวทั้งหมดจะถูกคัดลอกไปยังไดเร็กทอรีส่วนหัวสาธารณะเมื่อสร้างไลบรารี

คำตอบ:


119

หมายเหตุ: ขั้นตอนด้านล่างจะแก้ปัญหาการเก็บถาวร Xcode ของคุณได้ 90% อย่างไรก็ตามจากความคิดเห็นที่แนะนำให้คุณลองเลิกใช้ Xcode ก่อน วิธีนี้อาจช่วยคุณประหยัดเวลาในการปรับแต่งค่าได้หลายชั่วโมง

  1. ตรวจสอบว่า "เส้นทางส่วนหัวของผู้ใช้" ถูกต้อง (เพิ่ม "" ไปยังเส้นทางสำหรับช่องว่างทั้งในโครงการและการอ้างอิงของคุณ)
  2. ตั้งค่า "ค้นหาเส้นทางผู้ใช้เสมอ" เป็นใช่
  3. สร้างกลุ่มเรียกว่า "Indexing headers" ในโปรเจ็กต์ของคุณและลากส่วนหัวไปยังกลุ่มนี้อย่าเพิ่มในเป้าหมายใด ๆ เมื่อได้รับแจ้ง ซึ่งรวมถึงส่วนหัวภายใน. xcdatamodeldของคุณคุณจะต้องคลิกขวาและดูเนื้อหาแพ็คเกจเพื่อค้นหา
  4. สำหรับการอ้างอิงทั้งหมดตั้งค่าการสร้าง"ข้ามการติดตั้ง"เป็น"ใช่"
  5. การย้ายส่วนหัว "สาธารณะ" ในขั้นตอนการสร้างไปยัง "โครงการ"
  6. ตั้งค่าการสร้าง"ไดเรกทอรีการติดตั้ง"ในเป้าหมายของคุณเป็น$(LOCAL_APPS_DIR)
  7. เปลี่ยนการตั้งค่าการสร้างเป้าหมาย "สแกนไฟล์ต้นฉบับทั้งหมดเพื่อรวม" เป็นใช่ ( ลิงค์ )
  8. ด้วย Xcode เวอร์ชันใหม่กว่า (> 4.2) คุณอาจต้องการอ่านคำถามนี้เกี่ยวกับพื้นที่ทำงาน
  9. ลบไฟล์ project.xcworkspaceด้วยตนเองจากโครงการที่อ้างอิงทั้งหมด

28
คำแนะนำสุดท้ายคือทั้งหมดที่ฉันต้องการเพื่อแก้ไขปัญหานี้ ปิดและเปิด Xcode อีกครั้ง
Chris Miles

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

ฉันด้วย. ไม่มีอะไรน่าหงุดหงิดไปกว่าข้อบกพร่องที่ไม่ควรมีอยู่ ดีมากที่แก้ไขได้อย่างง่ายดาย
maxedison

3
หมายเหตุถึงผู้ใช้ Three20 ที่ย้ายโครงการเก่าจาก xcode3 เป็น xcode4: คุณ (อาจ) ต้องเปลี่ยน xcode Preference / locations / advanced / -> Locations ที่ระบุโดยเป้าหมาย ดูstackoverflow.com/questions/5261447/…สำหรับข้อมูลเพิ่มเติม
Ben G

1
อึศักดิ์สิทธิ์หมายเลข 1 คำพูด! Environment $ (SRC_ROOT) แน่นอน "อาจ" แก้ไขด้วยพา ธ ที่มีช่องว่าง ไม่สามารถเข้าใจได้ว่าทำไมการบีบอัดโปรเจ็กต์ของฉันและการแยกที่อื่นส่งผลให้การสร้างล้มเหลว!
Erik Kerber

13

ฉันมีปัญหาเดียวกันใน XCode 4: "ไม่พบคำศัพท์หรือปัญหาก่อนตัวประมวลผล MyFile.h" อย่างไรก็ตาม MyFile.m ไม่ใช่ไลบรารีแบบคงที่ แต่เป็นคลาสมาตรฐาน และ MyFile.m และ MyFile.h ถูกรวมไว้อย่างเหมาะสมและจัดทำดัชนีในโครงการ

ดังนั้น ... ฉันออกจาก XCode และ Simulator จากนั้นรีสตาร์ทและปัญหาก็หายไป


ฉันมีสถานการณ์ที่คล้ายกัน แต่ข้อผิดพลาดที่ไม่ต้องการปรากฏขึ้นเนื่องจากการอ้างอิงคุณสมบัติที่ไม่เกี่ยวข้องซึ่งอยู่ในคลาสเดียวกันไม่ถูกต้อง (โดยทั่วไปฉันลืมใช้ self) - แปลก
JARC

11

ฉันพบว่าปัญหาหายไปเมื่อฉันเปลี่ยนการตั้งค่าบิลด์เป้าหมาย "สแกนไฟล์ต้นฉบับทั้งหมดเพื่อรวม" จากไม่ใช่เป็นใช่


6

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


+1 ฉันได้เพิ่มลิงก์ไปยังคำถามที่เขายอมรับคำตอบแล้วขอบคุณสำหรับข้อมูล!
Richard Stelling

4

ฉันมีปัญหาแปลก ๆ เช่นนี้ การเปลี่ยน "สแกนไฟล์ทรัพยากรทั้งหมด ... " เป็นใช่ไม่ได้ช่วยอะไร ฉันดูที่ Framework Search Paths และสังเกตว่าฉันมีไฟล์

  • $ (สืบทอด)
  • "$ (SRCROOT)"
  • "$ (SRCROOT) / ของฉัน / ถูกต้อง / เส้นทาง"

ดูเหมือนถูกต้อง แต่ก็ยังล้มเหลว จากนั้นฉันก็ลองจัดเรียงลำดับของ 2 & 3 ใหม่และทันใดนั้นมันก็ทำได้ดี จึงไม่แน่ใจว่าเหตุใดจึงเป็น hickup แต่ต้องการเพิ่มลงในรายการสิ่งที่ต้องลองเผื่อว่าจะช่วยคนอื่น


4

วิธีแก้ปัญหาของฉันคือเปลี่ยนไฟล์

#import "HeaderFile.h"

ถึง

#import <FrameworkName/HeaderFile.h>

และทุกอย่างก็เริ่มทำงานอีกครั้ง สิ่งที่ผิดปกติคือมันหยุดทำงานกะทันหันหลังจากสร้างไม่กี่ครั้ง


ฉันลองทำอย่างอื่นกับโครงการย่อยของฉันและนี่เป็นสิ่งเดียวที่จะได้ผล ขอบคุณ.
dirkoneill

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

2

ปัญหาได้รับการแก้ไขเองเมื่อฉันตั้งค่า

สร้างการตั้งค่า -> โครงการ -> ค้นหาเส้นทางไปยังใช่


2

ฉันมีเดียวกัน - 2 เป้าหมายในโครงการของฉัน ( โครงการและProjectTestของGHUnit) เมื่อโครงการของฉันถูกจัดตั้งขึ้นเพื่อโครงการนำเข้าของ<GHUnitIOS/GHUnit.h>ได้รับการแก้ไขปัญหาของ“คำศัพท์หรือปัญหา preprocessor ไฟล์ไม่พบ” แต่เมื่อฉันตั้งเป็นโครงร่างProjectTestทุกอย่างก็โอเค ดังนั้นฉันได้เพิ่มGHUnitIOS.frameworkในโครงการด้วย


ฉันมีปัญหาตรงข้าม ดูคำตอบของฉัน: stackoverflow.com/a/16783389/629014
slcott

1

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


1

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


1

ฉันได้รับข้อผิดพลาด "ไม่พบไฟล์" นี้สำหรับไฟล์. h ไฟล์ใดไฟล์หนึ่งในโปรเจ็กต์ของฉัน ฉันแก้ไขปัญหาโดยลบไฟล์. h นั้นออกจากโปรเจ็กต์ (เลือก "ลบการอ้างอิง") ​​และเพิ่มเข้าไปใหม่


1

เพิ่มกับตัวแปรอื่น ๆ : ฉันมีสองกรณีfoo.mในCompile Sourceการสร้างเฟสซึ่งบางคนว่าเกิดจาก "หัวไม่พบ" foo.hสำหรับ


1

โอกาสอีกครั้ง:

ในโครงการพื้นที่ทำงาน: ดูในส่วนเป้าหมายสำหรับขั้นตอนการสร้าง ตามที่คู่มือหลายฉบับบอกว่าคุณต้องมี Copy Files Build Phase เพื่อคัดลอกส่วนหัวทั้งหมดไปยังที่อื่นเนื่องจาก iOS Framework ไม่สามารถมีไฟล์ส่วนหัวที่จะแชร์ได้ (นี่คือกรณีของฉัน)

เลือกตัวเลือกคัดลอกไฟล์เป็นปลายทาง "ไดเรกทอรีผลิตภัณฑ์" หรือไดเรกทอรีอื่นที่คุณชอบซึ่งส่วนหัวจะอยู่

ที่ได้ผลสำหรับฉัน อาจเป็นไดเร็กทอรี build สำหรับ Archive (หรือ Release) ซึ่งแตกต่างจากที่คาดไว้มากใน build สำหรับ Debug

ตรวจสอบการตั้งค่าพื้นที่ทำงานของคุณในไดเรกทอรีบิลด์ของคุณด้วย

XD


0

สำหรับฉันปัญหานี้เกิดขึ้นหลังจากฉันเพิ่มไฟล์ใหม่ในโปรเจ็กต์ ว่าง. m และ. h มาจาก NSObject นี่คือวิธีที่ฉันแก้ไข:

  1. ปิดและรีสตาร์ท xCode
  2. ลบไฟล์ใหม่ทั้งสองไฟล์ผ่าน XCode
  3. คอมไพล์เรียบร้อยแล้ว

จากนั้นฉันก็เพิ่มอีกครั้งในภายหลังและมันก็ใช้ได้เช่นกัน

มีบั๊กใน xCode แน่นอน ...

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