Proje yapısı ile ilgili olarak anlamanız gereken üç temel unsur olduğunu düşünüyorum: Hedefler , projeler ve çalışma alanları . Hedefler , bir ürünün / ikili dosyanın (bir uygulama veya kitaplığın) nasıl oluşturulduğunu ayrıntılı olarak belirtir. Derleyici ve bağlayıcı bayrakları gibi derleme ayarlarını içerir ve gerçekte hangi dosyaların (kaynak kodu ve kaynaklar) bir ürüne ait olduğunu tanımlar. Oluşturduğunuz / çalıştırdığınız zaman, daima belirli bir hedef seçersiniz.
Büyük olasılıkla kodu ve kaynakları paylaşan birkaç hedefiniz var. Bu farklı hedefler, bir uygulamanın biraz farklı sürümleri (iPad / iPhone, farklı markalar,…) veya uygulama ile aynı kaynak dosyalara doğal olarak erişmesi gereken test senaryoları olabilir. İlgili tüm hedefler bir projede gruplandırılabilir . Proje tüm hedeflerindeki dosyaları içermekle birlikte, her hedef ilgili dosyaların kendi alt kümesini seçer. Aynı durum derleme ayarları için de geçerlidir: Projede proje genelinde varsayılan ayarları tanımlayabilirsiniz, ancak hedeflerinizden biri farklı ayarlara ihtiyaç duyuyorsa, bunları her zaman burada geçersiz kılabilirsiniz:
Geçersiz kılmadığı sürece tüm hedeflerin devraldığı paylaşılan proje ayarları
Somut hedef ayarları: PSE iPhone , projenin Base SDK
ayarını geçersiz kılar
Xcode'da her zaman projeleri (veya çalışma alanlarını, ancak hedefleri değil) açarsınız ve içerdiği tüm hedefler oluşturulabilir / çalıştırılabilir, ancak bir proje oluşturmanın yolu / tanımı yoktur, bu nedenle her projenin en az bir hedefe ihtiyacı vardır. sadece bir dosya ve ayar koleksiyonundan daha fazlasıdır.
Çalıştırılacak projenin hedeflerinden birini seçin
Birçok durumda, tek ihtiyacınız olan projeler. Kaynaktan oluşturduğunuz bir bağımlılığınız varsa, onu bir alt proje olarak gömebilirsiniz . Alt projeler ayrı ayrı veya süper projeleri içinde açılabilir.
demoLib bir alt projedir
Süper projenin bağımlılıklarına alt projenin hedeflerinden birini eklerseniz, alt proje değişmeden kalmadıkça otomatik olarak oluşturulur. Buradaki avantaj, dosyaları hem projenizden hem de bağımlılıklarınızı aynı Xcode penceresinde düzenleyebilmeniz ve oluşturduğunuz / çalıştırdığınızda, projenin ve alt projelerinin hedeflerinden seçim yapabilmenizdir:
Bununla birlikte, kitaplığınız (alt proje) çeşitli diğer projeler (veya hedefleri, kesin olarak) tarafından kullanılıyorsa, onu aynı hiyerarşi seviyesine koymak mantıklıdır - çalışma alanları bunun içindir. Çalışma alanları projeleri içerir ve yönetir ve içerdiği tüm projeler (yani alt projeleri değil) aynı seviyededir ve hedefleri birbirine bağlı olabilir (projelerin hedefleri alt projelerin hedeflerine bağlı olabilir, bunun tersi de geçerli değildir).
Çalışma alanı yapısı
Bu örnekte, her iki uygulama da ( AnotherApplication / ProjectStructureExample ) demoLib projesinin hedeflerine başvurabilir . Bu, demoLib projesini her iki projeye de bir alt proje olarak dahil etmekle mümkün olacaktır (bu sadece bir referanstır, bu nedenle çoğaltma gerekmez), ancak çok fazla bağımlılığınız varsa, çalışma alanları daha mantıklıdır. Bir çalışma alanı açarsanız, inşa ederken / çalıştırırken tüm projelerin hedefleri arasından seçim yapabilirsiniz.
Proje dosyalarınızı yine de ayrı olarak açabilirsiniz, ancak Xcode çalışma alanı dosyasını açmadıkça bağımlılıkları çözemediği için hedefleri oluşturulmaz. Çalışma alanları size alt projelerle aynı avantajı sağlar: Bir kez bağımlılık değiştiğinde, Xcode güncel olduğundan emin olmak için onu yeniden oluşturacaktır (bununla ilgili bazı sorunlarım olmasına rağmen, güvenilir bir şekilde çalışmıyor gibi görünüyor).
Kısaca sorularınız :
1) Projeler dosyaları (kod / kaynak), ayarları ve bu dosya ve ayarlardan ürün oluşturan hedefler içerir. Çalışma alanları birbirlerine referans verebilecek projeler içerir.
2) Her ikisi de genel projenizi yapılandırmaktan sorumludur, ancak farklı seviyelerde.
3) Bence projeler çoğu durumda yeterli. Belirli bir neden olmadığı sürece çalışma alanlarını kullanmayın. Ayrıca, projenizi daha sonra istediğiniz zaman bir çalışma alanına gömebilirsiniz.
4) Sanırım yukarıdaki metin bunun için…
3 için bir açıklama var: 3. taraf kitaplıklarını sizin için otomatik olarak işleyen CocoaPods , çalışma alanlarını kullanıyor. Bu nedenle, bunları kullandığınızda da kullanmanız gerekir CocoaPods
(bu birçok insanın yaptığı).