29. Nov 2022iOS

Náš iOS tech stack pre vývoj mobilných aplikácií

Tech stack poskytuje produktovému tímu nástroje, ktoré potrebuje na budovanie a údržbu produktu – tak, aby spĺňal potreby zákazníkov. Zvyčajne zahŕňa programovacie jazyky, frameworky, analytické nástroje, architektonické vzory a mnohé ďalšie komponenty.

Matúš MištrikiOS Developer

Mobilné aplikácie dnes čelia vysokým nárokom na výkon, bezpečnosť aj používateľský zážitok. Aby sme tieto očakávania naplnili, potrebujeme spoľahlivý a moderný tech stack, ktorý nám umožní budovať riešenia rýchlo, efektívne a udržateľne.

Ako teda vyzerá technologický základ našich iOS aplikácií? Nahliadnime do nášho vývojového zákulisia.

Programovací jazyk

Swift

Swift je moderný, výkonný a bezpečný programovací jazyk od spoločnosti Apple, určený pre vývoj aplikácií na platformách iOS, macOS, watchOS a tvOS. Vznikol ako náhrada za Objective-C a prináša jednoduchší, čitateľnejší a bezpečnejší prístup k vývoju aplikácií.

V súčasnosti je Swift naším primárnym jazykom pre natívny vývoj. Pri nových projektoch a vybraných existujúcich aplikáciách už aktívne prechádzame na najnovšiu verziu Swift 6, ktorá prináša pokročilú podporu Swift Concurrency vrátane striktnejších pravidiel pre bezpečný prístup k dátam (strict concurrency checking).

Táto moderná forma asynchrónneho programovania zvyšuje čitateľnosť a udržiavateľnosť kódu, čo sa pozitívne odráža na kvalite výsledného produktu.

UI Frameworky

Pri vývoji používateľského rozhrania dnes staviame predovšetkým na SwiftUI, modernom frameworku od Apple, ktorý nám umožňuje efektívne navrhovať prehľadné a konzistentné rozhrania s menším množstvom kódu.

UIKit, donedávna štandard, využívame v špecifických prípadoch – napríklad tam, kde SwiftUI ešte nepokrýva všetky technické požiadavky alebo je potrebná podpora starších verzií iOS.

Oba prístupy vieme v prípade potreby kombinovať. To nám dáva flexibilitu pri vývoji nových projektov aj pri modernizácii existujúcich aplikácií.

Viac o našich skúsenostiach so SwiftUI nájdete v článku 👇

iOS

Ako začať vyvíjať iOS: tipy a sprievodca pre vývojárov

Dominik Petho3 Jan 2022

UIKit

UIKit v GoodRequest už aktívne nepoužívame ako hlavný framework, no stále je prítomný vo viacerých existujúcich iOS projektov, kde bol použitý pri ich pôvodnom vývoji.

Framework zahŕňa komponenty určené pre tvorbu používateľského rozhrania pre aplikácie iOS, iPasOS, WatchOS alebo tvOS.

Poskytuje architektúru pre tvorbu UI, infraštruktúru pre spracovanie používateľských vstupov a interakciu medzi používateľom, systémom a našou aplikáciou.

SwiftUI

SwiftUI je moderný framework, ktorý dnes používame ako hlavný nástroj pri vývoji používateľského rozhrania pre Apple platformy. Nahradil UIKit v nových projektoch a postupne sa stáva štandardom aj v rámci existujúcich aplikácií.

Výhodou je deklaratívny prístup k programovaniu ktorý zjednodušuje proces tvorby používateľského rozhrania, schopnosť spolupracovať s UIKit. Veľkou pomocou sú previews, pomocou ktorých developer takmer okamžite vidí všetky vykonané zmeny bez potreby spustenia aplikácie

Interné frameworky

Okrem práce na projektoch pre klientov venujeme čas aj budovaniu vlastného knižnicového ekosystému. Ten nám pomáha štandardizovať vývoj, zefektívniť opakované úlohy a zvyšovať kvalitu kódu naprieč projektmi.

Viac o tom, ako sme tieto knižnice navrhli a kde všade sa dnes používajú, si môžete prečítať v našom článku Náš iOS toolbox.

Viac o tom, ako sme tieto knižnice navrhli a kde všade sa dnes používajú, si môžete prečítať v našom článku 👇

Ilustrácia osoby s logom GoodRequest namiesto hlavy, ktorá stojí pred otvorenou knihou
iOS 4 Minúty čítania

Náš iOS toolbox – sprístupnenie nášho code-base svetu

Andrej Jaššo26 Sep 2023

GoodNetworking

GoodNetworking je knižnica zameraná na komunikáciu s REST API. Stará sa o konfiguráciu požiadaviek, spracovanie odpovedí aj základné error handling scenáre. Je navrhnutá tak, aby podporovala rôzne vrstvy aplikácie a bola ľahko rozšíriteľná.

GoodReactor

GoodReactor implementuje architektonický vzor Reactor, ktorý rozširuje koncept MVVM. Umožňuje efektívne riadiť stav obrazoviek a reagovať na používateľské akcie cez definovaný tok dát. Knižnica poskytuje základné stavebné bloky pre konzistentnú implementáciu tejto architektúry.

GoodPersistence

GoodPersistence je framework na prácu s lokálnym úložiskom. Zjednodušuje prácu s dátami uloženými napríklad v UserDefaults alebo Keychain a ponúka typovo bezpečné API pre ukladanie a čítanie dát v rámci aplikácie.

iOS Extensions

"Od vývojárov pre vývojárov" - knižnica GoodExtensions je zbierka modulov a vylepšení od komunikácie so serverom až po formátovanie textu, ktoré uľahčujú prácu našim developerov.

Package management

SPM

V našich iOS projektoch dnes používame primárne Swift Package Manager (SPM) nakoľko je natívne integrovaný v Xcode a umožňuje jednoduchú a efektívnu správu závislostí.

Swift Package Manager(SPM) je nástroj na správu distribúcie kódu napísaného v jazyku Swift. Výhodou je, že závislosti môžeme do projektov integrovať priamo prostredníctvom Xcode. Na rozdiel od CocoaPods sa súbory ukladajú len na lokálne zariadenia, a "nenafukujú" tak veľkosť projektu. SPM dnes podporuje väčšinu bežných knižníc, vrátane Firebase, a preto je našou preferovanou voľbou pri nových projektoch.

Nástroje

SwiftLint

Tento nástroj pomáha developerom udržiavať dobrú čitateľnosť kódu a zabezpečuje dodržiavanie konvencií a štýlu pri písaní kódu v jazyku Swift. SwiftLint upozorňuje developera na jeho chyby priamo prostredníctvom používateľského rozhrania Xcode.

SwiftFormat

SwiftFormat je nástroj na automatické formátovanie kódu. SwiftFormat dokáže automaticky upravovať medzery, pridávať alebo odstraňovať implicitný self, odstraňovať nepotrebné zátvorky a odstraňovať ďalšie odchýlky od štandardizovaných idiómov jazyka Swift.

Logen

Logen je interný nástroj napísaný v jazyku Python, ktorý developerom pomáha generovať lokalizované stringy pre Swift projekty priamo z Google Docs tabuľky.

Swiftgen

SwiftGen je nástroj na automatické generovanie kódu v jazyku Swift, konkrétne pre zdroje, ako sú farby, obrázky alebo lokalizované stringy, tak aby boli type-safe.

Analytické služby

Firebase

Na zber analytických dát, monitoring aplikácií a doručovanie notifikácií využívame platformu Firebase, ktorá pokrýva viacero oblastí vývoja aj prevádzky mobilných aplikácií.

Firebase Cloud Messaging používame na doručovanie push notifikácií. Hlavnou výhodou je jednotná integrácia na strane back-endu, vďaka čomu služba komunikuje s iOS aj Android aplikáciami automaticky.

Firebase Crashlytics zabezpečuje automatický zber informácií o pádoch aplikácie v produkcii. Umožňuje nám ich efektívne sledovať, priorizovať a riešiť, čím prispieva k vyššej stabilite aplikácií.

Firebase Analytics nám poskytuje detailný prehľad o správaní používateľov. Sledovanie interakcií a udalostí v aplikácii nám pomáha optimalizovať používateľské rozhranie aj biznisové rozhodnutia.

Firebase Remote Config umožňuje meniť správanie alebo vzhľad aplikácie na diaľku – bez potreby vydania novej verzie. Využívame ho napríklad pri experimentovaní s rôznymi variantmi funkcionality alebo obsahu.

CI/CD proces

Kontinuálna integrácia a dodávanie (CI/CD) umožňuje častejšie integrovať nový kód bez toho, aby sa znížila kvalita samotnej aplikácie. CI/CD je navrhnutý tak, aby automatizoval opakujúce sa úlohy, ako je zostavovanie, testovanie a nasadzovanie, a upozorňoval na potenciálne problémy. My pre tieto účely používame primárne tri nástroje.

Fastlane

Fastlane je OpenSource platforma navrhnutá na zjednodušenie procesu nasadenia iOS aplikácií. Fastlane nám umožňuje automatizovať takmer každý aspekt nášho work flowu vo fáze vývoja alebo vydávania softvéru.

Bitrise

Developerom umožňuje automatizovať základné pracovné postupy, čo nám umožňuje kombinovať bežné úlohy, ako je nasadenie testerom, informovanie tímu na Slacku o novej verzii alebo zvýšenie čísla verzie.

Danger JS

Danger je nástroj nasadený v rámci procesu CI. Poskytuje nám možnosť automatizovať prácu spojenú s kontrolou kódu a komentovaním našich PR na základe vopred definovaných pravidiel. To umožňuje tímu developerov sústrediť sa na komplexnejšie problémy v procese revízie kódu.

Architektúra

MVVM

Developerom uľahčuje oddeliť vývoj používateľského rozhrania od vývoja logiky. V projektoch to potom vyzerá nasledovne: View a ViewModel sú definované samostatne, View má priradený svoj ViewModel. View sa stará o všetky komponenty používateľského rozhrania a zobrazovanie dát z priradeného ViewModelu. Zodpovednosťou ViewModelu je zabezpečiť potrebnú obsluhu dát, ktoré zobrazuje View.

Reactor

Reactor vznikol ako kombinácia Flux a Reactive Programming.

View slúži na zobrazenie dát. Reactor je vrstva nezávislá od používateľského rozhrania, spravuje stav View.

V praxi flow vyzerá nasledovne: View pošle Reactoru akciu, napríklad na základe nejakého používateľského vstupu. Reactor na danú akciu "reaguje", vykoná všetku logiku definovanú ako reakciu na danú akciu a ako odpoveď View vráti stav, ten spôsobí zmeny na View.

Tento prístup používame v projektoch, kde je dôležitá konzistencia, predvídateľnosť a testovateľnosť aplikácie. Pre jednotnú implementáciu tejto architektúry sme vytvorili knižnicu GoodReactor, ktorá poskytuje základné stavebné bloky pre riadenie stavu obrazoviek.

Coordinator

Coordinator pattern používame na organizáciu navigácie medzi obrazovkami v aplikácii. Umožňuje oddeliť logiku prechodov od samotného používateľského rozhrania, čo zvyšuje čitateľnosť, opakovateľnosť a testovateľnosť kódu.

Tento prístup máme implementovaný ako súčasť knižnice GoodReactor, kde slúži ako prirodzené rozšírenie architektúry Reactor. Vďaka tomu vieme riadiť navigáciu konzistentne s ostatnými vrstvami architektúry bez toho, aby sa zbytočne komplikovala View alebo Reactor vrstva.

Technológie, ktoré dávajú našim aplikáciám pevný základ

Náš iOS tech stack sa neustále vyvíja spolu s technológiami, ktoré používame. Sledujeme aktuálne trendy, testujeme nové prístupy a aktívne budujeme vlastný ekosystém nástrojov a knižníc, ktoré nám pomáhajú udržiavať vysokú kvalitu vývoja.

Cieľom je vždy prinášať riešenia, ktoré sú udržateľné, stabilné a zároveň pripravené na škálovanie podľa potrieb našich klientov. Ak vás zaujíma viac o našej práci, neváhajte si pozrieť aj ďalšie články na blogu.

Matúš MištrikiOS Developer