Mobilne Aplikacje z React
5 godz. 51 min · React Native · Full-stack i Programowanie
Piotr SzacińskiZarówno iOS jak i Android posiadają swoje natywne SDK, do obsługi którego musimy poznać nowe języki - Swift czy Kotlin, o Objective-C czy Javie nie wspominając. Z kolei React Native jest do tego świetną alternatywą, która pozwala tworzyć jeden kod na obie platformy. Dodatkowo - bazuje na najpopularniejszym frameworku webowym, co znacząco zmniejsza próg wejścia.
Tak samo jak "czysty" React, React Native opiera się na komponentach. Poznasz ich specyfikę i nauczysz się poprawnie budować UI aplikacji. Zrozumiesz też jak najwydajniej zarządzać skomplikowanym layoutem, takim jak długie listy, i jak to wszystko łatwo stylować.
Animacje to nie tylko efekty przyjemne dla oka - to przede wszystkim dobry UX, który pozwala użytkownikowi odnaleźć się w aplikacji i zrozumieć jej mechanikę. Podczas kursu poznasz wszystkie podstawowe metody i koncepcje tworzenia animacji oraz poznasz sposoby optymalizacji ich działania. Dodatkowo omówimy prawidłowe podejście do dużo bardziej skomplikowanych interaktywnych animacji, przedstawimy ciekawe biblioteki oraz best-practices.
Praktycznie każda aplikacja, niezależnie od tego, czy web, czy mobile, składa się z wielu widoków i ekranów. Zarządzanie ścieżkami, jakimi użytkownik może się poruszać, to jedna z najważniejszych rzeczy - a w tym kursie dowiesz się jakich narzędzi należy używać i jak łatwo obsługiwać zagnieżdżone ekrany.
Niewątpliwym atutem aplikacji jest to, że może praktycznie bez ograniczeń przechowywać content w urządzeniu telefonu, a przez to - dostarczać treści niezależnie od dostępności internetu. Omówimy różne koncepcje zapisywania danych oraz poznamy metody i narzędzia do ich wdrażania.
Przybliżymy ci proces wypuszczania aplikacji "w świat" oraz przedstawimy narzędzia, z których sam autor korzysta do ułatwienia tego procesu.
Kurs jest dla każdego kto zna podstawy JavaScript oraz React i chciałby się rozwijać i tworzyć mega ciekawe projekty, które mogą używać aparatu czy sensorów smartfona.
0.62.2+
Witam cię w ostatniej lekcji nie będziemy tu już za bardzo kodzić tylko
właśnie chciałem porozmawiać na ten temat co zrobić kiedy już
skończymy nasz development okej tutaj sobie wszystko fajnie testujemy sprawdzamy że
działa coś zmieniamy przebudowujemy nasz projekt tak za
każdym razem sobie możemy tutaj naszą aplikację tutaj coś
musiałem się rozłączyć przebudować już będzie potrzebny
za bardzo oj tak
jest no i to jest okej tylko te aplikacje działają tak
długo jak działa nasz serwer na początku we wprowadzeniu opowiadałem trochę jak
działa react native to znaczy że ten nasz kod który jest zbundle'owany jest
następnie nam serwowany i w tym momencie jest on serwowany z naszego serwera
metro który stoi sobie u nas lokalnie no i te aplikacje się z nim łączą i
w momencie kiedy chcielibyśmy coś zmienić w aplikacji to
ten serwer wysyła powiedzmy nowe informacje naszej aplikacji dzięki temu widzimy
te zmiany które są z drugiej strony jeśli na przykład właśnie chcemy odświeżyć przeładować
całą aplikację to przeładujemy w ten sposób pamiętajmy jednak że my przeładowujemy
tylko naszego bundlera to znaczy zauważcie w momencie kiedy wpisywałem yarn na iOS
albo yarn android albo yarn start to wtedy dopiero o startowałem cały
proces budowania aplikacji natywnej tak czyli budowania aplikacji która
to ładowała naszego js-a i z racji
tego że wszystko się dzieje w tej chwili w trybie debug w trybie deweloperskim
jak zwał to nasza aplikacja działa tylko w oparciu
o ten serwer natomiast jeśli się ten serwer zabije może to
okrutne ale tak zrobię to zauważcie że okej mogę sobie działać bo
tutaj są jeszcze scache'owane rzeczy natomiast jak będę chciał już sobie coś odświeżyć to on się nie
może połączyć z tym serwerem związku z tym nawet jeśli
byśmy wygenerowana ja iOS-ie ip abstrahując od rzeczy związanych
z podpisywaniem aplikacji o których zaraz powiem albo na androdzie jak byśmy wygenerowali apk
i chcieli komuś wysłać no to ta osoba zobaczyła by na ekranie jakiegoś
tutaj włączyłem zooma dokładnie zobaczyła by na ekranie pewnie
taki komunikat albo jakikolwiek inny albo pewnie po prostu biały ekran z informacją
czy brak informacji nic się dzieje nic nie ładuje z czego to wynika no wynika właśnie z tego że
ta nasza aplikacja właśnie ta logika ten bundle
jest serwowany z naszego serwera zauważcie że aplikacja jako
taka którą mamy tutaj tutaj ona jest i ona startuje tylko
no właśnie tutaj akurat pokazuje jakieś scache'owane wartości natomiast jak tylko
chcemy coś przeładować no to niestety aplikacja nie działa więc co
z tym zrobić czyli jesteśmy już w momencie w którym chcemy tą aplikację wrzucić
na telefon i korzystać z niej albo po prostu ją potestować bez naszego
serwera co też ma istotny wpływ na wydajność no to musimy ją wypuścić
stworzyć z trybie release'owym najpierw pokażę jak to się robi na androidzie potem pokażę
wam jak to wygląda w przypadku iOS-a to już nam nie będzie potrzebne czyli tak wchodzimy
sobie do naszego projektu natywnego i co my tutaj mamy zauważcie
że klikając tutaj tą strzałeczkę opowiadałem wam na początku trochę o skryptach
gradle'owych bardzo pobieżnie bo mówię na tym etapie to nie jest dla
was aż tak istotnie natomiast w momencie kiedy klikamy tą strzałkę
tak naprawdę wywołujemy ciąg pewien pewien ciąg skryptów
gradle'owych wywołujemy assemble debug następnie install debug i ta aplikacja
jest uruchamiana jakby install
to jest właśnie taki ogólny skrypt gradle'owy a debug to jest
rodzaj builda jak widać mamy build
debugowy i release'owy debugowy właśnie będzie oczekiwać
budować w ten sposób aplikacje żeby połączyć się z tym serwerem w naszym
metro serwerem i pobierać tego bundle'a właśnie z tego serwera
natomiast jeśli udałoby nam się to zbudować w wersji release'owej no
to w tym momencie już on zbuduje naszego bundle'a
ale zapakuje go do naszego projektu i ten bundle będzie ładowany lokalnie
i zrobimy sobie coś takiego czyli musimy znaleźć sobie instrukcję
install tylko assemble release jest tutaj
i można albo kliknąć tą instrukcję albo po prostu w terminalu wywołać
sobie ten skrypt w ten sposób release
release natomiast wydaje mi się że nam tutaj akurat
ładniej i łatwiej będzie to robić przy pomocy tych predefiniowanych
list skryptów i prostu klikniemy sobie assemble release i w
tym momencie nasz projekt zostanie budowany pod właśnie taki release czyli
będzie się działo praktycznie to samo co się działo wcześniej z tą różnicą że ten
bundle zostanie nam wrzucony do naszego projektu okej
mamy build successful trwało to 45 sekund okej czyli
nasze apk powstało jeśli weszlibyśmy teraz w do
naszego projektu android
app build outputs apk
to zobaczcie że mamy dwa foldery debug release debug był
uruchamiany trochę wcześniej release to jest ostatnie nasze
wywołanie i to jest nasze apk relese które moglibyśmy komuś wysłać i to już by działało
jeśli chcielibyśmy to zainstalować na naszym emulatorze to tutaj mamy wybrany
nasz emulator i musimy znaleźć instrukcję install install release
o i teraz poczekamy aż te apk zainstaluje
się na naszym emulatorze okej
apk został zainstalowany i teraz zauważcie co się dzieje uruchamiam
aplikację nasza aplikacja już działa zauważcie że nie
było tutaj takiego paska zielonego który wskazywał na to na progres ładowania zauważcie
że nigdzie nasz serwer nie jest uruchomiony zresztą wersja androida iOS-owa nie działa w
tym momencie możemy sobie apkę wyrzucić zauważcie że apka jest jakby uruchaiana od razu to znaczy mamy biały ekran
chwilę startowy i tyle tak ładowane są nasze rzeczy z async storage koniec tak czyli mamy
już tą wersję release'ową którą możemy wrzucać i jeśli właśnie
chcielibyśmy testować komuś tą aplikacje wysłać to w ten sposób to robimy czyli najpierw
musimy sobie tą wersję zbudować a potem zainstalować czy po prostu tą apk
wysłać a jeśli chcemy wysłać to po prostu komuś w przypadku iOS-a to na
tym pewnie można by zakończyć natomiast jeśli chcielibyśmy to wrzucić do google play a
no to google play będzie od nas wymagało żeby ta aplikacja była w jakiś sposób podpisana
to znaczy żebyśmy my dali potwierdzenie tego
że to my zrobimy tą aplikację i generalnie służy
do tego taki plik który który się nazywa keystore
i tym keystorem podpisujemy naszą aplikacje i dopiero tak
podpisana aplikacja może być wrzucona do google play natomiast ten keystore
możemy generować sobie lokalnie u nas na komputerze i on pozwoli
nam na podpisanie tej aplikacji nie będę tutaj dokładnie pokazywać jak to wygląda ale
w skrócie mamy taką w gradle'u mamy taką opcję
jak signing content widać że to jest zrobione dla debuga widać że tutaj w tym momencie debug
faktycznie jest wykorzystywany ten nasz keystore on ma
jakieś tam hasło swoje i tak dalej i gdybyśmy chcieli zrobić wersję release'ową to też podobnie trzeba by
tutaj zrobić i uzupełnić jakieś tam wartości i tak się robiło
do jakiegoś czasu i a po prostu trzeba było to apk podpisać tym keystore z tym dwa
problemy się z tym wiązały po pierwsze to że jak się zgubiło keystore to
nie dało się wrzucić aktualizacji jakby może to nie było zbyt częste i no łatwo sobie
gdzieś tam zrobić kopię wrzucić na dropboxa wysłać do paru osób i tak dalej natomiast
jeśli gubiliśmy takiego keystore'a to nie było najmniejszych szans na to żeby wrzucić aktualizację
i znam przypadki aplikacji które zgubiły tego keystore'a i faktycznie nie mogły wrzucić
aktualizacji no taka jest polityka bezpieczeństwa google więc
to jest pierwszy problem jaki był drugi problem był taki
że skoro my budujemy naszą apk na komputerze to okej
ale musimy ją zbudować dla wszystkich możliwych urządzeń z wszystkimi możliwymi
wersjami które chcemy obsługiwać i to wpływało mocno
na rozmiar tego apk czyli jak ściągaliśmy aplikację to mogła trochę ważyć i
od a nie pływam dokładnie od kiedy ale
od powiedzmy roku dwóch może trzech google
wypuścił coś takiego jak app bundles i app bundles
to jest taka surowa paczka z naszą aplikacją
która zawiera nie ma skompresowanych rzeczy a
i jest wrzucana do google play jako właśnie taka surowa wersja
i w tej paczce zawieramy właśnie cały kod wszystkie
nasze feature'y i tak dalej tak jak jest tutaj rozpisane assety dla różnych rozdzielczości
i tak dalej i tak dalej i tak dalej jakby w momencie kiedy ktoś będzie chciał
ściągnąć tą aplikację to już google play zoptymalizuje mu to apk ponieważ
on ma surową wersję i może z tym robić co mu się podoba jeśli chcielibyśmy wypuścić
to jest zalecana metoda i jeśli będziecie wrzucać aplikację to róbcie to przez app bundles
jeśli chcielibyśmy stworzyć takiego bundle'a to będziemy
potrzebowali do tego instrukcji bundle tak może na przykład nie
to nie to nie to a no dobra zapuzujmy
sobie to kompletnie nie to miałem na myśli zróbmy sobie bundle debug i
to nam zbuduje bundle'a dla którego mogę oczywiście on nam go zbuduje z wersji debugowej
czyli on nie będzie działać ale to nie jest istotne tak generalnie on nam zbuduje bundle'a
i będzie większy od tego apk który powinniśmy wysyłać i jak sobie wejdziemy do naszego
folderu z release'ami to zauważcie że mamy bundle'a dzisiaj
teraz bundle i tak samo by było dla wersji release'owej i teraz to
jest zalecana metoda natomiast w tym momencie
okej ale to skoro my wysyłamy surową wersję to jak jest z tym keystorem i podpisywaniem tego i to
się dzieje po stronie google play to znaczy tam w panelu google play jest nasz keystore i
to jest fajne bo się już nie musimy martwić o to że go zgubimy bo nasz keystore po prostu jest w tym
google play zawsze będzie i jakby tu już google play kto podpisuje więc
nie musimy się martwić że jak go zgubimy to nie wrzucimy aktualizacji natomiast też oczywiście jest pewna
forma zabezpieczenia żeby nikt nie wrzucał aplikacji niepowołanie
dlatego android app bundle też wymaga pewnego rodzaju
keystore'a tylko że to już jest keystore to się nazywa upload keysore i szczegóły
tego jak to wygenerować mamy tutaj na stronie react native dot dev i tu jest pokazane
jak taki keystore wygenerować jak go użyć do wrzucenia właśnie tego app
bundle'a czyli podsumowując z tej lekcji chciałbym żebyście zapamiętali dwie rzeczy po pierwsze że jeśli chcemy
sobie naszą aplikację uruchomić release'owo no to musimy odpowiedni skrypt
gradle'owy wywołać a jeśli chcielibyśmy wrzucać już do google play to zawsze używajmy bundle'a