วิธีแก้ปัญหาแต่ละข้อที่ฉันเคยเห็นในปัญหานี้ดูเหมือนจะไม่ดี (การคัดลอกส่วนหัวไปยังโครงการของแอปพลิเคชัน) หรือทำให้ง่ายเกินไปจนถึงจุดที่ใช้งานได้ในสถานการณ์ที่ไม่สำคัญเท่านั้น
คำตอบสั้น ๆ
เพิ่มเส้นทางต่อไปนี้ในเส้นทางการค้นหาส่วนหัวผู้ใช้ของคุณ
"$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts"
ทำไมถึงได้ผล?
อันดับแรกเราต้องเข้าใจปัญหา ภายใต้สถานการณ์ปกติกล่าวคือเมื่อคุณเรียกใช้ทดสอบโปรไฟล์หรือวิเคราะห์ Xcode จะสร้างโปรเจ็กต์ของคุณและวางเอาต์พุตในไดเร็กทอรีBuild / Products / Configuration / Products ซึ่งพร้อมใช้งานผ่านมาโคร$ BUILT_PRODUCTS_DIR
คำแนะนำส่วนใหญ่เกี่ยวกับไลบรารีแบบคงที่แนะนำให้ตั้งค่าPublic Headers Folder Pathเป็น$ TARGET_NAMEซึ่งหมายความว่าไฟล์ lib ของคุณจะกลายเป็น$ BUILT_PRODUCTS_DIR /libTargetName.a และส่วนหัวของคุณจะใส่ไว้ใน$ BUILT_PRODUCTS_DIR / TargetName ตราบใดที่แอปของคุณมี$ BUILT_PRODUCTS_DIRในเส้นทางการค้นหาการนำเข้าจะทำงานใน 4 สถานการณ์ที่ระบุข้างต้น อย่างไรก็ตามจะไม่ได้ผลเมื่อคุณพยายามเก็บถาวร
การเก็บจะทำงานแตกต่างกันเล็กน้อย
เมื่อคุณเก็บถาวรโครงการ Xcode จะใช้โฟลเดอร์อื่นที่เรียกว่า ArchiveIntermediates ภายในโฟลเดอร์นั้นคุณจะพบ / YourAppName / BuildProductsPath / Release-iphoneos / นี่คือโฟลเดอร์ที่$ BUILT_PRODUCTS_DIRชี้ไปเมื่อคุณเก็บถาวร หากคุณดูในนั้นคุณจะเห็นว่ามี symlink ไปยังไฟล์ไลบรารีแบบคงที่ของคุณ แต่ไม่มีโฟลเดอร์ที่มีส่วนหัว
ในการค้นหาส่วนหัว (และไฟล์ lib) คุณต้องไปที่ IntermediateBuildFilesPath / UninstalledProducts / จำเมื่อคุณได้รับคำสั่งให้ตั้งค่าSkip Installเป็น YES สำหรับไลบรารีแบบคงที่? นี่คือผลของการตั้งค่าที่มีเมื่อคุณสร้างไฟล์เก็บถาวร
หมายเหตุด้านข้าง: หากคุณไม่ได้ตั้งค่าให้ข้ามการติดตั้งส่วนหัวของคุณจะถูกใส่ไว้ในตำแหน่งอื่นและไฟล์ lib จะถูกคัดลอกไปยังที่เก็บถาวรของคุณป้องกันไม่ให้คุณส่งออกไฟล์. ipa ที่คุณสามารถส่งไปยัง App Store ได้ .
หลังจากค้นหามาหลายครั้งฉันไม่พบมาโครใด ๆ ที่ตรงกับโฟลเดอร์ UninstalledProducts อย่างแน่นอนดังนั้นจึงต้องสร้างเส้นทางด้วย "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts"
สรุป
สำหรับไลบรารีแบบคงที่ของคุณตรวจสอบให้แน่ใจว่าคุณข้ามการติดตั้งและส่วนหัวสาธารณะของคุณถูกวางไว้ใน $ TARGET_NAME
สำหรับแอปของคุณตั้งค่าเส้นทางการค้นหาส่วนหัวของผู้ใช้เป็น "$ (BUILT_PRODUCTS_DIR)" ซึ่งใช้ได้ดีกับบิลด์ปกติและ "$ (BUILD_ROOT) /../ IntermediateBuildFilesPath / UninstalledProducts" ซึ่งใช้ได้กับบิลด์ที่เก็บถาวร