Jak przetestować aplikację mobilną przy pomocy fizycznych i niefizycznych urządzeń w Xcode?

Na przestrzeni lat można zauważyć coraz większy spadek liczby systemów operacyjnych. Dziś już mało kto pamięta o systemach takich jak Symbian OS, BlackBerry OS, czy też nie tak dawno popularny Windows Phone. Po konflikcie politycznym na linii USA-Chiny i zbanowaniu usług Google’a dla telefonów Huawei, zapewne w niedługim czasie możemy spodziewać się nowego systemu operacyjnego.

Jak widać, systemy operacyjne na urządzenia mobilne zmieniają się dynamicznie, a my jako testerzy powinniśmy szybko adaptować się do tych zmian. Na nasze szczęście, aplikacje mobilne, które przychodzi nam testować, są zwykle stworzone z myślą o dwóch głównych systemach operacyjnych, czyli Androidzie i iOS.

W poprzednim artykule przybliżyłam temat testów aplikacji mobilnych za pomocą Android Studio.W tym chciałabym napisać o możliwościach jakie daje nam Xcode dla testów aplikacji stworzonych na system iOS. 

Testowanie aplikacji na iOS

Pierwsza myśl, która przychodzi do głowy po usłyszeniu iOS, to zapewne Apple - słusznie. System operacyjny iOS bazuje na systemie Mac OS,na który możemy natrafić w iPhone’ach, iPadach i iPod touchach. W tej kategorii mamy też dwa kolejne systemy operacyjne, bazujące na iOS: tvOS (czyli system używany w Apple TV) oraz watchOS (system wbudowany w Apple Watch). 

Obecnie, najnowszą wydaną wersją jest iOS 14. Nowe wersje iOS wychodzą zwykle we wrześniu danego roku. W kolejnych miesiącach wypuszczane są ich aktualizacje, zwykle kończąc się na wersji X.4 (obecnie mamy już iOS 14.3). Dlaczego tak się dzieje? Cóż, wszyscy doskonale wiemy, że kolejne aktualizacje spowodowane są błędami w obecnej wersji. Gdy pracowałam na co dzień przy testowaniu aplikacji mobilnych i obsługiwaliśmy wersję systemu od iOS 9 do najnowszej, dało się zauważyć diametralną różnicę pomiędzy wsparciem dla iOS 10.0 a iOS 10.2.6. Tak jak w przypadku pierwszej wersji systemu wiele aplikacji miało błędy, tak przy nowszej wersji te same błędy praktycznie nie występowały.

Po co więc w ogóle wspierać wersję X.0? Mimo że Apple za pomocą wyskakujących powiadomień i widocznego spadku wydajności urządzenia natarczywie upomina się o  aktualizację, użytkownicy i tak pozostają oporni na aktualizacje swoich urządzeń (nie wszyscy, ale można pokusić się o stwierdzenie, że spora ich część). Wielu z nich może nawet nie wiedzieć z jakiej wersji systemu operacyjnego korzystają obecnie. Jednocześnie chcielibyśmy, aby dla wszystkich użytkowników, niezależnie od wersji systemu, jakiej używają, aplikacja działała zgodnie z oczekiwaniami. Kiedy mamy do czynienia z małą aplikacją albo aplikacją hybrydową (czyli na cztery systemy, w tym iOS), wtedy najczęściej celujemy w ostatnią wersję iOS ze wszystkimi aktualizacjami czyli obecnie iOS 13.4.8.

Aktualizacje a użytkownicy

Jak już wspomniałam powyżej, nie wszyscy użytkownicy iPhone’ów aktualizują swoje urządzenia od razu po wyjściu nowej wersji systemu. Cofnijmy się do września 2019 roku. Właśnie miała miejsce premiera iOS 13. W tym miesiącu na aktualizację zdecydowało się 53,4% użytkowników a 24,8% pozostało przy wersji 12.4. W kolejnym miesiącu (październiku, miesiąc po premierze) na wersję 13 (w tym 13.1 i 13.2) zdecydowało się 74,2% użytkowników, bez zmian pozostało 17,8%. Do listopada 2020 (ponad rok po premierze iOS 13) z wersji 12.4 wciąż korzystało około 10% użytkowników.

Analogicznie wygląda sytuacja z iOS 14, wydanym we wrześniu tego roku. Wtedy z iOS 14 korzystało jedynie 10% użytkowników, reszta z nich używała systemów starszych, takich jak wszystkie wersje iOS 13, 12.4 a nawet iOS 10.3 oraz 9.3.5. W listopadzie tego roku wersję iOS 14.0 i iOS 14.1 miało łącznie 55,6% użytkowników, co daje nam jedynie ponad połowę wszystkich korzystających z tego systemu.

Skąd wynika taka sytuacja? Pierwszy powód wymieniałam już wyżej: użytkownicy zdają sobie sprawę z wadliwości pierwszych edycji nowej wersji systemu i czekają od razu na aktualizację. Drugi za to może być całkiem prozaiczny: dużo osób nie zdaje sobie sprawy z wydania nowej wersji. W dobie mnogości aplikacji i kolejnych ich aktualizacji informacja o nich może zostać przeczytana, a później zapomniana, na przykład, gdy na aktualizację nie ma czasu, ponieważ wiąże się ona z restartem urządzenia, a nowsza wersja systemu nie jest dla użytkowników aż tak istotna.

wersje-systemu-aktualizacje.png

Opracowanie własne na podstawie: https://gs.statcounter.com/os-version-market-share/ios/mobile-tablet/worldwide

Dlaczego przytaczam wszystkie te dane? Otóż, mogą być one istotne przy rozmowie z klientem odnośnie pokrycia wersji systemu. Wtedy możemy odnieść się do wymagań i wartości pokrywania wybranych wersji systemów.

Xcode

Czas przedstawić głównego gościa programu, czyli Xcode. Xcode jest to IDE (Integrated Development Environment) za pomocą którego możemy tworzyć aplikacje na Mac, iPhone, iPad, Apple Watch oraz na Apple TV. Xcode przydaje się również, aby uwierzytelniać naszą aplikację oraz wysyłać ją do App Store. Myślę, że sam UI (User Interface) jest bardzo przyjazny dla użytkowników. W tym IDE możemy pisać w językach Swift, C/C++/Objective-C lub używać go do odpalania aplikacji pisanych w Electronie.

Co istotne, Xcode jest dostępny tylko na laptopy z systemem macOS. Pamiętajmy też, że aby dystrybuować naszą aplikację, a co za tym idzie zgrywać ją na realne urządzenia oraz udostępniać do Test Flight (o czym później), potrzebujemy konta w programie Apple Developer. Koszt takiego członkostwa to 99 USD rocznie. 

Xcode — testowanie na symulatorach

Do sprawdzenia aplikacji na symulatorach nie jest wymagane konto członkowskie Apple Dewelopera. W Xcode mamy już zainstalowane podstawowe symulatory i najnowszy system. Jeśli chcemy dodatkowe modele możemy tworzyć je i pobierać według uznania. Co ciekawe, nie możemy przypisywać do danego modelu wyższej wersji systemu niż ta, która faktycznie może być przez niego używana. To znaczy że jeśli wybierzemy iPhone 5s to najwyższa dla niego wersja systemu będzie równa iOS 12.4.

testowanie-w-xcode-1.png

testowanie-w-xcode-2.png

testowanie-w-xcode-3.png

Po uruchomieniu interesującego nas symulatora możemy otworzyć również jego logi i na bieżąco sprawdzać tam, co się dzieje.

testowanie-w-xcode-4.png

Symulator, tak jak fizyczne urządzenie, można obracać, potrząsać nim (shake) oraz blokować, a także podgłaśniać i przyciszać dźwięk urządzenia. W porównaniu do emulatorów Androida, tutaj mamy większą wydajność, szybkość oraz realne odwzorowanie tego jak aplikacja zachowywałaby się na fizycznym urządzeniu, co oznacza że naprawdę rzadko błąd znaleziony na symulatorze nie wystąpiłby na realnym smartphonie. 

Poza iPhonami do wyboru mamy również iPady, iPod Touch, Apple TV i Apple Watches.

Xcode — testowanie na urządzeniach fizycznych

Jeśli chodzi o testowanie aplikacji na urządzeniach fizycznych, warto zacząć od przystąpienia do programu członkowskiego Apple Developer. Następnie logujemy się na konto Apple w Xcode w zakładce Signing & Capabilities i automatycznie generuje się nam certyfikat przypisany do naszego konta.

testowanie-w-xcode-5.png

Podłączyć telefon do komputera, aby wgrać na niego aplikację, można na dwa sposoby. Pierwszy z nich to klasyczne połączenie za pomocą kabla a drugie: połączenie się za pomocą sieci. Wystarczy aby dane urządzenie mobilne było podłączone do tego samego Wifi co komputer.

Po podłączeniu należy kliknąć run i rozpocząć testy. Sam Xcode daje możliwość odczytywania logów z urządzenia za pomocą konsoli. Można również jak pisałam w poprzednim artykule użyć Charles Proxy. W razie błędu i niespodziewanego zamknięcia aplikacji, możemy również użyć logów bezpośrednio z urządzenia. Aby je znaleźć:

  1. wchodzimy w Ustawienia,
  2. klikamy Prywatność,
  3. klikamy Analizy & Ulepszenia,
  4. klikamy Dane analityczne.

W tym miejscu znajdują się raporty nagle zamkniętych aplikacji, kody błędu z datą oraz godziną podanymi z dokładnością do milisekund. Wszystkie te informację mogą pomóc nam oraz zepołowi deweloperskiemu w znalezieniu przyczyny danego zachowania. Te same informacje możemy również zobaczyć przy użyciu Xcode, wchodząc w zakładkę Okno a następnie klikając Urządzenia i Symulatory. Wtedy ukazuje nam się okno, w którym możemy kliknąć Przeglądaj dziennik urządzenia.

testowanie-w-xcode-6.png

testowanie-w-xcode-7.png

Udostępnianie aplikacji innym testerom różni się od sposobu znanego nam z Android Studio. Żeby inni mogli testować aplikację bez użycia Xcode (na przykład developer lub inni testerzy) tworzymy wersję na Test Flight. 

Test Flight to aplikacja dystrybuowana przez Apple, która pomaga prowadzić beta testy aplikacji. Aby przesłać aplikację do testów trzeba najpierw zarchiwizować ją w Xcode klikając Produkt , później Archiwum i  Dystrybuuj aplikację i poczekać na akceptację. Po zaakceptowaniu przez Apple, możemy na naszym koncie Apple Developer dodać maile osób, które będą mogły zainstalować aplikację na swoim urządzeniu. Jest to pierwszy krok, który wykonuje się tuż przed wypuszczeniem aplikacji do sklepu, aby się upewnić że działa ona poprawnie. Co ciekawe, po zakończeniu testów  deweloper może wysłać aplikację do Apple Store - wtedy po stronie Apple wykonywane są testy na różnych urządzeniach i dostajemy informację zwrotną jeśli coś jest nie tak.

Podsumowanie

Temat testowania aplikacji mobilnych na telefony z systemem iOS sam w sobie jest bardzo ciekawy, a dzięki udostępnionemu w Xcode bardzo dużemu wyborowi symulatorów oraz opcji archiwizacji aplikacji i przesyłania ich do Test Flight, mamy możliwość łatwych testów na różnego typu urządzeniach fizycznych oraz sprawdzenia aplikacji przez osoby mniej techniczne. Z drugiej strony, tak jak w przypadku systemu Android, z każdym rokiem przybywa nowych urządzeń oraz kolejnych systemów do pokrycia i utrzymania. Jeśli lubicie wyzwania, testowanie aplikacji mobilnych jest dla Was!

Jeśli dotarliście aż tutaj dziękuję za poświęcony czas oraz mam nadzieję że artykuł był ciekawy i pomocny.