[PL] Doświadczenia: Mobile Center

[aktualizacja 03.02.18] Od niedawna Mobile Center wyszło z preview i zostało przemianowane na Visual Studio App Center – z tego powodu część opisywanych informacji w tym poście może być już nieaktualna.

Wstęp

Mobile Center jest nową usługą od Microsoftu, pozwalającą na zarządzanie cyklem życia aplikacji. W jednym miejscu mamy do dyspozycji wiele przydatnych narzędzi służących do:

  • zbierania crashy
  • zbierania analityk
  • budowania aplikacji
  • dystrybucji aplikacji
  • testów UI

Wymienione funkcjonalności dostępne były dotychczas w ramach kilku osobnych serwisów:

Wspomniane serwisy to oczywiście nie jedyne oferujące takie funkcjonalności – wymieniłem te usługi, z którymi miałem już sam styczność. W obecnym projekcie korzystamy z HockeyApp oraz VSTS, więc w tekście bedą porównania MC właśnie do tych usług.

Mobile Center obsługuje aplikacje napisane w Xamarinie, Javie, Objective-C / Swift oraz w React Native. Teoretycznie, możemy używać tylko Mobile Center w procesie tworzenia aplikacji i wygląda to naprawdę ciekawie. Nie ma już potrzeby przełączania się między osobnymi serwisami – wszystko mamy w jednym miejscu. Nie powiem, podjarałem się jak dzik na świeże żołędzie widząc pierwszy raz nową usługę Microsoftu i czym prędzej zacząłem wykorzystać nowe możliwości w praktyce.

W tym poście przedstawię swoje zmagania z Mobile Center i odpowiem na pytanie, dlaczego nowa usługa nie spełniła moich oczekiwań. Zapraszam do dalszego czytania, a jeśli nie masz ochoty oddawać się lekturze całości to polecam przeskoczenie do sekcji TL;DR.

Materiały promocyjne a rzeczywistość

W Internecie nie brakuje materiałów na temat Mobile Center i część z nich trafiło do mnie już jakiś czas temu różnymi drogami. Na oficjalnym kanale Mobile Center na YouTube dostępnych jest wiele filmów promocyjnych – m.in. ten omawiający ogólnie nową usługę. Oficjalny profil Mobile Center na Twiterze również publikuje szereg materiałów edukacyjnych. Visual Studio Magazine też dorzucił swoją cegiełkę publikując ten artykuł. Treści o Mobile Center mamy naprawdę sporo, a na dokładkę wchodząc na stronę HockeyApp, pojawia się informacja o możliwości sprawdzenia Mobile Center:

Byłem świadomy włączenia jakiś czas temu Xamarin Insights do HockeyApp, więc tym bardziej chciałem użyć od razu usługi, z której nie trzeba będzie migrować za jakiś czas.

Osobiście, odebrałem Mobile Center jako gotową do użytku usługę już po zobaczeniu promocyjnych materiałów w kilku miejscach Internetu. Jednak, w nadmiarze materiałów umknęła mi gdzieś informacja, że Mobile Center jest ciągle w wersji preview. Taka informacja wprost pojawia się dopiero na stronie HockeyApp oraz na stronie Mobile Center, ale po zalogowaniu do MC, takiej informacji już nie znajdziemy.

Microsoft nie pisze wprost o ograniczeniach w wersji preview. Trzeba się trochę do nich dokopać i moim zdaniem są one zbyt głęboko ukryte przed potencjalnymi użytkownikami. Natrafiłem na nie zupełnie przypadkiem, podczas zgłębiania wiedzy na temat dostępnych funkcjonalności w nowej usłudze.

Przede wszystkim, nie wiadomo jeszcze jak będą wyglądać ceny za korzystanie z Mobile Center. Z kolei na tej podstronie możemy m. in. przeczytać o ograniczeniu czasu przechowywania danych odnośnie crashy i analityk, który wersji preview wynosi 30 dni.

Jeszcze inna podstrona zawiera wiele pytań odnośnie migrowania z HockeyApp i jedno z nich jest moim zdaniem szczególnie interesujące:

Is Mobile Center ready for production apps?

Not quite. Mobile Center will exit Preview this fall, then it will be ready for production apps.

Warto więc sprawdzać dokładnie daną usługę zanim zaczniemy jej używać w projekcie. Osobiście, na samym początku nie zrobiłem aż tak dokładnej analizy i dopiero po czasie dowiedziałem się o pewnych ograniczeniach w obecnej wersji preview.

Niespełnione wymagania

Poniżej opisałem kilka swoich wymagań jakich Mobile Center nie było w stanie spełnić. Jednak nie oznacza to, że Mobile Center nie jest wartą uwagi usługą. Po prostu u mnie się nie sprawdziło, może sprawdzi się u Ciebie?

1. Dostępne maszyny budujące

Mobile Center pozwala na skorzystanie z maszyn budujących hostowanych w chmurze (dostępne systemy to OS X oraz Windows). Na tej stronie możemy znaleźć listę oprogramowania jakie jest zainstalowane na tych maszynach. Co jednak zrobić jeśli wymagane przez nas oprogramowanie nie widnieje na liście? Nie znalazłem wzmianki w dokumentacji czy możemy samodzielnie doinstalować brakujące nam komponenty (daj znać w komentarzu jeśli wiesz jak to zrobić).

Na szczęście, na liście preinstalowanego oprogramowania widnieje Homebrew, czyli manager pakietów dla macOS. W projekcie korzystam z GitVersion, który jest dostępny na Homebrew, więc używając skryptu będę mógł go doinstalować podczas procesu budowania aplikacji.

Jednak, pojawia się tutaj inny problem. Proces budowania aplikacji w Mobile Center odbywa się na świeżej wirtualnej maszynie. Oznacza to, że za każdym razem dodatkowe komponenty (wspomniany GitVersion) będą musiały się sciągnąć i zainstalować. Taka sama sytuacja jest z pakietami NuGet – nie ma tu żadnego cache’u. Dlatego też czas builda aplikacji znaczącą się wydłuża.

Moglibyśmy przygotować własną maszynę budującą zawierającą wymagane przez nas oprogramowanie. Jednak Mobile Center nie oferuje możliwości podłączenia zewnętrznych agentów – możemy korzystać tylko z tych dostępnych w chmurze. Własne maszyny budujące możemy za to podpiąć do VSTS i jest to moim zdaniem znaczący argument przemawiający za tą usługą.

2. Skrypty

W procesie budowania aplikacji na pewno chcielibyśmy skorzystać z własnych skryptów podmieniających np. nr wersji aplikacji. Mobile Center oferuje możliwość stworzenia do trzech skryptów budujących. Każdy z tych skryptów musi być odpowiednio nazwany oraz umieszczony w katalogu z projektem (.csproj). Wydaje mi się to lekkim ograniczeniem i wolę jednak większą swobodę w zakresie ilości oraz umiejscowienia skryptów w projekcie. VSTS ponownie tutaj wygrywa.

3. Definicje builda

Mobile Center pozwala na skonfigurowania builda per branch i pewnie w wielu przypadkach będzie to wystarczające. Co jednak jeśli chcielibyśmy zdefiniować konfigurację builda uruchamiającą się w zależności od różnych czynników?

W obecnym projekcie mamy skonfigurowaną definicje builda aplikacji mobilnej w wersji RC (Release Candidate), która uruchamia się jeśli ktoś zrobi zmiany na branchu “release/*”. Czyli np. pushujemy zmiany do “release/0.5.0” i automatycznie uruchamia się build tworzący wersję RC o numerze 0.5.0 (przy użyciu wspomnianego wcześniej GitVersion), a następnie jest on wysyłany do HockeyApp. Taka definicja builda nie jest możliwa do skonfigurowania na Mobile Center, za to na Visual Studio Team Services jak najbardziej.

4. Testy jednostkowe

Nie udało mi się znaleźć żadnej informacji czy obecnie na Mobile Center można uruchamiać testy jednostkowe przy budowaniu aplikacji. W konfiguracji builda niestety nie widzę takiej opcji, a jedyna strona w dokumentacji o testowaniu odnośni się do automatycznych testów UI. Może po prostu coś pominąłem? Jeśli wiesz jak odpalić testy jednostkowe w MC to koniecznie daj mi znać w komentarzu! Aha i chyba nie muszę wspominać, że np. VSTS pozwala na uruchomienie testów jednostkowych 😉

5. Dystrybucja aplikacji

Powiadomienia o dostępności nowej wersji aplikacji w Mobile Center trafiają do użytkowników poprzez email. Każdy tester może się też zalogować w przeglądarce ze swojego urządzenia do MC i tam pobrać bezpośrednio najnowszą wersję aplikacji. Wszystko jak najbardziej w porządku, ale HockeyApp ma na tym polu znaczącą, moim zdaniem, przewagę – aplikację mobilną.

Na tej stronie można pobrać aplikację mobilną HockeyApp, która pozwala na ściągnięcie najnowszej wersji aplikacji. Nie musimy odpalać przeglądarki na urządzeniu, wpisywać adresu strony, a na końcu podawać danych do logowania. Wystarczy odpalić aplikację HockeyApp i mamy od razu dostęp do wszystkich aplikacji do jakich dostaliśmy zaproszenie. Jest to niesamowicie wygodne rozwiązanie ułatwiające pracę i pozwalajace zaoszczędzić trochę czasu.

6. Informacje o testerach aplikacji

Mobile Center wydaje mi się dość ubogi w kontekście dostępnych informacji odnośnie osób testujących dystrybuowaną aplikację. Dostępne dane są na bardzo podstawowym poziomie. Możemy zobaczyć kto jest zaproszony do naszej grupy testerów, czy zaakceptował zaproszenie i to w zasadzie tyle. W MC nie sprawdzimy:

  • ile razy dana wersja aplikacji została pobrana przez wszystkich testerów
  • jakie wersji aplikacji pobierał konkretny tester
  • jakiego urządzenia używa dany tester
  • czy UDID urządzenia Apple jest w Provisioning Profile

Wszystkie te informacje i dużo więcej mogę za to sprawdzić w HockeyApp.

7. Rozszerzenie funkcjonalności

Visual Studio Team Services posiada tzw. Marketplace, gdzie możemy znaleźć setki różnych pluginów ułatwiających pracę nad projektem. Niestety, w przypadku Mobile Center nie mamy dostępnego miejsca z pluginami, przez co nie rozszerzymy sami funkcjonalności serwisu o potrzebne nam komponenty. Możemy korzystać tylko z tego co oferuje samo Mobile Center i czekać na dodanie kolejnych funkcjonalności przez zespół rozwijający tą usługę.

TL;DR

Plusy Mobile Center:

  • jedno miejsce do zarządzania cyklem życia aplikacji (crashe, analityki, dystrybucja, budowanie, testy)
  • łatwa integracja aplikacji z Mobile Center
  • możliwość budowania aplikacji iOS w chmurze – nie musimy posiadać własnego agenta macOS

Minusy Mobile Center:

  • brak możliwości podpięcia własnej maszyny budującej
  • ograniczenie do preinstalowanego oprogramowania na maszynach budujących hostowanych w chmurze
  • brak aplikacji mobilnej w stylu tej udostępnionej przez HockeyApp
  • brak wsparcia dla testów jednostkowych
  • brak możliwości instalacji dodatkowych pluginów / rozszerzeń (np. dla VSTS mamy Marketplace)
  • ubogie informacje odnośnie testerów używających aplikację

Podsumowanie

Mobile Center idzie w bardzo dobrym kierunku, łącząc funkcjonalności wielu usług w jednym miejscu. Usługa cały czas się rozwija i pewnie za jakiś czas część niedogodności opisywanych w tym poście przestanie istnieć.

Niech za przykład zmiany w dobrym kierunku posłuży funkcjonalność wysyłania aplikacji do sklepów App Store oraz Google Play. Mobile Center nie oferował takiej funkcjonalności, ale zmieniło się to w tym tygodniu. Na tej stronie można znaleźć instrukcję jak skonfigurować połączenie do sklepów Apple oraz Google. Wcześniejszy brak tej funkcjonalności skłonił mnie do skorzystania z VSTS, gdzie dostępne są pluginy na to pozwalające: HockeyApp, Apple App StoreGoogle Play.

Warto mieć na uwadze jeszcze jedną rzecz: HockeyApp za jakiś czas zostanie zastąpiony przez Mobile Center. Możemy o tym przeczytać na tej stronie. Zmiana nastąpi jednak dopiero gdy MC będzie miało 100% obecnych funkcjonalności HockeyApp, co jest planowane na rok 2018.

Na obecną chwilę, MC wydaje mi się serwisem zbyt ograniczonym na moje potrzeby. Wybierając tą usługę do projektu obawiałbym się pojawienia ściany w pewnym momencie jeśli będziemy chcieli coś wykonać, a zwyczajnie MC nam na to nie pozwoli. Inne usługi (mimo, że osobne), dają moim zdaniem więcej wolności.

A jakie jest Wasze zdanie na temat Mobile Center? Dajcie znać w komentarzach!