🍏Канал об iOS-разработке, необычных подходах и решениях. 👨💻Автор: Виктор Грушевский (@Viktorianec) Темы: ⭐️ Подготовка к собеседованиям. ⭐️ Архитектуры и алгоритмы. ⭐️ Код. Много кода.
Новая опция в Xcode 15: заглушки для пустых состояний
Одно из любопытных нововведений в Xcode — нативное добавление заглушек для обработки empty states (когда у вас не пришёл ответ от сервера, или, например, просто пустой результат поиска).
Ключ для использования — UIContentUnavailableConfiguration (больше инфы в официальной доке).
Можно создавать заглушки одного из трёх типов: empty, loading, search.
🧑💻 Кстати, бонусом доступна реализация конфига в том числе и на SwiftUI, а для использования можно задействовать UIHostingConfiguration там, где удобно.
А вот тут пример использования в реальном проекте.
Новый Resumable upload protocol: пауза/продолжение загрузки данных на сервер
Ранее нам были доступны методы вроде downloadTaskWithResumeData (аж с седьмой оси), но для того, чтобы реализовать возобновляемый аплоад, приходилось писать свои решения (или использовать либы вроде TUS и прочих).
Парадоксально, но нативной поддержки такого важного и полезного метода до сих пор нет.
🥳 Зато в 17 оси появится uploadTaskWithResumeData.
Конечно, сервер должен уметь поддерживать такой тип загрузок, и скорее всего, ваши коллеги уже слышали о SwiftNIO.
📺 А в этом видео можно узнать о дополнительных требованиях к серверу и посмотреть на пример клиентского кода (он интуитивен).
Шейдеры в Xcode 15: возможности, примеры кода и математика
Shader — это референс на функцию в либе Metal, и в этом году появилось несколько новых модификаторов для его использования внутри SwiftUI. Пожалуй, основной недостаток — его доступность с iOS 17, в отличие от примера выше.
📖 В большой обзорной статье приводятся примеры кода, интеграции и работы с разными типами шейдеров.
🧑💻 А для тех, кто хочет прокачать свои знания — есть целая спецификация по созданию собственных шейдеров от Apple, Metal Shading Language (сокращённо, MSL).
Для того, чтобы распределить лучших участников контеста, вчера добавили новые задачи. Пока я опомнился и увидел новую партию, уже было поздно, но буду объективен, за топ-3 было бы тяжело бороться, уровень участников слишком высокий.
Несмотря на это, после прохождения основной части сезона, было бы не совсем правильно опускать руки. Поэтому я и сделал финишный рывок.
Мои впечатления от сезона
Было сложно, особенно в начале, выход из зоны комфорта и так далее. Говорят, что в бэкэнде задачи гораздо тяжелее, но всё относительно, и наша с вами работа в другом векторе программирования. Не все кнопки просто покрасить и не все анимации даются с первого раза. Где-то в середине сезона я решал задачи даже ночью, хотя можно было бы просто отложить всё это и остановиться.
Из плюсов соревнования: некоторые модераторы в чате соревнования отвечают буквально круглосуточно (откуда они только берут силы на это), ведь переключение фокуса между разными треками задача та ещё.
И пусть это только первый сезон, а некоторые огрехи решались уже в процессе (какие-то тесты или условия), но они минорные и я понимаю, насколько сложно запустить подобный проект.
Из пожеланий (знаю, что меня читают сотрудники Яндекса): прикрутите, пожалуйста, оповещения, и в следующем сезоне для финальной части заранее определите время выкладки дополнительных задач.
🤩 Кстати, в некоторых треках участвовало больше двух тысяч человек, что несомненно успех для мероприятия.
А вы всё ещё можете побороться за топ-50 в мобильной разработке:
Накатил бетку, увидел ещё одно подтверждение того, что название visionOS появилось буквально в последний момент (видимо всё было настолько быстро перед релизом, что оно до сих пор осталось).
🤩 Доказательства этого есть при установки симулятора (на скриншоте).
🤩 Все изменения в Swift 5.9. В if и switch теперь можно не использовать return (но не только)!
Поскольку и if, и switch теперь могут использоваться как выражения, мы можем написать функцию как на скриншоте выше, без использования return! А все благодаря принятому предложению.
И хотя Swift 6 маячит на горизонте, выпуски 5.x всё также упрощают синтаксис. Не только if и switch, но и макросы, а также многое другое делают релиз 5.9 более впечатляющим.
📖В этом обзоре Пол Хадсон расказывает о наиболее значимых изменениях, представляя примеры кода и пояснения (что более важно).
Для тестирования вам понадобится актуальный тулчейн Swift 5.9, доступный в Xcode 14, или бета-версия Xcode 15.
Работа со словарями в Swift: базовые понятия и примеры
Я знаю, что в нашем канале довольно много новичков, поэтому периодически рассказываю не только о каких-то сложных вещах, но также считаю не лишним напомнить об основах.
Словари широко используются в Swift и помогают хранить и получать доступ к данным с логическими отношениями или структурами, такими как контактная информация, сведения о продукте, настройки и так далее. В других языках программирования в таких случаях идёт речь о хэшмапах, хэш-таблицах или ассоциативных массивах.
📖Здесь представлены основные понятия, а также примеры работы со словарями, в частности:
1️⃣ Что такое словарь в Swift?
2️⃣ Как создать словарь с содержимым или пустой словарь.
3️⃣ Доступ к содержимому словаря с помощью subscripts.
4️⃣ Добавление, удаление и обновление элементов словаря.
5️⃣ Итерация по словарю с использованием цикла for.
Кстати, раньше я делился о том, как можно преобразовывать коллекции в Swift, если вы новичок, вам может быть это интересно 🧑💻.
Макросы в Swift: для чего нужны, как создавать и где посмотреть примеры
🐣Нововведение в Swift позволяет расширить возможности компилятора с помощью кастомных проверок. Их можно использовать для анализа вашего кода и выдачи более детальных ошибок или же для удаления бойлерплейт-кода.
Например, можно чекать валидность URL во время компиляции:
let checkedURL = #URL("https://yangx.top/iOS_Career")
С помощью хэштега мы вызываем наш макрос, а под капотом, например, может быть проверка на существование такого URL в целом.
Сейчас кажется, что вместо них вполне можно использовать расширения, но возможность опенсорсной выкладки и интеграции в проекты это несомненный плюс.
Xcode позволит разработчикам создавать приложения автоматически?
Казалось бы, что может быть круче анонсированной visionOS, но обо всём по порядку.
27 июня 2023 года в Apple подали патент, в котором, в частности, есть следующие моменты:
1️⃣ Генератор кода будет создавать подпрограмму, которая облегчит доступ ... поддерживаемый конкретным языком программирования (не только Swift).
2️⃣ Разработчик cможет затем воспользоваться автокомплитом, обнаружением ошибок имени или типа т.д., - продолжает Apple.
3️⃣Код, как говорится в патенте, будет совместим с конкретным языком программирования, используемым в проекте.
Понимаете, к чему я веду?
Пока в компании запрещают пользоваться ChatGPT, а остальные упрекают Apple в том, что она не делает ничего, чтобы соревноваться с Google, OpenAI или продуктом Microsoft, на самом деле в Apple уже делают аналог ChatGPT.
Ускорение написания кода позволит Xcode выполнять большую часть работы, которая нужна начинающим или менее опытным разработчикам. А если читать между строк — то выполнять работу вместо них.
Предыдущие патенты по схожей тематике датируются 2016 годом (источник), и это означает, что Apple делает свою ChatGPT как минимум 7 лет.
Создание сложных интерфейсов в SwiftUI: вертикальный список с возможностью горизонтальной прокрутки
Пожалуй, одна из непростых, но в то же время часто встречающихся задач — реализация такого отображения.
📖В этом обучающем материале от Applе вы сможете внимательнее изучить один из возможных подходов и посмотреть, как такой интерфейс может адаптироваться к различным размерам и ориентациям устройств.
Серии вопросов и ответов, связанных с SwiftData и CoreData
Keith Harrison (автор сайта useyourloaf) задавал вопросы на QA-сессии в Slack напрямую инженерам Apple, после чего поделился кратким изложением информации, которую узнал.
И пусть SwiftData пока только анонсирована, уже есть важные моменты, на которые стоит обратить внимание:
🔘 Асинхронные операции.
🔘 Синхронизация CloudKit.
🔘 Вопросы, посвященные миграции с CoreData и так далее.
Во время работы с visionOS он придумал такую связку: плагин фигмы общается с приложением iOS через WebSockets. Все фреймы Figma загружаются как изображения AR, которые может распознать ARKit.
Swift OpenAPI Generator: генерация кода для клиента и сервера с помощью инструмента Apple
Swift OpenAPI Generator от Apple — это плагин SwiftPM, в который можно передать OpenAPI-док и сгенерить либо клиентский код для выполнения HTTP-запросов, либо код сервера для обработки этих вызовов.
Проект ещё на стадии разработки, но, несмотря на то, что до сих пор нет даже версии 1.0, некоторые опенсорс-решения уже стопнули разработку своих репозиториев в пользу эпловского продукта.
📖В этом материале Марко Эйдингер показывает пример использования для двух важных этапов: создания клиентской либы, а также её внедрения в приложение.