Tôi nghĩ có ba mục chính bạn cần hiểu về cấu trúc dự án: Mục tiêu , dự án và không gian làm việc . Mục tiêu xác định chi tiết cách thức sản phẩm / nhị phân (nghĩa là ứng dụng hoặc thư viện) được xây dựng. Chúng bao gồm các cài đặt bản dựng, chẳng hạn như cờ trình biên dịch và trình liên kết và chúng xác định tệp nào (mã nguồn và tài nguyên) thực sự thuộc về một sản phẩm. Khi bạn xây dựng / chạy, bạn luôn chọn một mục tiêu cụ thể.
Có khả năng là bạn có một vài mục tiêu chia sẻ mã và tài nguyên. Các mục tiêu khác nhau này có thể là các phiên bản hơi khác nhau của một ứng dụng (iPad / iPhone, nhãn hiệu khác nhau, khác) hoặc các trường hợp thử nghiệm mà đương nhiên cần phải truy cập cùng các tệp nguồn như ứng dụng. Tất cả các mục tiêu liên quan này có thể được nhóm lại trong một dự án . Trong khi dự án chứa các tệp từ tất cả các mục tiêu của nó, mỗi mục tiêu chọn tập hợp con của các tệp có liên quan. Điều tương tự cũng xảy ra với các cài đặt xây dựng: Bạn có thể xác định các cài đặt toàn dự án mặc định trong dự án, nhưng nếu một trong các mục tiêu của bạn cần các cài đặt khác nhau, bạn luôn có thể ghi đè lên chúng ở đó:
Cài đặt dự án được chia sẻ mà tất cả các mục tiêu kế thừa, trừ khi chúng ghi đè lên nó
Cài đặt mục tiêu cụ thể: iPhone PSE ghi đè Base SDK
cài đặt của dự án
Trong Xcode, bạn luôn mở các dự án (hoặc không gian làm việc, nhưng không phải mục tiêu) và tất cả các mục tiêu mà nó chứa có thể được xây dựng / chạy, nhưng không có cách nào / định nghĩa về việc xây dựng dự án, vì vậy mọi dự án đều cần ít nhất một mục tiêu để không chỉ là một bộ sưu tập các tập tin và cài đặt.
Chọn một trong những mục tiêu của dự án để chạy
Trong rất nhiều trường hợp, các dự án là tất cả những gì bạn cần. Nếu bạn có một phụ thuộc mà bạn xây dựng từ nguồn, bạn có thể nhúng nó dưới dạng một tiểu dự án . Các tiểu dự án có thể được mở riêng hoặc trong siêu dự án của họ.
demoLib là một tiểu dự án
Nếu bạn thêm một trong các mục tiêu của tiểu dự án vào các phụ thuộc của siêu dự án, thì tiểu dự án sẽ được tạo tự động trừ khi nó không thay đổi. Ưu điểm ở đây là bạn có thể chỉnh sửa các tệp từ cả dự án và các phụ thuộc của mình trong cùng một cửa sổ Xcode và khi bạn xây dựng / chạy, bạn có thể chọn từ các mục tiêu của dự án và các dự án con của dự án:
Tuy nhiên, nếu thư viện của bạn (tiểu dự án) được sử dụng bởi nhiều dự án khác (hoặc mục tiêu của chúng, chính xác), thì nên đặt nó ở cùng một cấp bậc - đó là không gian làm việc dành cho. Không gian làm việc chứa và quản lý dự án và tất cả các dự án mà nó bao gồm trực tiếp (nghĩa là không phải là tiểu dự án của chúng) ở cùng cấp độ và các mục tiêu của chúng có thể phụ thuộc lẫn nhau (mục tiêu của dự án có thể phụ thuộc vào mục tiêu của tiểu dự án, nhưng không phải ngược lại).
Cấu trúc không gian làm việc
Trong ví dụ này, cả hai ứng dụng ( AnotherApplication / ProjectStr structExample ) có thể tham chiếu các mục tiêu của dự án demoLib . Điều này cũng có thể bằng cách đưa dự án demoLib vào cả hai dự án khác làm dự án con (chỉ là tài liệu tham khảo, vì vậy không cần sao chép), nhưng nếu bạn có nhiều phụ thuộc chéo, không gian làm việc sẽ có ý nghĩa hơn. Nếu bạn mở một không gian làm việc, bạn có thể chọn từ tất cả các mục tiêu của dự án khi xây dựng / chạy.
Bạn vẫn có thể mở các tệp dự án của mình một cách riêng biệt, nhưng có khả năng các mục tiêu của chúng sẽ không được xây dựng vì Xcode không thể giải quyết các phụ thuộc trừ khi bạn mở tệp không gian làm việc. Không gian làm việc mang lại cho bạn lợi ích tương tự như các tiểu dự án: Một khi sự phụ thuộc thay đổi, Xcode sẽ xây dựng lại nó để đảm bảo nó được cập nhật (mặc dù tôi đã gặp một số vấn đề với điều đó, nhưng nó dường như không hoạt động đáng tin cậy).
Câu hỏi của bạn một cách ngắn gọn :
1) Dự án chứa các tệp (mã / nguồn), cài đặt và mục tiêu xây dựng sản phẩm từ các tệp và cài đặt đó. Không gian làm việc chứa các dự án có thể tham chiếu lẫn nhau.
2) Cả hai đều chịu trách nhiệm cấu trúc dự án tổng thể của bạn, nhưng ở các cấp độ khác nhau.
3) Tôi nghĩ rằng các dự án là đủ trong hầu hết các trường hợp. Đừng sử dụng không gian làm việc trừ khi có lý do cụ thể. Thêm vào đó, bạn luôn có thể nhúng dự án của bạn vào một không gian làm việc sau này.
4) Tôi nghĩ đó là những gì văn bản trên dành cho giáo dục
Có một nhận xét cho 3): CocoaPods , tự động xử lý các thư viện của bên thứ 3 cho bạn, sử dụng các không gian làm việc. Do đó, bạn cũng phải sử dụng chúng khi bạn sử dụng CocoaPods
(điều mà rất nhiều người làm).