Yunit 2 / 11

Pagbuo ng Mobile Code na may Artificial Intelligence: Kotlin, Swift at Cross-Platform Development

Mga nadagdag:

  • Pagkuha ng madaling mapanatili at masusubok na code sa pamamagitan ng pagpapataw ng isang arkitektura tulad ng MVVM at paghiling ng layer sa pamamagitan ng layer sa maliliit na piraso bago magkaroon ng artificial intelligence na bumuo ng code.
  • Kakayahang makilala ang mga bitag na partikular sa wika gaya ng null na kaligtasan at coroutine sa Kotlin, opsyonal at memory loop sa Swift, at suriin ang nabuong code laban sa mga ito.
  • Kakayahang i-verify ang mga pahintulot at configuration nang hiwalay para sa bawat platform sa cross-platform (Flutter, React Native) na mga proyekto

Ang puso ng pagpapaunlad ng mobile ay code, at doon lumalabas ang mga pinakanakikitang pakinabang mula sa AI. Ngunit ang pangungusap na "Hayaan ang AI na magsulat ng code para sa akin" ay hindi isang diskarte sa sarili nitong. Magandang pagbuo ng code; Nangangailangan ito ng pagsasama-sama ng tamang wika, tamang arkitektura, tamang mga hangganan, at tamang pagpapatunay. Sa unit na ito, matututunan natin kung paano gamitin ang AI nang mahusay at ligtas para sa Swift, ang wika ng iOS, Kotlin, ang wika ng Android, at mga cross-platform na tool na tumatakbo sa dalawang platform na may iisang code base. Ang layunin ay iposisyon ang AI hindi bilang isang "code automat" ngunit bilang isang accelerator na ang arkitektura ay iyong tinutukoy.

Arkitektura muna, code pangalawa

Ang pinakakaraniwang pagkakamali ay direktang humingi ng code sa AI nang walang plano sa arkitektura. Ito ay tulad ng pagtatayo ng pader na walang pundasyon. Ang pinakakaraniwang arkitektura sa mobile ay MVVM (Model-View-ViewModel — isang pattern ng disenyo na naghihiwalay sa data, display, at logic ng display). Nangangahulugan ito na ang view ay isang view lamang, ang logic at estado ay nakatira sa ViewModel, at ang data ay nasa layer ng Modelo. Kung hindi mo ipapataw ang paghihiwalay na ito sa AI mula sa simula, ito ay bubuo ng hindi masusubok at mahirap mapanatili na istraktura na naglalagay ng lahat ng lohika sa screen code.

Isang malusog na daloy ng pagbuo ng code hakbang-hakbang:

  1. Ibigay ang konteksto. Platform, wika, bersyon, arkitektura, mga aklatan na ginamit.
  2. Humingi ng mga layer. Una ang modelo ng data, pagkatapos ang layer ng network/data, pagkatapos ang ViewModel, huling sa screen.
  3. Humingi ng maliliit na piraso. Isang screen o isang function; Ito ay hindi isang higanteng 500-line na file.
  4. I-verify ang bawat piraso. Bumuo, subukan, pagsamahin; pagkatapos ay lumipat sa susunod na track.
  5. Humiling ng refactor (pagbutihin ang code). "gawin itong mas nababasa at nasusubok" na hakbang pagkatapos ng gumaganang code.
Hint: Sabihin sa AI "hatiin ang code ayon sa MVVM: kung aling bahagi ang dapat na View, na dapat ay ViewModel, na dapat ay Modelo, bigyan sila ng hiwalay". Ang solong pangungusap na ito ay kapansin-pansing nagpapabuti sa kalidad ng arkitektura ng nabuong code.

Kotlin at Swift: mga pagsasaalang-alang na partikular sa wika

Ang Kotlin (Android) at Swift (iOS) ay moderno, secure na mga wika, ngunit mayroon silang magkaibang mga pitfalls. Sa Kotlin, ang null safety (pagsusuri kung ang isang variable ay maaaring maging "null" sa pamamagitan ng type system) ay minsan ay maluwag na na-type ng AI; hindi kailangan!! operator (ang palatandaan na pumipilit ng pag-crash kung ito ay null) ay maaaring mag-crash sa application. Sa Swift, ang mga opsyonal na mga siklo ng pamamahala at pagpapanatili ay kritikal; Maaaring makalimutan ng AI na magdagdag ng [mahina sa sarili] sa mga pagsasara at lilikha ito ng memory leak.

Kaya kapag pumili ka ng isang wika, ihasa ang prompt nang naaayon: tulad ng "Panatilihin ang null na kaligtasan sa Kotlin, huwag gumamit !!" o "Pigilan ang malakas na pag-loop ng reference sa mga pagsasara sa Swift".

Babala: Ang asynchronous na code na ginawa ng AI ay nangangailangan ng espesyal na atensyon. Ang pagpili sa maling saklaw sa Kotlin coroutines o pagharang sa pangunahing thread sa async/paghihintay sa Swift ay mag-freeze sa application. Madalas na ginagawa ng AI ang mga pagkakamaling ito; Huwag magtiwala dito nang hindi sinusubukan.

Pag-develop ng cross-platform: Flutter at React Native

Para sa mga gustong pumunta sa iOS at Android na may iisang code base, ang Flutter (Google's Dart language-based toolkit) at React Native (Meta's JavaScript-based solution) ay namumukod-tangi. Makapangyarihan din ang AI sa mga environment na ito, ngunit minsan ay nilalampasan ang mga pagkakaiba sa platform (mga pahintulot, panuntunan sa tindahan, pag-uugaling partikular sa device). Halimbawa, sa Flutter, ang pahintulot sa camera ay tinukoy sa iba't ibang mga file sa iOS at Android; Ang AI ay maaari lamang magsulat ng isa. Sa cross-platform code, mahalagang sabihing "ibigay ang mga kinakailangang pahintulot at configuration para sa parehong platform nang hiwalay."

Buod ng halalan:

Diskarte

kailan

pansin sa AI

Katutubo (Kotlin/Swift)

Pinakamataas na pagganap, malalim na pagsasama ng device

Ang bawat platform ay may hiwalay na code; i-verify nang dalawang beses

Kumaway

Isang team, mabilis, pare-pareho ang UI

Manu-manong suriin ang pahintulot/mga setting na partikular sa platform

React Native

Available ang Web/JS team

Subukang mabuti ang mga seksyon ng tulay (katutubong tulay).

tatlong mini case

Kaso 1 — Coroutine trap. Nakakuha ang Android team ng function na kumukuha ng listahan ng produkto mula sa AI. Ang code ay gumagawa ng kahilingan sa network sa pangunahing thread; Ang problema ay hindi lumitaw sa pagsubok na aparato, ngunit sa mahinang network, ang application ay nagyelo sa loob ng 4 na segundo at nagbigay ng ANR (Application Not Responding) na babala. Naayos ito noong sinabihan ang AI na "gawin ang network work sa IO dispatcher". Aralin: ang concurrency ay palaging kinokontrol.

Kaso 2 — Tumagas ang memorya. Nalaman ng isang developer ng iOS na pagkatapos buksan at isara ang isang screen na binuo ng AI nang 20 beses, tumaas ang memory ng app mula 40 MB hanggang 180 MB. Ang dahilan ay ang ViewController ay hindi ma-clear mula sa memorya dahil sa isang nawawalang [mahina sa sarili] sa pagsasara. Inihayag ng memory graph ng Xcode ang bitag. Aralin: ang memory profile ay sapilitan sa katutubong pag-unlad.

Kaso 3 — Pagkakaiba sa platform. Ang isang koponan ng Flutter ay nakakuha ng gallery access code mula sa AI, gumagana ito sa Android ngunit nag-crash sa iOS. Ang dahilan ay ang paglalarawan ng pahintulot sa library ng larawan (NSPhotoLibraryUsageDescription) ay hindi naidagdag sa Info.plist file; Isinulat lamang ng AI ang panig ng Android. Ito ay isang 15 minutong pag-aayos, ngunit ito ay isang pagtanggi sa tindahan kung hindi ito nahuli.

Mahinang prompt / Malakas na prompt

Mahinang prompt: "Isulat ang Kotlin code na kumukuha ng mga produkto mula sa API."

Napakahusay na prompt: "Bumuo ng code para sa Android/Kotlin na kumukuha ng listahan ng produkto mula sa REST API.- Network layer na may retrofit, suspindihin ang function- Network job sa Dispatchers.IO; blocking main thread- MVVM: Repository -> ViewModel -> UI state na may StateFlow- Error states: walang network, hiwalay na selyadong class state para sa 4xx, 5xx- Protect na may hiwalay na mga file sa 4xx, 5xx- Protect!! ipaliwanag."

Pinipigilan ng malakas na pag-prompt ang nabuong code na mahulog sa mga bitag ng mga nakaraang kaso.

Mga nakopyang template

Layered na template ng produksyon: "Bumuo ng [feature] para sa [platform/language]. Produce in order:1) Data model (data class/struct)2) Network o data source layer3) Repository4) ViewModel (state management)5) Screen (UI)I-export ang bawat layer nang hiwalay, magdagdag ng integration note sa pagitan nila."

Template ng seguridad na partikular sa wika (Kotlin):"Suriin ang Kotlin code na ito:- I-clear ang paggamit ng !! at uri ng platform- I-verify ang Coroutine scope at pagpili ng dispatcher- May mga tawag ba na humaharang sa pangunahing thread?[code]"

Template ng seguridad na partikular sa wika (Swift): "Suriin ang Swift code na ito:- Panganib na mapanatili ang cycle sa mga pagsasara (mahina/hindi pagmamay-ari)- Paggamit ng opsyonal na force-unwrap (!)- Mabigat na gawain na kailangang alisin sa pangunahing thread [code]"

Cross-platform control template: "Ilista ang lahat ng mga pahintulot, configuration, at code na partikular sa platform na kinakailangan para sa feature na ito ng [Flutter/React Native] sa parehong iOS at Android. Magbigay ng magkahiwalay na Info.plist at AndroidManifest.xml na entry."

Mga karaniwang pagkakamali

  • Humihingi ng code nang hindi nagpapataw ng arkitektura. Ang resulta: hindi masusubok na istraktura na nag-crash ng lahat sa screen.
  • Nagtitiwala nang hindi sinusuri ang kasabay na code. Ang mga pangunahing thread block at maling saklaw ay ang pinakakaraniwang sanhi ng mga pag-crash.
  • Tinatanaw ang pamamahala ng memorya. Lalo na ang pagtagas sa mga pagsasara ng iOS; Hindi ito mapapansin nang hindi kumukuha ng profile.
  • Pag-bypass sa mga pagkakaiba sa platform. Sa mga cross-platform na tool, hiwalay na nakasulat ang mga pahintulot at configuration sa dalawang platform.
  • Hindi bini-verify ang bersyon ng library. Maaaring magmungkahi ang AI ng hindi na ginagamit na Retrofit/Alamofire API; Suriin gamit ang opisyal na dokumento.
  • Paggawa ng isang higanteng file. Imposibleng mapanatili at i-verify; humingi ng mga layer.

Sa buod

Ang pagbuo ng code na may AI ay malakas kapag tinukoy mo ang arkitektura. Magpataw muna ng isang istraktura tulad ng MVVM, pagkatapos ay humiling ng layer sa pamamagitan ng layer at sa maliliit na piraso, i-compile at subukan ang bawat piraso. Ang null na kaligtasan at coroutine sa Kotlin, opsyonal at memory loop sa Swift ay nangangailangan ng espesyal na atensyon. Sa mga cross-platform na tool, hiwalay na isinulat ang mga pahintulot at configuration para sa bawat platform. Ang malakas na prompt ay nagsasabi sa wika, bersyon, arkitektura, at mga panuntunan sa seguridad na tukoy sa wika sa harapan; Pinipigilan nito ang mga pinakakaraniwang error sa pag-crash at pagtagas sa produksyon.

Gawain ng aplikasyon

Para sa isang screen ng listahan (hal. “listahan ng contact”), humiling ng code mula sa AI gamit ang “Additive manufacturing template” sa iyong napiling platform (Kotlin o Swift). Idagdag ang nabuong code sa isang proyekto, i-compile ito, at gawin itong dalawang pagsusuri: (1) tumatakbo ba ang network/mahabang proseso sa pangunahing thread, (2) tama ba ang null/opsyonal na kaligtasan? Hayaang ayusin ng AI ang isyung makikita mo gamit ang isang template ng seguridad na tukoy sa wika.

checklist

  • [ ] Tinukoy ko ang arkitektura (MVVM atbp.) bago humiling ng code
  • [ ] Gusto ko itong patong-patong, sa maliliit na piraso
  • [ ] Sinubukan ko na hindi hinaharangan ng kasabay na code ang pangunahing thread
  • [ ] Sinuri ko ang null/opsyonal na kaligtasan at pamamahala ng memorya
  • [ ] Na-verify ko ang mga pahintulot/setting ng dalawang platform nang hiwalay sa isang cross-platform na proyekto
  • [ ] Na-verify ko ang mga bersyon ng library at mga lagda ng API mula sa opisyal na dokumentasyon