Zpět

Hello SwiftUI!

9 minut čtení 12. 01. 2021

Hello SwiftUI!

SwiftUI jako moderní framework nabývá na své oblíbenosti! Stále více a více programátorů přichází na chuť tomuto novému „konceptu“ či způsobu, jak implementovat iOS aplikace. Jeho užití vede také jednoznačně k jednoduššímu vývoji multiplatformních aplikací v rámci Apple ekosystému. Pokud jste se však se SwiftUI doposud nesetkali nebo neměli možnost jej aplikovat ve vývoji, napadá Vás zajisté pár základních otázek.

Například:
Je tento framework připraven pro produkční prostředí?
Lze pomocí něj vytvořit komplexní aplikaci?
Lze ho vhodně zapojit do aktuálního procesu vývoje s UIKit frameworkem?

Vyhledat odpovědi na internetu by Vám nezabralo nejspíše více jak 10 minut. Odpovědi na ně jsou však povětšinou skeptické a neurčité. Abych Vám těch zmíněných 10 minut hledání ušetřil, odpovím Vám na tyto otázky jasně a stručně:

„Až na drobné detaily ano.“
„Lze ho využít spíše za účelem jednoduchého zobrazení dat, např. ve formulářových aplikacích.“
„Vhodný způsob určitě existuje. S trochou snahy a trpělivosti.“

Pojďme se nyní ale podívat na všechny tyto rádoby nedostatky z trochu jiné strany, a podpořme je neoddiskutovatelnými plusy, kterými SwitUI bezpochyby disponuje. Protože, jak už jedno známé přísloví říká: „Kdo chce, hledá způsoby. Kdo nechce, hledá důvody.“ A my budeme společně hledat právě ty „způsoby“.

Seznam „problémů“ či nedostatků, a jejich (někdy možná úsměvné) odůvodnění, příčinu a řešení uvádím v následujícím výčtu: 

1. Zpětná kompatibilita pro zařízení s operačním systémem starším než iOS 13

  • K 17. červnu 2020 více než 92% apple zařízení, zakoupených v posledních 4 letech, mají již nainstalovaný iOS 13, u iPadů pak až 93%.
  • Apple se na každé WWDC chlubí touto statistikou. Vývojáři této platformy pak nemusí podporovat verze systému starší více než 2 roky.
  • Pravděpodobnost, že by aplikace neměla úspěch z důvodu nepodporující verze systému, je tedy velmi malá až mizivá.

2. Občasné problémy s live preview – hlavním lákadlem SwiftUI

  • V dnešní uspěchané době, kdy se počítá každá minuta, jsme možná až moc zhýčkaní nástroji jako je Xcode. Porovnejme však jeho chybovost s ostatními nástroji. Jistě mu pak odpustíme nějaký jeho pád či dlouhou indexaci. Sáhněme si každý do svého svědomí a přiznejme si, že ne vždy a ne každý náš kód funguje napoprvé a bez chyby. Proto dovolme i nástroji a jeho vývojářům udělat chybu, nenabídnout automatické doplnění metody nebo prodlení u live preview.
  • Zmiňované problémy se objevovali ve větší míře v prvních beta verzích Xcode. U současné verze jsem nezaznamenal výraznější problém, pouze snad při špatné syntaxi kódu. 

3. Obtížnější implementace vlastního vzhledu komponent

  • Tato komplikace se nevyskytuje pouze u SwiftUI, ale také u standardních komponent v UIKit. Každý chce mít grafiku aplikace na první pohled všeříkající o jeho firmě či brandu. Někdy to však může razantně uškodit elegantnosti uživatelského rozhraní. Je to možná příležitost zamyslet se nad změnou? Co myslíte?
  • Z vlastní zkušenosti je ve SwiftUI implementace některých nestandardních UI komponent o hodně jednodušší než v UIKitu. Příkladem může být třeba implementace obrazovky pro přihlášení uživatele.

4. Nejednoznačný přístup k architektuře aplikace

  • Zde záleží na pohledu každého vývojáře a architekta systému či aplikace. Na světě již existují určité vzory architektury, které vrstvu UI oddělují od bussiness logiky. Stačí tak vybrat ty správné a uplatnit je. Avšak, kdybychom pořád jen používali již vymyšlené vzory a nepřidali trochu vlastní tvorby, existovaly by vlastně všechny ty návrhové vzory, knihovny a další nástroje? Myslím, že ne. Určitě je zde tedy i možnost seberealizace, a záleží pak na přístupu řešitele k tomuto „problému“. 

5. Nedostatečná dokumentace

  • Dalo by se částečně i souhlasit, ale nemůžeme pořád jen přijímat informace jako na zlatém podnose. To, že řešení nenajdeme na prvním odkazu StackOverflow, nemůžeme brát jako nedostatek či problém. Občas je nutné věnovat trochu více svého času i třeba banální věci, jako je stylování labelu. Kompenzací Vám může poté být dobrý pocit z toho, že jste daný problém vyřešili sami, bez potřeby kopírovat již hotové, navržené řešení.

6. Chybějící komponenty

  • Určitě není každá komponenta z UIKit převedena do SwiftUI (možná to ani nebylo záměrem). Způsob tvorby UI komponent je trochu jiný a ve značné míře i o dost jednodušší. Není tedy problém ukázat své vývojářské kvality, potřebnou komponentu naimplementovat a ještě ji nabídnout ostatním.

7. Nemožná či obtížná migrace UIKit <-> SwiftUI

  • Nemusíme být tolik kritičtí v otázce migrace z UIKit na SwiftUI nebo naopak při použití SwiftUI v kódu složeného primárně z UIKit komponent. Jelikož Apple rozhodně nezapomněl na možnosti migrace a přechodu na novější technologii. Použití aktuálního kódu v kombinaci se SwiftUI je určitě možné např. pomocí  UIHostingController, v ideálním případě s minimálním zásahem do již existujícího kódu. Navíc použitím knihovny SwiftUI – Introspect lze přistoupit k SwiftUI View jako UIKit/Appkit elementu.

8. UI chyby nebo špatně čitelné složení view

  • Těžko hledat na světě framework, který neobsahuje žádnou chybu. A výjimkou není ani SwiftUI. Apple využívá optimalizaci hierarchie view. Efektivnější výsledná skladba view si však bere svou daň nejednoznačností v hierarchii view.
  • Správnou vlastností každého vývojáře je řešení problémů a proto nečekejme, až přijde někdo jiný a daný problém vyřeší.

A konečně také slíbené přednosti SwiftUI!
Po všech těch zdánlivě neřešitelných problémech zakončeme dnešní zamyšlení optimisticky – neodmyslitelnou výhodou či předností SwiftUI je jeho přehlednost, jednoduchost a strmá učební křivka. Pro konzervativní vývojáře ale nejspíš dosti slabý argument. Tak dále…

V porovnání s použitím storyboardu je vývojáři určitě blíže nový způsob definice layoutu (minimálně jazykem jeho definice – swift namísto XML). Někdy těžce dosažitelný autolayout najednou není potřeba. Základem SwiftUI je Stack podobající se známému UIStackViewSwiftUI přidává třetí typ mezi stacky, a to ZStack.  Dále již zmiňované live preview. S ním není nutné zdlouhavé testování každé jednotlivé úpravy. Odpadá tak opakované buildování a testování aplikace na nekonečném množství simulátorů.

Závěr

Berme dnešní shrnutí nedostatků a jejich řešení především s nadhledem. Problematika využití SwiftUI určitě zaslouží zamyšlení, není však nutné se jej obávat. Co SwiftUI nemůžeme jednoznačně upřít je však to, že přináší zlom v možnosti definovat UI.

Apple, jak už tomu někdy bývá, podmínil jeho použitím implementaci nových widgetů. Nedává nám tak jinou možnost, než pro tyto účely použít SwiftUI dokonce i v produkčním řešení. A tak určitě sami sebe nebo svého konzervativního šéfa přesvědčíte, že SwiftUI určitě stojí za to! 

Věřme, že v následujících letech budou všechny aktuálně „nepřekonatelné překážky“ v použití SwiftUI odstraněny. A za pár let si snad ani nevzpomeneme, jaké je to definovat UI ve storyboardu nebo mergovat xml soubor!

A rada na závěr: zkuste naimplementovat jednoduchou přihlašovací obrazovku pomocí SwiftUI a UIKit. Ale pozor, ať se nezamilujete, pak už není cesty zpět!

Máme volnou židli, ozvi se nám!

Kariéra v B2A