ผมคิดว่ามีสามรายการที่สำคัญคุณต้องเข้าใจเกี่ยวกับโครงสร้างโครงการ: เป้าหมาย , โครงการและพื้นที่ทำงาน เป้าหมายระบุรายละเอียดวิธีสร้างผลิตภัณฑ์ / ไบนารี (เช่นแอปพลิเคชันหรือไลบรารี) พวกเขารวมถึงการตั้งค่าการสร้างเช่นธงคอมไพเลอร์และลิงเกอร์และพวกเขากำหนดไฟล์ (รหัสแหล่งที่มาและทรัพยากร) จริงเป็นของผลิตภัณฑ์ เมื่อคุณสร้าง / เรียกใช้คุณจะต้องเลือกเป้าหมายหนึ่งเป้าหมายเสมอ
เป็นไปได้ว่าคุณมีเป้าหมายสองสามอย่างที่ใช้รหัสและทรัพยากรร่วมกัน เป้าหมายที่แตกต่างกันเหล่านี้อาจเป็นแอพเวอร์ชันที่แตกต่างกันเล็กน้อย (iPad / iPhone, แบรนด์ที่แตกต่าง, ... ) หรือกรณีทดสอบที่จำเป็นต้องเข้าถึงไฟล์ต้นฉบับเดียวกันกับแอพ เป้าหมายที่เกี่ยวข้องทั้งหมดเหล่านี้สามารถจัดกลุ่มในโครงการได้ ในขณะที่โครงการมีไฟล์จากเป้าหมายทั้งหมดของมันแต่ละเป้าหมายจะเลือกไฟล์ย่อยที่เกี่ยวข้องของตัวเอง เช่นเดียวกันสำหรับการตั้งค่าการสร้าง: คุณสามารถกำหนดการตั้งค่าเริ่มต้นทั้งโครงการในโครงการได้ แต่ถ้าหนึ่งในเป้าหมายของคุณต้องการการตั้งค่าที่แตกต่างกันคุณสามารถแทนที่พวกเขาได้ที่นั่น:
การตั้งค่าโครงการที่ใช้ร่วมกันซึ่งเป้าหมายทั้งหมดสืบทอดมาเว้นแต่ว่าพวกเขาแทนที่มัน
การตั้งค่าเป้าหมายคอนกรีต: PSE iPhoneจะแทนที่การBase SDK
ตั้งค่าของโครงการ
ใน Xcode คุณจะเปิดโครงการ (หรือพื้นที่ทำงาน แต่ไม่ใช่เป้าหมาย) เสมอและเป้าหมายทั้งหมดที่มีอยู่สามารถสร้าง / เรียกใช้ แต่ไม่มีวิธี / คำจำกัดความของการสร้างโครงการดังนั้นทุกโครงการต้องมีเป้าหมายอย่างน้อยหนึ่งเป้าหมายเพื่อ เป็นมากกว่าชุดของไฟล์และการตั้งค่า
เลือกหนึ่งในเป้าหมายของโครงการที่จะเรียกใช้
ในหลายกรณีโครงการเป็นสิ่งที่คุณต้องการ หากคุณมีการพึ่งพาที่คุณสร้างจากแหล่งที่คุณสามารถฝังเป็นโครงการย่อย โครงการย่อยสามารถเปิดแยกต่างหากหรือภายในโครงการสุดของพวกเขา
demoLibเป็นโครงการย่อย
หากคุณเพิ่มหนึ่งในเป้าหมายของโครงการย่อยในการขึ้นต่อกันของโครงการพิเศษโครงการย่อยจะถูกสร้างขึ้นโดยอัตโนมัติเว้นแต่มันจะไม่เปลี่ยนแปลง ข้อดีที่นี่คือคุณสามารถแก้ไขไฟล์จากทั้งโครงการและการอ้างอิงของคุณในหน้าต่าง Xcode เดียวกันและเมื่อคุณสร้าง / เรียกใช้คุณสามารถเลือกจากเป้าหมายของโครงการและโครงการย่อย:
อย่างไรก็ตามหากไลบรารีของคุณ (โครงการย่อย) ถูกใช้โดยโครงการอื่น ๆ (หรือเป้าหมายของพวกเขาเพื่อให้แม่นยำ) มันเหมาะสมที่จะวางไว้ในระดับลำดับชั้นเดียวกันนั่นเป็นสิ่งที่เวิร์กสเปซใช้ เวิร์กสเปซประกอบด้วยและจัดการโครงการและโครงการทั้งหมดที่มีโดยตรง (เช่นไม่ใช่โครงการย่อย) อยู่ในระดับเดียวกันและเป้าหมายสามารถพึ่งพากันได้ (เป้าหมายของโครงการสามารถขึ้นอยู่กับเป้าหมายของโครงการย่อย แต่ไม่ใช่ในทางกลับกัน)
โครงสร้างพื้นที่ทำงาน
ในตัวอย่างนี้แอปทั้งสอง ( AnotherApplication / ProjectStructureExample ) สามารถอ้างอิงเป้าหมายของโครงการdemoLib สิ่งนี้อาจเป็นไปได้ด้วยการรวมโครงการdemoLibในทั้งสองโครงการเป็นโครงการย่อย (ซึ่งเป็นข้อมูลอ้างอิงเท่านั้นดังนั้นจึงไม่จำเป็นต้องทำซ้ำ) แต่ถ้าคุณมีการพึ่งพาข้ามจำนวนมากเวิร์กสเปซจะสมเหตุสมผลมากขึ้น หากคุณเปิดเวิร์กสเปซคุณสามารถเลือกจากเป้าหมายของโครงการทั้งหมดเมื่อสร้าง / รัน
คุณยังคงสามารถเปิดไฟล์โครงการของคุณแยกกันได้ แต่เป็นไปได้ว่าเป้าหมายของพวกเขาจะไม่สร้างเพราะ Xcode ไม่สามารถแก้ไขการขึ้นต่อกันได้เว้นแต่คุณจะเปิดไฟล์เวิร์กสเปซ เวิร์กสเปซให้ผลประโยชน์เช่นเดียวกับโครงการย่อย: เมื่อมีการเปลี่ยนแปลงการพึ่งพา Xcode จะสร้างขึ้นใหม่เพื่อให้แน่ใจว่าเป็นข้อมูลล่าสุด (แม้ว่าฉันมีปัญหาบางอย่างกับเรื่องนี้
คำถามของคุณสั้น ๆ :
1) โปรเจ็กต์ประกอบด้วยไฟล์ (รหัส / การใช้ทรัพยากร) การตั้งค่าและเป้าหมายที่สร้างผลิตภัณฑ์จากไฟล์และการตั้งค่าเหล่านั้น พื้นที่ทำงานมีโครงการที่สามารถอ้างอิงซึ่งกันและกัน
2) ทั้งสองรับผิดชอบโครงสร้างโครงการโดยรวมของคุณ แต่ในระดับที่แตกต่างกัน
3) ฉันคิดว่าโครงการส่วนใหญ่เพียงพอแล้ว อย่าใช้พื้นที่ทำงานเว้นแต่มีเหตุผลเฉพาะ นอกจากนี้คุณสามารถฝังโครงการในพื้นที่ทำงานในภายหลัง
4) ฉันคิดว่านั่นคือข้อความข้างบนสำหรับ ...
มีหนึ่งข้อสังเกตสำหรับ 3): CocoaPodsซึ่งจัดการห้องสมุดบุคคลที่สามโดยอัตโนมัติสำหรับคุณใช้พื้นที่ทำงาน ดังนั้นคุณต้องใช้มันเช่นกันเมื่อคุณใช้CocoaPods
(ซึ่งผู้คนจำนวนมากทำ)