Fastlane jest bardzo przydatnym narzędziem, które swoje początki zawdzięcza projektowi open source autorstwa Felixa Krause. Kilka lat temu został on zauważony przez większych graczy, a następnie wykupiony dwukrotnie – najpierw przez Twitter’a, a potem przez Google’a. Dzięki Fastlane zadania takie jak wykonywanie zrzutów ekranów aplikacji (screenshots), czy wrzucanie apki do AppStore mogą zostać sprowadzone od poziomu jednej komendy w wierszu poleceń. Mi na początku wydawało się to zbyt piękne i spodziewałem się jakiegoś haczyka (np. w postacie wysokiej opłaty), ale moje obawy okazały się zupełnie niepotrzebne. Fastalne jest narzędziem całkowicie darmowym, a jedyny wysiłek jaki należy podjąć to właściwa konfiguracja całego ekosystemu 😇.

Poradnik ten podzieliłem ostatecznie na dwie części. W pierwszej pokażę Wam jak wykonać wstępną konfigurację oraz jak zautomatyzować proces pozyskiwania zrzutów ekranów aplikacji. W drugiej części skupię się na kilku dodatkowych możliwościach związanych z powyższą funkcją oraz procesie automatyzacji testów jednostkowych. Z racji tego, że będziemy konfigurowali projekt dla iOS, wszystkie poniższe operacje musicie wykonać na komputerze z systemem OSX. Żeby ułatwić Wam trochę zadanie, przygotowałem projekt startowy, który będziemy wspólnie konfigurować w tym poradniku. Możecie go pobrać za pomocą poniższego odnośnika 😉. Sposób implementacji poszczególnych funkcji w przykładowej aplikacji nie jest istotny w odniesieniu do tego poradnika, więc nie musicie sobie zawracać głowy kodem źródłowym. Jeżeli utkniecie na jakimś etapie to możecie pobrać sobie ukończony projekt i porównać kod. Link do niego znajdziecie na samy dole strony. Po pobraniu aplikacji skompilujcie ją sobie, żeby sprawdzić, czy wszystko działa się jak należy.

 

Link do startowego projektu

 

 

Pierwsza konfiguracja

 

Konfiguracja Fastlane nie jest specjalnie trudna, ale czasami można się pogubić. Zacząć musicie od instalacji na Waszym Macu zestawu narzędzi o nazwie Xcode’s command-line tools. Otwórzcie terminal i wpiszcie następujące polecenie:

Bardzo prawdopodobne, że macie już ten pakiet zainstalowany i pojawi się taka informacja:

Jeżeli tak się stało to macie ten krok już za sobą 😆. Jeżeli nie, to pakiet zostanie zainstalowany na Waszym komputerze.

Teraz możecie zainstalować Fastlane’a. W terminalu wpiszcie następujące polecenie:

Fastlane zostanie zainstalowany globalnie, co oznacza, że będziecie mogli używać go w dowolnym projekcie. Teraz możecie dodać go do właściwego projektu. Z poziomu terminala udajcie się do folderu głównego, czyli tam gdzie znajduje się plik CoreDataStack.xcodeproj. Następnie wpiszcie w konsoli polecenie:

Po chwili zastanowienia Fastlane zaprezentuje kilka możliwości do wyboru (zdjęcie poniżej). Wstrzymajcie się jeszcze na chwilę z wyborem:

 

 

Zalecanym podejściem przy integracji Fastlane’a jest wdrażanie poszczególnych procesów automatyzacji stopniowo. Chodzi o to, żeby nie rzucać się od razu na wszystko co jest dostępne i najpierw dobrze poznać jedną z wybranych opcji. My zaczniemy od pozycji pierwszej, czyli automatycznego wykonywania zrzutów ekranów aplikacji. Wybierzcie teraz na klawiaturze jedynkę i naciśnijcie enter. Fastlane poinformuje Was, że utworzy 2 pliki pomocnicze, które będą wykorzystywane do konfiguracji:

 

 

Naciśnijcie enter, żeby potwierdzić i ponownie wstrzymajcie się na chwilę z wyborem dalszych opcji. Fastlane chwilę popracuje i Waszym oczom powinien ukazać się widok podobny do poniższego:

 

 

Zostawcie włączone okno terminala i wykonajcie poniższe kroki:

  1. Otwórzcie przeglądarkę plików (Finder) i udajcie się do katalogu głównego projektu. Tam gdzie znajduje się plik CoreDataStack.xcodeproj.
  2. W katalogu Fastlane znajduje się plik SnapshotHelper.swift, który musicie przenieść do katalogu CoreDataStackUITest.
  3. Możecie teraz wrócić do Xcode, ale nie zamykajcie jeszcze przeglądarki plików.
  4. Przeciągnijcie plik SnapshotHelper.swift z katalogu CoreDataStackUITest do katalogu projektu w Xcode, tak aby plik umieścić w pakiecie CoreDataStackUITest.
  5. Xcode zapyta Was jak ma zostać wykonana kopia – wybierzcie „Add to targets”.
  6. Na samej górze ekranu wybierzcie Product > Scheme > New Scheme.
  7. W oknie, które się pojawi musicie wybrać CoreDataStackUITest zamiast CoreDataStack i nacisnąć OK.
  8. Wróćcie do zakładki Product i wybierzcie Scheme > Edit Scheme. Już prawie jesteście na miejscu 😋.
  9. Upewnijcie się, że CoreDataStackUITest jest wybrany jako aktywny schemat (scheme).
  10. Z dostępnych opcji wybierzcie Bulid i zaznaczcie opcję Run.
  11. Na samym dole zaznaczcie opcję Shared.
  12. Naciśnijcie Close.

Czas powrócić do terminala, który ciągle czeka na Waszą decyzję. Po naciśnięciu enter powinno w konsoli pojawić się pytanie “Which is your UI Testing scheme?”, czyli który schemat będzie wykorzystywany do wykonywania zrzutów ekranów. Jeżeli pojawia Wam się opcja CoreDataStackUITest, to świetnie, możecie ją wybrać. Jeżeli z jakiegoś powodu nie jest ona widoczna to się nie przejmujcie, bo jest to dość powszechny bug. Żeby go przeskoczyć naciśnijcie Ctrl + C, aby zatrzymać cały proces. Ponownie wpiszcie fastlane init swift, wybierzcie pierwszą opcję i naciśnijcie 2 razy enter. Teraz opcja CoreDataStackUITest powinna być już widoczna:

 

 

Wybierzcie numer, który się przy niej znajduje i naciśnijcie enter. Fastlane powinien się teraz zapytać, czy chcecie przesłać wykonane zrzuty do iTunes Connect. W przypadku naszej aplikacji testowej nie chcemy tego robić, więc wybierzecie ‚n’. Oczywiście podczas pracy nad właściwym projektem należy wyrazić zgodę i dokonać pozostałej części konfiguracji. W końcu taki jest cały sens tej zabawy 😎. Po wybraniu dowolnej opcji powinno wyświetlić się w oknie terminala „Installing dependencies for you.”.

W tym momencie możecie natknąć się na kolejnego buga. Fastlane może wykonywać ten proces w nieskończoność bez podawania jakiejkolwiek informacji o postępach. Jeżeli tak się stanie to odczekajcie jakieś 5 minut, tak na wszelki wypadek, a następnie naciskajcie kombinację Ctrl + C tak długo, aż proces zostanie zamknięty. Pomimo siłowego zakończenia, konfiguracja i tak zostanie poprawnie wykonana. Jeżeli nie napotkacie żadnego buga, to w oknie terminala pojawi się kilka dodatkowych informacji o możliwości konfiguracji Fastalne’a, które możecie zamykać naciskając enter.

 

 

Trochę to trwało, ale najgorsze macie już za sobą 😁. Wstępna konfiguracja została wykonana, więc możecie zabrać się za pisanie kodu, za pomocą którego określicie co Fastlane ma dla Was przygotować. Ale spokojnie, nie jest to jakoś specjalnie skomplikowane. Zajrzyjcie jeszcze do Waszego folderu głównego. Powinien teraz znajdować się w nim nowy folder o nazwie fastlane, a w nim (obok kilku innych) plik Fastfile, za pomocą którego w przyszłości będziecie wykonywali wszystkie niezbędne konfiguracje. Nad plikiem można pracować z wykorzystaniem zwykłego edytora, a jeżeli ciekawi Was jaki język programowania został w nim wykorzystany to śpieszę poinformować, że jest to Ruby. Bez obaw – nie musicie znać jego składni, aby poprawnie wykonywać konfigurację. Wszystkie polecenia są bardzo intuicyjne, a oficjalna dokumentacja zawiera wiele przydatnych przykładów.

 

 

Robimy fotki

 

W pierwszej kolejności musicie dokonać małej zmiany w pliku CoreDataStackUITests.swift. Otwórzcie go z poziomu Xcode, a następnie odszukajcie funkcję setUp(). To co znajduje się wewnątrz metody zamieńcie na poniższy kod:

 

Te trzy linijki przygotowują Fastlane do działania. Możecie chwilowo opuścić Xcode, ale go nie zamykajcie.

Przy wykonywaniu zrzutów ekranów, Fastlane korzysta z biblioteki XCUITest, która przeznaczona jest do tworzenia testów interfejsu użytkownika. Została w nią wbudowana bardzo fajna funkcja „nagrywania” interakcji użytkownika z aplikacją, na podstawie których generowany jest właściwy kod do testów.

W normalnej sytuacji powinniście teraz skorzystać z tej opcji, jednak w tym poradniku chcę skupić się wyłącznie na Fastlane, a biblioteka XCUITest wymaga osobnego omówienia (tutaj macie fajny tutorial). Zamiast tego poniżej podałem Wam już gotowy kod, który musicie umieścić wewnątrz funkcji testExample(), znajdującej się w pliku CoreDataStackUITests.swift:

 

Teraz wisienka na torcie. Powyższy kod nie sprawi jeszcze, że Fastlane wykona dla Was zrzuty ekranów. Do tego konieczne jest użycie następującego polecenia:

 

Za pomocą argumentu typu String określacie nazwę pliku graficznego, który zostanie wygenerowany przez Fastlane. W naszym przykładzie chcemy zrobić zrzuty trzech ekranów, więc musimy dodać trzy komendy snapshot(). Dodajcie je tak samo jak na poniższym kodzie:

 

Polecenia sanpshot() zostały umieszczone dokładnie w tych miejscach, w których chcemy wykonać zrzuty ekranów – na ekranie głównym po dodaniu dwóch użytkowników, na ekranie pierwszego użytkownika po dodaniu 4 przysmaków oraz na ekranie drugiego użytkownika po dodaniu 2 smakołyków. Tylko tyle kodu potrzebne jest, aby skorzystać z dobrodziejstw Fastalne 😏. Zanim przejdziemy do wykonywania zrzutów uruchomcie sobie jeszcze sam test, aby sprawdzić, czy wszystko jest w porządku. Możecie to zrobić za pomocą przycisku znajdującego się na wysokości nazwy funkcji, w której test został umieszczony. Przycisk ten jest wstawiony zamiast numeru wiersza, o ile oczywiście macie numerację włączoną 🤨.

Wszystko gotowe, czas na odrobinę magii. Jeżeli zamknęliście już okno terminala to otwórzcie je ponownie w katalogu głównym projektu, a następnie wpiszcie następujące polecenie:

 

Jeżeli nie pojawiły się żadne błędy to w tym momencie rozpocznie się właściwy proces pozyskiwania zrzutów ekranów z aplikacji. Musicie jednak uzbroić się w cierpliwość, bo chwilę to zajmuje. Fastalne musi skompilować projekt i uruchomić go na wszystkich dostępnych emulatorach. Możecie jednak ograniczyć zakres urządzeń, ale o tym napiszę w drugiej części tego poradnika.

Po zakończeniu całego procesu okno terminala powinno wyglądać mniej więcej tak:

 

 

W katalogu głównym projektu został utworzony folder screenshots, w którym znajdują się wszystkie pliki graficzne. W podkatalogach znajdują się wersje dla poszczególnych języków, choć w naszym przypadku jest to tylko folder en-EN. Tutaj właśnie widać potęgę Fastlane’a. W ciągu kilkunastu minut (u mnie tyle to trwa) wykonał on zrzuty ekranów na wszystkich możliwych urządzeniach oraz we wszystkich możliwych wersjach językowych. Wyobraźcie sobie, że musicie zrobić to wszystko ręcznie, krok po korku. Jakoś nie widzę chętnych 🤣.

 

 

Słowo na drogę

 

Przedstawiłem Wam tylko najbardziej podstawową konfigurację Fastlane’a, ale na jej podstawie możecie przekonać się jak przydatne jest to narzędzie. W drugiej części tego poradnika przedstawię Wam jeszcze kilka fajnych funkcji związanych z wykonywaniem zrzutów ekranów oraz wytłumaczę jak skonfigurować Fastlane, aby wykonywał wszystkie testy jednostkowe po wpisaniu tylko jednego polecenia 😎. Do następnego 🧐.

 

Link do ukończonego projektu

 

 


 

Comments

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *