iOS Dev
7.52K subscribers
942 photos
65 videos
1 file
1.06K links
🍏Канал об iOS-разработке, необычных подходах и решениях.
👨‍💻Автор: Виктор Грушевский (@Viktorianec)
Темы:
⭐️ Подготовка к собеседованиям.
⭐️ Архитектуры и алгоритмы.
⭐️ Код. Много кода.

⚒️База знаний: https://boosty.to/ios_dev

#ios #mobile #swift
加入频道
Новая опция в Xcode 15: заглушки для пустых состояний

Одно из любопытных нововведений в Xcode — нативное добавление заглушек для обработки empty states (когда у вас не пришёл ответ от сервера, или, например, просто пустой результат поиска).

Ключ для использования — UIContentUnavailableConfiguration (больше инфы в официальной доке).

Можно создавать заглушки одного из трёх типов: empty, loading, search.

🧑‍💻 Кстати, бонусом доступна реализация конфига в том числе и на SwiftUI, а для использования можно задействовать UIHostingConfiguration там, где удобно.

А вот тут пример использования в реальном проекте.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
June 13, 2023
Новый Resumable upload protocol: пауза/продолжение загрузки данных на сервер

Ранее нам были доступны методы вроде downloadTaskWithResumeData (аж с седьмой оси), но для того, чтобы реализовать возобновляемый аплоад, приходилось писать свои решения (или использовать либы вроде TUS и прочих).

Парадоксально, но нативной поддержки такого важного и полезного метода до сих пор нет.

🥳 Зато в 17 оси появится uploadTaskWithResumeData.

Конечно, сервер должен уметь поддерживать такой тип загрузок, и скорее всего, ваши коллеги уже слышали о SwiftNIO.

📺 А в этом видео можно узнать о дополнительных требованиях к серверу и посмотреть на пример клиентского кода (он интуитивен).

📖 Документация по новому методу доступна на сайте Apple.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
June 14, 2023
This media is not supported in your browser
VIEW IN TELEGRAM
Шейдеры в Xcode 15: возможности, примеры кода и математика

Shader — это референс на функцию в либе Metal, и в этом году появилось несколько новых модификаторов для его использования внутри SwiftUI. Пожалуй, основной недостаток — его доступность с iOS 17, в отличие от примера выше.

📖 В большой обзорной статье приводятся примеры кода, интеграции и работы с разными типами шейдеров.

🧑‍💻 А для тех, кто хочет прокачать свои знания — есть целая спецификация по созданию собственных шейдеров от Apple, Metal Shading Language (сокращённо, MSL).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
June 15, 2023
Обзорный пост по всем нововведениям на WWDC23 для iOS Dev

WWDC подошла к концу, но для нас всё только начинается.

Новые девайсы будут представлены только осенью, а до тех пор в проектах можно попробовать внедрить что-то из нижеперечисленного.

Технологии

🔘 8 новых фреймворков — описание, детали и требования.

🔘 Представленные технологии в формате кратких хайлайтов от Apple.

🔘 Топ-5 нововведений в Xcode 15 и все релизноты бета-версии.

Код и примеры

🔗 Проекты, показанные во время презентации, отобранные Apple.

🔗 SwiftData — туториал с примерами от Kodeco.

🔗 Адаптация проекта с Core Data к новой SwiftData.

🔗 Серии вопросов и ответов, связанных с SwiftData и CoreData.

Новые инструменты

🔨 Push notifications console.

Что точно пригодится

📖 Новый метод для контроллера viewIsAppearing.

📖 Изменения в локализации проектов.

Какие видео можно посмотреть в первую очередь

📺 Изменения в UIKit.

📺 Анализ зависаний с помощью инструментов.

📺 Разбор структурированного параллелизма (не только основы).

📺 Новые возможности дебага, и для чего нужен dwim-print.

📺 Swift-макросы и как они могут упростить написание сложных функций.

Кроме этого, вы всегда можете прочесть об основных изменениях вот с этого поста.

👩‍🎓 А я, в свою очередь, постараюсь оперативно сообщать о важном здесь, в канале:

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
June 15, 2023
This media is not supported in your browser
VIEW IN TELEGRAM
Необычный эффект увеличительного стекла с использованием Metal в iOS 17

🤩 Уже знакомый нам Janum Trivedi применил интересный подход к тому, чтобы повторить эффект лупы, который вы можете увидеть на гифке.

Для этого он использовал Metal, а также свою библиотеку Wave, о которой можно прочитать здесь.

🛠 Кстати, решение опенсорсное, а пример кода доступен на github.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
June 16, 2023
String Catalogs в Xcode 15: новый инструмент для локализации

Раньше, если вы хотели локализовать свое приложение, вам приходилось самостоятельно поддерживать файлы strings.

Было много ручной работы, которая могла привести к проблемам, поскольку все контролировать не так просто.

Apple упростила для разработчиков локализацию наших приложений, добавив каталоги строк (string catalogs).

Каталог строк автоматически отслеживает все локализуемые строки из вашего кода и хранит переводы в одном месте.

📺 Видео с WWDC, объясняющее то, как работают каталоги строк.

📖 Официальная документация Apple.

📖 Пример интеграции в реальный проект.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
June 19, 2023
This media is not supported in your browser
VIEW IN TELEGRAM
Превью документации в Xcode 15

🤩 Теперь c помощью Assistant можно включить превью документации в режиме реального времени.

Полезная фича для любого проекта (особенного на сотни тысяч строк кода).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
June 20, 2023
🏆 Coderun завершён [бонусный уровень]

Для того, чтобы распределить лучших участников контеста, вчера добавили новые задачи. Пока я опомнился и увидел новую партию, уже было поздно, но буду объективен, за топ-3 было бы тяжело бороться, уровень участников слишком высокий.

Несмотря на это, после прохождения основной части сезона, было бы не совсем правильно опускать руки. Поэтому я и сделал финишный рывок.

Мои впечатления от сезона

Было сложно, особенно в начале, выход из зоны комфорта и так далее. Говорят, что в бэкэнде задачи гораздо тяжелее, но всё относительно, и наша с вами работа в другом векторе программирования.
Не все кнопки просто покрасить и не все анимации даются с первого раза. Где-то в середине сезона я решал задачи даже ночью, хотя можно было бы просто отложить всё это и остановиться.

Из плюсов соревнования: некоторые модераторы в чате соревнования отвечают буквально круглосуточно (откуда они только берут силы на это), ведь переключение фокуса между разными треками задача та ещё.

И пусть это только первый сезон, а некоторые огрехи решались уже в процессе (какие-то тесты или условия), но они минорные и я понимаю, насколько сложно запустить подобный проект.

Из пожеланий (знаю, что меня читают сотрудники Яндекса): прикрутите, пожалуйста, оповещения, и в следующем сезоне для финальной части заранее определите время выкладки дополнительных задач.

🤩 Кстати, в некоторых треках участвовало больше двух тысяч человек, что несомненно успех для мероприятия.

А вы всё ещё можете побороться за топ-50 в мобильной разработке:

🔗 Попробовать свои силы можно здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
June 21, 2023
visionOS 1 beta доступен! Выпустили Xcode 15 beta 2

Как пишет Apple, все начинается со строительных блоков пространственных вычислений в visionOS.

Дефолтно приложения запускаются в Shared Space, где они существуют рядом — так же, как несколько приложений на рабочем столе Mac.

Внутри Full Space можно создавать 3D-контент, открывать портал в другой мир или даже реализовывать иммерсивное погружение.

🛠 Скачать бету Xcode можно с официального сайта.

📖 Путешествие в дивный новый мир можно начать с описания возможностей.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
June 22, 2023
iOS Dev
visionOS 1 beta доступен! Выпустили Xcode 15 beta 2 Как пишет Apple, все начинается со строительных блоков пространственных вычислений в visionOS. Дефолтно приложения запускаются в Shared Space, где они существуют рядом — так же, как несколько приложений…
Накатил бетку, увидел ещё одно подтверждение того, что название visionOS появилось буквально в последний момент (видимо всё было настолько быстро перед релизом, что оно до сих пор осталось).

🤩 Доказательства этого есть при установки симулятора (на скриншоте).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
June 22, 2023
🤩 Все изменения в Swift 5.9. В if и switch теперь можно не использовать return (но не только)!

Поскольку и if, и switch теперь могут использоваться как выражения, мы можем написать функцию как на скриншоте выше, без использования return! А все благодаря принятому предложению.

И хотя Swift 6 маячит на горизонте, выпуски 5.x всё также упрощают синтаксис. Не только if и switch, но и макросы, а также многое другое делают релиз 5.9 более впечатляющим.

📖 В этом обзоре Пол Хадсон расказывает о наиболее значимых изменениях, представляя примеры кода и пояснения (что более важно).

Для тестирования вам понадобится актуальный тулчейн Swift 5.9, доступный в Xcode 14, или бета-версия Xcode 15.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
June 23, 2023
Работа со словарями в Swift: базовые понятия и примеры

Я знаю, что в нашем канале довольно много новичков, поэтому периодически рассказываю не только о каких-то сложных вещах, но также считаю не лишним напомнить об основах.

Словари широко используются в Swift и помогают хранить и получать доступ к данным с логическими отношениями или структурами, такими как контактная информация, сведения о продукте, настройки и так далее. В других языках программирования в таких случаях идёт речь о хэшмапах, хэш-таблицах или ассоциативных массивах.

📖 Здесь представлены основные понятия, а также примеры работы со словарями, в частности:

1️⃣ Что такое словарь в Swift?

2️⃣ Как создать словарь с содержимым или пустой словарь.

3️⃣ Доступ к содержимому словаря с помощью subscripts.

4️⃣ Добавление, удаление и обновление элементов словаря.

5️⃣ Итерация по словарю с использованием цикла for.

Кстати, раньше я делился о том, как можно преобразовывать коллекции в Swift, если вы новичок, вам может быть это интересно 🧑‍💻.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
June 26, 2023
Макросы в Swift: для чего нужны, как создавать и где посмотреть примеры

🐣 Нововведение в Swift позволяет расширить возможности компилятора с помощью кастомных проверок. Их можно использовать для анализа вашего кода и выдачи более детальных ошибок или же для удаления бойлерплейт-кода.

Например, можно чекать валидность URL во время компиляции:

let checkedURL = #URL("https://yangx.top/iOS_Career")

С помощью хэштега мы вызываем наш макрос, а под капотом, например, может быть проверка на существование такого URL в целом.

Сейчас кажется, что вместо них вполне можно использовать расширения, но возможность опенсорсной выкладки и интеграции в проекты это несомненный плюс.

📖 Вот тут есть пример создания несложного макроса по шагам.

🛠 А в этом репозитории представлен пополняемый список опенсорсных макросов.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
June 27, 2023
Xcode позволит разработчикам создавать приложения автоматически?

Казалось бы, что может быть круче анонсированной visionOS, но обо всём по порядку.

27 июня 2023 года в Apple подали патент, в котором, в частности, есть следующие моменты:

1️⃣ Генератор кода будет создавать подпрограмму, которая облегчит доступ ... поддерживаемый конкретным языком программирования (не только Swift).

2️⃣ Разработчик cможет затем воспользоваться автокомплитом, обнаружением ошибок имени или типа т.д., - продолжает Apple.

3️⃣ Код, как говорится в патенте, будет совместим с конкретным языком программирования, используемым в проекте.

Понимаете, к чему я веду?

Пока в компании запрещают пользоваться ChatGPT, а остальные упрекают Apple в том, что она не делает ничего, чтобы соревноваться с Google, OpenAI или продуктом Microsoft, на самом деле в Apple уже делают аналог ChatGPT.

Ускорение написания кода позволит Xcode выполнять большую часть работы, которая нужна начинающим или менее опытным разработчикам. А если читать между строк — то выполнять работу вместо них.

Предыдущие патенты по схожей тематике датируются 2016 годом (источник), и это означает, что Apple делает свою ChatGPT как минимум 7 лет.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
June 28, 2023
This media is not supported in your browser
VIEW IN TELEGRAM
Создание сложных интерфейсов в SwiftUI: вертикальный список с возможностью горизонтальной прокрутки

Пожалуй, одна из непростых, но в то же время часто встречающихся задач — реализация такого отображения.

📖 В этом обучающем материале от Applе вы сможете внимательнее изучить один из возможных подходов и посмотреть, как такой интерфейс может адаптироваться к различным размерам и ориентациям устройств.

🛠 А по этой ссылке доступны оба проекта (стартовый и финальный).

🧑‍💻 К слову, вот тут в нашем канале есть пост о том, как можно реализовать двунаправленную UICollectionView (тоже с примерами).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
June 29, 2023
Серии вопросов и ответов, связанных с SwiftData и CoreData

Keith Harrison (автор сайта useyourloaf) задавал вопросы на QA-сессии в Slack напрямую инженерам Apple, после чего поделился кратким изложением информации, которую узнал.

И пусть SwiftData пока только анонсирована, уже есть важные моменты, на которые стоит обратить внимание:

🔘 Асинхронные операции.

🔘 Синхронизация CloudKit.

🔘 Вопросы, посвященные миграции с CoreData и так далее.

📖 Про SwiftData можно прочесть здесь, а про CoreData материал доступен вот тут.

🧑‍💻 Кстати, напоминаю, что у нас есть пополняемый список обновлений с WWDC23.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
June 30, 2023
Объединяемые библиотеки (mergeable libraries) в Xcode 15: лучшее от динамических и статических либ

До введения объединяемых библиотек в WWDC этого года мы должны были решить, каким должен быть фреймворк — статическим или динамическим.

Выбор мог повлиять на время сборки приложения и производительность во время запуска.

Начиная с Xcode 15, нам не нужно будет принимать такое решение.

📺 Были анонсированы объединяемые библиотеки, сочетающие в себе лучшее из динамических и статических библиотек.

📖 В этой статье можно узнать, какие проблемы они решают и как настроить проект в Xcode для использования таких библиотек.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
July 3, 2023
This media is not supported in your browser
VIEW IN TELEGRAM
Создание интерактивного виджета с использованием App Intents

📖 В этом несложном примере можно узнать, как создать виджет для увеличения глобального счетчика, используемого вместе с таргет-приложением.

📖 Больше про App Intents можно узнать в официальной документации (iOS 16+).

Кстати, если вам нужно использовать больше, чем один виджет, то в канале есть пост и про такую ситуацию.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
July 4, 2023
This media is not supported in your browser
VIEW IN TELEGRAM
Концепт приложения для visionOS в связке с Figma (обновления в реальном времени)

Ещё одна необычная идея от Alex Widua (вы только посмотрите на его прошлый прототип!).

Во время работы с visionOS он придумал такую связку: плагин фигмы общается с приложением iOS через WebSockets. Все фреймы Figma загружаются как изображения AR, которые может распознать ARKit.

Удивительно, но работает очень даже неплохо🤩.

🛠 Тут можно посмотреть на реализацию анимации сетки при обнаружении фрейма.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
July 5, 2023
Зарплаты мобильных разработчиков по данным Хабр Карьера

Появились результаты нового исследования, в котором есть распределение вакансий и по квалификации.

Самые популярные разработчики мобильных приложений — мидлы и сеньоры, доли вакансий для них одинаковые — по 45,2%.

Реже ищут лидов — доля 7,1%. Для джунов вакансий меньше всего: 2,5%.

💰По цифрам, которые оставили сами разработчики, можно сделать выводы, что джуны в среднем получают 110 000 ₽, а лиды — 430 000 ₽.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
July 5, 2023
Swift OpenAPI Generator: генерация кода для клиента и сервера с помощью инструмента Apple

Swift OpenAPI Generator от Apple — это плагин SwiftPM, в который можно передать OpenAPI-док и сгенерить либо клиентский код для выполнения HTTP-запросов, либо код сервера для обработки этих вызовов.

Проект ещё на стадии разработки, но, несмотря на то, что до сих пор нет даже версии 1.0, некоторые опенсорс-решения уже стопнули разработку своих репозиториев в пользу эпловского продукта.

📖 В этом материале Марко Эйдингер показывает пример использования для двух важных этапов: создания клиентской либы, а также её внедрения в приложение.

🛠 Сам репозиторий на github.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
July 6, 2023