Szukasz najlepszych programistów iOS? Znajdziesz ich w kilka kliknięć.

React Native vs. Swift – co wybrać, budując aplikację na iOS?

24 sty 20239 min czytania

Miłosz Kaczorowski

Współzałożyciel Ideamotive. Doradca technologiczny i konsultant programistyczny.

react native vs swift

React Native i Swift to stosunkowo nowe technologie wspierające tworzenie aplikacji mobilnych na urządzenia z iOS. React Native jest frameworkiem dla języka JavaScript, a Swift zupełnie nowym językiem programowania. Którą z nich wybrać, myśląc o budowie nowej aplikacji na iOS?

 

W tekście znajdziesz:

  1. Czym jest Swift?
  2. Czym jest React Native?
  3. Po co w ogóle je porównywać?
  4. Porównanie
  5. Kilka słów o Fortranie i historii informatyki (serio!)

iOS w liczbach

iPhone to bez wątpienia coś więcej niż urządzenie – to zjawisko kulturowe i społeczne, które napędziło rewolucję smartfonową rozpoczętą premierą pierwszego modelu w czerwcu 2007. Od tego czasu popularność urządzenia poszybowała w górę, a marka osiągnęła imponujący 15,2-procentowy udział w globalnej sprzedaży smartfonów. Robi to szczególnie duże wrażenie w kontekście – Apple jest marką premium, a te dane obejmują także marki no-name i budżetowe, sprzedawane na rynkach wschodzących.

 

Urządzenia z iOS cieszą się największą popularnością w silnych gospodarkach USA, Kanady, Skandynawii i Australii. 

  • Z iPhone’a korzysta obecnie ponad miliard konsumentów.
  • Od premiery sprzedano ponad 1,9 miliarda iPhone’ów.
  • W 2021 roku Apple dostarczyło 206,1 miliona iPhone’ów.
  • iPhone’y odpowiadają za 65% sprzedaży smartfonów w USA.
  • 6 z 10 najlepiej sprzedających się modeli smartfonów w styczniu 2021 roku pochodziło od Apple.

Nic więc dziwnego, że Apple jest wystarczająco silne, by narzucać własne frameworki i języki programowania – a Swift jest właśnie tego efektem.

Czym jest Swift?

Swift to nowoczesny, wieloparadygmatowy język programowania ogólnego przeznaczenia, zaprojektowany przez Apple do budowy urządzeń z iOS i całego powiązanego ekosystemu. Aplikacje można projektować tak, by działały również na macOS (komputery Apple), watchOS (AppleWatch), tvOS (odtwarzacz multimedialny Apple TV) oraz – co może nieco zaskakiwać – na z/OS, który napędza komputery mainframe IBM.

 

Język jest obecnie dystrybuowany na licencji Apache, dzięki czemu może z niego korzystać cała społeczność. To stosunkowo nowy projekt, uruchomiony w czerwcu 2014 roku, siedem lat po premierze pierwszego iPhone’a.  

Czym jest React Native?

React Native to wspierany przez Facebooka framework do budowania aplikacji mobilnych niezależnych od urządzenia. W przeciwieństwie do aplikacji natywnych, które dla każdej platformy używają innego języka programowania, React Native opiera się na JavaScript i pozwala współdzielić kod między różnymi platformami, w tym Androidem, iOS-em i aplikacjami webowymi. Nawet 70% kodu może być współdzielone między aplikacjami, co znacząco skraca czas pracy przy tworzeniu aplikacji wieloplatformowych.

 

React Native to szeroko stosowana i ugruntowana technologia, którą wykorzystują m.in. Shopify, aplikacje Facebooka i Walmartu.

 

React Native vs. Swift – dlaczego w ogóle je porównywać?

Aplikacje mobilne przestają być zwykłym narzędziem do rozwiązania problemu. Coraz bardziej chodzi w nich o styl życia i budowanie więzi z użytkownikami – jeśli mają zainstalowaną aplikację, marka jest stale w ich kieszeni albo pod ręką. Według danych IDC 80% właścicieli smartfonów sięga po telefon nie później niż 15 minut po przebudzeniu – czyli zanim jeszcze umyją zęby. Przy takich liczbach posiadanie aplikacji to konieczność.

 

Budowa aplikacji to jednak koszt – czasem ogromny, gdy mowa o nowoczesnym, wieloplatformowym tworzeniu aplikacji mobilnych. Cięcie kosztów bez utraty jakości może być dla firm sporą korzyścią. Co więcej, tworząc aplikacje, firmy muszą odpowiedzieć na potrzeby zarówno urządzeń z iPhone’em, jak i tych z Androidem, co w praktyce oznacza przygotowanie dwóch osobnych programów robiących to samo – najbardziej pracochłonnej formy wieloplatformowego tworzenia aplikacji mobilnych.  

 

Optymalizacja może jednak wiązać się z kosztami, których niełatwo zaakceptować. Dlatego porównanie możliwości React Native i Swifta ma sens.

Co wziąć pod uwagę?

Stworzenie wyróżniającej się aplikacji to suma wielu czynników, ale kilka wskaźników ma największe znaczenie. Zaczynamy porównanie React Native vs. Swift!

 

(Ale najpierw wersja TL;DR 😉) 

 

Tabela 1 - podsumowanie najlepszych alternatyw dla React Native w tworzeniu aplikacji mobilnych-2

React Native vs Swift – porównanie platform

1. Interfejs użytkownika


Swift, jako natywny język iOS zaprojektowany przez Apple do zasilania aplikacji, nie ma oczywiście żadnych problemów z wpasowaniem się w design iOS i wykorzystaniem wszystkich zasad UX. Z drugiej strony budowanie natywnych aplikacji w Swifcie to w praktyce kodowanie od zera. Każdy element trzeba więc dopracować osobno.

 

React Native z kolei używa JavaScriptu jako silnika działającego w tle i wykorzystuje wewnętrzne API do uruchamiania natywnych elementów. Dzięki temu interfejs użytkownika jest nie do odróżnienia od natywnego, a przy tym łatwiejszy do zakodowania. Co więcej, dzięki webowemu rodowodowi JavaScriptu aplikacje w React Native nie mają problemu z wyświetlaniem się na ekranach różnej wielkości – a to może mieć znaczenie, gdy budujesz aplikację jednocześnie na iPhone’a i iPada.

 

Zwycięzca: React Native

2. Szybkość kodowania

Swift jest, cóż… swift (szybki), jeśli chodzi o kodowanie – język zdjął z siebie balast używanego wcześniej Objective-C, upraszczając pracę i pozbywając się jego wad. To wygodny sposób na zbudowanie natywnej aplikacji iOS.

 

Z drugiej strony React Native to framework dla JavaScriptu, czyli prostego, a zarazem potężnego konia roboczego aplikacji webowych. Języka łatwo się nauczyć, a od 1995 roku, gdy go wprowadzono, powstało mnóstwo narzędzi wspierających.

 

Sytuacja zmienia się, gdy przychodzi zbudować aplikację na Androida. W React Native może to być (do pewnego stopnia) nawet zwykłe kopiuj-wklej. Jeśli aplikację napisano w Swifcie, wszystko zaczyna się od nowa.

 

Zwycięzca: React Native

3. Wydajność

Intuicja podpowiada, że aplikacja natywna powinna działać wydajniej niż ta oparta na frameworku. Nie jest to jednak takie proste.

 

Parametry wydajności Swifta i React Native policzyliśmy na podstawie zużycia pamięci oraz obciążenia CPU i GPU w aplikacjach iOS zbudowanych w Swifcie i React Native. 

 

Mierząc wydajność w różnych scenariuszach mocno obciążających CPU i grafikę, takich jak przewijanie, zauważyliśmy, co następuje:

 

 

Różne testy dostępne w sieci pokazują, że przy porównaniu dwóch identycznych aplikacji wykonujących te same czynności różnice zależą od zadania. React Native wypada nieco lepiej w optymalizacji zużycia CPU, ale efekty graficzne bywają dla frameworka trudniejsze. Żeby sobie z tym poradzić, React Native pozwala programistom osadzić natywny kod w aplikacji, tworząc kodową chimerę korzystającą z różnych narzędzi i zasobów do różnych zadań.

 

Sam fakt, że różnice nie są duże, to świetne świadectwo dla React Native. Z punktu widzenia wydajności możemy więc podsumować, że React Native jest najlepszym wyborem do tworzenia własnych aplikacji iOS.

 

Zwycięzca: React Native

4. Społeczność i wsparcie

JavaScript jest obecnie jednym z najpopularniejszych języków programowania, używanym w tworzeniu aplikacji webowych i hybrydowych aplikacji mobilnych. Co więcej – szósty rok z rzędu pozostaje najpopularniejszym językiem programowania i jest używany na ponad 97,8% stron internetowych.  

Trudno podważyć pozycję JavaScriptu, gdy startuje się w 2014 roku – nawet mając za plecami Apple.

 

Z drugiej strony mniejsza społeczność oznacza znacznie mniejszy zapas treści niskiej jakości. Gdy szukasz czegokolwiek o JavaScripcie w internecie, dostajesz niezliczone odpowiedzi powiązane z mnóstwem problemów tylko luźno związanych z tym, który chcesz rozwiązać. W praktyce więc, mimo ogromnej społeczności programistów JavaScriptu, znalezienie odpowiedzi bywa jak szukanie igły w stogu siana. 

 

Wynika to również z wszechobecności i wszechstronności JavaScriptu. Języka używa się do rozwiązywania wielu typów problemów – od web developmentu, przez tworzenie aplikacji mobilnych, po uczenie maszynowe. Tak, istnieją frameworki łączące sieci neuronowe i javascript i są czymś znacznie więcej niż ciekawostką czy zabawką. 

 

Zupełnie inaczej jest ze Swiftem – związane z nim problemy dotyczą tylko jednego rodzaju programowania: tworzenia aplikacji iOS. Klasy problemów są więc wąskie i jeśli nie szukasz rozwiązania jakiegoś wyjątkowo wyrafinowanego, nigdy wcześniej niespotykanego wyzwania, znalezienie odpowiedzi albo zapytanie o nią społeczności bywa znacznie łatwiejsze. 

 

Większa społeczność potrafi więc czasem wprowadzać więcej zamieszania niż realnej korzyści. 

 

Zwycięzca: React Native

5. Stabilność

React Native, choć napędza go jeden z najbardziej uznanych języków programowania, nie tworzy naprawdę natywnej aplikacji. Jego działanie polega na wykorzystaniu wewnętrznych API i bibliotek, żeby aplikacja działała. Chodzi więc o dodanie pośrednika między kodem a platformą.

 

Swift z kolei tworzy aplikację natywną, która może wykorzystać wszystkie możliwości platformy. Jak wspomnieliśmy wyżej, Swift radzi sobie lepiej z efektami graficznymi i zadaniami obciążającymi obliczeniowo. Jeśli więc chodzi o wyciśnięcie z platformy wszystkiego, Swift może być lepszym wyborem.

 

Czy jednak każda aplikacja wyciska z iPhone’a wszystko? I ilu programistów Swifta ma dość umiejętności, by zbudować aplikację zoptymalizowaną na tyle, żeby działała stabilniej niż ta w React Native?

 

Zwycięzca: Swift

6. Dokumentacja

Zarówno React Native, jak i Swift są wspierane i rozwijane przez technologicznych gigantów. React Native to projekt wspierany przez Facebooka, a Swift pochodzi od Apple. Oba są więc dobrze udokumentowane i uporządkowane. Obie technologie dostarczają standardów komentowania kodu w sposób, który łatwo przekłada się na dokumentację, co znacząco skraca potrzebny czas. Konkretnie:

Poza dokumentacją dostarczaną przez właściciela projektu jest jeszcze inny aspekt realizacji projektu IT – łatwość i automatyzacja dokumentowania napisanego kodu. Krąży (niezbyt) żartobliwe stwierdzenie o konieczności pisania komentarzy i rzetelnej dokumentacji każdego kodu: 

Każdy własny kod, do którego nie zaglądałeś od sześciu miesięcy lub dłużej, równie dobrze mógłby być napisany przez kogoś innego.

– prawo Eaglesona

W praktyce więc – niezależnie od tego, jak genialny jest programista – każdy słabo udokumentowany kod na pierwszy rzut oka wygląda jak spaghetti. Funkcje automatycznej dokumentacji – i te ułatwiające dodawanie komentarzy, i te eksportujące gotowe dokumenty – potrafią oszczędzić mnóstwo czasu. 

Pod tym względem React Native ma znacznie bardziej zaawansowane narzędzia do automatyzacji dokumentacji, a nawet do wspierania dyskusji między programistami w trakcie prac. 

 

Z tej perspektywy przewaga jest po stronie React Native.  

 

Zwycięzca: React Native

7. Dojrzałość platformy

Oba projekty są stosunkowo nowe – Swift wystartował w 2014 roku, a React Native w 2015 (jako bezpośredni potomek React.js, używanego wewnątrz Facebooka od 2011 roku i udostępnionego jako open source w 2013). To technologie wschodzące, ale jest między nimi kilka istotnych różnic.

 

Swift to nowy język programowania pomyślany jako kolejny krok po Objective-C. Projektowanie języka programowania zawsze jest procesem najeżonym trudnościami, bo język stanowi kręgosłup każdego oprogramowania.

React Native jest natomiast nową technologią napędzaną przez tę ugruntowaną – JavaScript. Łatwiej więc sprawdzić kod i wychwycić problemy z samym frameworkiem, a wyłapywanie błędów jest prostsze.

 

Zwycięzca: React Native

8. Koszt wytworzenia 


Wreszcie koszt wytworzenia to jeden z kluczowych aspektów, które trzeba wziąć pod… no właśnie, uwagę, gdy myśli się o wyborze konkretnej technologii do realizacji projektu. Większość wyzwań w tym obszarze da się opisać prostym wykresem, na którym rosnąca jakość idzie w parze z rosnącą ceną. Niekoniecznie jest to jednak prawda – zwłaszcza w tworzeniu aplikacji iOS. 

 

Według różnych szacunków, nie ma istotnej różnicy w stawkach godzinowych programistów, przy nieco wyższych zarobkach zespołów pracujących w Swifcie: 

 

Tabela 1 - podsumowanie najlepszych alternatyw dla React Native w tworzeniu aplikacji mobilnych-1-1

Na poziomie jednego programisty różnica nie jest duża, ale kumuluje się przy dużym projekcie albo licznym zespole. 

 

Myśląc więc o koszcie wytworzenia liczonym w twardej walucie, React Native wypada nieco taniej, zachowując wszystkie swoje zalety.

 

Zwycięzca: React Native

9. Dostępność programistów

Powyższe liczby mogą zaskakiwać – dlaczego, na Linusa Torvaldsa, programista dowożący aplikację tylko na jeden mobilny system operacyjny zarabia lepiej niż ktoś, czyj kod działa jednocześnie na obu wiodących platformach, skracając czas i koszt prac o połowę. 

 

Powód wiąże się z dostępnością specjalistów na rynku. JavaScript jest jednym z najpopularniejszych języków. Jak wynika z badania przeprowadzonego przez Stack Overflow, 65% użytkowników wybrałoby JavaScript jako swój język, podczas gdy Swift ledwo wchodzi do pierwszej dwudziestki. 

 

W praktyce więc programistów JavaScriptu jest w czym wybierać, a biegłych w Swifcie jest znacznie mniej. Zbudowanie zespołu javascriptowców jest zdecydowanie łatwiejsze. 

 

Zwycięzca: React Native

Przykłady aplikacji

React Native vs. Swift –  Mockup Facebook

React Native vs. Swift – mockup LinkedIn

Dobrze, mamy już za sobą całą techniczną magię i przychodzi kluczowe pytanie: jaka jest realna różnica między tymi dwoma językami i czy da się ją w ogóle zauważyć? Najlepszy test można przeprowadzić na dwóch podobnych, a zarazem zupełnie różnych aplikacjach: Facebooku na iOS i LinkedInie na iOS. 

 

Obie to naszpikowane danymi aplikacje społecznościowe z feedem do wyświetlenia, wiadomościami do wymiany i reklamami do pokazania. Obie dostarczają też sporo treści i muszą być zoptymalizowane, żeby dobrze działać i wykorzystywać dane użytkownika – w końcu aplikacja mobilna to jeden z najlepszych sposobów na zdobycie danych, które firmie trudno zebrać inaczej, takich jak lokalizacja czy wzorce zachowań. 

 

Kluczowe różnice widać w dwóch istotnych obszarach: wydajności i funkcjach. Napisana w Swifcie aplikacja LinkedIn wydaje się ociężała w porównaniu z facebookową, mimo stosunkowo mniejszej ilości danych do przetworzenia i przeanalizowania. Wydaje się też mniej intuicyjna, ale to kwestia UX i designu, a nie technologii użytej do zbudowania produktu. 

 

Ostatecznie wygląda na to, że technologia oparta na javascripcie daje znacznie lepszą wydajność niż język natywny, gdy chodzi o dostarczanie bogatych treści. 

Podsumowanie – żywotność języka programowania

Programowanie i biznes IT opierają się na nieco schizofrenicznym paradygmacie budowania nowych rzeczy starymi narzędziami. Mimo wysiłków technologicznych gigantów i nowych języków programowania uznawanych za cudowne dzieci, leciwe, a czasem wręcz zabytkowe rozwiązania nie schodzą z pola. A przynajmniej nie robią tego łatwo.

 

Skrajnym przykładem żywotności języka programowania może być Fortran. Powstał w 1957 roku, cztery lata przed lotem Jurija Gagarina w kosmos i dziewięć lat przed lądowaniem na Księżycu.

Aha, i 28 lat przed pierwszą edycją systemu Windows. A mimo to Fortran wciąż jest w użyciu, zwłaszcza w dziedzinach wymagających ciężkich obliczeń, takich jak prognozowanie pogody i astronomia.

 

Podobny los wydaje się dzielić JavaScript, który napędza współczesny internet, choć ma już ponad 20 lat. Dzięki React Native ma szansę służyć dalej jako koń roboczy urządzeń mobilnych – zwłaszcza biorąc pod uwagę dynamikę firm rozwijających React Native.

 

Przygotowanie aplikacji w Swifcie może dać pewien wzrost wydajności i pozwala programiście wykorzystać wszystkie możliwości iOS. W większości przypadków zysk okazuje się jednak niewielki, gdy porównać możliwości React Native i Swifta.

 

Nie wspominając o tym, że jest jeszcze cały świat użytkowników Androida czekających na natywne aplikacje.

 

Ale hej, nie czytasz tego wpisu przypadkiem – z jakiegoś powodu szukałeś porównania React Native i Swifta, a nie React Native vs Ionic. Nawet jeśli nasze porównanie pokazuje, że React Native jest lepszym wyborem, nie wiemy nic o wyzwaniu, przed którym stoi Twój biznes i które chcesz rozwiązać aplikacją. A kontekst potrafi wszystko zmienić – czasem to detale sprawiają, że wybór jednej technologii zamiast drugiej staje się koniecznością, nawet jeśli na pierwszy rzut oka są podobne albo ta druga wydaje się lepsza. 

 

W technologii nie chodzi o obsesję na punkcie jednego rozwiązania – chodzi o wybieranie najlepszych kąsków i budowanie czegoś, co wyprzedza resztę rynku. Dlatego trzymamy w gotowości zespół wszechstronnych i doświadczonych ekspertów, którzy potrafią myśleć nieszablonowo. Jeśli więc zastanawiasz się, czy React Native czy Swift lepiej pasuje do Twojego projektu – może po prostu napisz do nas, a sprawdzimy to razem? A może warto spojrzeć w stronę Fluttera i Kotlina?

 

A może ostatecznie najlepszym wyborem jest Fortran, prawda? 

Miłosz Kaczorowski

Współzałożyciel Ideamotive. Świetnie zna Ruby on Rails, JavaScript i administrację systemami Linux. Doświadczony we wdrażaniu skutecznych aplikacji webowych.

Zobacz wszystkie wpisy autora
React Native 2022

Wybór React Native do Twojego mobilnego stosu technologicznego w 2022

Kompletny przewodnik dla CEO i product ownerów

Czytaj teraz
home-05
Szukasz utalentowanych programistów, którzy zbudują lub przeskalują Twój produkt mobilny?
Nasi sprawdzeni eksperci są gotowi dołączyć do Twojego zespołu.
Zatrudnij programistów mobilnych