Xcode Workspace ile Birden Fazla Proje Kurulumu
Bu yazımda Xcode workspace kullanarak birden fazla proje içeren bir iOS uygulaması projesi kurulumu nasıl yapılır onu anlatacağım. Bu tekniği sadece iOS uygulamaları için değil, macOS, tvOS veya bu platformların bir veya birkaçını destekleyen projelerinizde kod paylaşımı yapmak için kullanabilirsiniz.
Peki amaç nedir?
- Bu yaklaşım modüler düşünmenizi sağlar. Projenizi birden fazla modüle ayırmanız daha iyi arayüzler ve sorumluluklar tasarlamanızı sağlar.
- Her modül ayrı bir ürün olacağından dolayı her birinin kendi test setleri olacak ve test süreçlerinizde zaman kazanmanızı sağlayacak.
- Bir başka fayda ise yeniden kullanılabilirlik. Her modül farklı projelerde yeniden kullanılabilir. Bu da bize hem geliştirme sürecinde hem de bakım sürecinde zaman kazandırır.
Bu anlatımımda Xcode 9.3 kullandım. Bu versiyonda eski versiyonlara kıyasla çok ufak bir fark var ve bu farkı yeri geldiğinde belirteceğim. Eski versiyonlardan birini kullanıyorsanız yine de takip edebilirsiniz.
Hadi başlayalım!
Workspace
Boş bir workspace oluşturarak başlıyoruz. Xcode File
menüsünden yeni bir workspace oluşturun ve istediğiniz bir dizin içerisine kaydedin.
Masaüstü dizinimde MultiProject
adlı bir dizin oluşturdum ve yine aynı isimle bir workspace oluşturup içerisine kaydettim.
Ve bu da boş workspace’in kendisi.
Şu an için hiçbir şey yok. Ne bir proje, ne bir kaynak kod, ne bi şema.
Uygulama projesini ekleme
Yeni mükemmel uygulama fikrimiz için bir iOS uygulama projesi oluşturalım.
Yine Xcode’un File
menüsünü kullanıyoruz. Bu menüden Project
seçtiğimiz zaman aşağıdaki ekranı görüyoruz.
Arkadaki pencere az önce oluşturduğumuz workspace’e ait değil, ama birazdan o pencereye geri döneceğiz. iOS uygulamasının kendisiyle bir işimiz olmadığı için ve işleri basit tutmak için Single View App
seçeceğini seçebiliriz. Next
dedikten sonra bir sonraki ekrandaki bilgileri tercihinize göre doldurun ve yine ilerleyin. Bir sonraki adımda projeyi nereye kaydetmek istediğimizi soran aşağıdaki ekranı görüyoruz.
Tam olarak bu noktada yeni oluşturduğumuz projeyi, bir önceki adımda oluşturduğumuz boş workspace’e ekliyoruz. Projeyi başka bir dizinde kaydetmek yerine, dizin seçimi ekranının alt kısmındaki Add to
listesini açarak workspace’imizi seçiyoruz. Bir dip not, bu listede workspace’imizi görebilmemiz için workspace’in hali hazırda açık olması gerekiyor.
Add to
kısmında workspace’imizi seçtikten sonra Group
kısmının da güncellendiğini görüyoruz. Bu kısımda workspace’imizin seçili olması, projeyi workspace hiyerarşimizde ilk seviyede göreceğimiz anlamına geliyor. Create
diyoruz ve bu ekranın kapanıp projemizin workspace’imizde açıldığını görüyoruz.
Bu noktada elimizde neler var bir bakalım. Bir workspace’imiz var ve bu workspace’te bir projemiz var. Bu projemizde ise bir iOS uygulama, bir test ve bir UI test ürünlerimiz var (‘target’ daha isabetli nasıl Türkçe’ye çevrilir bilen varsa paylaşsın lütfen 😅). Projemizi workspace’e ekledikten sonra uygulamamızın şemasının eklendiğini de sol üstten görebilirsiniz. Şu an için bu ekran yeni bir proje açmışız gibi duruyor, workspace olduğunu bilmesek aradaki farkı söyleyemeyiz.
Framework projesini ekleme
Workspace’imize bir başka proje daha ekleyerek gerçekten workspace gibi görünmesini sağlayalım. Uygulama projesini eklerken izlediğimiz adımların aynısını izleyeceğiz. Tek fark, uygulama değil framework projesi eklememiz.
Yine Xcode bize yeni projemizi nereye kaydetmesini istediğimizi sorduğunda Add to
ve Group
kısmında workspace’imizin seçili olduğundan emin olun.
Workspace’imizi seçtikten sonra, Xcode hem uygulama projemizin dizinini, hem workspace dosyamızı, hem de framework projemizin dizinini aynı dizin altında yan yana koymuş olacak. Create
diyerek aşağıdaki ekrana dönüyoruz.
İşte şimdi workspace’e benzedi. 😄
Framework test sürüşü
Şimdiye kadar her şey yolunda, fakat hiç kodlama yapmadık. Daha sonra uygulamamızda kullanmak üzere AwesomeAPI
framework’ümüzde yeni bir sınıf oluşturalım.
Burada AwesomeAPIClient
adında bir sınıf oluşturduk ve static
değişken tanımlayarak ‘singleton’ yaptık. Sonra testRun
adında bir fonksiyon tanımladık. Hem sınıfı, hem değişkeni, hem de fonksiyonu public
tanımladığımıza dikkat edelim. Bu sınıf AwesomeAPI
framework’ümüze ait olduğu için ve framework’ü eklediğimiz modüllerden kullanılmasını istediğimiz için bu parçaları public
tanımlamamız gerekiyor.
Framework’ü uygulamamız ile bağlama
Uygulama tarafına geçelim ve framework’ümüzü kullanalım.
İlk önce uygulamamıza framework’ümüzü bağlamamız gerekiyor (linking). Fakat bununla beraber framework’ümüzün uygulamamıza gömülü olmasını belirtmemiz de gerekiyor (embed). Bu sayede uygulamamız sanki sistem tarafından sağlanmış bir framework gibi kendi framework’ümüzü kullanabilecek.
Uygulamamızın projesi seçili iken General
sekmesinde Embedded Binaries
bölümündeki +
’ya basarak yukarıdaki ekranı açın. Listeden AwesomeAPI.framework
seçin ve Add
diyin. Bu şekilde Xcode’a framework’ümüzün uygulamamızı derlerken uygulamamıza gömülü olmasını istediğimizi belirtmiş oluyoruz. Ve gömülü olmasını belirtmemizin sebebi açıkça uygulamamızda kullanmak istediğimiz olduğu için, Xcode aynı zaman da Linked Frameworks and Libraries
kısmına da ekliyor. Bu listede yer alıyor olması uygulamamızda kullanılabilir olması için yeterli.
Framework’ümüzün soldaki Project navigator kısmına da eklendiğine dikkat edin. Yazımın başında belirttiğim Xcode 9.3 ve eski sürümler farkı tam olarak burada. Xcode, eski versiyonlarında, aynı workspace içerisindeki bir framework’ü bir önceki adımdaki gibi Embedded Binaries
bölümüne eklememize olanak vermiyordu. Xcode 9.3 versiyonu ile gelen proje ve workspace formatındaki yenilikler buna olanak sağlıyor artık (sağ paneldeki Project Format
kısmından proje formatınızı doğrulayabilirsiniz).
Maalesef Xcode bütün güzellikleri aynı anda vermiyor ¯\_(ツ)_/¯
. Bu şekilde eklediğimiz zaman proje altında hiçbir şekilde yerinden oynatamadığımız (sırasını değiştirmek haricince) bir framework referansı ile kalıyoruz. Projeye sağ tıklayıp New Group without Folder
seçeneğinden yeni bir grup içerisine framework’ümüzü sürüklemeyi deneyin ve aynı referanstan bir tane daha oluşturacağını göreceksiniz. Üstelik bu yeni referans bağladığımız ve gömülü olmasını belirttiğimiz referansla da aynı değil.
Eğer benim gibi obsesif takıntılı değilseniz ve ‘ben bu şekilde de idare ederim’ diyorsanız bu şekilde bırakabilirsiniz. Ama projeniz daha düzenli olsun istiyorsanız, eski usül eklememiz gerekiyor. Eğer düzenli yolu seçiyorsanız öncelikle bu yerinden oynatamadığımız referansımıza sağ tıklayın ve silin. Bu hamle framework’ümüzün General
sekmesindeki Embedded Binaries
ve Linked Frameworks and Libraries
listelerinden de silinmesine sebep olacak ama birazdan tekrar ekleyeceğiz. Projemize sağ tıklayın ve New Group without Folder
seçeneğinden yeni bir grup oluşturun (ben tercihen Vendor
ismini kullanıyorum). Sonra bu grup içerisine framework projemizi (AwesomeAPI
) sürükleyip bırakın. Aşağıdaki ekranı görüyoruz.
Copy items if needed
seçeneğinin seçili olmadığına emin olun. Sonrasında yine Embedded Binaries
bölümünden +
’ya basarak aşağıdaki framework seçim ekranını açıyoruz.
Listeye dikkat ederseniz aynı framework’ün iki kere listelendiğini göreceksiniz. Birisi workspace’imiz altındaki projede listeleniyor, diğeri ise iOS uygulamamızın projesine eklediğimiz yine aynı proje altında listeleniyor. Biz ikincisini seçiyoruz ve bu sayede ekstra bir referans eklenmemiş oluyor.
17.05.2019
Xcode 10.2.1 Güncellemesi
Yukarıda bahsettiğim sıkıntı tam olarak hangi versiyonda çözüldü bilmiyorum fakat yakın zamanda Xcode 10.2.1 versiyonu ile denediğimde artık projenin altındaki diğer proje referansına gerek kalmadığını gözlemledim. Ayrıca projenin yapısını düzenli tutmak da mümkün.
Yukarıdaki ekran görüntüsünde Vendor grubunun boş olduğuna dikkat edin. Yani iç içe referans ettiğimiz projemiz silinmiş durumda. Aynı zamanda AwesomeAPI.framework’ü için de bir referansımız var. Yukarıda bahsettiğim adımları takip ettikten sonra tek yapmamız gereken, eklenen framework referansını dilediğimiz bir gruba ⌘ command tuşuna basılı tutarken sürükleyip bırakmak. Bu detay önemli, çünkü eğer ⌘ command tuşunu kullanmazsak sürüklediğimiz referans kopyalanmış olacak (aslında yukarıdaki problemin aynısı).
Düzgün bir referansımız olduğu sürece geri kalan her şey aynı olmalı. Makalenin devamında iç içe eklenmiş projeleri göreceksiniz fakat hangi yolu kullanarak entegre ettiğinizden bağımsız, alacağınız sonuçlar aynı olacaktır.
Test sürüşüne çıkalım
Her şey yolunda gidiyor. Bu noktaya kadar beni takip ettiyseniz proje düzeninizin aşağıdaki ekrandaki gibi olması gerekiyor. Şimdi framework’ümüzü uygulamamızda kullanma vakti! Taslak olarak gelen ViewController
sınıfımızı açıyoruz ve aşağıdaki gibi düzenliyoruz.
Framework’ümüzü import
ettik ve bu sınıfta kullanılabilir olmasını sağladık. Basitçe framework’ümüze eklediğimiz AwesomeAPIClient
sınıfımızdaki testRun
fonksiyonunu, viewDidLoad
fonksiyonu içerisinde çağırıyoruz. Uygulamayı çalıştırın. Konsolda aşağıdaki çıktıyı görmemiz gerekiyor.
AwesomeAPIClient is up and running! 🎉
Gereksinimler
Veya ‘third party libraries’ 😄. İşimizi kolaylaştıran faydalı ve güzel (en azından bir çoğu güzel 🤪) kütüphaneler. Ve bunları projelerimize entegre etmemizi sağlayan iki popüler araç CocoaPods ve Carthage. Her ikisinin de artıları ve eksileri, sevenleri sevmeyenleri var. Ben yıllardır CocoaPods kullandım, fakat özellikle son zamanlarda bu tür bir düzen ile Carthage kullanmaya başladım ve bence bu düzene de oldukça uyum sağlıyor.
Bu düzende bir çok framework’ümüz olabilir, sadece bir tane ile sınırlı değiliz. Uygulamalarımızdan bir çok yeniden kullanılabilir parçaları, özellikle API çağrılarını yaptığımız istemcileri, UI elemanlarını, veri saklama katmanlarını, Swift eklentilerini ve daha bir çok kendi başına kullanılabilir birimleri kendi framework’lerine ayırabiliriz. Şöyle de düşünebilirsiniz, eğer projenizde mantıksal gruplama yapıyorsanız, her bir grubu kendi framework’üne ayırabilirsiniz. Bu sayede her birini kendi içerisinde test edebilir, başka projelerde de kullanabilirsiniz. Şimdi API çağrılarını yaptığım katmanı veya veri saklama katmanımı ayırsam diğer uygulamalarda nasıl kullanabilirim, bunlar zaten bu uygulamaya özel gibi düşünebilirsiniz. Fakat bunları genel amaçlı yapıp uygulamanızda da özelleştirebilirsiniz. Mesela genel amaçlı bir veri saklama katmanınız olur, hatta bu katman kendisi de başka framework’ler kullanabilir (örneğin Core Data veya Realm), ve uygulama tarafında bu katmanın içerisinde bulunduğu framework’ü kullanabilirsiniz.
Peki Carthage bu düzene nasıl uyum sağlıyor? Workspace’inizde birden fazla proje olduğunu düşünün. Bu projelerden ikisinin aynı framework’e ihtiyaç duyduğu bir durumda olabilirsiniz. Carthage projelerimize ve workspace’imize ellemeyip bize projelerimize ekleyebileceğimiz bir framework verdiği için, birden fazla projeye ve ürüne ekleme şansımız oluyor. Fakat CocoaPods girdi olarak bir Xcode projesi alıp, çıktı olarak içerisinde bizim projemizin ve kendi Pods
projesinin olduğu bir workspace verdiği için bizim oluşturduğumuz şekilde bir düzen oluşturmak mümkün olmuyor (CocoaPods kullanımına veya detaylarına dair bir şey gözden kaçırmıyorsam). Fakat CocoaPods’a işimizi gördürsek dahi birden fazla proje için birden fazla Podfile
ile uğraşmak mantıklı değil.
Lafı daha fazla uzatmadan hadi bir kaç framework indirelim. AwesomeAPI
framework’ümüz bizim için API isteklerini yapacağı için bir başka mükemmel framework olan Alamofire’ı eklemezsek olmaz!
Çalışma ortamımızı düzenli tutmak için, Vendor
adında ayrı bir dizin oluşturup Carthage kullanımımızı bu dizin içine sınırlamamız iyi bir fikir olacaktır. Bu dizin içerisinde Cartfile
adında bir dosya oluşturuyoruz.
Carthage dokümantasyonuna göre carthage update
komutunu yine aynı dizin içerisinde çalıştırmamız gerekiyor. Eğer sadece iOS projeniz var ve hem zamandan hem de disk yerinden tasarruf etmek istiyorsanız, Carthage’a sadece iOS için framework derlemesini komutumuza --platform ios
parametresini ekleyerek belirtebiliriz.
Vendor/Carthage/Build/iOS
dizininde yeni derlenmiş, taze Alamofire.framework
. Bu framework’ü basitçe projemize sürükle-bırak yaparak ekleyebiliriz.
Proje altında Frameworks
adında bir grup oluşturdum ve Alamofire.framework
’ü buraya sürükle-bırak yaptım ve yukarıdaki ekranı görüyorum. Yine Copy items if needed
seçeneğinin seçili olmadığına emin olun. Bu sayede biz framework’ü güncellesek dahi projemiz aynı framework’ü referans edecek. Finish
diyin ve framework’ün Linked Frameworks and Libraries
bölümüne de eklendiğini göreceksiniz.
Test sürüşümüzü bir sonraki seviyeye çıkaralım
AwesomeAPIClient
sınıfımızda Alamofire
framework’ünü dahil edelim ve testRun
fonksiyonumuza örnek bir istek ekleyelim.
No such module ‘Alamofire’
Bu hata ne şimdi? Zaten framework’ü eklemiştik. Modülü neden bulamıyor? Bunun sebebi, Xcode framework’ün nerede olduğunu bilmemesi. Nerede olduğunu derken diskteki yerini kasdediyoruz. Bu hatayı gidermek için, soldaki panelden projemizi seçiyoruz. Targets
kısmında framework’ümüz seçili iken Build Settings
sekmesine geliyoruz. Arama kısmına ‘Framework search paths` yazarak düzenleyeceğimiz girdiyi buluyoruz.
Bu girdide Xcode’a projemizin kulladığı framework’leri aramasını istediğimiz dizini belirtiyoruz. Birden fazla dizin belirtebiliyoruz. Ayrıca çeşitli konfigürasyonlar (Debug, Release gibi) için farklı dizinler de belirtebiliyoruz. Fakat biz hepsi için aynı dizini belirtmek istediğimiz için girdiye çift tıklayarak Carthage’ın framework’ümüzü sakladığı dizinin yolunu giriyoruz.
PROJECT_DIR
değişkeni AwesomeAPI
projemizin içerisinde olduğunu dizinin yolunu saklıyor. Bu Xcode’un önceden tanımladığı değişkenlerden biri sadece. Bu ve diğer değişkenler hakkında daha fazla bilgiye şuradan ulaşabilirsiniz.
Bu ayarımızı da yaptıktan sonra AwesomeAPI
şemamızı seçip derleyelim ve her şeyin yolunda olduğundan emin olalım.
Şimdi testRun
fonksiyonumuza örnek isteğimizi ekleyelim.
Bu örneği Alamofire dokümantasyonundan aldım. Basitçe isteği gönderdiğimizden ve geçerli bir yanıt aldığımızdan emin olmak için bir birim testi ekleyebiliriz. Sonuçta hepimiz kodunu test eden iyi yazılımcılarız değil mi? DEĞİL Mİ? 👀
Burada çok basit bir test ekledik. Fakat bu noktada yapmamız gereken bir şey daha var. Testlerimizi çalıştıran birim aslında framework’ümüzden ayrı bir ürün (AwesomeAPITests
). O yüzden Alamofire
framework’ünü de bu ürüne eklememiz gerekiyor. Bütün bu işler çetrefilli gelebilir ama inanın değil. Kısa sürede bu adımları kavrayıp mantığını çözerseniz gözünüz kapalı yapar hale gelirsiniz. Ve genelde bütün bu kurulumu bir proje için en fazla bir kere yapacaksınız. Sonrasında getirdiği avantajlar bütün bu zaman ve efor yatırımınıza değmiş olacak.
Yine sol panelden projemizi seçiyoruz. Bu sefer Targets
kısmından test ürünümüzü seçiyoruz. Build Phases
sekmesinde, sol üstteki +
’ya basıyoruz ve açılan menüden New Copy Files Phase
seçiyoruz. Bu önümüzdeki listeye yeni bir girdi ekliyor. Yeni girdinin adını burada benim yaptığım gibi Copy Frameworks
olarak değiştirebilirsiniz. Sonuçta yapacağı iş sadece framework kopyalamak olacak. Destination
kısmından Frameworks
seçiyoruz ve listenin altındaki +
’ya basarak Alamofire.framework
’ü ekliyoruz. Şimdi AwesomeAPI
şeması seçili iken ⌘+U
ile testleri çalıştırın ve testlerin başarılı sonuçlandığını görün.
Voila!
Süper! Hadi uygulamada da kullanalım
ViewController
sınıfımızı açın ve hemen bir hata göreceksiniz. Görmediyseniz de ilk derleme girişiminizde göreceksiniz. 😅
Bunun sebebi açık. testRun
fonksiyonumuzu güncellemiştik fakat değişiklikleri buraya yansıtmadık.
Bu demoyu karmaşık bir hale getirmemek için testRun
fonksiyonumuzda herhangi bir veri veya hata parametresi eklemedik. testRun
fonksiyonu zaten print
çağrılarına sahip. O yüzden bu fonksiyonu uygulamamız çağırdığı zaman isteğimiz başarılı olursa konsolda çıktıları yine göreceğiz.
Fakat uygulamamızı çalıştırır çalıştırmaz bir hata ile karşılaşıyoruz.
dyld: Library not loaded: @rpath/Alamofire.framework/Alamofire
Referenced from: /Users/ilter/Library/Developer/Xcode/DerivedData/MultiProject-attxtmjkzrjkqibyrvrfpwmyfhby/Build/Products/Debug-iphonesimulator/AwesomeAPI.framework/AwesomeAPI
Reason: image not found
Ama neden? Bütün kurulumları yapmıştık. Hata Alamofire
framework’ünü bulamadığını söylüyor fakat AwesomeAPI
framework’ümüz zaten kullanıyor onu. Sıkıntı ne ki şimdi?
Aslında cevabı zaten verdik. AwesomeAPI
framework’ümüz Alamofire
framework’ünü kullanıyor. Alamofire
framework’ünü AwesomeAPI
framework’üne bağlama işlemini yapmıştık ve AwesomeAPI
framework’ünün de uygulamamıza gömülü olmasını ayarlamıştık. Fakat AwesomeAPI
framework’ünü gömülü olacak şekilde ayarlamamız Alamofire
framework’ünün de gömülü olacağı anlamına gelmiyor. Herhangi bir framework bir başka framework’ü kullanıyorsa, kullandığı framework’ü beraberinde getirme veya kendi içeriğine dahil etme gibi bir işlem yapmıyor. Ve Alamofire
framework’ü iOS işletim sistemi bünyesinde bulunan bir framework olmadığı için, ayrıca onun da uygulamamıza gömülü olmasını sağlamamız gerek. İşlemin sonunda aslında aşağıdaki gibi bir düzen elde edeceğiz.
Özetle AwesomeAPI
ve Alamofire
framework’lerini uygulamamız içerisinde gömülü yapacağız. Herhangi bir framework bir başka framework’ü kendi içerisine gömülü yapamadığı için, uygulamamızın ikisini de beraberinde getirmesini sağlayacağız.
AwesomeAPI
framework’ünü çok kolay entegre etmiştik fakat Alamofire
için biraz farklı bir işlem yapacağız. Buradaki detay şu, Alamofire
framework’ünü indirip derlemek için Carthage kullanmıştık. Ve şu an Alamofire
framework’ü bizim kullandığımız veya kullanmadığımız birden fazla mimariye destek veriyor. Bunlar çeşitli iOS cihazları (arm64, armv7 ve armv7s) ve iOS Simulator (i386). Framework içerisinde desteklenen her bir mimari için ayrıca derlenmiş bir birim bulunuyor (İngilizce adı ‘slice’). Bunların hepsini uygulamamıza dahil etmemizde kesinlikle hiçbir sıkıntı yok. Uygulamamız beklediğimiz şekilde çalışacaktır. Sadece herhangi bir iOS cihazında kullanamayacağımız ekstra bir mimari (i386) için de bir parça bulundurmuş olacağız. Fakat bu hamle uygulamamızı App Store’a gönderirken bir sıkıntıya sebep olacak. iTunes Connect desteklenmeyen mimariler için bulundurduğumuz parçaları çıkarmamızı isteyecek. Bu noktada yine Carthage bize yardım edecek.
AwesomeAPI
framework’ümüzün test ürünü için yaptığımız gibi uygulamamız için de ‘Build Phases’ sekmesinde yeni bir girdi oluşturuyoruz. Bunun için sol üstteki +
’ya basıp Run Script Phase
seçiyoruz. Yine adını amacına uygun olmasını istediğim için Carthage (Copy Frameworks)
olarak değiştirdim. Burada Carthage kullanarak gerekli mimarilerin desteğinin uygulamamıza eklenmesini sağlıyoruz. Girdi listesinde Alamofire.framework
’ünün yolunu giriyoruz.
Ve çıktı listesine de framework’ün kopyalanması gereken uygulamanın içerisindeki Frameworks
dizininin yolunu giriyoruz.
Yukarıda gösterdiğim
Alamofire.framework
’ün bulunduğu dizin benim bilgisayarımda şu şekilde:
~/Library/Developer/Xcode/DerivedData/MultiProject-attxtmjkzrjkqibyrvrfpwmyfhby/Build/Products/Debug-iphonesimulator/TheNextBigThingApp.app/Frameworks/Alamofire.framework
Framework’ün kopyalanması için bu ayarı yaptıktan sonra uygulamayı bir kere derleyerek yukarıdaki dizine kopyalandığını görebilirsiniz.
$SRCROOT
,$BUILT_PRODUCTS_DIR
ve$FRAMEWORKS_FOLDER_PATH
Xcode tarafıdan tanımlanmış diğer değişkenler.
Şimdi uygulamamızı çalıştıralım.
Voila! İşte beklediğimiz konsol çıktısı!
Sonuç
Şimdiye kadar yaptıklarımızı ufak bir listede derlemek istersek:
- Boş bir Xcode workspace oluşturduk
- iOS uygulamamız için bir proje oluşturduk ve bunu workspace’imize ekledik
- Framework’ümüz için de bir proje oluşturduk ve bunu da workspace’imize ekledik
- Yeni oluşturduğumuz framework’ümüzü uygulamamıza bağladık ve gömülü olmasını ayarladık
- Carthage ile
Alamofire
framework’ünü indirip derledik Alamofire
framework’ünü kendi framework’ümüze bağlayıp kullandıkAlamofire
framework’ünün uygulamamıza gömülü olmasını ayarladık
Bu şekilde istediğiniz kadar birbirinden ayrı projeler oluşturabilirsiniz ve bunların birbirini veya uygulamanızın hepsini kullanmasını sağlayabilirsiniz. Alamofire
gibi birçok harici framework ekleyebilirsiniz. Bu harici framework’leri bir veya daha fazla framework’ünüz veya uygulamanız kullanabilir. Yani istediğiniz çeşitlilikte bir düzen oluşturabilirsiniz.
Kendi oluşturduğunuz framework’lerinizi diğer projelerinizde de kullanabilirsiniz. Hatta kendi framework’ünüz için ayrı bir depo oluşturup, Carthage veya git submodules kullanarak diğer projelerinizin workspace’lerine ekleyebilirsiniz. Carthage ile kendi framework’lerinizi eklerseniz, framework’leriniz hali hazırda derlemiş olacağı için uygulamanızın testleriniz esnasında daha kısa sürede derlenmesini de sağlayabilirsiniz. Birden fazla projemizin olmasının bir diğer avantajı ise herhangi bir birimde yaptığımız değişiklik için projemizin bütün testlerini çalıştırmamız gerekmiyor. Her birimin kendi testleri ayrı ayrı çalıştırılabilir halde oluyor. Bu şekilde bir düzen oldukça esneklik sağlıyor ve bir çok getirisi var.
Yazı boyunca oluşturduğum örnek projeyi burada bulabilirsiniz.