Xcode: Workspace, Project, Targets & Schemes.

tugran
TurkishKit
Published in
3 min readMay 11, 2024

Merhaba TurkishKit okuyucuları! 👋🏻 Bugünkü yazımızda Xcode içerisinde uygulama geliştirirken sıkça karşımıza çıkan Workspace, Project, Targets ve Schemes kavramlarından bahsedeceğiz. Hazırsanız başlayalım!

Katmansal gösterim.

Yukarıda da gördüğünüz üzere, Workspace içerisinde sanılanın aksine birden fazla Project dosyası bulunabilir. Project içerisinde de yine aynı şekilde birden fazla Targets dosyası bulunabilir ve bu da bize esneklik, kod paylaşma ve yeniden kullanma gibi seçenekler sağlar.

👩🏼‍💻 Workspace:

Workspace, Xcode projelerinizi, birlikte çalıştırılabilir hale getiren ve birbirleriyle ilişkili projeleri bir araya getiren bir yapıdır. Workspace içinde birden fazla Xcode projesini veya framework’ü barındırabilirsiniz. Örneğin, bir iOS uygulaması ve onunla birlikte kullanılacak bir framework varsa, bunları tek bir workspace içine yerleştirebilirsiniz.

🔨 Project:

Project, Xcode’da tek bir uygulama veya framework’ün kaynak kodunu, kaynak dosyalarını, kaynak dosyalarını düzenlemek, derlemek ve yapılandırmak için kullanılan ana yapıdır. Her Xcode projesi, kendine özgü bir .xcodeproj dosyasına sahiptir. Ayrıca, Project dosyası, projenin yapılandırması, dosya düzeni, targetler ve düzenleme seçenekleri gibi önemli bilgileri içerir. Bu dosya, geliştiricilere projenin genel yapısını ve ayarlarını yönetme imkanı sunar. Projeyi başka bir geliştiriciyle paylaşırken veya farklı bir bilgisayara taşırken, .xcodeproj dosyası projenin tüm yapılandırmasını ve ayarlarını kolayca taşımak için kullanılır.

🎯 Targets:

Targets (hedefler), projenin farklı yapılandırmalarını, platformlarını veya test durumlarını temsil eder. Her bir target en az bir scheme içerir. Projenize target eklemek için şu adımları izleyebilirsiniz:

Target ekleme.

Bir Xcode projesinde, genellikle birden fazla target bulunabilir. Projenizi ayrı targetlara ayırmak, uygulamanızı daha iyi yönetme ve geliştirme esnekliği sağlar.

Her target, belirli bir versiyonun veya yapılandırmanın özelliklerini ve yapılandırmasını içerir. Bu sayede, uygulamanızın versiyonları arasındaki farklılıkları daha iyi yönetebilirsiniz. Örneğin, ücretli sürümde premium özellikler veya reklamsız deneyim gibi ekstra özellikler sağlayabilirken, ücretsiz sürümde temel işlevselliği koruyabilirsiniz.

Yukarıda verdiğimiz örneği pratiğe dökelim 👨🏻‍🔧

  1. Var olan target dosyamızı ücretsiz versiyon olarak isimlendirelim ve aşağıdaki gibi ücretli versiyon için bir target oluşturalım.

2. appFREE targetimizin Build Setting sekmesine tıklayalım. Ardından Other Swift Flags kısmına gelip targetimize “-DFREE” şeklinde flag ekleyelim. Aynı işlemi appPRO için de “-DPRO” olarak yapalım.

(Siz de kendi değerlerinizi verirken “-D” ön ekini unutmayın)

Ardından ViewController dosyamıza gidip durum kontrolüne göre çalışan kodumuzu yazalım.

Uygulamamızın ücretsiz versiyonu çalışıyor ise konsolda “Ücretsiz versiyon” eğer ücretli ise “Ücretli versiyon” çıktısını alacağız. Peki targetlerimizi nasıl çalıştıracağız 🤔

Devamı ⚙️ Schemes kısmında ⬇️

⚙️ Schemes:

Şemalar (schemes), Xcode projenizin nasıl derleneceğini, çalıştırılacağını veya test edileceğini belirten yapılandırmalardır. Her bir şema, projenin belirli bir amaç için nasıl yapılandırılacağını tanımlar. Örneğin, bir şema, uygulamanızı derlemek ve simülatörde çalıştırmak için yapılandırılabilir; başka bir şema ise uygulamanızı derlemek ve cihazda test etmek için yapılandırılabilir. Targetinize yeni bir scheme eklemek için şu adımları izleyebilirsiniz:

Eklenilen her target kendi isminde bir scheme içerir.

Şimdi, appFREE targetimizin scheme’i olan app scheme’i çalıştıralım ve konsolda “Ücretsiz versiyon” çıktısını alalım. Ardından appPRO targetimizin scheme’i olan appPRO scheme’i çalıştıralım ve konsolda “Ücretli versiyon” çıktısını alalım

Unutmayın! Çalıştırdığımız şeyler target değil, o targetlerin scheme dosyaları.

Böylece yazımızın sonuna geldik. Artık Workspace, Project, Targets ve Schemes kavramlarının ne anlama geldiğini öğrenmiş olduk. Görüşmek üzere, keyifli kodlamalar. 👩‍💻

--

--