Shopify wraca do Swift i Kotlina. Shop przebudowano z pomocą AI
10 września Shopify ogłosiło powrót z React Native do osobnych aplikacji w Swifcie i Kotlinie. Pierwsza z nich, zakupowa aplikacja Shop, trafiła już do sklepów. Według firmy przejście od prototypu do wydania zajęło 12 tygodni z pomocą agentów kodujących.
Shopify uzasadnia decyzję mniejszym nakładem pracy na odtwarzanie funkcji między iOS i Androidem. Oszczędność ma wystarczać, by zrezygnować ze wspólnej implementacji na rzecz bezpośredniego dostępu do narzędzi i możliwości każdej platformy. To zmiana strategii obejmująca również utrzymanie popularnych bibliotek React Native.
Co obejmowało dwanaście tygodni migracji Shop
W opisie migracji zespół rozróżnia tygodniowy prototyp jednego inżyniera od późniejszej pracy nad gotowym produktem. Prototyp odtwarzał część istniejącej aplikacji w SwiftUI, bibliotece interfejsu dla platform Apple. Nie nadawał się jeszcze do wydania. Po decyzji o przebudowie sześciu inżynierów przygotowało podstawy aplikacji i jej główne funkcje; w połowie prac dołączyły zespoły odpowiedzialne za poszczególne obszary. Wersję androidową zbudowano z użyciem Jetpack Compose.
Agenci dostawali działającą implementację React Native jako wzorzec. Trzeba było zachować logowanie użytkowników, powiadomienia oraz zdarzenia analityczne wykorzystywane między innymi przez rekomendacje. Jednocześnie usunięto część ekranów, a inne uproszczono. Dwanaście tygodni opisuje więc przebudowę istniejącego produktu z ustalonym zachowaniem i częściowo zmienionym zakresem.
Shop stał też przed przyjęciem New Architecture, nowej architektury React Native. Wymagałoby to pracy nad integracją modułów natywnych i renderowaniem. Alternatywą dla przebudowy była zatem kolejna inwestycja w dotychczasową aplikację, co ma znaczenie przy porównywaniu kosztów obu decyzji.
Porównywanie zachowania, ekranów i analityki
Zespół rozbudował środowisko pracy agenta Pi o procedurę migracji. Wyspecjalizowani agenci analizowali kod źródłowy, opisywali zachowanie funkcji, przygotowywali plany dla obu platform i sprawdzali zgodność implementacji. Inżynierowie zatwierdzali wymagania oraz plan przed rozpoczęciem programowania. Akceptację przypisano do skrótu wyliczonego z treści planu: każda późniejsza zmiana unieważniała zgodę.
Do kontroli uruchomionej aplikacji powstał Tardis. Udostępniał agentom zdarzenia, dzienniki i stan programu oraz pozwalał wysyłać polecenia. W ustalonych punktach scenariusza zbierał z obu wersji zrzuty ekranów i zdarzenia z odpowiedniego przedziału czasu. Agenci porównywali ich nazwy, liczbę i pola danych. Uwzględniali przy tym naturalne różnice między uruchomieniami, takie jak czas zdarzenia czy identyfikator strony, ale nadal sprawdzali powiązania zdarzeń z właściwą stroną lub obiektem.
Taka kontrola obejmowała więcej niż wygląd ekranu: przeniesiona funkcja miała także wysyłać dane oczekiwane przez pozostałe systemy. Autorzy zastrzegają jednak, że generowany kod potrafił spełniać wymagania funkcjonalne, a mimo to zawierać duplikację, problemy architektoniczne lub wydajnościowe. Nadal potrzebowali specjalistów od iOS i Androida, testów, analizy statycznej oraz przeglądu kodu. Wszystkie te informacje pochodzą z relacji zespołu migracyjnego.
Wyniki dotyczą przebudowanej aplikacji Shop
Shopify opublikowało następujące porównanie starej i nowej wersji. Czas uruchamiania liczono przy zimnym starcie, od dotknięcia ikony do wyświetlenia początkowej zawartości ekranu głównego. Rozmiary dotyczą kompilacji przeznaczonych do wydania.
| Pomiar | Platforma | React Native | Wersja natywna |
|---|---|---|---|
| Zimny start | iOS | 3200 ms | 2466 ms |
| Zimny start | Android | 4433 ms | 2233 ms |
| Rozmiar aplikacji | iOS | 67 MB | 68 MB |
| Rozmiar aplikacji | Android | 293 MB | 184 MB |
Źródło: Shopify, raport migracji Shop. Są to pomiary producenta aplikacji.
Raport nie podaje liczby powtórzeń ani rozrzutu czasów startu. Porównuje przebudowane aplikacje, w których uproszczono także część produktu, więc różnic nie można przypisać wyłącznie zmianie technologii. Nie jest to również pomiar przyspieszenia pracy przez AI.
Firma nie publikuje kosztów modeli, pełnego nakładu pracy zespołów ani porównania tej samej migracji z agentami i bez nich. Deklarowane oszczędności nie mają niezależnego potwierdzenia. Do porównania kosztów utrzymania potrzebne będą dane o pracy nad kolejnymi funkcjami i poprawkami w obu wersjach.
Helix i testowanie logiki bez symulatora
Migracja głównej aplikacji Shopify wciąż trwa, a firma zapowiada jej wydanie jeszcze w 2026 roku. Opisuje przy tym system Helix, który dzieli przenoszenie ekranu na małe, uporządkowane etapy. Każdy musi przejść testy zachowania, porównanie wizualne z działającą aplikacją, dwie kontrole kodu nastawione na szukanie błędów oraz akceptację człowieka przed zatwierdzeniem zmiany.
Shopify oddziela też logikę biznesową od interfejsu, tak aby mogła działać na komputerze bez symulatora telefonu. Agent otrzymuje do niej dostęp przez narzędzie wiersza poleceń, czyli CLI. Może odczytać stan i wykonać operację bez szukania przycisku na zrzucie ekranu. Gdy potrzebny jest interfejs, CLI ma sterować symulatorem zdalnie. Takie rozdzielenie skraca sprawdzanie logiki; zgodność wyglądu i zachowania interfejsu nadal wymaga osobnej kontroli.
Zmiany opiekunów bibliotek React Native
Decyzja obejmuje też projekty używane poza Shopify. Zgodnie z ogłoszeniem firmy:
- React Native Skia będzie sponsorowane do końca 2026 roku. William Candillon ma kontynuować rozwój w osobnym repozytorium i pod nową nazwą; dotychczasowe repozytorium zostanie zarchiwizowane po zakończeniu przejścia.
- FlashList nadal ma otrzymywać poprawki krytycznych problemów ze zgodnością. Shopify rozmawia z firmami o przejęciu długoterminowej opieki.
- Dla Restyle Shopify zapowiada archiwizację repozytorium i utrzymanie działania biblioteki do końca 2026 roku. Po tym terminie zakończy opiekę. Projekt może dalej rozwijać inny zespół.
Zespoły korzystające z tych bibliotek muszą więc uwzględnić zmianę opiekuna lub koniec utrzymania w planach aktualizacji, nawet jeśli pozostają przy React Native.
Źródła
Źródła pierwotne
- Mustafa Ali, Shopify: decyzja o powrocie do natywnych aplikacji, Helix i plany utrzymania bibliotek
- Max Da Silva, Jason Kim i Quique Fagoaga, Shopify: przebieg migracji Shop, narzędzia i wyniki pomiarów
Wykorzystuję treści generowane przez AI jako część mojego codziennego procesu nauki.