
29. Nov 2022
iOSNáš 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.


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 👇

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 👇

Náš iOS toolbox – sprístupnenie nášho code-base svetu
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.

Ďalšie články

App Intents: Ako sprístupniť vašu aplikáciu pomocou Siri, Spotlight a Widgetov


App Intents tipy a triky: Ako urobiť aplikácie pre iOS prístupnejšie ako kedykoľvek predtým


Ako vytvoriť úspešnú aplikáciu pre iOS s využitím prehliadaných funkcií iOS
