Xcode Projesi ve Xcode Çalışma Alanı - Farklar


402

Bütün ekosistemin nasıl çalıştığını anlamaya iOSçalışıyorum.
Şimdiye kadar, sorumun çoğu için bir cevap bulabilirdim (ve bana güvenin, birçoğu oldu), ancak bunun için henüz net bir cevap yok gibi görünüyor.

XcodeProject ve XcodeWorkspace dosyaları arasındaki fark nedir?

  1. İkisi arasındaki fark nedir?
  2. Ne için sorumlular?
  3. Uygulamalarımı ekip içinde / tek başına geliştirirken bunlardan hangisiyle çalışmalıyım?
  4. Bu iki dosya konusunda bilmem gereken başka bir şey var mı?

Yanıtlar:


606

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:

Üzerine yazmadıkları sürece tüm hedeflerin devraldığı paylaşılan proje ayarları

Geçersiz kılmadığı sürece tüm hedeflerin devraldığı paylaşılan proje ayarları

Somut hedef ayarları: PSE iPhone, projenin Temel SDK ayarının üzerine yazar

Somut hedef ayarları: PSE iPhone , projenin Base SDKayarı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

Ç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

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:

Bir alt projeden hedefleri çalıştırma

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ı

Ç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.

Çalışma alanından hedefleri çalıştırma

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ığı).


7
Bir proje iki ayrı çalışma alanının parçası olabilir mi? Veya bir projeyi diğer iki projeyle paylaşmak istersem, hepsinin aynı çalışma alanının bir parçası olmaları gerekir mi?
Jack

8
Kesinlikle, bir proje istediğiniz kadar çalışma alanının bir parçası olabilir. Bir çalışma alanına proje eklemek projenin kendisi hakkında hiçbir şey değiştirmez. Yani birçok seçeneğiniz var ... hepsi bir çalışma alanında, bir projeyi paylaşan iki çalışma alanı veya paylaşılan projeyi alt proje olarak içeren iki proje.
hagi

1
Bununla ilgili hiçbir deneyimim yok, ancak README : " proje yapınız ve kurulumunuz üzerinde tam kontrolü elinde tutuyorsunuz " ve " [bağımlılıkları] tek bir çalışma alanına entegre etmek yerine, [...] bağımlılıklarınızı içermelidir kendi Xcode projelerini " Kısacası: Projelerinize / çalışma alanlarınıza hiç dokunmuyor, bu yüzden cevaba nasıl eklemem gerektiğini göremiyorum. Eğer, özellikle de Carthage kullanırsanız cevap hâlâ yararlıdır Eğer sizin bağımlılıkları yapısı nasıl karar vermek zorunda, ama bunların hiçbiri Kartaca özgüdür.
hagi

Proje hiyerarşisi hakkında iyi açıklama. Alt projeyi konumdan kaldırır / taşırsam, alt proje ana projede kalır mı? stackoverflow.com/questions/40214505/…
Ganesh Guturi

Üst proje dosyasının bir kopyaya değil, alt projeye bir referansı vardır. Alt proje kaldırılırsa, üst öğe artık bulamaz. Genellikle, dosya sistemi düzeyinde üst projenin tüm alt projelerinin yerel kopyalarına sahip olduğundan emin olmak istersiniz. CocoaPods veya Carthage gibi bağımlılık yöneticileri bunu sizin için yapacak veya git alt modüllerini kullanabilirsiniz.
hagi

103

Çalışma alanı bir proje koleksiyonudur. Projeleriniz arasında bir korelasyon olduğunda organize etmek yararlıdır (örneğin: Proje A, proje B olarak proje olarak sağlanan bir kütüphane içerir. Çalışma alanını oluşturduğunuzda, proje B derlenir ve A projesinde bağlanır).
Popüler CocoaPod'larda bir çalışma alanı kullanmak yaygındır . Bölmelerinizi yüklediğinizde, bunlar projenizi ve bölme kitaplıklarını tutan bir çalışma alanının içine yerleştirilir.


35

Kısaca

  • Xcode 3, ebeveyn-çocuk ilişkisi olan alt projeyi tanıttı, yani ebeveyn, çocuk hedefine başvurabilir, ancak bunun tersi olmaz
  • Xcode 4, kardeş ilişkisi olan çalışma alanını tanıttı, yani herhangi bir proje aynı çalışma alanındaki projelere başvurabilir

2

İOS projeleri geliştirmek için CocoaPods kullandığımda bir .xcworkspacedosya var, projeyi .xcworkspaceCocoaPods ile ilgili dosyayla açmanız gerekiyor.

Dosya önizleme

Ama sizi Show Package Contentsile .xcworkspacedosyada, bulacaksın contents.xcworkspacedatadosyayı.

Paket içeriği

<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "group:BluetoothColorLamp24G.xcodeproj">
   </FileRef>
   <FileRef
      location = "group:Pods/Pods.xcodeproj">
   </FileRef>
</Workspace>

bu hatta dikkat edin:

location = "group:BluetoothColorLamp24G.xcodeproj"

.xcworkspaceDosya ile başvuruda bulunuyor .xcodeprojdosyası.

Geliştirme Ortamı:

macOS 10.14
Xcode 10.1

2
  1. İkisi arasındaki fark nedir?
    Çalışma alanı bir dizi projedir

  2. Ne için sorumlular?
    Kaynak koddan Proje sorumludur. Çalışma alanı projeler arasındaki bağımlılıklardan sorumludur

  3. Uygulamalarımı ekip içinde / tek başına geliştirirken bunlardan hangisiyle çalışmalıyım?
    Seçim projenizin türüne bağlı olmalıdır. Örneğin, projeniz CocoaPods bağımlı yöneticisine dayanıyorsa, bir çalışma alanı oluşturur.

  4. Bu iki dosya konusunda bilmem gereken başka bir şey var mı?
    Çalışma alanının bir rakibi cross-project references[Hakkında]

[Xcode bileşenleri]

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.