Xcode Workspace ile Birden Fazla Proje Kurulumu

Ilter Cengiz
NSIstanbul
Published in
13 min readMay 14, 2018

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.

Framework uygulamanın projesinde referans edilmiş halde

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ık
  • Alamofire 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.

--

--

Ilter Cengiz
NSIstanbul

iOS developer at Careem. Writes at @objtidbits. Hobbyist photographer. Pokémon master, Nintendo addict.