Jednostka 2 / 11

Generowanie kodu mobilnego za pomocą sztucznej inteligencji: Kotlin, Swift i rozwój międzyplatformowy

Zyski:

  • Uzyskanie łatwego w utrzymaniu i testowalnego kodu poprzez narzucenie architektury takiej jak MVVM i zażądanie warstwy po warstwie w małych fragmentach, zanim sztuczna inteligencja wygeneruje kod.
  • Umiejętność rozpoznawania pułapek specyficznych dla języka, takich jak bezpieczeństwo zerowe i współprogram w Kotlinie, pętle opcjonalne i pamięci w Swift, i sprawdzanie pod kątem nich wygenerowanego kodu.
  • Możliwość weryfikacji uprawnień i konfiguracji oddzielnie dla każdej platformy w projektach wieloplatformowych (Flutter, React Native).

Sercem rozwoju urządzeń mobilnych jest kod i to właśnie tam pojawiają się najbardziej wymierne korzyści ze sztucznej inteligencji. Jednak zdanie „Niech sztuczna inteligencja napisze za mnie kod” nie jest samo w sobie strategią. Dobre generowanie kodu; Wymaga połączenia odpowiedniego języka, właściwej architektury, właściwych granic i właściwej walidacji. W tej części dowiemy się, jak efektywnie i bezpiecznie korzystać ze sztucznej inteligencji w Swift, języku iOS, Kotlinie, języku Androida i narzędziach wieloplatformowych działających na dwóch platformach z jedną bazą kodu. Celem jest pozycjonowanie sztucznej inteligencji nie jako „automatu kodującego”, ale jako akceleratora, którego architekturę określasz.

Najpierw architektura, potem kod

Najczęstszym błędem jest proszenie sztucznej inteligencji o kod bezpośrednio, bez planu architektonicznego. To jak budowanie ściany bez kładzenia fundamentów. Najpopularniejszą architekturą na urządzeniach mobilnych jest MVVM (Model-View-ViewModel — wzorzec projektowy oddzielający dane, wyświetlacz i logikę wyświetlacza). Oznacza to, że widok jest tylko widokiem, logika i stan znajdują się w ViewModelu, a dane znajdują się w warstwie Modelu. Jeśli od początku nie narzucisz tej separacji AI, powstanie nietestowalna i trudna w utrzymaniu struktura, która upchnie całą logikę w kodzie ekranowym.

Zdrowy proces generowania kodu krok po kroku:

  1. Podaj kontekst. Platforma, język, wersja, architektura, używane biblioteki.
  2. Poproś o warstwy. Najpierw model danych, następnie warstwa sieci/danych, następnie ViewModel, a na końcu ekran.
  3. Poproś o małe kawałki. Jeden ekran lub jedna funkcja; To nie jest gigantyczny plik zawierający 500 linii.
  4. Sprawdź każdy element. Buduj, testuj, integruj; następnie przejdź do następnego utworu.
  5. Poproś o refaktoryzację (popraw kod). krok „uczyń to bardziej czytelnym i testowalnym” po działającym kodzie.
Wskazówka: Powiedz AI „podziel kod według MVVM: która część powinna być Widokiem, która powinna być ViewModelem, a która powinna być Modelem, podaj je osobno”. To pojedyncze zdanie radykalnie poprawia jakość architektury wygenerowanego kodu.

Kotlin i Swift: rozważania specyficzne dla języka

Kotlin (Android) i Swift (iOS) to nowoczesne, bezpieczne języki, ale niosą ze sobą różne pułapki. W Kotlinie bezpieczeństwo zerowe (sprawdzanie, czy zmienna może mieć wartość „null” za pośrednictwem systemu typów) jest czasami luźno wpisywane przez sztuczną inteligencję; niepotrzebny !! operator (znak wymuszający awarię, jeśli ma wartość null) może spowodować awarię aplikacji. W Swift opcjonalne cykle zarządzania i przechowywania mają kluczowe znaczenie; Sztuczna inteligencja może zapomnieć o dodaniu [słabego siebie] w zamknięciach, co spowoduje wyciek pamięci.

Kiedy więc wybierzesz język, odpowiednio udoskonal monit: na przykład „Zachowaj bezpieczeństwo zerowe w Kotlinie, nie używaj !!” lub „Zapobiegaj silnemu zapętlaniu odwołań w zamknięciach w Swift”.

Uwaga: kod asynchroniczny generowany przez sztuczną inteligencję wymaga szczególnej uwagi. Wybranie niewłaściwego zakresu w współprogramach Kotlina lub zablokowanie głównego wątku w async/await w Swift spowoduje zawieszenie aplikacji. AI często popełnia te błędy; Nie ufaj temu bez sprawdzenia.

Rozwój wieloplatformowy: Flutter i React Native

Dla tych, którzy chcą korzystać zarówno z iOS, jak i Androida z jedną bazą kodu, wyróżniają się Flutter (zestaw narzędzi Google oparty na języku Dart) i React Native (rozwiązanie Meta oparte na JavaScript). Sztuczna inteligencja jest również potężna w tych środowiskach, ale czasami omija różnice między platformami (uprawnienia, zasady sklepu, zachowanie specyficzne dla urządzenia). Na przykład we Flutter uprawnienia do kamery są zdefiniowane w różnych plikach na iOS i Androidzie; Sztuczna inteligencja może napisać tylko jeden. W kodzie wieloplatformowym konieczne jest powiedzenie „udziel niezbędnych uprawnień i konfiguracji osobno dla obu platform”.

Podsumowanie wyborów:

Podejście

kiedy

uwagę za pomocą AI

Natywny (Kotlin/Swift)

Najwyższa wydajność, głęboka integracja urządzenia

Każda platforma ma osobny kod; sprawdź dwa razy

Trzepotanie

Jeden zespół, szybki, spójny interfejs użytkownika

Ręcznie sprawdź uprawnienia/ustawienia specyficzne dla platformy

Reaguj natywnie

Dostępny zespół WWW/JS

Dokładnie przetestuj sekcje mostu (mostu natywnego).

trzy mini etui

Przypadek 1 — Pułapka współprogramowalna. Zespół Androida otrzymał funkcję, która pobiera listę produktów z AI. Kod wysyłał żądanie sieciowe w głównym wątku; Na urządzeniu testowym problem nie pojawił się, lecz na słabej sieci aplikacja zawiesiła się na 4 sekundy i wyświetliła ostrzeżenie ANR (Application Not Respons). Zostało to naprawione, gdy AI otrzymało polecenie „wykonania pracy sieciowej w dyspozytorze IO”. Lekcja: współbieżność jest zawsze kontrolowana.

Przypadek 2 — Wyciek pamięci. Programista iOS odkrył, że po 20-krotnym otwarciu i zamknięciu ekranu wygenerowanego przez sztuczną inteligencję pamięć aplikacji wzrosła z 40 MB do 180 MB. Powodem było to, że nie można było usunąć ViewControllera z pamięci z powodu braku [słabego ja] w zamknięciu. Wykres pamięci Xcode ujawnił pułapkę. Lekcja: profil pamięci jest obowiązkowy w programowaniu natywnym.

Przypadek 3 — Różnica platform. Zespół Flutter otrzymał kod dostępu do galerii od AI. Działał na Androidzie, ale ulegał awarii na iOS. Powodem było to, że opis uprawnień do biblioteki zdjęć (NSPhotoLibraryUsageDescription) nie został dodany do pliku Info.plist; AI napisała tylko stronę Androida. Jest to naprawa zajmująca 15 minut, ale gdyby nie została wyłapana, oznaczałaby to odrzucenie ze sklepu.

Słaba zachęta/silna zachęta

Słaby monit: „Napisz kod Kotlina, który pobiera produkty z interfejsu API”.

Potężny monit: „Wygeneruj kod dla Androida/Kotlina, który pobiera listę produktów z interfejsu API REST. - Warstwa sieciowa z modernizacją, funkcją zawieszania - Zadanie sieciowe w Dispatchers.IO; blokowanie głównego wątku - MVVM: Repozytorium -> ViewModel -> Stan interfejsu użytkownika z StateFlow - Stany błędów: brak sieci, oddzielny stan klasy zapieczętowanej dla 4xx, 5xx - Chroń bezpieczeństwo zerowe, !! Używanie !! Eksportuj warstwy jako osobne pliki, 1 zdanie dla każdego wyjaśnienia.

Silne podpowiedzi zapobiegają wpadnięciu wygenerowanego kodu w pułapki poprzednich przypadków.

Szablony do kopiowania

Warstwowy szablon produkcyjny: „Opracuj [funkcję] dla [platforma/język]. Utwórz w kolejności: 1) Model danych (klasa danych/struktura) 2) Warstwa sieci lub źródła danych 3) Repozytorium 4) ViewModel (zarządzanie stanem) 5) Ekran (UI) Eksportuj każdą warstwę osobno, dodaj pomiędzy nimi notatkę dotyczącą integracji.

Szablon zabezpieczeń specyficzny dla języka (Kotlin): „Przejrzyj ten kod Kotlina: – Wyczyść użycie !! i typu platformy – Sprawdź zakres Coroutine i wybór dyspozytora – Czy istnieją wywołania blokujące główny wątek? [kod]”

Szablon zabezpieczeń specyficzny dla języka (Swift): „Przejrzyj ten kod Swift: – Ryzyko zatrzymania cyklu w zamknięciach (słabe/nieposiadane ja) – Użycie opcjonalnego wymuszonego rozpakowania (!) – Ciężka praca, którą należy przenieść z głównego wątku [kod]”

Szablon kontroli międzyplatformowej: „Lista wszystkich uprawnień, konfiguracji i kodu specyficznego dla platformy wymaganego dla tej funkcji [Flutter/React Native] zarówno w systemie iOS, jak i Android. Podaj osobne wpisy Info.plist i AndroidManifest.xml”.

Typowe błędy

  • Pytanie o kod bez narzucania architektury. Rezultat: niemożliwa do przetestowania struktura, która wciska wszystko na ekran.
  • Zaufanie bez testowania współbieżnego kodu. Bloki głównego wątku i nieprawidłowy zakres są najczęstszymi przyczynami awarii.
  • Pomijając zarządzanie pamięcią. Zwłaszcza przecieki w zamknięciach iOS; Bez robienia profilu nie jest to zauważalne.
  • Omijanie różnic między platformami. W narzędziach wieloplatformowych uprawnienia i konfiguracja są zapisywane osobno na dwóch platformach.
  • Brak weryfikacji wersji biblioteki. Sztuczna inteligencja może sugerować przestarzałe API Retrofit/Alamofire; Sprawdź w oficjalnym dokumencie.
  • Tworzenie jednego gigantycznego pliku. Niemożliwe do utrzymania i sprawdzenia; poproś o warstwy.

Podsumowując

Generowanie kodu za pomocą sztucznej inteligencji ma ogromne możliwości, jeśli określisz architekturę. Najpierw nałóż strukturę taką jak MVVM, następnie zażądaj warstwa po warstwie i małymi fragmentami, skompiluj i przetestuj każdy element. Bezpieczeństwo zerowe i współprogram w Kotlinie, opcjonalne i pętle pamięci w Swift wymagają szczególnej uwagi. W narzędziach wieloplatformowych uprawnienia i konfiguracja są pisane osobno dla każdej platformy. Silny monit z góry informuje o języku, wersji, architekturze i regułach bezpieczeństwa specyficznych dla języka; Zapobiega to najczęstszym błędom związanym z awariami i wyciekami podczas produkcji.

Zadanie aplikacji

Aby wyświetlić ekran listy (np. „lista kontaktów”), poproś sztuczną inteligencję o kod, korzystając z „szablonu wytwarzania przyrostowego” na wybranej platformie (Kotlin lub Swift). Dodaj wygenerowany kod do projektu, skompiluj go i wykonaj następujące dwa sprawdzenia: (1) czy sieć/długi proces działa w głównym wątku, (2) czy zerowe/opcjonalne bezpieczeństwo jest prawidłowe? Poproś sztuczną inteligencję o naprawienie znalezionego problemu z szablonem zabezpieczeń specyficznym dla języka.

lista kontrolna

  • [ ] Określiłem architekturę (MVVM itp.) przed zażądaniem kodu
  • [ ] Chciałem to warstwa po warstwie, w małych kawałkach
  • [ ] Sprawdziłem, że kod współbieżny nie blokuje głównego wątku
  • [ ] Sprawdziłem zerowe/opcjonalne zarządzanie bezpieczeństwem i pamięcią
  • [ ] Sprawdziłem uprawnienia/ustawienia dwóch platform oddzielnie w projekcie wieloplatformowym
  • [ ] Sprawdziłem wersje bibliotek i podpisy API na podstawie oficjalnej dokumentacji