Прибуток:
- Отримання легкого в обслуговуванні коду, який можна тестувати, шляхом нав’язування архітектури, такої як MVVM, і надсилання запитів шар за шаром невеликими фрагментами, перш ніж штучний інтелект створить код.
- Можливість розпізнавати специфічні для мови пастки, такі як нульова безпека та співпрограми в Kotlin, необов’язкові цикли та цикли пам’яті в Swift, і перевіряти згенерований код на відповідність їм.
- Можливість перевірки дозволів і конфігурації окремо для кожної платформи в кросплатформних (Flutter, React Native) проектах
Серцем мобільної розробки є код, і саме тут з’являються найбільш відчутні переваги ШІ. Але речення «Дозволь ШІ написати код для мене» не є стратегією сама по собі. Хороша генерація коду; Це вимагає поєднання правильної мови, правильної архітектури, правильних меж і правильної перевірки. У цьому розділі ми навчимося ефективно та безпечно використовувати ШІ для Swift, мови iOS, Kotlin, мови Android, і кросплатформних інструментів, які працюють на двох платформах з єдиною кодовою базою. Мета полягає в тому, щоб позиціонувати ШІ не як «кодовий автомат», а як прискорювач, архітектуру якого визначаєте ви.
Спочатку архітектура, потім код
Найпоширенішою помилкою є звернення до штучного інтелекту щодо коду безпосередньо без архітектурного плану. Це все одно, що будувати стіну, не закладаючи фундаменту. Найпоширенішою архітектурою на мобільних пристроях є MVVM (Model-View-ViewModel — шаблон проектування, який розділяє дані, дисплей і логіку дисплея). Це означає, що представлення — це лише представлення, логіка та стан живуть у ViewModel, а дані — у шарі Model. Якщо ви не нав’яжете це поділ на ШІ з самого початку, він створить структуру, яку важко перевірити та підтримувати, яка запихає всю логіку в екранний код.
Здоровий процес генерації коду крок за кроком:
- Дайте контекст. Платформа, мова, версія, архітектура, використані бібліотеки.
- Попросіть шарів. Спочатку модель даних, потім мережа/рівень даних, потім ViewModel, останнє екран.
- Попросіть маленькі шматочки. Один екран або одна функція; Це не гігантський файл із 500 рядків.
- Перевірте кожну частину. Створювати, тестувати, інтегрувати; потім перейдіть до наступної доріжки.
- Запит на рефакторинг (покращення коду). крок "зробіть це більш читабельним і тестованим" після робочого коду.
Підказка: скажіть ШІ «розділити код відповідно до MVVM: яка частина має бути View, яка має бути ViewModel, яка має бути Model, дайте їх окремо». Це одне речення значно покращує архітектурну якість згенерованого коду.
Kotlin і Swift: особливості мови
Kotlin (Android) і Swift (iOS) — це сучасні безпечні мови, але вони мають різні підводні камені. У Kotlin захист від нульових значень (перевірка того, чи може змінна бути «нульовою» за допомогою системи типів) інколи вільно типізується ШІ; непотрібний!! оператор (знак, який викликає збій, якщо він нульовий) може призвести до збою програми. У Swift необов’язкові цикли керування та збереження критичні; ШІ може забути додати [weak self] у закриття, і це призведе до витоку пам’яті.
Тож коли ви обираєте мову, відповідним чином відточуйте підказку: як-от «Зберігайте нульову безпеку в Kotlin, не використовуйте !!» або «Запобігання сильним зацикленням посилань у закриттях у Swift».
Застереження: асинхронний код, створений ШІ, потребує особливої уваги. Вибір неправильної області в співпрограмах Kotlin або блокування основного потоку в async/await у Swift призведе до зависання програми. ШІ часто робить ці помилки; Не довіряйте, не перевіривши.
Кросплатформна розробка: Flutter і React Native
Для тих, хто хоче перейти як на iOS, так і на Android з єдиною базою коду, Flutter (набір інструментів Google Dart на основі мови) і React Native (рішення Meta на основі JavaScript) виділяються. Штучний інтелект також є потужним у цих середовищах, але іноді обходить відмінності між платформами (дозволи, правила магазину, поведінка, залежна від пристрою). Наприклад, у Flutter дозвіл камери визначається в різних файлах на iOS і Android; ШІ може написати лише один. У кросплатформному коді важливо сказати «надати необхідні дозволи та конфігурацію для обох платформ окремо».
Підсумки виборів:
Підхід
коли
уваги з ШІ
Рідний (Kotlin/Swift)
Найвища продуктивність, глибока інтеграція пристрою
Кожна платформа має окремий код; перевірити двічі
тріпотіння
Одна команда, швидкий, узгоджений інтерфейс користувача
Перевірте вручну дозвіл/налаштування певної платформи
React Native
Доступна команда Web/JS
Ретельно протестуйте секції мосту (рідного мосту).
три міні-чохла
Випадок 1 — пастка співпрограми. Команда Android отримала функцію, яка отримує список продуктів з ШІ. Код робив мережевий запит у головному потоці; Проблема не виявилася на тестовому пристрої, але на слабкій мережі програма зависла на 4 секунди та видала попередження ANR (Програма не відповідає). Це було виправлено, коли штучному інтелекту було сказано «виконувати мережеву роботу в диспетчері вводу-виведення». Урок: паралельність завжди контролюється.
Випадок 2 — витік пам’яті. Розробник iOS виявив, що після 20 разів відкривання та закривання екрана, згенерованого штучним інтелектом, пам’ять програми збільшувалася з 40 МБ до 180 МБ. Причина полягала в тому, що ViewController не можна було очистити з пам’яті через відсутність [weak self] у закритті. Граф пам’яті Xcode виявив пастку. Урок: профіль пам'яті обов'язковий у нативній розробці.
Випадок 3 — відмінність платформи. Команда Flutter отримала код доступу до галереї від AI, він працював на Android, але вийшов з ладу на iOS. Причиною було те, що опис дозволу бібліотеки фотографій (NSPhotoLibraryUsageDescription) не було додано до файлу Info.plist; AI написав лише сторону Android. Це 15-хвилинне виправлення, але це було б відмовою магазину, якби його не спіймали.
Слабка підказка / Сильна підказка
Слабка підказка: «Напишіть код Kotlin, який отримує продукти з API».
Потужна підказка: «Створіть код для Android/Kotlin, який отримує список продуктів із REST API.– Мережевий рівень із модернізацією, функція призупинення– Мережне завдання в Dispatchers.IO; блокування основного потоку– MVVM: Repository -> ViewModel –> UI state with StateFlow- Стани помилок: немає мережі, окремий запечатаний стан класу для 4xx, 5xx- Захист нульової безпеки, !! Використання !! Експорт шари як окремі файли, 1 речення пояснює кожен."
Сильні підказки запобігають потраплянню згенерованого коду в пастки попередніх випадків.
Шаблони, які можна копіювати
Багатошаровий робочий шаблон: «Розробити [функцію] для [платформи/мови]. Виготовити в такому порядку: 1) Модель даних (клас/структура даних) 2) Рівень мережі або джерела даних 3) Репозиторій 4) Модель перегляду (керування станом) 5) Екран (користувальницький інтерфейс) Експортуйте кожен шар окремо, додайте примітку про інтеграцію між ними.
Шаблон безпеки для певної мови (Kotlin): «Перегляньте цей код Kotlin: — Очистіть використання !! і тип платформи — Перевірте область дії Coroutine та вибір диспетчера — Чи виклики блокують основний потік? [код]»
Шаблон безпеки для певної мови (Swift): «Перегляньте цей код Swift: - Ризик збереження циклу в закриттях (слабкі/неволодіючі особи) - Використання додаткового примусового розгортання (!) - Важка робота, яку потрібно перемістити з основного потоку [код]"
Шаблон кросплатформного керування: «Перелічіть усі дозволи, конфігурації та специфічний для платформи код, необхідний для цієї функції [Flutter/React Native] на iOS і Android. Надайте окремі записи Info.plist і AndroidManifest.xml».
Поширені помилки
- Запит коду без нав’язування архітектури. Результат: неперевірена структура, яка запихає все на екран.
- Довіра без тестування одночасного коду. Блокування основного потоку та неправильний обсяг є найпоширенішими причинами збоїв.
- Вигляд керування пам'яттю. Особливо витоки в закритті iOS; Це не помітно без зйомки профілю.
- Обхід відмінностей платформи. У кросплатформних інструментах дозволи та конфігурація записуються окремо на двох платформах.
- Не перевіряється версія бібліотеки. AI може запропонувати застарілий Retrofit/Alamofire API; Перевірте в офіційному документі.
- Виготовлення одного гігантського файлу. Неможливо підтримувати та перевіряти; просити шарів.
Підсумовуючи
Генерація коду за допомогою ШІ є потужною, коли ви вказуєте архітектуру. Спочатку накладіть структуру на зразок MVVM, потім запитуйте шар за шаром і невеликими частинами, скомпілюйте та перевірте кожну частину. Нульова безпека та співпрограми в Kotlin, додаткові цикли та цикли пам’яті в Swift вимагають особливої уваги. У кросплатформних інструментах дозволи та конфігурація записуються окремо для кожної платформи. У строгому запиті спереду вказується мова, версія, архітектура та правила безпеки для певної мови; Це запобігає найпоширенішим збоям і помилкам витоку на виробництві.
Аплікаційне завдання
Для екрана зі списком (наприклад, «списку контактів») запитайте код у ШІ за допомогою «шаблону аддитивного виробництва» на платформі, яку ви вибрали (Kotlin або Swift). Додайте згенерований код до проекту, скомпілюйте його та зробіть ці дві перевірки: (1) чи працює мережевий/довгий процес у головному потоці, (2) чи правильна безпека null/optional? Попросіть штучний інтелект виправити проблему, яку ви виявили, із шаблоном безпеки для певної мови.
контрольний список
- [] Я вказав архітектуру (MVVM тощо) перед запитом коду
- [ ] Я хотів це шар за шаром, маленькими шматочками
- [ ] Я перевірив, що паралельний код не блокує основний потік
- [ ] Я перевірив null/optional security and memory management
- [ ] Я перевірив дозволи/налаштування двох платформ окремо в міжплатформенному проекті
- [ ] Я перевірив версії бібліотеки та підписи API з офіційної документації