Xcode: Düz dilde hedef ve şema nedir?


Yanıtlar:


312

Çalışma Alanına ve Projeye de ekledim!

  • Çalışma Alanı - Bir veya daha fazla proje içerir . Bu projeler genellikle birbirleriyle ilgilidir
  • Proje - Kod ve kaynaklar vb. İçerir (Bunlara alışık olacaksınız!)
  • Hedef - Her projenin bir veya daha fazla hedefi vardır.
    • Her hedef, söz konusu proje için derleme ayarlarının bir listesini tanımlar
    • Her hedef aynı zamanda, binaya dahil edilecek / kullanılacak sınıfların, kaynakların, özel komut dosyalarının vb. Bir listesini de tanımlar.
    • Hedefler genellikle aynı projenin farklı dağıtımları için kullanılır.
      • Örneğin, projemde iki hedef var, "normal" bir yapı ve ekstra test özelliklerine sahip bir "ofis" yapısı ve birkaç arka plan müzik parçası ve parçayı değiştirmek için bir düğme (şu anda olduğu gibi) içerebilir.
      • Sınıfları ve kaynakları eklerken varsayılan hedefinize eklemeye alışık olacaksınız.
      • Hangi hedeflere hangi sınıfların / kaynakların ekleneceğini seçebilir ve seçebilirsiniz.
        • Örneğimde, ofis derlememe eklenen bir "DebugHandler" sınıfı var
      • Test eklerseniz, bu yeni bir hedef de ekler.
  • Şema - Bir şema, "Oluştur", "Test", "Profil" vb. Tuşlarına bastığınızda ne olacağını tanımlar.
    • Genellikle, her hedefin en az bir şeması vardır
    • Şema> Şemaları Yönet'e gidip "Şemaları Şimdi Otomatik Oluştur" düğmesine basarak hedefleriniz için şemalar oluşturabilirsiniz.

Doğru anladıysam deneyelim ... Bir uygulamayı programlıyorum ve iki hedef yapıyorum. Biri uygulama mağazasına yükleyeceğim ve biri de aynı uygulamanın bir sonraki sürümünü geliştireceğim. Ve şemalarda örneğin her iki hedefte bir şema ve hata ayıklama için bir şema mı yapıyorum? Ama bunun için neden farklı şemalara ihtiyacım var? BJ Homer'in avantajını anlamadım ..
MichiZH

FWIW, cevabımda açıkladığım gibi ekstra hata ayıklama özellikleri eklemedikçe, sürüm ve hata ayıklama için farklı şemalar kullanmıyorum.
James Webster

2
Mükemmel açıklama kardeşim! ! !
Sagar Kalathil

6
ofis binanızın altında bir müzik düğmesi var ne demek istiyorsun. Gerçek uygulamanızın yalnızca ofis derlemesinde etkinleştirilen veya müzik mac'unuzda çalıştırılan ekstra kodu var mı? Üzgünüm kafam karıştı
3366784

Bu tür, her bir kavramın neyi oluşturduğunu tanımlar, ancak her öğenin amacını tanımlamaz . Bana göre OP ne soruyordu.
O'Rooney

67

Bir hedef Xcode "yapı" çalıştırarak yaratılan bir son üründür. Bir uygulama, çerçeve veya statik kitaplık veya birim sınama paketi olabilir. Her ne ise, genellikle "yerleşik ürünler" klasöründeki tek bir öğeye karşılık gelir.

Bir şema Eğer toplu olarak birlikte çalıştığını hedeflerin topluluğunu temsil eder. Xcode'da (Çalıştır, Test Et, Profil vb.) Çeşitli eylemleri seçtiğinizde hangi hedeflerin kullanıldığını tanımlar Genellikle Çalıştır, Arşivle ve Profil işlemleri için ana uygulama hedefini kullanan tek bir şemanız olur ve Test eylemi için birim test hedefi. İlgili iki uygulama oluşturuyorsanız, aynı birim test paketini ancak farklı uygulama hedeflerini kullanan iki şemanız olabilir.

Şemaların (Xcode 4'te tanıtılan) temel faydası, seçilen hedefi değiştirmeye gerek kalmadan uygulamanızı çalıştırmak ve birim testleriniz arasında geçiş yapmanıza izin vermesidir.


61

Ben görsel bir insanım, bu yüzden bir diyagram kullanacağım kavramını açıklamak için.

Birden fazla hedefiniz olduğunda Xcode'un Çalıştır, Test Et, Profil eylemleriyle bire bir eşleştirilebilirler, bu kavram bir şema tanımlar

resim açıklamasını buraya girin

Bir hedef için bir sürümüdür Projesi , yani hedefler inşa süre içinde kullanımına sınıflar ve kaynakları bakımından biraz farklıdır. Bir projede, ayrı dağıtım gereksinimleri için birden çok yerleşik zaman ayarı olabilir.


7
Bu diyagram yanlış görünüyor. Bir şema belirli bir hedefe bağlı olmalıdır, bir şemada nerede birden fazla hedefe sahip olabileceğinizi görmüyorum.
Boon

6
@Boon Hayır, dikkatsizceChoosy doğrudur. Şema düzenleyicide, soldaki 'oluştur' öğesini tıklayın. Sağdaki alanda '+' işaretini tıkladığınızda bu şemaya daha fazla hedef ekleyebilirsiniz. Kutuları istediğiniz gibi işaretleyiniz. Bu hedeflerin yürütülebilir dosyaları daha sonra yürütülebilir açılır menüdeki diğer eylemlerde (Çalıştır, Profil vb.) Kullanılabilir.
okulus

Bu iyi, ancak şemaların derleme yapılandırma kısmı eksik. Şemayı, eylemlerin (Çalıştır, Test Et, Profil) hedeflerin bir kombinasyonuyla nasıl eşleştiğini ve yapılandırmaların (hata ayıklama, bırakma, qa, prod, vb.) Nasıl bir araya geldiğini düşünüyorum.
Steve Moser

3

Workspace( .xcworkspace) - çoklu bir kaptır projects. [Hakkında] ' nın bir sonraki adımı olarak oluşturulducross-project references

  • Workspaceschemesdahil olanların tümünü içerirprojects
  • Workspacehepsini işler implicit dependencies[Hakkında]

Gözlemler:

  • İçindeki farklı projelerle çalışmak güvenlidir workspaceve yakalamazCouldn't load Project.xcodeproj because it is already opened from another project or workspace
  • Cocoapods[Hakkında]workspace neredeçalışıyorPodsprojeoluşturur

Project( .xcodeproj) - targetsve için bir kaptır scheme. Kod dosyalarını, kaynakları tanımlar ...

Target- PBXNativeTargetbölüm. Aşağıdakileri oluşturan belirli bir yapı ayarları kümesi tanımlar:

  • Application target
  • Library and framework targets
  • Test
  • Aggregate[Hakkında] . Örneğin, birUniversal frameworkveyaUmbrella framework

Scheme- Project'sXcode'daki eylem yapılandırması: çalıştırma , test etme , profil oluşturma , analiz etme ve arşivleme . CI, ... 'da size yardımcı olan ve Schemaşu konumlarda paylaşılabilirCarthage :

<project_path>/<project_name>.xcodeproj/xcshareddata/xcschemes

Dependency- Targetsolabilir dependencies. Bağımlılık, karşı bir kaynak bağlantısıdır. Bu bağımlılıklar statik veya dinamik olarak bağlanabilir [Hakkında] İki tür vardır:

  • Explicit Dependency[Hakkında] - Aynı projede veya iç içe projede bulunan bağımlılığın kaynak kodu
  • Implicit Dependency[Hakkında] - Aynı çalışma alanının bir parçası olan projede bulunan bağımlılığın kaynak / kapalı kodu.

[Kelime]

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.