• Buradasın

    Modern iOS Geliştirme ve Test Stratejileri

    youtube.com/watch?v=zSuSyFv3wS4

    Yapay zekadan makale özeti

    • Bu video, Seyfettin Başsaç tarafından sunulan bir iOS geliştirme eğitim sunumudur. Seyfettin, Trade adlı bir şirketin sahibi olup, İstanbul ve Amsterdam'da ofisleri bulunmaktadır ve mobil uygulama geliştirme hizmetleri sunmaktadır.
    • Sunum, modern iOS geliştirme konusunu kapsamlı şekilde ele almaktadır. İçerik, iOS geliştirme tarihçesindeki önemli dönüm noktalarından başlayarak, Apple'ın modernizasyon tavsiyeleri, tasarım sürecinde yapılması gerekenler, test stratejileri ve geliştirme araçları hakkında detaylı bilgiler sunmaktadır. Video, üç ana bölümden oluşmaktadır: Apple'ın modernizasyon tavsiyeleri, diğer şirketlerin çalışmaları ve tasarım sürecinde yapılması gerekenler.
    • Sunumda ayrıca UI Trade Collection objesi, layout guides sistemi, vektör asset kullanımı, Xcode 9'daki yeni opsiyonlar, framework kullanımı, test kütüphaneleri, continuous integration çözümleri, dependisiy management araçları ve tasarım ve geliştirme arasında hand-off sürecini kolaylaştıran araçlar (Appstract Sketch, We, Zeplin, Marvel ve Figma) gibi teknik konular da ele alınmaktadır. Video, iOS geliştirme sürecinde test stratejileri ve geliştirme süreçleri hakkında bilgi paylaşımı yapan bir sohbet formatıyla sonlanmaktadır.
    00:02Giriş ve Sunum Hedefi
    • Sunum hem iOS geliştirenlere hem de geliştirmeyenlere yönelik hazırlanmıştır.
    • Modern iOS geliştirme, günümüzde takip edilen geliştirme süreçlerini anlatmayı amaçlamaktadır.
    • Sunum üç ana başlıkta olacak: Apple'ın modernizasyon tavsiyeleri, şirketlerin bu konudaki çalışmaları ve tasarım süreci.
    02:57iOS Geliştirme Tarihçesi
    • iOS geliştirme tarihçesinde 2008'e kadar her şey iPhone SDK'nın çıkmasıyla başladı.
    • 2011'de ARK (Otomatik Referans Sayımı) ve akıllı bir compiler ile memory management otomatikleştirildi.
    • 2012'de Apple, Auto Layout arayüzü duyurdu ve bu sistem sayesinde frame tabanlı geliştirme yerine daha esnek bir arayüz oluşturma imkanı sağlandı.
    05:47Swift ve Modernizasyon
    • iOS geliştirme tarihinde en büyük kırılma noktası Swift adında yeni bir programlama dilinin ortaya çıkması oldu.
    • Swift, güvenli, modern syntax, temiz, kuvvetli string özellikleri ve standart kütüphanesi olan bir programlama dilidir.
    • Swift ile macOS, iOS ve backend uygulamaları geliştirilebilir, ayrıca Chrome ve Safari'de Swift'in JavaScript'e muadil bir dil olarak getirileceği söylentileri vardır.
    08:28Size Classes ve Multitasking
    • Apple, farklı ekran büyüklüklerine göre size class'lar sunarak arayüz tasarımı kolaylaştırdı.
    • Size class'lar sayesinde font büyüklüğü ve objelerin görünmesi/görünmemesi cihaz cihaz değil, size class'lara göre ayarlanabilir.
    • iPad multitasking özelliği ile ikinci bir uygulama penceresi açılabildiği için size class'lar daha da önem kazandı, ancak multitasking destekleyen uygulamalar artık reddedilmektedir.
    10:06UI Trade Collection ve Cihaz Özellikleri
    • UI Trade Collection, view controller class'ına ait bir objedir ve cihazın yatay/dik duruşunu, 3D Touch desteği ve renk gamutlarını (iPhone 7'den itibaren sRGB'den P3'e geçiş) hakkında bilgi verir.
    • UI Trade Collection, cihaz özellikleri değiştiğinde kodda haber veren bir get yapısına sahiptir ve kullanıcı iPad'de ekranı büyütüp küçülttüğünde bu değişiklikleri bildirir.
    • Bu sistem kullanıldığında yeni cihaz özellikleri eklendiğinde çok fazla problem yaşanmaz.
    11:28Layout Guides ve Responsive Tasarım
    • Layout Guides, hayali dikdörtgenler olarak algılanabilen ve arayüz elemanlarını gruplamak için kullanılan bir sistemdir.
    • Apple'ın default olarak verdiği iki tane layout guide vardır: tabla ve bottom, bu rehberler arayüz elemanlarının büyümesini veya küçülmesini otomatik olarak adapte eder.
    • iOS 11'de safe area özelliği getirildi ve layout guides kalktı, ancak hala birçok objeyi gruplamak için kullanılır.
    13:00Assetlerin Vektör Olarak Kullanılması
    • Assetlerin vektör olarak kullanılması Xcode 7'de geldi ve artık tek bir PDF dosyası kullanılarak 1x, 2x, 3x assetler otomatik olarak oluşturulur.
    • PDF kullanmanın tek dezavantajı, içeriğin vektör değil bitmap (piksellerden oluşan) olması durumunda resolution problemleri yaşanabilmesidir.
    • Xcode 9'da "priz vector date" seçeneği ile compile time'da PNG'ler oluşturmak yerine vektör olarak tutulabilir, ancak bu özellik sadece iOS 11'i desteklemektedir.
    14:47Apple Swift Package Manager ve Framework Kullanımı
    • Apple Swift Package Manager, birden fazla kez kullanılan kodları ve dosyaları bir framework'ün içerisine koyarak tekrar tekrar kullanmayı sağlar.
    • Arayüzden bağımsız olan kısımlar (modeller, network layer, steam, coun) ayrı bir kit içerisine konularak tüm projelerde kullanılabilir.
    • Arayüz özel butonlar ve çok fazla kullanılan renkler de ayrı bir framework'e konularak tüm projede kullanılabilir.
    16:45Test ve UI Test
    • Apple test'i çok önemsiyor ve Xcode 2'den itibaren test kütüphaneleri ile beraber geliyor.
    • Apple'ın WWDC etkinliğinde en az 4-5 tane test üzerine sunum yapılıyor.
    • Xcode 7 ile beraber Xcode'un arayüzü testlere uygun hale getirildi ve yeni proje oluştururken test ve UI test seçenekleri sunuluyor.
    17:59iOS Test Metodolojileri
    • iOS'te iki temel test metodolojisi vardır: TDD (Test Driven Development) ve BDD (Behavior Driven Development).
    • TDD'de test case'ler Xcode'da kodlanır ve arka arkaya tela başlıyorsa otomatik olarak test olarak işaretlenir.
    • Test sonrası coverage paneli, hangi dosyanın ne kadarının test edildiğini gösterir, ancak iOS'ta yüzde yüz test yapmak zorunlu değildir çünkü SDK stabildir.
    19:43BDD Test Yazımı
    • BDD'de testlerin yazılış biçimi farklıdır ve Quick frameworkü bu tür testleri yazmak için kullanılır.
    • BDD'de önce "describe" ile test ismi verilir, sonra "before" ile hazırlık yapılır ve "expect" makrosu ile sonuçlar kontrol edilir.
    • Expo'da BDD testleri de desteklenir ve testler individual olarak çalıştırılabilir.
    21:33Integration Testler
    • Unit testler bağımsız çalışırken, integration testler (UI testler) uygulamanın olması gerektiği gibi çalışıp çalışmadığını kontrol eder.
    • Xcode'un default UI test özelliği, test metodunun içerisine geldiğinizde solda aşağıda bulunan record butonu ile çalışır.
    • UI testler, uygulamayı çalıştırıp butonlara basarak arayüzdeki özelliklerin doğru çalışıp çalışmadığını kontrol eder.
    22:52Snapshot Testing
    • Snapshot testing, app'i çalıştırıp birden fazla cihazda spinshots alarak imaj def'lerini karşılaştırır.
    • Bu yöntem, app'in her çalıştığında aynı olmasını sağlayarak iOS 9'da iPhone 5S'de patlama gibi sorunları ortadan kaldırır.
    • Facebook'un snapshot test case kütüphanesi geçen hafta fişini çekti ve artık desteklenmeyecek.
    24:02Continuous Integration
    • Continuous Integration (CI), yazılım geliştirme sürecinde önemli bir konudur ve iOS için birçok çözüm mevcuttur.
    • CI için popüler çözümler arasında CI/CD, Jenkins, Travis CI ve Bitrise bulunmaktadır.
    • iOS geliştirme için server'ın Mac olması gerekiyor, bu nedenle Mac mini satın almak veya Max Helium gibi hizmetler kullanmak gerekebilir.
    25:25CI Servisleri ve Flaky
    • Bitrise, hem Mac hem de Android desteği sunan, GitHub ile entegre olan ve point and click arayüzü olan bir CI çözümüdür.
    • Flaky, Twitter tarafından satın alınan ve Google'a satılan bir toolchain'dir.
    • Flaky, projeyi build eder, paketler, screenshotlar çeker ve sonuçları otomatik olarak sunar, ayrıca App Store'a upload edebilir.
    28:54Dependency Management Araçları
    • Dependency management konusunda iOS'ta üç büyük araç bulunuyor: CocoaPods, Carthage ve Pods.
    • CocoaPods, ana bir depoya kütüphaneleri kaydeder ve projeyi build etmeden önce kütüphaneleri link eder, ancak projenin ayarlarıyla çok fazla oynar.
    • Carthage, GitHub'dan kütüphaneleri indirip paketler ve projenin dosyasına koyar, bu sayede kütüphaneler tekrar compile olmaz ve daha hızlı çalışır.
    31:38Tasarım Sürecinde Yazılımcıların Rolü
    • Tasarım sürecinden itibaren yazılımcıların dahil olması gerekiyor, bu hem tasarım sürecini hem yazılım sürecini hızlandırır.
    • Tasarımcılar iOS'e uygun olmayan tasarımlar yapabilir, bu durumda yazılımcıların tasarım sürecinde dahil olması önemlidir.
    • Tasarımcılar ve geliştiriciler arasında işbirliği yaparak, tasarım aşamasında yapılan değişiklikler daha hızlı uygulanabilir.
    34:23Tasarım Araçları ve İşbirliği
    • Appstract Sketch, tasarım dosyalarını Git üzerinde yönetmeyi sağlayan bir araçtır, bu sayede versiyonlama sorunları çözülür.
    • We, tasarım aşamasında yorum yapma imkanı sunan basit bir araçtır, özellikle geliştirme aşamasında etkili bir işbirliği sağlar.
    • Zeplin, Marvel ve Figma gibi araçlar, tasarım aşamasından geliştirme aşamasına geçişte detaylı kod ve asset export'ları sunar.
    38:59Tasarım ve Geliştirme Arasındaki Bağlantı
    • Tasarım araçlarının düzgün çalışabilmesi için tasarımcıların layer isimlendirmelerine dikkat etmesi ve gruplamaları export edilebilir sembollerle kullanması gerekir.
    • Düzgün isimlendirmeler yapılmazsa, tasarımdan export edilen kodlarda isim değişiklikleri yapılması gerekebilir, bu da geliştirme sürecini sekteye uğratır.
    • Tasarımcılar ve geliştiriciler arasında işbirliği yaparak, proje modern ve hızlı bir şekilde geliştirilebilir.
    39:52Stil ve Kod Yönetimi
    • Doğru isimlendirmeler ve düzgün bir stil ile uygulama tasarımı yapıldığında, renkler, gradient'ler ve text büyüklükleri tek tek stil ile yazılabilir.
    • Bu stil'ler kod tarafında UI color, UI font ve gradient color gibi objelere çevrilebilir, böylece arayüz tasarıma gidip gelmeden proje oluşturulabilir.
    • Bu yöntem development sürecini hızlandırır.
    40:52Test Stratejileri
    • Unit testlerde ne kadar test yapılacağı projeye göre değişir ve bu konuda iOS için kaynak kitap bulunmamaktadır.
    • iOS'te çok fazla model testi yazmaya gerek yoktur, genellikle yüzde otuz test yeterli olmaktadır.
    • Projenin karmaşıklığı test sayısını etkiler; çok fazla işlem yapan projelerde test sayısı daha fazla olurken, internetten veri çekip gösteren projelerde daha az test yeterlidir.
    42:50UI ve Unit Testleri
    • UI testlerin günlük testlerden daha öncelikli olduğu düşünülmektedir.
    • UI testleri, ekranın butonlarının state'lerinin değişmesi gibi durumları test etmek için daha fazla yapılır.
    • UI testleri uzun zamandır yapılmakta olup, özellikle Cineshot özelliğini kullanmak için kullanılmaktadır.
    44:11Test Driven Development
    • Test Driven Development'ın faydası, kodu yazmadan önce neye ihtiyaç duyulacağını belirleyebilmesidir.
    • Testi yazarken kodun nasıl olması gerektiğine karar verilir ve mantık hataları önceden tespit edilir.
    • Test yazmak, kodun sağlam olması kadar önemlidir.
    44:52Test Yaklaşımları ve Kütüphane Seçimi
    • Test Driven Development'da iki yaklaşım vardır: test-first ve coplast.
    • iOS'ta test yazmak zordur, genellikle view model mimarisini kullanarak fonksiyonlar test edilir.
    • Sweet Package Manager, pure Swift kütüphaneler için geçerlidir ve içinde UI kodu olan kütüphaneleri kuramaz, ancak network layer kütüphaneleri için kullanılabilir.

    Yanıtı değerlendir

  • Yazeka sinir ağı makaleleri veya videoları özetliyor