Adam Grudziński

Algebra i Spółka ·

Aplikacja na iPhone'a bez Maca, wgrana z Linuksa i za darmo

Algebra działa już na moim iPhonie i iPadzie, a pobrane arkusze otwierają się bez internetu. Żeby zainstalować wersję testową bez własnego Maca i płatnego konta Apple, połączyłem budowanie w chmurze z narzędziami działającymi na Linuksie.

Przejdź do tekstu

Do początku października Algebra była stroną internetową. Dało się ją otworzyć w telefonie, ale wciąż była to strona: z paskiem przeglądarki u góry, bez ikony na ekranie i bez szans na działanie tam, gdzie nie ma zasięgu. 5 października zmieniłem sposób, w jaki chcę na niej zarabiać. Zamiast sprzedawać przede wszystkim godziny lekcji, stawiam na Premium, czyli abonament, w którym platforma sama prowadzi ucznia przez materiał (więcej o tym w kolejnym wpisie). Do tego potrzebuję aplikacji w Google Play i App Store, a nie tylko strony, więc apka przestała być pomysłem na kiedyś.

Jedna strona w dwóch opakowaniach

Nie chciałem budować wszystkiego drugi raz. Ekrany, które uczeń widzi na stronie, zostały te same, a opakowaniem jest Capacitor, czyli narzędzie, które zamyka gotową stronę w aplikacji na Androida i na iOS. Pliki strony jadą w paczce razem z apką, natomiast konto, postępy i wyniki przychodzą z tego samego serwera co na stronie. Różnice są tam, gdzie wymaga tego telefon: zamiast menu z boku jest pasek zakładek na dole (Dziś, Nauka, Arkusze, Gry i Konto), gry działają bez internetu, a arkusze egzaminacyjne można pobrać do pamięci i rozwiązywać w autobusie, w którym zasięg co chwilę znika. Cały komplet arkuszy zajmuje mniej więcej sto megabajtów.

Jakaś apka powstała już wcześniej, tylko że była w niej sama arkada gier i nigdy nie trafiła do ludzi. Tym razem zacząłem od nowa i od całości. Wersję na Androida złożyłem na własnym komputerze i sprawdziłem na emulatorze, czyli telefonie udawanym przez komputer, gdzie sześć nagranych scenariuszy samo przeklikuje apkę i pilnuje, czy wszystko jest na swoim miejscu.

Apple chce Maca

Z iPhone'em jest trudniej, bo aplikację na iOS można zbudować wyłącznie w Xcode, programie Apple, a Xcode działa tylko na Macu. Maca nie mam i nie zamierzałem kupować go dla jednej apki. Rozwiązaniem okazał się Codemagic, serwis, który na czas budowania uruchamia w chmurze wirtualną maszynę z systemem Apple. Cała konfiguracja leży w jednym pliku w moim repozytorium, więc z mojej strony zostaje kilka kliknięć: wybieram wersję, startuję i po mniej więcej sześciu minutach mam gotowy plik aplikacji. Plan darmowy daje 500 minut takiej maszyny w miesiącu, a przy moim tempie to aż nadto.

Był jednak haczyk. Plik z Codemagica nie ma podpisu, a iPhone nie uruchomi aplikacji, której nikt nie podpisał. Podpis zwykle wymaga płatnego konta dewelopera Apple za 99 dolarów rocznie, a tego jeszcze nie wykupiłem, więc szukałem drogi, na której wystarczy zwykłe, darmowe konto Apple.

Z Linuksa przez kabel

Pierwszy plan zakładał, że ostatni krok zrobię na Windowsie, bo najpopularniejszy program do wgrywania takich aplikacji, Sideloadly, potrzebuje iTunes, a iTunes na Linuksie nie istnieje. Do Windowsa wracać nie chciałem, więc sięgnąłem po iloader, mniej znany program, który robi to samo na Linuksie: loguje się moim kontem Apple, sam podpisuje aplikację, dopisuje telefon do konta i wgrywa apkę przez kabel.

Utknąłem już na logowaniu. Linux nie potrafi przedstawić się serwerom Apple tak jak Mac, dlatego iloader korzysta z publicznego pośrednika, który odpowiada za niego, jakby był Makiem. Pierwszy taki serwer zrywał połączenie, przez co przez chwilę wyglądało to na kłopot z kontem. Dopiero po zmianie serwera w ustawieniach logowanie przeszło i 5 października wieczorem Algebra stała na iPhonie 16e, a chwilę później na iPadzie Pro.

Na samym urządzeniu zostały jeszcze dwa kroki. Przy pierwszym uruchomieniu iOS ostrzega przed niezaufanym deweloperem, więc trzeba wejść w Ustawienia, a dalej w Ogólne oraz VPN i urządzenia, i ręcznie zaufać własnemu kontu. Do tego dochodzi tryb dewelopera, który włącza się w ustawieniach prywatności i który wymaga ponownego uruchomienia telefonu.

Siedem dni

Darmowe konto Apple ma swoją cenę, tylko płaci się ją czasem: podpis wygasa po siedmiu dniach i aplikacja przestaje się otwierać. W praktyce oznaczałoby to podłączanie telefonu do komputera co tydzień. Żeby tego uniknąć, 7 października zainstalowałem na obu urządzeniach SideStore, darmowy odpowiednik sklepu dla aplikacji spoza App Store, który odnawia podpis z poziomu samego telefonu. Pomaga mu w tym LocalDevVPN, mała aplikacja z App Store, dzięki której SideStore rozmawia z telefonem tak, jakby ten był podpięty kablem do komputera.

Sprzęt też dorzucił swoje. W pewnym momencie iloader przestał widzieć telefon, a przesyłanie danych urywało się w połowie. Pomogło przełożenie kabla do innego portu w komputerze.

Poprawki bez nowej kompilacji

Najwięcej czasu oszczędza mi rzecz, której z zewnątrz w ogóle nie widać. Od drugiej wersji apka aktualizuje się sama: przy otwarciu sprawdza, czy na serwerze czekają nowsze ekrany, pobiera je w tle i przełącza się na nie, kiedy zejdzie z ekranu. Paczka waży około 18 MB i powstaje przy każdym wydaniu strony, więc poprawiony tekst albo przycisk trafia do telefonu tego samego dnia, bez Codemagica i bez kabla. Nową wersję z chmury buduję tylko wtedy, gdy zmienia się coś w samej aplikacji, na przykład ikona albo uprawnienia do aparatu.

Apka to nie strona w ramce

Kiedy apka już działała, przyszła pora na sprawdzenie, czy da się z niej wygodnie korzystać. Ekrany przeglądałem na komputerze w WebKit, czyli silniku, na którym działa Safari, na kontach testowych ucznia, korepetytora i administratora. Wyszło sporo drobiazgów: przyciski za małe pod palec (teraz mają co najmniej 44 punkty, tyle zaleca Apple), arkusz, który nie chciał się przewijać, i okno czatu wychodzące poza ekran. Gry w zakładce Nauka mieściły się w okienku na około 350 pikseli i trzeba je było przewijać w środku, więc 7 października dostały całą wysokość między zakładkami a dolnym paskiem.

Jedna zmiana wzięła się wprost z tego, jak sam korzystałem z apki. Część stron, na przykład oferta, kontakt czy rezerwacja, otwierała się na początku w przeglądarce, poza aplikacją, i bardzo mi się to nie podobało. Od 6 października w apce mieści się cała strona, łącznie z pokojem lekcyjnym z kamerą i mikrofonem oraz panelem korepetytora, a na zewnątrz wychodzą już tylko płatność i WhatsApp. Dziś rano powstało jeszcze osiem zrzutów ekranu do opisów w Google Play i App Store, bo w sklepie apka musi się jakoś przedstawić.

Ekran powitalny aplikacji Algebra i Spółka z przyciskami do założenia konta i logowaniaZakładka Arkusze CKE w aplikacji: 106 arkuszy, 2775 zadań, 0 złZakładka Gry w aplikacji: Graj i ćwicz matematykę
Powitanie, arkusze i gry, czyli trzy z ośmiu zrzutów przygotowanych do sklepów.

Ile to kosztowało

Na razie nic. Codemagic w planie darmowym, iloader, SideStore i LocalDevVPN są bezpłatne, a do podpisu wystarcza zwykłe konto Apple. Płaci się ograniczeniami: na jednym urządzeniu zmieszczą się najwyżej trzy aplikacje wgrane w ten sposób, a zakup Premium w środku nie zadziała, bo płatności w aplikacjach na iPhone'a obsługuje wyłącznie App Store. Konto z Premium kupionym na stronie działa w apce normalnie.

Ta droga wystarcza mi do testów, ale nie do tego, żeby apkę mógł zainstalować obcy uczeń. Do tego potrzebne jest płatne konto dewelopera, potem TestFlight, czyli oficjalna aplikacja Apple do testów, a na końcu przegląd w App Store. To już jednak temat następnego wpisu, o tym, z czym mierzę się teraz.