Jedinica 2 / 11

Generiranje mobilnog koda s umjetnom inteligencijom: Kotlin, Swift i međuplatformski razvoj

Dobici:

  • Dobivanje koda koji se lako održava i koji se može testirati nametanjem arhitekture kao što je MVVM i zahtjevom sloj po sloj u malim dijelovima prije nego što umjetna inteligencija generira kod.
  • Sposobnost prepoznavanja zamki specifičnih za jezik kao što su null security i coroutine u Kotlinu, izborne i memorijske petlje u Swiftu, te provjera generiranog koda u odnosu na njih.
  • Mogućnost provjere dopuštenja i konfiguracije zasebno za svaku platformu u višeplatformskim (Flutter, React Native) projektima

Srce mobilnog razvoja je kod, i tu se pojavljuju najopipljiviji dobici od umjetne inteligencije. Ali rečenica "Neka AI napiše kod za mene" nije strategija sama po sebi. Dobro generiranje koda; Zahtijeva kombinaciju pravog jezika, prave arhitekture, pravih granica i prave validacije. U ovoj jedinici naučit ćemo kako učinkovito i sigurno koristiti AI za Swift, jezik iOS-a, Kotlin, jezik Androida, i alate za više platformi koji rade na dvije platforme s jednom bazom koda. Cilj je pozicionirati AI ne kao "automat koda", već kao akcelerator čiju arhitekturu vi određujete.

Prvo arhitektura, a potom kod

Najčešća pogreška je izravno tražiti kôd od umjetne inteligencije bez arhitektonskog plana. Ovo je kao da gradite zid bez postavljanja temelja. Najčešća arhitektura na mobilnim uređajima je MVVM (Model-View-ViewModel — obrazac dizajna koji razdvaja podatke, zaslon i logiku zaslona). To znači da je pogled samo pogled, logika i stanje žive u ViewModelu, a podaci su u sloju Modela. Ako AI-ju ne nametnete ovo odvajanje od samog početka, on proizvodi strukturu koju nije moguće testirati i koju je teško održavati i koja svu logiku trpa u kôd zaslona.

Zdrav tijek generiranja koda korak po korak:

  1. Dajte kontekst. Platforma, jezik, verzija, arhitektura, korištene biblioteke.
  2. Zatražite slojeve. Prvo podatkovni model, zatim mrežni/podatkovni sloj, zatim ViewModel, na kraju zaslon.
  3. Tražite male komadiće. Jedan ekran ili jedna funkcija; To nije golema datoteka od 500 redaka.
  4. Provjerite svaki komad. Izgradite, testirajte, integrirajte; zatim prijeđite na sljedeću stazu.
  5. Zatražite refaktor (poboljšajte kod). korak "učini ovo čitljivijim i testiranijim" nakon radnog koda.
Savjet: Recite AI-u "podijeli kod prema MVVM: koji bi dio trebao biti View, koji bi trebao biti ViewModel, koji bi trebao biti Model, dajte ih odvojeno". Ova jedna rečenica dramatično poboljšava kvalitetu arhitekture generiranog koda.

Kotlin i Swift: razmatranja specifična za jezik

Kotlin (Android) i Swift (iOS) su moderni, sigurni jezici, ali imaju različite zamke. U Kotlinu, null sigurnost (provjera može li varijabla biti "null" putem sustava tipa) ponekad je labavo upisan od strane AI; nepotrebno!! operator (znak koji izaziva rušenje ako je nula) može srušiti aplikaciju. U Swiftu su izborni ciklusi upravljanja i zadržavanja ključni; AI može zaboraviti dodati [weak self] u zatvaranjima i to će izazvati curenje memorije.

Dakle, kada odaberete jezik, usavršite upit u skladu s tim: poput "Očuvaj nultu sigurnost u Kotlinu, ne koristi !!" ili "Spriječiti jake referentne petlje u zatvaranjima u Swiftu".

Oprez: asinkroni kod proizveden AI zahtijeva posebnu pozornost. Odabir pogrešnog opsega u Kotlin korutinama ili blokiranje glavne niti u async/await u Swiftu će zamrznuti aplikaciju. AI često radi ove pogreške; Ne vjerujte mu bez testiranja.

Razvoj na više platformi: Flutter i React Native

Za one koji žele ići na iOS i Android s jednom bazom koda, ističu se Flutter (Googleov skup alata temeljen na jeziku Dart) i React Native (Meta-ino rješenje temeljeno na JavaScriptu). AI je također moćan u tim okruženjima, ali ponekad zaobilazi razlike u platformi (dopuštenja, pravila trgovine, ponašanje specifično za uređaj). Na primjer, u Flutteru je dopuštenje kamere definirano u različitim datotekama na iOS-u i Androidu; AI može napisati samo jedan. U međuplatformskom kodu bitno je reći "odijelite potrebna dopuštenja i konfiguraciju za obje platforme zasebno".

Sažetak izbora:

pristup

kada

pozornost s AI

Izvorni (Kotlin/Swift)

Najveća izvedba, duboka integracija uređaja

Svaka platforma ima zaseban kod; provjerite dva puta

lepršati

Jedan tim, brzo, dosljedno korisničko sučelje

Ručno provjerite dozvole/postavke specifične za platformu

React Native

Web/JS tim dostupan

Pažljivo testirajte dijelove mosta (native bridge).

tri mini kućišta

Slučaj 1 — Korutinska zamka. Tim za Android dobio je funkciju koja iz AI-ja izvlači popis proizvoda. Kod je postavljao mrežni zahtjev u glavnoj niti; Problem se nije pojavio na testnom uređaju, ali na slaboj mreži aplikacija se zamrznula na 4 sekunde i dala upozorenje ANR (Application Not Responding). To je popravljeno kada je AI-u rečeno da "obavlja mrežni posao u IO dispečeru". Lekcija: istovremenost je uvijek kontrolirana.

Slučaj 2 — curenje memorije. Razvojni programer za iOS otkrio je da se nakon otvaranja i zatvaranja zaslona generiranog umjetnom inteligencijom 20 puta, memorija aplikacije povećala s 40 MB na 180 MB. Razlog je bio taj što se ViewController nije mogao izbrisati iz memorije zbog nedostatka [weak self] u zatvaranju. Xcodeov memorijski grafikon otkrio je zamku. Lekcija: memorijski profil obavezan je u izvornom razvoju.

Slučaj 3 — Razlika u platformi. Tim Fluttera dobio je kod za pristup galeriji od umjetne inteligencije, radio je na Androidu, ali se srušio na iOS-u. Razlog je bio taj što opis dopuštenja knjižnice fotografija (NSPhotoLibraryUsageDescription) nije dodan u datoteku Info.plist; AI je napisao samo stranu Androida. To je popravak od 15 minuta, ali trgovina bi ga odbila da nije uhvaćen.

Slab upit / Jak upit

Slab upit: "Napišite Kotlin kod koji izvlači proizvode iz API-ja."

Moćan upit: "Generiraj kod za Android/Kotlin koji povlači popis proizvoda iz REST API-ja.- Mrežni sloj s retrofitom, obustavi funkciju- Mrežni posao u Dispatchers.IO; blokira glavnu nit- MVVM: Spremište -> ViewModel -> UI stanje s StateFlow- Stanja pogreške: nema mreže, odvojeno stanje zapečaćene klase za 4xx, 5xx- Zaštiti nultu sigurnost, !! Korištenje !! Izvoz slojevi kao zasebne datoteke, 1 rečenica objašnjava."

Snažni prompti sprječavaju da generirani kod upadne u zamke prethodnih slučajeva.

Predlošci koji se mogu kopirati

Slojeviti proizvodni predložak: "Razvijte [značajku] za [platformu/jezik]. Proizvodite redoslijedom: 1) Model podataka (klasa podataka/struktura) 2) Sloj mreže ili izvora podataka 3) Spremište 4) Model prikaza (upravljanje stanjem) 5) Zaslon (UI) Izvezite svaki sloj zasebno, dodajte bilješku o integraciji između njih."

Sigurnosni predložak specifičan za jezik (Kotlin): "Pregledajte ovaj Kotlin kod: - Očistite upotrebu !! i vrstu platforme - Provjerite opseg Coroutine i odabir otpremnika - Postoje li pozivi koji blokiraju glavnu nit? [kod]"

Sigurnosni predložak specifičan za jezik (Swift): "Pregledajte ovaj Swift kod: - Rizik od zadržavanja ciklusa u zatvaranjima (slabo/bez posjedovanja) - Upotreba izbornog prisilnog odmotavanja (!) - Težak posao koji treba premjestiti iz glavne niti [kod]"

Kontrolni predložak za više platformi: "Navedite sva dopuštenja, konfiguracije i kôd specifičan za platformu koji je potreban za ovu značajku [Flutter/React Native] na iOS-u i Androidu. Navedite zasebne unose Info.plist i AndroidManifest.xml."

Uobičajene greške

  • Traženje koda bez nametanja arhitekture. Rezultat: neprovjerljiva struktura koja sve trpa na ekran.
  • Povjerenje bez testiranja istovremenog koda. Blokovi glavne niti i netočan opseg najčešći su uzroci rušenja.
  • Previd u upravljanje memorijom. Osobito curenja u iOS zatvaračima; Nije uočljivo bez snimanja profila.
  • Zaobilaženje razlika u platformi. U alatima za više platformi dopuštenja i konfiguracija pišu se odvojeno na dvije platforme.
  • Ne provjerava se verzija knjižnice. AI može predložiti zastarjeli Retrofit/Alamofire API; Provjerite službenim dokumentom.
  • Izrada jedne goleme datoteke. Nemoguće za održavanje i provjeru; tražiti slojeve.

Ukratko

Generiranje koda pomoću umjetne inteligencije moćno je kada odredite arhitekturu. Prvo nametnite strukturu poput MVVM, zatim zahtijevajte sloj po sloj i u malim dijelovima, kompajlirajte i testirajte svaki dio. Null sigurnost i korutina u Kotlinu, izborne i memorijske petlje u Swiftu zahtijevaju posebnu pozornost. U alatima za više platformi dopuštenja i konfiguracija se pišu zasebno za svaku platformu. Jaki prompt govori jezik, verziju, arhitekturu i sigurnosna pravila specifična za jezik unaprijed; Time se sprječavaju najčešći kvarovi i pogreške curenja u proizvodnji.

Zadatak aplikacije

Za zaslon s popisom (npr. "popis kontakata") zatražite kod od AI pomoću "predloška aditivne proizvodnje" na platformi po vašem izboru (Kotlin ili Swift). Dodajte generirani kod u projekt, prevedite ga i napravite ove dvije provjere: (1) izvodi li se mrežni/dugi proces na glavnoj niti, (2) je li null/optional sigurnosna ispravnost? Neka AI riješi problem koji pronađete sa sigurnosnim predloškom za određeni jezik.

popis za provjeru

  • [ ] Specificirao sam arhitekturu (MVVM itd.) prije traženja koda
  • [ ] Htjela sam sloj po sloj, u malim komadićima
  • [ ] Testirao sam da istovremeni kod ne blokira glavnu nit
  • [ ] Označio sam null/optional security and memory management
  • [ ] Odvojeno sam provjerio dopuštenja/postavke dviju platformi u višeplatformskom projektu
  • [ ] Provjerio sam verzije knjižnice i API potpise iz službene dokumentacije