Enota 2 / 11

Generiranje mobilne kode z umetno inteligenco: Kotlin, Swift in medplatformski razvoj

Dobički:

  • Pridobivanje kode, ki jo je enostavno vzdrževati in jo je mogoče preizkusiti, z uvedbo arhitekture, kot je MVVM, in zahtevanjem sloja za slojem v majhnih delih, preden umetna inteligenca ustvari kodo.
  • Sposobnost prepoznavanja pasti, specifičnih za jezik, kot so ničelna varnost in korutina v Kotlinu, izbirne in pomnilniške zanke v Swiftu, ter preverjanje ustvarjene kode glede nanje.
  • Možnost preverjanja dovoljenj in konfiguracije ločeno za vsako platformo v projektih med platformami (Flutter, React Native)

Srce mobilnega razvoja je koda in tu se pojavijo najbolj otipljivi dobički umetne inteligence. Toda stavek "Naj AI napiše kodo zame" ni strategija sama po sebi. Dobro ustvarjanje kode; Zahteva kombinacijo pravega jezika, prave arhitekture, pravih meja in pravilne validacije. V tej enoti se bomo naučili, kako učinkovito in varno uporabljati AI za Swift, jezik iOS-a, Kotlin, jezik Androida, in orodja za več platform, ki delujejo na dveh platformah z eno samo kodo. Cilj je postaviti AI ne kot "avtomat kode", temveč kot pospeševalnik, katerega arhitekturo določite sami.

Najprej arhitektura, nato koda

Najpogostejša napaka je, da AI zahteva kodo neposredno brez arhitekturnega načrta. To je kot gradnja zidu brez postavitve temeljev. Najpogostejša arhitektura v mobilnih napravah je MVVM (Model-View-ViewModel — oblikovalski vzorec, ki ločuje podatke, zaslon in logiko zaslona). To pomeni, da je pogled le pogled, logika in stanje živita v ViewModelu, podatki pa so v sloju Model. Če tega ločevanja ne vsilite umetni inteligenci že od samega začetka, ustvari strukturo, ki jo ni mogoče preizkusiti in jo je težko vzdrževati, ki stlači vso logiko v kodo zaslona.

Zdrav potek ustvarjanja kode korak za korakom:

  1. Podajte kontekst. Platforma, jezik, različica, arhitektura, uporabljene knjižnice.
  2. Prosite za plasti. Najprej podatkovni model, nato omrežna/podatkovna plast, nato ViewModel, nazadnje zaslon.
  3. Prosite za majhne koščke. En zaslon ali ena funkcija; To ni ogromna 500-vrstična datoteka.
  4. Preverite vsak kos. Zgradite, preizkusite, integrirajte; nato pa nadaljujte na naslednjo skladbo.
  5. Zahtevajte refaktor (izboljšajte kodo). korak "naredi to bolj berljivo in preizkuljivo" za delovno kodo.
Namig: Povejte AI ​​"razdeli kodo glede na MVVM: kateri del naj bo View, kateri ViewModel, kateri Model, dajte jih ločeno". Ta en sam stavek dramatično izboljša arhitekturno kakovost ustvarjene kode.

Kotlin in Swift: premisleki, specifični za jezik

Kotlin (Android) in Swift (iOS) sta sodobna, varna jezika, vendar imata različne pasti. V Kotlinu umetna inteligenca včasih ohlapno vtipka ničelno varnost (preverjanje, ali je spremenljivka lahko "nična" prek sistema tipov); nepotrebno!! operator (znak, ki povzroči zrušitev, če je nič) lahko zruši aplikacijo. V Swiftu so izbirni cikli upravljanja in hrambe kritični; AI lahko pozabi dodati [šibek jaz] v zaprtja in to bo povzročilo uhajanje pomnilnika.

Torej, ko izberete jezik, ustrezno izpilite poziv: na primer "Ohrani ničelno varnost v Kotlinu, ne uporabljaj!!" ali "Preprečite močno referenčno zanko v zaprtjih v Swiftu".

Pozor: asinhrona koda, ki jo ustvari umetna inteligenca, zahteva posebno pozornost. Izbira napačnega obsega v korrutinah Kotlin ali blokiranje glavne niti v async/await v Swiftu bo zamrznila aplikacijo. AI pogosto dela te napake; Ne zaupajte, ne da bi ga preizkusili.

Razvoj na več platformah: Flutter in React Native

Za tiste, ki želijo preiti na iOS in Android z eno samo osnovo kode, izstopata Flutter (Googlov komplet orodij, ki temelji na jezikih Dart) in React Native (Metina rešitev, ki temelji na JavaScriptu). Umetna inteligenca je zmogljiva tudi v teh okoljih, vendar včasih zaobide razlike v platformi (dovoljenja, pravila trgovine, vedenje, specifično za napravo). Na primer, v Flutterju je dovoljenje za kamero definirano v različnih datotekah v sistemih iOS in Android; AI lahko napiše samo eno. V kodi za več platform je bistveno reči "dodeli potrebna dovoljenja in konfiguracijo za obe platformi ločeno".

Povzetek volitev:

Pristop

kdaj

pozornost z AI

Domače (Kotlin/Swift)

Najvišja zmogljivost, globoka integracija v napravo

Vsaka platforma ima ločeno kodo; preveri dvakrat

Flutter

Ena ekipa, hiter, dosleden uporabniški vmesnik

Ročno preverite dovoljenja/nastavitve, specifične za platformo

React Native

Spletna/JS ekipa je na voljo

Previdno preizkusite odseke mostu (native bridge).

trije mini kovčki

1. primer – past korutine. Ekipa za Android je dobila funkcijo, ki potegne seznam izdelkov iz AI. Koda je izdelala omrežno zahtevo v glavni niti; Na testni napravi se težava ni pojavila, na šibkem omrežju pa je aplikacija zamrznila za 4 sekunde in izdala opozorilo ANR (Application Not Responding). Popravljeno je bilo, ko je bilo umetni inteligenci rečeno, naj "opravi omrežno delo v dispečerju IO". Nauk: sočasnost je vedno nadzorovana.

Primer 2 – Puščanje pomnilnika. Razvijalec za iOS je ugotovil, da se je po 20-kratnem odpiranju in zapiranju zaslona, ​​ki ga ustvari umetna inteligenca, pomnilnik aplikacije povečal s 40 MB na 180 MB. Razlog je bil, da ViewControllerja ni bilo mogoče počistiti iz pomnilnika zaradi manjkajočega [šibkega sebe] v zaprtju. Xcodeov spominski graf je razkril past. Lekcija: spominski profil je obvezen pri izvornem razvoju.

Primer 3 – razlika v platformi. Ekipa Flutter je dobila kodo za dostop do galerije od umetne inteligence, delovala je v Androidu, vendar se je zrušila v iOS-u. Razlog je bil, da opis dovoljenj za knjižnico fotografij (NSPhotoLibraryUsageDescription) ni bil dodan v datoteko Info.plist; AI je napisal samo stran Android. To je 15-minutni popravek, vendar bi bila trgovina zavrnjena, če ga ne bi ujeli.

Šibek poziv/močan poziv

Šibek poziv: "Napišite kodo Kotlin, ki potegne izdelke iz API-ja."

Zmogljiv poziv: "Ustvari kodo za Android/Kotlin, ki potegne seznam izdelkov iz REST API-ja. - Omrežna plast z naknadno vgradnjo, začasna funkcija - Omrežno opravilo v Dispatchers.IO; blokiranje glavne niti - MVVM: Repozitorij -> ViewModel -> Stanje uporabniškega vmesnika s StateFlow- Stanja napake: ni omrežja, ločeno stanje zapečatenega razreda za 4xx, 5xx - Zaščita ničelne varnosti, !! Uporaba !! Izvoz plasti kot ločene datoteke, vsaka razlaga po 1 stavek."

Močno pozivanje preprečuje, da bi ustvarjena koda padla v pasti prejšnjih primerov.

Kopirane predloge

Večplastna produkcijska predloga: "Razvijte [funkcijo] za [platformo/jezik]. Izdelajte po vrstnem redu: 1) Podatkovni model (podatkovni razred/struktura) 2) Omrežje ali plast vira podatkov 3) Repozitorij 4) Pogledni model (upravljanje stanja) 5) Zaslon (UI) Izvozite vsako plast posebej, med njima dodajte opombo o integraciji."

Varnostna predloga, specifična za jezik (Kotlin): "Preglejte to kodo Kotlin: - Počistite uporabo !! in vrsto platforme - Preverite obseg Coroutine in izbiro odpremnika - Ali obstajajo klici, ki blokirajo glavno nit? [koda]"

Varnostna predloga, specifična za jezik (Swift): "Preglejte to kodo Swift: - Tveganje cikla zadrževanja pri zapiranjih (šibek/nelasten sam) - Uporaba izbirnega prisilnega odvijanja (!) - Težko delo, ki ga je treba premakniti iz glavne niti [koda]"

Predloga za nadzor med platformami: "Navedite vsa dovoljenja, konfiguracije in kodo, specifično za platformo, ki je potrebna za to funkcijo [Flutter/React Native] tako v iOS kot Android. Navedite ločena vnosa Info.plist in AndroidManifest.xml."

Pogoste napake

  • Zahtevanje kode brez vsiljevanja arhitekture. Rezultat: nepreizkušena struktura, ki vse stlači na zaslon.
  • Zaupanje brez testiranja sočasne kode. Bloki glavne niti in nepravilen obseg so najpogostejši vzroki za zrušitve.
  • Spregledanje upravljanja pomnilnika. Še posebej puščanje v zapiralih iOS; Ni opazno brez zajema profila.
  • Zaobiti razlike v platformi. V orodjih za več platform so dovoljenja in konfiguracija napisana ločeno na obeh platformah.
  • Ne preverjam različice knjižnice. AI lahko predlaga zastarel API Retrofit/Alamofire; Preverite z uradnim dokumentom.
  • Izdelava ene same ogromne datoteke. Nemogoče vzdrževati in preverjati; prosite za plasti.

Če povzamem

Generiranje kode z AI je zmogljivo, ko določite arhitekturo. Najprej vsilite strukturo, kot je MVVM, nato zahtevajte plast za plastjo in v majhnih delih prevedite in preizkusite vsak del. Ničelna varnost in korutina v Kotlinu, neobvezne in pomnilniške zanke v Swiftu zahtevajo posebno pozornost. V orodjih za več platform so dovoljenja in konfiguracija napisana ločeno za vsako platformo. Močan poziv vnaprej pove jezik, različico, arhitekturo in varnostna pravila, specifična za jezik; To preprečuje najpogostejše zrušitve in napake pri puščanju v proizvodnji.

Aplikacijska naloga

Za zaslon s seznamom (npr. »seznam stikov«) zahtevajte kodo od umetne inteligence z uporabo »predloge za aditivno proizvodnjo« v vaši izbrani platformi (Kotlin ali Swift). Dodajte ustvarjeno kodo v projekt, jo prevedite in opravite ti dve preveritvi: (1) ali se omrežni/dolgi proces izvaja v glavni niti, (2) ali je ničelna/neobvezna varnost pravilna? Umetna inteligenca naj odpravi težavo, ki jo najdete z varnostno predlogo za določen jezik.

kontrolni seznam

  • [ ] Preden sem zahteval kodo, sem določil arhitekturo (MVVM itd.).
  • [ ] Hotel sem plast za plastjo, v majhnih koščkih
  • [ ] Preizkusil sem, da sočasna koda ne blokira glavne niti
  • [ ] Označil sem ničelno/izbirno upravljanje varnosti in pomnilnika
  • [ ] Preveril sem dovoljenja/nastavitve dveh platform ločeno v projektu med platformami
  • [ ] Preveril sem različice knjižnice in podpise API-jev iz uradne dokumentacije