Saya pikir ada tiga hal utama yang perlu Anda pahami mengenai struktur proyek: Target , proyek , dan ruang kerja . Target menentukan secara terperinci bagaimana suatu produk / biner (yaitu, aplikasi atau perpustakaan) dibangun. Mereka termasuk pengaturan build, seperti flag compiler dan linker, dan mereka menentukan file mana (kode sumber dan sumber daya) yang benar-benar milik produk. Ketika Anda membangun / menjalankan, Anda selalu memilih satu target spesifik.
Kemungkinan Anda memiliki beberapa target yang membagikan kode dan sumber daya. Target yang berbeda ini dapat berupa versi aplikasi yang sedikit berbeda (iPad / iPhone, merek yang berbeda, ...) atau uji kasus yang secara alami perlu mengakses file sumber yang sama dengan aplikasi. Semua target terkait ini dapat dikelompokkan dalam suatu proyek . Sementara proyek berisi file-file dari semua targetnya, masing-masing target memilih sendiri subset dari file yang relevan. Hal yang sama berlaku untuk pengaturan build: Anda dapat menentukan pengaturan default proyek-lebar dalam proyek, tetapi jika salah satu target Anda membutuhkan pengaturan yang berbeda, Anda selalu dapat menimpanya di sana:
Pengaturan proyek bersama yang diwariskan semua target, kecuali jika mereka menimpanya
Setelan target beton: PSE iPhone menimpa proyek Base SDK
pengaturan
Dalam Xcode, Anda selalu membuka proyek (atau ruang kerja, tetapi bukan target), dan semua target yang dikandungnya dapat dibangun / dijalankan, tetapi tidak ada cara / definisi untuk membangun proyek, sehingga setiap proyek membutuhkan setidaknya satu target untuk menjadi lebih dari sekadar kumpulan file dan pengaturan.
Pilih salah satu target proyek untuk dijalankan
Dalam banyak kasus, proyek adalah semua yang Anda butuhkan. Jika Anda memiliki ketergantungan yang Anda bangun dari sumber, Anda dapat menanamkannya sebagai sub proyek . Sub proyek dapat dibuka secara terpisah atau dalam proyek super mereka.
demoLib adalah sebuah sub proyek
Jika Anda menambahkan salah satu target sub proyek ke dependensi proyek super, sub proyek akan dibangun secara otomatis kecuali jika tetap tidak berubah. Keuntungannya di sini adalah Anda dapat mengedit file dari proyek Anda dan dependensi Anda di jendela Xcode yang sama, dan ketika Anda membangun / menjalankan, Anda dapat memilih dari target proyek dan sub proyeknya:
Namun, jika perpustakaan Anda (sub-proyek) digunakan oleh berbagai proyek lain (atau targetnya, tepatnya), masuk akal untuk meletakkannya di tingkat hierarki yang sama - itulah gunanya ruang kerja . Ruang kerja berisi dan mengelola proyek, dan semua proyek yang dikandungnya secara langsung (yaitu, bukan sub-proyeknya) berada pada tingkat yang sama dan targetnya dapat saling bergantung (target proyek dapat bergantung pada target subproyek, tetapi tidak sebaliknya).
Struktur ruang kerja
Dalam contoh ini, kedua aplikasi ( AnotherApplication / ProjectStructureExample ) dapat mereferensikan target proyek demoLib . Ini juga dimungkinkan dengan memasukkan proyek demoLib di kedua proyek lain sebagai sub-proyek (yang hanya referensi, jadi tidak perlu duplikasi), tetapi jika Anda memiliki banyak dependensi silang, ruang kerja lebih masuk akal. Jika Anda membuka ruang kerja, Anda dapat memilih dari semua target proyek saat membangun / menjalankan.
Anda masih dapat membuka file proyek secara terpisah, tetapi kemungkinan targetnya tidak akan dibangun karena Xcode tidak dapat menyelesaikan dependensi kecuali Anda membuka file ruang kerja. Ruang kerja memberi Anda manfaat yang sama dengan sub-proyek: Begitu ketergantungan berubah, Xcode akan membangunnya kembali untuk memastikan itu mutakhir (walaupun saya memiliki beberapa masalah dengan itu, sepertinya tidak berfungsi dengan andal).
Singkatnya, pertanyaan Anda :
1) Proyek berisi file (kode / sumber daya), pengaturan, dan target yang membangun produk dari file dan pengaturan itu. Ruang kerja berisi proyek yang dapat saling referensi.
2) Keduanya bertanggung jawab untuk menyusun proyek Anda secara keseluruhan, tetapi pada tingkat yang berbeda.
3) Saya pikir proyek cukup dalam banyak kasus. Jangan gunakan ruang kerja kecuali ada alasan khusus. Plus, Anda selalu dapat menyematkan proyek Anda di ruang kerja nanti.
4) Saya pikir itulah gunanya teks di atas ...
Ada satu komentar untuk 3): CocoaPods , yang secara otomatis menangani pustaka pihak ke-3 untuk Anda, menggunakan ruang kerja. Karena itu, Anda harus menggunakannya juga, ketika Anda menggunakannya CocoaPods
(yang dilakukan banyak orang).