17. Jul 2023Business

Nativní vs. cross-platform: Jak si vybrat správný způsob vývoje mobilních aplikací?

Ve světě mobilních aplikací probíhá „věčná“ debata o ideálním způsobu vývoje a tuto otázku často dostáváme i od našich klientů. V tomto článku se dozvíte výhody a nevýhody jednotlivých možností vývoje a také se podíváme na technické a netechnické argumenty z pohledu našich obchodních analytiků, architektů řešení a vývojářů, kteří mají zkušenosti s jazyky Kotlin, Swift, Flutter a React Native.

GoodRequestLead, Build, Unite

Jaké jsou možnosti vývoje mobilních aplikací?

Nativní vývoj

Nativní aplikace jsou vyvíjeny pro konkrétní platformu, například iOS nebo Android. Programovací jazyk použitý k vytvoření těchto aplikací je kompatibilní s operačním systémem. Díky používání jazyků specifických pro danou platformu mohou vývojáři lépe využívat nativní funkce platformy. Aplikace vytvořená pro Android tedy nebude fungovat na zařízeních Apple.

  • 🤖 Android: Kotlin, Java
    Vývojové prostředí: Android Studio
  • 🍏 iOS: Swift, Objective-C
    Vývojové prostředí: Xcode

Cross-platform

Cross-platformový přístup k vývoji mobilních aplikací umožňuje vytvořit jedinou aplikaci, která bude fungovat stejně na více operačních systémech. To znamená, že nemusíte vytvářet samostatné verze pro každou platformu zvlášť.

  • Cross-platform: Ionic, React Native, Flutter, Cordova, KMM

Proč preferovat cross-platform vývoj?

Cross-platform frameworky jako Flutter, React Native a KMM prošly významným vývojem:

  • Flutter od verze 3.x přináší lepší podporu nativních funkcí, včetně přístupnosti a biometrie.
  • React Native využívá nativní komponenty, čímž zlepšuje UX a snižuje rozdíly oproti nativním aplikacím.
  • KMM, technologie od společnosti JetBrains, která umožňuje sdílet společný kód (obchodní logika, síťová komunikace, datové vrstvy) mezi systémy Android a iOS, přičemž UI se vyvíjí nativně pro každou platformu s možností používat Android Studio a Xcode.
  • HW podpora se zlepšila, ale nativní implementace může být stále potřebná pro velmi specifické případy.
  • Podpora těchto frameworků je aktivní a probíhají pravidelné aktualizace.

Proč preferovat nativní vývoj?‍

Nativnímu vývoji se věnujeme od samého počátku a za tu dobu jsme se setkali s mnoha implementacemi nativních knihoven, prací s rozšířenou realitou, kamerou, videem, bluetoothem, skenerem NFC, zabezpečením, widgety a mnoha dalšími možnostmi, které nabízejí platformy iOS a Android. Naše odborné znalosti v oblasti nativního vývoje se proto týkají nejen programovacích jazyků, ale také integrace hardwaru a softwaru třetích stran.

SwiftUI* a jeho Previews v nativním vývoji výrazně zjednodušuje a urychluje vývoj UI* ve srovnání s UIKit*. Funkce Preview v Xcode umožňuje vývojářům okamžitě vidět výsledek změn uživatelského rozhraní, aniž by museli aplikaci spouštět na simulátoru nebo fyzickém zařízení, což také výrazně zvyšuje produktivitu.

  • *UI - uživatelské rozhraní.
  • *SwiftUI - deklarativní framework od společnosti Apple, který se v posledních letech stal standardem pro vytváření uživatelských rozhraní.
  • *UIKit - starší framework pro vývoj aplikací pro iOS, vývoj v něm vyžaduje více kódu a ruční správu.

Na straně systému Android nativní vývoj výrazně urychluje Jetpack Compose, což je deklarativní framework uživatelského rozhraní podobný SwiftUI. Jetpack Compose umožňuje rychlý vývoj moderních uživatelských rozhraní s podporou živých náhledů přímo v aplikaci Android Studio, což zvyšuje produktivitu a kvalitu uživatelského prostředí.

‍Téměř všechny známé a oblíbené aplikace, které používá velké množství uživatelů, jsou postaveny na nativních technologiích. Z hlediska obchodního modelu je důležitá „trvalost“ technologií. Cross-platformové technologie, jako je Flutter, se mění velmi dynamicky, zatímco React native nebo některé knihovny třetích stran stagnují, což může při sestavování aplikace vést k nekompatibilitě. Všechny tyto faktory mohou vést k různým problémům, jako je zpoždění vývoje, nedostupnost vývojářů nebo používání zastaralých technologií.

Uvědomujeme si však, že v některých obchodních případech může být vývoj cross-platform správnou cestou. Důležité je rozhodnout se na základě klíčových parametrů vyplývajících z vaší obchodní strategie. Proto jsme pro vás připravili klíčové oblasti designu a vývoje včetně výhod a rizik jednotlivých forem vývoje.

Jaké parametry je třeba zohlednit při výběru přistupu k vývoji mobilní aplikace?

UX & UI – Native stále mírně vpředu, cross-platform výrazně pokročil

Uživatelé hledají aplikace, které vypadají a působí, jako by do jejich zařízení patřily. Nativní aplikace pro iOS a Android jsou vytvořeny pomocí komponent uživatelského rozhraní, na které jsou uživatelé zvyklí z jiných nativních aplikací, což vytváří přirozenou a zároveň výjimečnou uživatelskou zkušenost.

Cross-platform frameworky však za poslední roky velmi pokročily. React Native výrazně snížil rozdíl mezi nativním a cross-platform UI/UX. Používá nativní komponenty, je lépe škálovatelný a podporuje většinu moderních funkcí přístupnosti (zvětšení písma nebo voice-over). Flutter, stejně jako React Native, podporuje přístupnost, i když některé funkce mohou vyžadovat dodatečnou konfiguraci. Podpora zvětšení písma, vysokého kontrastu nebo hlasového ovládání je již standardem.

Příklad rozdílu v UI aplikácí pro Android a iOS

Rozdíly v look and feel se zmenšují. Pro aplikace, kde je klíčový zážitek z UI/UX, je nativní vývoj stále mírnou výhodou.

Offline mode – Remíza

Přechod do režimu offline může být velkou konkurenční výhodou. I když jsou uživatelé s vaší aplikací spokojeni, nedostatek offline funkcí je může donutit hledat alternativy. Offline funkce jsou důležité například v oblasti fintechu, zdravotnictví nebo u navigací. Nativní i cross-platform aplikace umožňují práci v režimu offline.

Specifický HW – Native

Využití cross-platform vývoje může vést k omezené podpoře a zvyšuje pravděpodobnost nedostatků při integraci specifického hardwaru. Pokud k němu potřebujeme přístup, nativní vývoj je rychlejší a jednodušší. Každá knihovna, aplikace nebo hardware má na prvním místě podporu pro nativní vývoj. To pomáhá zajistit bezproblémovou integraci nového produktu do stávající infrastruktury.

Výkon a rychlost aplikace – Native

‍Nativní aplikace iOS pracují s pamětí RAM mnohem efektivněji, takže aplikace reagují rychleji. Z technického hlediska Flutter používá Garbage collector a veškerý vývoj pro iOS je postaven na automatickém počítání referencí (ARC), které je mnohem efektivnější z hlediska paměti, takže nativní aplikace pro iOS využívají 1/3 paměti RAM ve srovnání s Flutterem. Potřeba další abstrakční vrstvy a procesu vykreslování cross-platformovou aplikaci zpomalují.

Problém se týká především všech frameworků, které používají bridge*, nebo běží výhradně ve WebView* (Ionic, Cordova). Aplikacím, které ke komunikaci s platformami používají bridge, je automaticky přiřazený bottleneck*, který je v mnoha případech velmi znatelný. Zároveň používají nativní komponenty, takže knihovny v těchto frameworcích mohou mít snadno různé verze nativních knihoven, což způsobuje obrovské konflikty v nativní části.

  • ‍*bridge – mechanismus, který umožňuje komunikaci a spolupráci různých programovacích jazyků nebo technologií. V tomto kontextu bridge spojuje dvě různé části aplikace a umožňuje jim sdílet data a funkce.
  • *WebView – komponenta používaná při vývoji mobilních aplikací k zobrazení webové stránky v aplikaci.
  • *bottleneck – zúžení nebo také součást, která omezuje rychlost a celkový výkon aplikace.

Použitá technologie má navíc velký vliv na velikost samotné aplikace. U aplikací pro iOS můžeme hovořit o 1/2 velikosti aplikace vytvořené ve Swiftu ve srovnání s Flutterem.

Náklady – Cross-platform

Cross-platform aplikace jsou skvělým způsobem, jak snížit náklady a zvýšit efektivitu, což je jistě jedna z hlavních předností, která stojí za zvážení. Vývoj nativních aplikací může být kvůli vývoji pro více platforem nákladný. V překladu to znamená, že budete potřebovat tým pro každou platformu – například jeden pro iOS a jeden pro Android. V tomto případě vám k vytvoření cross-platform aplikace stačí namísto dvou vývojářských týmů pouze jeden. ⚠️ Tento tým však bude muset mít zkušenosti s vývojem pro obě platformy.

Délka vývoje – Cross-platform

K vytvoření „základní“ verze aplikace, která funguje na více platformách, stačí jeden vývojový proces, takže můžete svou mobilní aplikaci uvést na trh rychleji. Je však důležité zmínit, že i když je samotný vývoj rychlejší, testování takových aplikací trvá stejně dlouho.

Hlavním problémem při vývoji a údržbě cross-platform aplikací je zastupitelnost lidí. Zejména u menších dodavatelů vývoje může odchod developera způsobit vážný problém.

Škálovatelnost – Native

Aplikace vytvořené v nativním prostředí jsou obvykle lépe škálovatelné díky flexibilitě správy zdrojů a mnoha dostupným nástrojům. Naopak u vývoje cross-platform jsou možnosti škálování značně omezené, zejména při práci s rozhraními třetích stran a periferiemi.

  • Push notifikace –⁠ a jejich chování po otevření, routing na různé obrazovky aplikace. Zpracování oznámení push v zařízení podléhá pravidlům dané platformy. V systému Android je nutné řešit zařazení přijatých notifikací do společných skupin nebo přiřazení důležitosti notifikace. To jsou jen příklady pravidel, která se s novými verzemi systémů Android a iOS mění a při splnění těchto podmínek pro cross-platform se vývoj komplikuje.
  • Reklamní modely –⁠ současným trendem na Googlu je prodej reklam pomocí Admobu, a to hlavně proto, že Google dokáže na své platformě cílit reklamy efektivně. Totéž ale neplatí pro systém iOS, který se v posledních verzích snaží uživatele co nejvíc anonymizovat, a tím bere prostor pro cílenou reklamu.
  • Integrace s periferiemi –⁠ Z technického hlediska žádná omezení pro nativní vývoj neexistují. U cross-platform vývoje mohou mít vývojáři potíže s přístupem k funkcím smartphonu, jako je mikrofon, fotoaparát, geolokace nebo bluetooth. Nativní vývoj zároveň umožňuje při zpracování videa nebo zvuku pracovat s vysokou frekvencí snímků.

Bezpečnost – Remíza

Bezpečnost je v digitálním světě dlouhodobě tématem číslo jedna a u vývojářů aplikací a podniků by tomu nemělo být jinak. U cross-platform aplikací založených na webových technologiích (HTML, CSS, JavaScript) je nutné důkladně zvážit bezpečnost. Mohou být náchylnější k útokům, jako jsou cross-site scripting nebo injekční útoky. Na druhou stranu, nativní aplikace mají lepší integraci s bezpečnostními prvky systému.

Naše zkušenosti

Náš tým se vývoji nativních aplikací věnuje od samého počátku. Za tu dobu jsme měli možnost pracovat na projektech, kde jsme se setkali s mnoha implementacemi nativních knihoven, prací s rozšířenou realitou, kamerou, videem, bluetoothem, skenerem NFC, zabezpečením, widgety a mnoha dalšími možnostmi, které platformy iOS a Android nabízí. Naše odborné znalosti v oblasti nativního vývoje se proto netýkají jen programovacích jazyků, ale i integrace mnoha hardwarových a softwarových zařízení třetích stran.

V naší praxi jsme se setkali s různými možnostmi Cross-platform vývoje, které jsme měli možnost vyzkoušet, ale nativní vývoj bohužel plně nahradit nedokázaly. Proto byla nutná i znalost nativních technologií.

‍Za zásadní považujeme také výše uvedené faktory, jako je udržitelnost, zastupitelnost vývojářů a dodavatelů, garantovaná podpora a kompatibilita, rozšiřitelnost na další zařízení, lepší výkon a škálovatelnost.

Tatra banka - Bankovní aplikace roku

‍Nativní vývoj mobilní aplikace pro iOS i Android nám umožňuje pravidelně přicházet s inovacemi při zachování výkonu aplikace, škálovatelnosti a nejlepšího možného mobilního zážitku, proto je mobilní bankovníctví Tatra banky považováno za nejinovativnější na slovenském trhu.

Nativní vývoj nám zároveň umožňuje snadné přihlašování do aplikace pomocí obličeje a otisku prstu díky integraci pokročilé biometrie od lídra na trhu Innovatrics. Komplexní balík technologií společnosti Innovatrics pro online autentizaci zahrnuje také detekci a autentizaci údajů z dokladů totožnosti, biometrii obličeje NIST FRVT či akreditovanou detekci živosti iBeta Level 2, která je účinnou součástí prevence zneužití identity, což je v odvětví fintechu nezbytné. Aplikaci lze samozřejmě přizpůsobit nejen pro iOS a Android, ale i pro různé velikosti obrazovky.

Benu - Inovace online lekárny

Cílem při vytváření online mobilní lékárny pro Benu bylo vytvořit co nejjednodušší a nejsrozumitelnější uživatelský zážitek a zároveň zachovat všechny funkce, které jsme s klientem zmapovali. Aplikace pro platformy Android a iOS tedy bylo nutné vytvořit nativně.

Hlavními výhodami použití nativního vývoje jsou v tomto případě vyšší bezpečnost aplikace, soulad s legislativou v oblasti farmacie, lepší uživatelská zkušenost a integrace nativních knihoven. Uživatel může například přidat recept prostřednictvím fotoaparátu, z fotografie nebo prostřednictvím SMS.

Která možnost je tedy z hlediska jednotlivých faktorů ideální?

Na základě čeho se rozhodnout?

Ačkoli rozhodně cross-platform aplikace nezavrhujeme, existuje řada situací, ve kterých je efektivnější zvážit tyto přístupy. Kdy tomu tak je?

Kdy upřednostnit cross-platform vývoj?

  • Pokud chcete rychle otestovat nápad nebo vytvořit MVP a co nejdříve vstoupit na trh s funkčním produktem.
  • Pokud potřebujete pokrýt více platforem s omezeným rozpočtem a snížit náklady na vývoj i údržbu.
  • Pokud aplikace nemá extrémně složité funkce, nároky na výkon nebo detailní nativní prvky UX.
  • Pokud očekáváte jednodušší údržbu a méně komplikovanou správu kódu v rámci jednoho týmu.
  • Pokud aplikace není klíčovým produktem vašeho podnikání, ale spíše doplňkem nebo rozšířením základních služeb.

Kdy upřednostnit nativní vývoj?

  • Když je aplikace samotným produktem nebo základem vašeho podnikání a její kvalita/UX/bezpečnost rozhodují o úspěchu.
  • Pokud v daném segmentu panuje silná konkurence a každý detail designu, výkonu nebo UX představuje konkurenční výhodu.
  • Když aplikace vyžaduje vysokou správu paměti, komplexní a specifická uživatelská rozhraní nebo animace.
  • Pokud potřebujete plný přístup k nativním funkcím operačního systému a specifickému hardwaru.
  • Pokud potřebujete maximalizovat bezpečnost a ochranu citlivých firemních a zákaznických dat.
  • Pokud je klíčové poskytnout komplexní a bezchybné uživatelské rozhraní, včetně offline režimu, který musí fungovat spolehlivě i bez připojení.
  • Pokud váš produkt vyžaduje rychlejší a jednodušší implementaci aktualizací nových komplexních funkcí.

Oba přístupy mají své výhody a omezení. Naším cílem je vytvářet kvalitní digitální produkty, které využívají silné stránky každé platformy, a proto volíme technologii podle konkrétních potřeb projektu.

GoodRequestLead, Build, Unite

Kontaktujte nás

Radi vám poradíme

Stále si nejste jisti, jakým směrem se s aplikací vydat? Kontaktujte nás ještě dnes a my vám pomůžeme zjistit, co je pro váš projekt ideální.