Я занимаюсь исследованием того, как можно эффективно создавать iOS приложения с помощью ИИ: ChatGPT 4.o1, Claude 3.5 Sonnet, Gemini 2.0 Flash, а также с помощью сред разработки (IDE) типа Cursor AI и Alex Sidebar. Для этих целей я решила создать довольно простое тестовое iOS приложение Countries, которое показывает все страны Мира по регионам (Европа, Азия, Латинская Америка и т.д.) и для каждой страны её название и флаг. Если вы выбираете какую-то страну, то о ней сообщается дополнительная информация о численности населения population
и размере ВВП (валового внутреннего продукта) gdp
:
Я считаю Claude 3.5 Sonnet лучшим AI (ИИ) для программирования iOS приложений с точки зрения архитектуры всего приложения. Поэтому эту ИИ мы будем использовать в качестве основной и начнем именно с её использования.
Забегая немного вперед и обрисовывая наши планы, скажу, что сначала мы получим от Claude 3.5 Sonnet вариант этого iOS приложения с использованием старого GCD (Grand Central Dispatch) для многопоточной выборки данных из интернета (Github).
Затем мы сделаем рефакторинг кода, чтобы перейти к более современной версии многопоточности с использованием async await (Github).
И в заключении мы постараемся перейти на ещё более продвинутую версию многопоточности Swift 6 strict concurrency, в которой гарантировано нет “гонки данных” (data races) (Github). Но чтобы оценить этот последний вариант нашего приложения, необходимо иметь представление о возможностях Swift 6 concurrency, которое можно получить в компактной форме из превосходной статьи Concurrency Step-by-Step: A Network Request или её перевода на русский язык Многопоточность по шагам: Сетевой запрос.
С помощью Claude 3.5 Sonnet при первом же обращении нам удастся получить превосходное iOS приложение с Моделью данных для расшифровки JSON данных, с CountriesViewModel
, которая выбирает всю необходимую информацию с сервера Всемирного банка, преобразует JSON данные в данные Модели и предоставляет их Views
для отображения на экране пользователя. Мы не зададим не единой ссылки на сайты Всемирного банка, ни единого намека на структуру данных, и тем не менее получим полноценное iOS приложение.
Однако запустив это приложение, мы получим ошибку, связанную с декодированием JSON данных, полученных с сервера Всемирного Банка, которые оказались не совсем стандартными. И дальнейшие “уговоры” Claude 3.5 Sonnet не помогли решить нам эту проблему. Так что пришлось смириться с тем фактом, что Claude 3.5 Sonnet плохо “декодирует” несложные, хотя и нестандартные JSON данные.
Нам придется обратиться к другим ИИ.
Gemini 1.5 Flash также оказался неспособным дать правильное решение, и только ChatGPT 4.o1-mini и Gemini 2.0 Flash справятся с этой казалось бы легкой задачей, их ответ и пришлось интегрировать в успешное в остальном приложение, полученное Claude 3.5 Sonnet. Надо сказать, что ChatGPT 4.o1-Preview, который, как было объявлено, отличается способностью к построению логических цепочек даст вообще фантастический результат, который вряд ли смог бы предоставить даже программист супер высокого класса, он сложнее, чем результат полученный ChatGPT 4.o1-mini, но это очень красивое решение (Примечание 2 в конце статьи).
Все нейросети: Claude 3.5 Sonnet, Gemini 2.0 Flash, ChatGPT 4.o1-mini, ChatGPT 4.o1-Preview прекрасно справились с рефакторингом асинхронного кода с CGD
на async await
и далее на Swift 6 strict concurrency
.