22. Nov 2021iOS

Starterpack pre budúcich iOS developerov - prepis a videozáznam z DSC Talks #4

Minulý týždeň sa v GoodRequest niesol v znamení eventov. V utorok som ich odštartoval ja, kto som? iOS Lead v GoodRequest Maroš Novák. Zúčastnil som sa Online Talkov, ktoré sa tentokrát venovali téme Úvod do sveta programovania.

V úvode ma vyspovedal moderátor Miro pár otázkami "na telo", poslucháči sa dozvedeli, že sa vývoju venujem už viac ako 15 rokov, z ktorých som už takmer 8 rokov iOS vývojárom u nás v GoodRequest. Okrem seba som predstavil  aj GoodRequest, všetky naše tímy a najnznámejšie projekty iOS timu, medzi ktoré patrí napríklad Bistro.sk, Tatra banka, či Reprezóna. Po krátkom predstavení sa môžeme vrhnúť na obsah samotnej prezentácie, v ktorej sa dozvieš 3 príklady, prečo je vývoj pekný, jednoduchý, ako nám ho Apple zjednodušuje a čo potrebuješ na to, aby si vývojárom mohol byť.

Hardvérové požiadavky

Aplikácie na iOS je možné vyvíjať len v operačnom systéme macOS. Na začiatku štúdia sme ani my s kolegami neboli veľmi zástancovia Apple. Samozrejme má svoje pre a proti a nie každému sa páči pricing alebo marketing. My s kolegami sme po vstupe do ekosystému zistili výhody a hneď sa nám to zapáčilo, naozaj si to treba vyskúšať. Treba si hlavne uvedomiť, že nepotrebuješ hneď zo začiatku high-end počítač za viac ako 2000€. Stačiť ti bude pokojne Macbook Air alebo Mac mini. Tie majú teraz dokonca nové chipy od Apple, ktoré válcujú benchmarky, čiže dokážeš mať výkonný stroj už do 1000 €. Navyše sa nemusíš báť, že spravíš chybu a zostaneš uzavretý a budeš sa musieť orientovať len na jeden vývoj, takmer každý u nás v GR používa Macbooky, na svoj vývoj a dokonca aj väčšina Android developerov.

Čo sa týka iPhonov, tie nie sú podmienkou, vďaka simulátoru, ktorý je súčasťou natívneho vývojového prostredia. Ten nám poskytuje dostatočný priestor na otestovanie našich caseov a appky. Z praxe viem, že 90% vecí, ktoré nakódime nám stačí otestovať na simulátore. A v podstate aj tebe, pri vývoji appiek na iOS vo Swifte stačí pri Junior úrovni simulátor. Samozrejme, pokiaľ už chceš pracovať s bluetooth alebo kamerou, tak budeš potrebovať iPhone.

Softvérové požiadavky

Xcode je vývojové prostredie priamo od Apple, čo je jeho hlavnou výhodou a zároveň aj nevýhodou 😄. To znamená, že nás častokrát vedia prekvapiť, ale zároveň sa vieme spoľahnúť na pravidelné updaty, support nových zariadení a vývoj je od písanie kódu až po deployment do AppStore cez Xcode.  Existuje aj alternatíva od JetBrains -  Appcode. Ten je taktiež možné spustiť len na Macu ale na rozdiel od Xcode je platený.

Programovací jazyk

Swift nahradil pred niekoľkými rokmi jazyk Objective-C podobne ako Kotlin nahradil Javu. Swift je jednoduchý, moderný, dobre čitatelný a navyše open-source. Za posledné roky dokázala komunita dostať tento jazyk na super úroveň a nám tak zjednodušovať  každodenný vývoj.  Ďalšou výhodou Swiftu je možnosť vytvoriť si server-side appku alebo hocijaký script. Ja mám na Swifte najradšej, že je type-safe a taktiežOptional hodnotám, kedy sa môže ale nemusí vnutri premennej nachádzať hodnota. V tomto prípade ťa kompilátor bude tlačiť do toho, aby si si tieto stavy ošetril a vďaka tomu sú appky v AppStore bezpečnejšie a necrashujú.

Chceš sa venovať vývoju mobilných appiek pre iOS? Absolvuj našu 2 mesačnú iOS Akadémiu!

Porovnanie iOS vs Android

Programovací jazyk Swift vs. Kotlin

Teraz sa pozrieme na stručné porovnanie iOS a Android platforiem. Na slide nižšie môžeš vidieť malé porovnanie syntaxe Kotlinu a Swiftu. Na týchto pár prípadoch vidno, že syntax je veľmi podobná a pokiaľ už ovládaš Kotlin, naučiť sa Swift je otázka niekoľkých hodín. Prechod zo Swiftu na Kotlin a naopak je teda jednoduché a rýchle.

Medzi veľké výhody jazyka Swift patrí, že je naozaj rýchly z pohľadu kompilácie. Je rýchlejší ako Kotlin a dokonca 8.4x rýchlejší než Phyton. Kombinácia nových Macbookov s M1 chipom a jazyka Swift poskytuje expresné buildovanie aplikácií rádovo v sekundách. To je pri našom každodennom vývoji skutočne productivity changer.

Trhoví podiel iOS vs Android

Na Slovensku tvorí podiel používateľov iPhonov 23%, čo sa samozrejme zdá málo, ale my v GR pracujeme na aplikáciách, ktoré nie sú cielené iba na slovenský trh. Keď sa pozrieme na Európu, podiel predstavuje viac ako 36%. Pri silnom Americkom trhu si klienti žiadajú najprv iOS aplikáciu, až potom Android, keďže viac ako polovica Američanov vlastní iPhone.

Aj slovenskí klienti chcú mať svoje riešenia a produkty na iOS zariadeniach, pretože nechcú  stratiť početnú zákaznícku základňu. To, že je iOS na slovensku menej zastúpený neznamená, že sa aplikácie používajú menej. Majitelia iPhonov sú aktívnejší, viac nakupujú a viac aplikácie používajú. Napríklad pri Bistro appke máme 46% používateľov na iOS, ktorí objednávajú viac ako ľudia s Androidmi.

Aj preto potrebujeme viac iOS developerov, pretože práce pre nich je rovnako veľa ako pre Android vývojárov.

Výhody iOS oproti Androidu

Kedysi, keď sme vyvíjali iOS appky (5-7 rokov dozadu), tak sme potrebovali množstvo knižníc tretích strán, ktoré nám rozširovali natívne možnosti. Už len na obyčajné skenovanie kódov alebo mapovanie objektov zo servera sme potrebovali knižnice. Už z názvu dependencies vyplýva, že sme závislí na niečom externom. Musíme sledovať či je knižnica aktualizovaná, či má support od tvorcov, či je ošetrená v novej verzií iOS - aby nám appka necrashovala. Apple rokmi svoje natívne SDK vylepšoval a všímal si, čo sa najviac využíva a následne to implementoval k sebe. Teraz štandardne používame radovo jednotky knižníc, ktoré sú overené a ich úlohou je napr. trackovať crashe alebo používateľnosť v appke. Čo sa týka UI a frameworkov nám stačí natívna SDK.

Ďalšou výhodou je vývoj na zariadenia od jedného výrobcu. Je naozaj super, keď vieš, na čom tvoja appka pobeží a viete si to priamo v simulátoroch otestovať. Simulátor priamo v Xcode dokáže buildnúť aplikáciu 4" zariadenia až po najnovšie s 6.7" displejom, ktoré predstavuje iPhone 13 Pro Max. Taktiež je možné buildnúť všetky iPady, Apple TV alebo hodinky. Tzn. každý reálny Apple hardvér má softvérový simulátor. Vďaka tomu vieme už pri vývoji, ako bude appka vyzerať na menšom rozlíšení a včas podchytiť, ošetriť a vytvoriť napr. custom layout. V produkcii je potom vidno, že sa aplikácií niekto venoval. Pri Androide je problém, že aplikácia môže fungovať správne na high-endoch ale crashuje na pár devicoch od niektorých výrobcov. Taktiež sa mi páči kontrola appiek pred uvedením do Appsotre, častokrát to môže vyzerať veľmi kriticky, ale Apple vďaka tomu udržuje v AppStore len naozaj kvalitné aplikácie.

Výhodou u oboch platforiem je skvelá komunita. iOS má veľmi dobré zdroje pre aktuálne riešenia aj pre učenie sa programovania. Aj my v GoodRequest vzdelávame študentov a tých, ktorí majú záujem o iOS. Máme na to 2 platformy. Jednou z nich je iOS stáž, ktorá je určená pre hocikoho, kto ma záujem o programovanie a má nejaké základné znalosti, napr. objektového programovania. Prejdeme spoločne celým Swiftom a úvodom do iOS programovania. Potom máme iOS Academy, kde už staviame na základoch, ktoré môžu byť z UDEMY kurzov, z  YouTube videí alebo domáceho programovania. Tam už sa dostávame k pokročilým architektúram, tvorbe UI, animácií a podobne.

Ako nám Apple zjednodušuje prácu

Prvou témou je Mac Catalyst a Swift UI. Catalyst umožňuje spustenie aplikácií naprogramovaných na iOS aj na operačnom systéme macOS. Taktiež je možné priamo začať vyvíjať aplikácie multiplatfomovo, stále však v rámci ekosystému Apple.

Nový spôsob tvorby UI zase predstavuje framework SwiftUI. Tvorba komponentov je podobná  Reactu alebo Compose. Swift nám pomáha jednoducho, priamo v kóde vytvárať UI, volať parametre a tým ich customizovať. Takáto aplikácia naprogramovaná primárne pre iPhone dokáže fungovať pre Mac, pri zachovaní natívnych prvkov.

Na príklade možno vidno ako SwiftUI vyzerá. Pravá strana reprezentuje zoznam článkov. Komponent List nám vytvorí zoznam a každá položka zoznamu bude pomocou NavigationLink smerovať na ArticleView.

ArcticleView zase predstavuje detail takéhoto článku, tvorený jednoduchým vertikálnym stackom - VStack. Do neho vieme vkladať komponenty, v našom prípade dva Texty a Spacer. Definovanie parametrov je veľmi jednoduché a vytvoriť takýto prototyp na rôzne platformy trvá pár minút.

Výsledok potom vyzerá tak, že si aplikáciu dokážem buildnúť na rôzne platformy. Na iPade má sidebar kde je zoznam pod sebou. Na iPhone sú to prirodzene taby, ktoré sú dole vedľa seba. Na Macu vyzerá  detail úplne inak, ako na ostatných patformách, pretože každá platforma má natívne špecifiká. Catalyst toto spraví za nás s jedným zdrojovým kódom.

Augmented Rality Kit

Ďalším dobrým príkladom, ako sa dobre pracuje s natívnymi frameworkami od Apple je rozšírená realita. My sme s rozšírenou realitou pracovali na projekte s nábytkom, ktorá umožňovala do miestnosti vkladať rôzne druhy nábytku a potom ich posúvať či rotovať, aby sa zákazníci vedeli rozhodnúť, čo sa im hodia do domácnosti.

Kód je šialene jednoduchý a všetko funguje natívne.  Definujeme si sceneView, ktorý v našom prípade predstavuje svet okolo nás. Ďalej nastavíme konfiguráciu pre trackovanie podlahy. Stačí zadefinovať, že chceme detekovať horizontal plane planeDetection = .horizontal. v iOS totiž vieme skenovať aj vertikálnu plochu, napríklad stenu. V rámci tohto sceneView vieme spustiť session, ktorá nám bude na pozadí stále trackovať podlahu. Potom už len načítame nakonfigurovaný 3D model stoličky, ktorý pridáme do scény.

func setupSceneView() {
        let sceneView = ARSCNView()
        sceneView.delegate = self

        let config = ARWorldTrackingConfiguration()
        config.planeDetection = .horizontal

        sceneView.session.run(config)

        let scene = SCNScene(named: "chair.scn")
        sceneView.scene = scene
    }

Video streaming

Štandardne pracujeme v aplikáciach s prehrávaním videí, načítavaním a ukladaním fotiek do galérie, pristupujeme ku kamere alebo spracúvame notifikácie zo servera. Je preto dôležité mať jednoduché API k týmto často používaným  natívnym knižniciam. Príklad dole je aplikácia Gopass, kde sme zobrazovali okrem iného aj live stream kamier. Podmienkou bolo, aby používateľ dokázal zobraziť tieto kamery aj picture in picture. Vďaka Apple nemusíme riešiť zložitú implementáciu a stačí nám jednoducho zavolať allowsPictureInPicturePlayback = true. Načítanie streamu, úprava hlasitosti, landscape mode, to všetko je záležitosť pár riadkov kódu. S natívnymi knižnicami sa pracuje naozaj veľmi jednoducho, šetria nám čas a my sa tak môžeme venovať napríklad zlepšovaniu architektúry, pimpovaniu UI alebo animáciám.

Na záver vaše otázky

Čo sa ti najviac páči na firme GoodRequest?

Ľudia a atmosféra, ktorá tu panuje. Mám veľa kolegov, s ktorými som študoval na vysokej škole a postupne sme začínali v GR. Pre nás je to stále také, akoby sme boli na škole a veľa vecí sa nezmenilo z pohľadu atmosféry. Aj napriek tomu, že sme sa zväčšili a implementovali nejaké procesy a veľa vecí je iných ako kedysi, stále je tu ta nálada, na ktorú sa do práce vždy teším.

Je aj niečo čo sa ti nepáči?

Máme super office, kde by bolo fajn mať iOS tím pokope. Dnes pracujú tímy remote nielen u nás ale ja vo svete. Náš tím je rozhádzaný po Slovensku a Česku. Momentálne bývame v našom Žilinskom office 2-3 a celkovo nás je 13. Bol by som veľmi rád, keby bol iOS tím viac pokope, ale pandemická situácia, nedostatok vývojárov a práca na diaľku hrajú proti mne.

Ktorý projekt je tvojou srdcovkou a prečo?

Pre mňa je to Tatra banka, aj keď sa začala vyvíjať pred viac ako 10 rokmi. Mne sa na nej veľmi páči to, že je stále udržiavateľná. Knižnica na ktorej bola postavená bola vytvorená vývojármi, ktorí na nej začínali pracovať. To, čo máme teraz od Apple dostupné na jeden riadok vtedy neexistovalo, takže rôzne problémy museli riešiť vlastnou knižnicou. Vytvorili ale nadčasový spôsob programovania obrazoviek na ktorom staviame doteraz. Je pre mňa teda obdivuhodné mať tak stabilnú a kvalitnú aplikáciu, ktorá je už tak dlho na trhu.

Pracujete pri vývoji aj s frameworkom Health kit? Mohol by si odporučiť nejaké zdroje, ako sa ho najlepšie naučiť a integrovať do vlastnej appky?

Pred nedávnom sme analyzovali možnosti HealthKitu pre aplikáciu, ktorá bude získavať údaje o aktivite, tréningoch a spálených kalóriách.

Ako vnímaš príchod vlastných Apple procesorov? Vnímaš rozdiel pri programovaní?

Bohužiaľ ja ho nemám 😃   Ako iOS Lead už programujem menej a chcem, aby mal môj tím všetko, čo potrebuje k programovaniu, takže developeri majú prednosť predo mnou.

Odporúčam si pozrieť video od Petr Mára, kde porovnáva starý MacBook s Intelom vs M1. Tie rozdiely sú naozaj v 10tkách%. Nám to v podstate v rámci appiek zjednodušuje prácu ale aj ten performance. To buildovanie aplikácií je výrazne rýchlejšie.

Ako sa stanem iOS Developerom? Dá sa to aj keď nepochádzam priamo z IT sektora ale pracujem s dátami v Pythone a pod.?

Jasné. Ten prechod z hocičoho je veľmi jednoduchý, dokonca aj z humanitárnej školy. Ja mám pocit, že Swift je dobrý úvod do programovania. Ak by som mal ja niekoho učiť, tak by som mu ukázal Swift, pretože je to jednoduché a prehľadné písanie. Syntax sa dá naučiť veľmi rýchlo a pokiaľ sú tam nejaké skúsenosti s Phytonom tak je to určite jednoduchšie. A ako som spomínal, tá komunita je dobrá a  zdrojov na internete veľmi veľa. Okrem toho je dobré spraviť si demo aplikáciu a veľa skúšať. Ani my keď sme sa učili, tak sme nemohli len niečo pozerať a čítať, ale aj programovať, implementovať a zlepšovať. Kľudne to môže byť vývoj typu - skúsim, buildnem, nevyšlo, niečo zmením a tak dookola.

"iOS developerov, by malo byť rovnaký počet ako Android developerov" - nie je to zbytočné(prebytok)? Pretože podľa grafu je iOS používateľov len do 40%.

Na ten trh sa nemôžeme pozerať takýmto spôsobom. Musíme brať do úvahy klientov a ich aplikácie. K nám keď príde klient potrebuje štandardne aplikáciu pre Android aj iOS. Rovnako veľký tím teda vyvíja iOS ako Android. Keď robíme natívny vývoj tak obe platformy súčasne. Treba si uvedomiť, koľko z tých 70% používateľov Androidu na Slovensku je aktívnych, keďže Android telefóny rozdávajú takmer zadarmo k hocijakému pauášalu.  iOS používatelia sú produktívnejší a viac so zariadeniami pracujú, nakupujú a sťahujú.

Myslíš si, že developeri budú rásť s počtom používateľov, alebo sa mýlim?

Dúfam, že áno, ale nemyslím si, že iOS bude tak výrazne rásť. Má pomalú krivku, kde stále väčšina používateľov bude mať  Android. Treba si uvedomiť, že je to jedna firma proti všetkým ostatným. Samsung ako najväčší konkurent, Google s Pixelmi a mnoho Čínskych spoločností s násobne väčším objemom zariadení. Počet developerov ale určite musí rásť. Rokmi budeme možno viac smerovať k multiplatformovému vývoju aj keď sme stále zástancami natívneho vývoja. Multiplatformový vývoj, by musel byť na takej úrovni, aby sme v ňom vedeli urobiť takmer všetko a nebude potrebovať znalosti jednotlivých technológií iOS a Android.

Koľko času ti zaberie vytváranie layoutov pre všetky Apple zariadenia oproti naprogramovaniu len mobilnej appky?

Príklad v článku som len spustil na troch rôznych zariadeniach. Čiže mi to trvalo úplne rovnako, ako keby som to robil len pre iOS. Existujú samozrejme viaceré platformové špecifiká. Na iOS je tab bar v spodnej časti a na iPAde je to side bar. Z praxe sa dá povedať, pokiaľ nejde o custom iPad dizajn, že nám trvá o 10% dlhšie ako programovania iba na iPhone. Najprv programujeme primárne pre iOS, potom to spustíme na iPade a keď niečo nesedí, tak to doladíme.

Pokiaľ máte zákazníkov, ktorí začali s iOS aplikáciou, chodia za vami s požiadavkou, že by ju potrebovali napr. pre hodinky, telku alebo iné Apple zariadenia?

My sme veľmi radi keď za nami s takýmito nápadmi prídu. Často klientom odporúčame ako by sa dal ich produkt rozšíriť. Nie len preto, aby sme to mohli spolupracovať ďalej, ale aj preto, že pokiaľ chcú rozšírovať svoje produkty a riešenia, musia sa zameriavať na viac používateľov alebo  zjednodušiť už existujúcu aplikáciu.

Dobrý príklad sú  hodinky. Keďže dnes vieme platiť mobilom, pre Apple bolo prirodzené rozšíriť túto možnosť na hodinky a tým ešte viac zjednodušiť používateľský zážitok. To isté si uvedomujú aj klienti so svojimi aplikáciami. Pokiaľ to dáva zmysel, poďme to zjednodušiť.

Venujete sa aj deskopt appkám pre Mac?

Venujeme sa im skôr vo voľnom čase alebo v rámci tímu, keď chceme niečo otestovať. Teraz sme skúšali nejaké aplikácie, ktoré máme v AppStore spustiť na Macu, ako budú vyzerať vďaka Catalystu. Napríklad Bistro vyzerá veľmi dobre a natívne, mohla by to byť dobrá deskoptová aplikácia, ale momentálne okrem takéhoto hrania sa a skúšania máme aplikácie zamerané skôr na iOS a klienti si to veľmi nevyžadujú.

Aká je podľa teba budúcnosť telefónov? Myslíš že ich nahradia hologrami alebo smart glasses?

Určite nebudeme o 10-15 rokov fungovať tak, ako fungujeme teraz. Už len keď si zoberieme, že mať dotykový telefón, v ktorom je každá informácia dostupná do niekoľkých sekúnd bola kedysi utópia. V roku 2006 pozícia iOS Developer ani neexistovala. Rovnako ako vtedy som si nevedel predstaviť, ako budú vyzerať mobilné zariadenia, takisto si teraz neviem predstaviť ako budú vyzerať hodinky alebo okuliare. To, čo je momentálne v telefónoch sa bude presúvať do iných nám bližších zariadení, ktoré budeme nosiť priamo na sebe a nie vo vrecku. Veľkou otázkou však bude otázka osobných údajov a morálnych otázok ohľadom nahrávania niekoho, kto o tom ani nevie. A potom je tu ešte metaverse.

Celý video záznam nájdeš tu ⬇️

Maroš NovákHead of iOS