NSIstanbul Ekim 2017 Etkinliğinde Anlattıklarım

“NSIstanbul da ne ola ki” diyerek bu yazıyı okuyor olabilirsiniz, hemen anlatayım: NSIstanbul, İstanbul’daki iOS yazılımı ile ilgilenen insanları bir araya getiren, aylık buluşmalar düzenleyen, kâr amacı olmayan bağımsız bir topluluk. Bu aylık buluşmalarda konuşmacılar karşılaştıkları sorunları, bu sorunları nasıl çözdüklerini veyahut yakın zamanda öğrendikleri ve faydalı olacağını düşündüğü konuları anlatıyorlar.

Ekim ayında Show me the Code(Bana kodunu göster) adında yeni bir konsept denedik. Buna göre sahneye çıkanlar, topluluğun merak ettiği konuları kendi yazdığı kod üzerinden anlatıyor. Bu konsepte 2–3 ay daha devam edeceğiz. Konuları ve istekleri bir Trello panosunda topladık:

Ben de Ekim etkinliğinde kendi yazılım geliştirme sürecimde neler yaptığımı anlatan bir sunum yaptım. Çok fazla konu anlattın, bunların hepsini hatırlamamız imkansız, yaz bir yere dediler, velhasıl bu yazıdasınız işte.

Konular kısa kısa şöyle:

MVVM

MVVM mimarisini aslında Tarık Uygun(@uyguntt) anlatacaktı fakat MacBook Pro’sunun dongle’ı yanında olmayınca ertelendi. Ben de ufak bir tanıtım yaptım. MVVM’in katı kurallarından bahsettim ve projelerde kullandığım MVVM şeklini anlattım. Bir sonraki ay Tarık daha detaylı olarak bu mimariyi anlatacak.

Moya

Moya adında Swift ile yazılmış bir kütüphaneyi anlattım. Moya, herhangi bir API’ye yapılan istekleri tek bir Swift dosyasına toplayarak kodu temizleyen ve çok kısa sürelerde bütün bir uygulamanın Network katmanını oluşturmanıza yarayan bir kütüphane. Aynı zamanda atacağınız requestleri de test ediyor. Kolay authentication entegrasyonları var ve yüzlerce yazılımcı tarafından sürekli geliştirilen bir kütüphane. Ağustos etkinliğinde bu kütüphaneyi kullanarak iTunes API’ye istek gönderen bir uygulama yapmıştık, onun üzerinden geçtim. Örnek proje Moya 8.x sürümlerini destekliyor, henüz 9.0.0'a geçiremedim, en kısa zamanda yapacağım. Projeyi GitHub’da bulabilirsiniz:

Basit olarak Moya’yı anlattıktan sonra, şu anda App Store’da olan Pepapp uygulamasının kaynak kodu üzerinden Moya’yı gerçek bir uygulamada nasıl kullandığımı anlattım.

Carthage

Moya kütüphanesini örnek projeye kurarken Carthage adlı dependency manager sistemini anlattım. Carthage’ın güzel olaran tarafı, github’dan kütüphanelerin kaynak kodlarını indirip, framework olarak derleyerek projenizin ayarlarıyla oynamadan entegrasyonu tamamen size bırakması. İlk kurulum ve güncelleme biraz zaman alıyor haliyle ama sağladığı fayda tartışılmaz.

Uygulamanın bazı kısımlarının ayrı bir Framework olması

Mevcut bir uygulamanın Network katmanı, Model objelerini ve sabit değerleri (constants) ayrı bir framework yapıp bunu aynı projenin iOS, watchOS, iMessage, tvOS uygulamalarında ve Today Extension, Share Extension gibi kısımlarında kullanmanın nasıl yapıldığından bahsettim. Bu şekilde herhangi bir model ya da API değişikliğinde tüm parçaların tek bir yerden düzenlenmesini ve projenin kod ve dosya yönetiminin en basite indirgenmesini anlattım. Bu konuda ayrı bir yazı yazılır, ama şimdilik Ray Wenderlich sitesindeki tutorial’ı burada paylaşayım: https://www.raywenderlich.com/126365/ios-frameworks-tutorial

Bartycrouch

Bartycrouch (Harry Potter okuyanlar ismi pek sevmezler) bir Lokalizasyon yazılımı. Projenizde yazdığınız tüm NSLocalizedString makrolarını .swift, .h, .m, .mm dosyalarında arayıp, bulup, projenin desteklediği tüm dillerdeki Localizable.strings dosyasına kaydediyor. Build script ya da CocoaPod olarak eklenebiliyor. Projeyi her derlediğinizde henüz eklenememiş anahtarları kaydediyor, eski çevirilere dokunmuyor, artık kullanılmayan çevirileri siliyor ve anahtarları alfabetik sırayla dizebiliyor. Buna ek olarak Bing Translate servisi ile istediğiniz dile çeviri de yapabiliyor (ingilizceden sadece).

Sadece kodları çevirmiyor elbette, .storyboard, .xib ve .nib dosyalarındaki tüm text içeren objeleri de ayrı ayrı lokalize ediyor. Son 2 senedir tüm projelerimde kullanıyorum, tavsiye ederim.

Bir de Lin(https://github.com/questbeat/Lin) diye bir proje vardı Xcode 7 zamanı, Xcode 8 ile Apple pluginlerin fişini çekince kullanamaz hale geldik. Kodda NSLocalizedString’in key tarafına gelince Localizable.strings dosyasındaki tüm keylerin listesini çıkartıyordu. Bunun Xcode 8/9 muadilini bilen varsa bana yazsın, yoksa kendim yapacağım.

Lokalizasyon konusunda çok uzun bir yazı yazılır aslında, ilerleyen haftalarda bu konuyu da anlatabilirim.

Beta sürümler için özel uygulama ikonu

Bu şekilde müşterinin telefonunda direkt ayırt edilebiliyor.

Müşteriye beta ya da alpha sürümü gönderirken hem telefonda hepsinin ayrı bir app olarak gözükmesi için projenin ayrı target ve scheme’lere ayrılması nasıl yapılır bunu anlattım. Buna ek olarak uygulama ikonlarının üstünde BETA, ALPHA gibi kurdeleler olması ile versiyon ve build numarasının yazması için yazdığım bir bash scripti gösterdim. Önce Sketch’te app ikonunun üzerine koyacağım kurdele ya da görseli oluşturup, projeye (bende betaRibbon.png) olarak kaydediyorum, daha sonra imageMagick kullanarak bu görseli istediğim boyutta kaydedip app ikonunun üzerine koyuyorum. PlistBuddy ile projeden aldığım versiyon numarası ve derleme numarasını da Arial fontu ile ikonun aşağısına alıp, bunu png olarak kaydedip projenin assetleri içerisine kaydediyorum. Daha sonra ise PlistBuddy ile build sayısını 1 arttırıyorum.

Protocol kullanımı

Apple’ın kullanımına teşvik ettiği Protokoller ve Protocol-Oriented Programming felsefesini elimden geldiğince ne kadar uyguladığımı büyük bir projede gösterdim.

Data Source objeleri

Projenin içerisinde API’den veri çekmek için view controllerlar yerine Data Source objelerini nasıl kullandığımı anlattım. Veriyi çeken ve muhafaza eden ayrı objeler oluşturup bunu appin gerekli yerlerinde kullanım şeklimi gösterdim.

Benim aklıma gelenler bunlar. Eğer orada olup da “şunu anlatmıştın, yazmamışsın” diyecek arkadaşlar bana hatırlatırlarsa yazıya eklerim.

NSIstanbul güzelmiş, nasıl topluluğa katılırız diyen arkadaşlar Slack grubumuza (slack.nsistanbul.com) adresinden katılabilir, ya da Twitter’dan bizi takip edebilir.

Okuduğunuz için teşekkürler. Beğendiyseniz alkışlarınızı esirgemeyin 👏🏻 :)