Ekspertyza · Aplikacje mobilne
Aplikacje na telefon, zbudowane tak, aby logikę dało się zweryfikować bez telefonu.
Budujemy natywne aplikacje iOS w Swift, z czujnikami i HealthKit, oraz aplikacje z jednym kodem dla iOS, Android i webu, gdy projekt nie wymaga czujników. Rdzeń logiki testuje się oddzielnie od ekranu.
Już zbudowaneSą trzy własne implementacje, nie jedna. Repozytorium z pięcioma celami aplikacji (cztery iOS i jedno macOS) zdefiniowanymi w `project.yml`, którego testy logiki uruchomiliśmy dziś: 160 z 160 przechodzi. Druga aplikacja iOS, w innym projekcie, z 40 plikami Swift i HealthKit. I trzeci kierunek, z jednym kodem dla iOS, Androida i webu, którego wersja web odpowiada dziś. Zastrzeżenie, które zmienia odpowiedź na pytanie, jakie zadaje każda kupująca osoba przede wszystkim: żadna z naszych aplikacji nie jest opublikowana w App Store ani Google Play. Powód jest jeden i ma nazwę — `DEVELOPMENT_TEAM` jest puste w konfiguracji projektu, czyli brakuje identyfikatora zespołu z Apple Developer Program. Maszyna ma ważną tożsamość podpisu, wystarczającą do instalacji na własnym urządzeniu, niewystarczającą do dystrybucji w sklepie. To problem konta, nie kodu, ale nadal jest to problem i zapisujemy go tutaj, a nie w przypisie.
Aplikacja mobilna ma dwie części, które psują się inaczej. Część, która odczytuje czujniki i coś oblicza — kąt, wynik, stan — oraz część, która rysuje ekrany. Trzymamy je osobno i nie z powodów estetycznych: w naszym głównym repozytorium iOS pliki rdzenia nie importują interfejsu, więc można je skompilować bezpośrednio przez `swiftc` na Macu i uruchomić jak zwykły program, bez symulatora i bez telefonu. Zestaw ma 160 weryfikacji pogrupowanych w 16 etapów; uruchomiliśmy go dziś i przechodzi w całości. To dlatego możemy powiedzieć dokładnie, co robi algorytm, zamiast mówić, że „działa dobrze”.
Na iOS pracujemy w Swift 6, z minimalnym celem iOS 17. To samo repozytorium definiuje pięć aplikacji jako osobne targety: cztery dla iPhone'a i jedną dla macOS, a wersja macOS ponownie wykorzystuje piętnaście plików z rdzenia iOS, bez kopiowania. Czujniki odczytujemy u źródła: interfejs Apple dla czujników w słuchawkach udostępnia orientację głowy, a aplikacja porównuje bieżący kąt z pozycją, którą użytkownik kalibruje na początku sesji. Progi nie są „wewnętrznymi ustawieniami”: poniżej 7° jest prosto, między 7° a 13° jest pochylenie, powyżej 13° utrzymane przez trzy sekundy wywołuje alert, a wygładzanie używa średniej wykładniczej ze współczynnikiem 0,15. Wszystkie cztery wartości znajdują się w czterech kolejnych liniach kodu i można je pokazać.
Gdy projekt nie potrzebuje czujników, nie zalecamy natywnie. Trzeci kierunek w portfolio to jeden kod, który kompiluje się dla iPhone'a, Androida i przeglądarki — React Native z Expo — a wersja web jest opublikowana i odpowiada dziś. Praktyczna różnica dla klienta: kwestionariusz, kalkulator albo pulpit nawigacyjny nie uzasadniają dwóch zespołów i dwóch repozytoriów; aplikacja, która nasłuchuje czujnika dwadzieścia razy na sekundę, tak.
Czego jeszcze nie możemy. Żadna z naszych aplikacji nie jest w App Store ani Google Play. Nie dlatego, że się nie kompilują — kompilują się, instalują na symulatorze i przechodzą testy — lecz dlatego, że w konfiguracji projektu identyfikator zespołu Apple jest pusty, czyli nie ma powiązanej z tymi buildami rejestracji w Apple Developer Program. Na Macu istnieje prawidłowa tożsamość podpisywania, typu deweloperskiego, która wystarcza do instalacji na własnym urządzeniu i nie wystarcza do sklepu. Dla projektu klienta konto deweloperskie zakłada się na firmę klienta i pozostaje jego — to rozmowa, którą trzeba przeprowadzić na początku, nie na końcu.