Самые интересные статьи, видео и новости, связанные с iOS разработкой. Не больше трёх материалов в день. Лучшее iOS сообщество в Телеге: @iosgt Размещение рекламы: @tatiana_2209
Русский
Технологии
Офер в Яндекс за два дня\nПриходите на Weekend Offer Mobile 17–18 июня. Всего за 2 дня можно пройти все технические секции, пообщаться с нанимающими командами и получить офер.\nРебята ищут мобильных разработчиков на iOS, Android и Flutter с опытом от 3 лет. Приглашают в один из своих офисов в России и Беларуси, также нанимают в международные хабы в Армении, Казахстане и Сербии.\nРегистрация заканчивается 12 июня.\nПодробности ищите здесь
visionOS SDK доступен для загрузки\nВы спите, а Apple выпускает релизы для вас! Стал доступен Xcode 15 beta 2, в который включены visionOS SDK, Reality Composer Pro, приложение для создания 3D контента для очков, и симулятор новой операционной системы. Вся документация по фреймворкам лежит тут.
Swift OpenAPI package\nВышла альфа версия официального пакета от Apple для генерации сервера и клиента по спеке OpenAPI. Swift на сервере – это не очень интересно, а вот клиент – другое дело. \nПо спеке генерируются APIProtocol, который содержит в себе все методы API, и Client, структура, которая реализует сгенерированный протокол. Работает все это как поверх URLSession, так и поверх любого другого транспорта.
Новый линкер в пять раз быстрее ld64\nНа WWDC показали новый линкер. Он написан в Apple с нуля и оптимизирован для работы на нескольких ядрах. Это первый продакшн-реди параллельный линкер, доступный для iOS разработки.
Подборка анонсов с WWDC\nПока я жду появления подробных статей с разбором всех анонсов, держите несколько отдельных штук, которые мне показались очень крутыми:\n👉В SwiftUI можно применять Metal шейдеры к любым вьюхам\n👉Благодаря макросам синтаксис для объявления Preview стал очень простым и читаемым\n👉А еще Preview теперь работают для AppKit и UIKit\n👉В SwiftUI есть новый компонент для готового экрана с пэйволлом\n👉В SFSymbols появилась поддержка анимированных иконок, причем анимировать можно слои по отдельности\n👉Xcode зашерлочил SwiftGen и генерирует символы для цветов и картинок автоматически\n👉Ну и, конечно, Swift Data – замена Core Data, которую я предсказывал каждый год уже пять лет
swift-outdated – пакет для отображения устаревших зависимостей\nswift-outdated при запуске проверяет, у каких из зависимостей проекта появились новые версии, и выводит табличку с ними. Если добавить его как билд фазу в проект, то устаревшие зависимости будут отображаться как ворнинги.
SwiftUI Tips & Tricks\nПополняющийся тред из 20+ не самых очевидных советов по работе со SwiftUI. Вот некоторые из них:\n- lineLimit у Text можно задавать не одним числом, а интервалом. Тогда компонент высота компонента будет всегда не меньше нижней границы, и не больше верхней.\n- В любую функцию можно передать #file, #line, #function в качестве параметров – и использовать их в логах, чтобы понять, откуда была вызвана функция.\n- Если вам нужно быстро создать TextField, чтобы что-то проверить, можно не передавать ему Binding, а инициализировать его с .constant(“Text”).
Динамическое меню в трее на macOS\nОтличный разбор API NSStatusItem, с помощью которого можно создать меню с динамическим размером и контентом, кастомным бэкграундом и поддержкой нескольких разных таргетов для нажатий.
Про работу с dynamicMemberLookup\nАннотация dynamicMemberLookup позволяет проксировать обращение к свойствам объекта. Например, вместо cache.storage["profile"] дергать сразу cache.profile. Основной минус такого подхода – компилятор не предупредит вас, что вы обращаетесь к несуществующему свойству. В статье разбирается, как использование KeyPath вместо строковых ключей поможет вернуть compile-time safety.
Что нового в UIKit\nКаждый год на WWDC все меньше апдейтов для UIKit. В этом году вот так:\n👉Новый класс UIContentUnavailableView для отображения пустого стейта\n👉Поддержка Xcode Preview, у которых еще и новый синтаксис на макросах появился\n👉Поддержка анимаций в SFSymbols, добавленных как элемент кнопки или как ImageView\n👉Новые типы шрифтов: большой и очень большой\n👉Новые типы автозаполнения для UITextField: для дня рождения и даты окончания действия карты
String Catalog в Xcode 15\nВ Xcode 15 появился новый способ управления локализованными строчками – String Catalog. При сборке проекта Xcode собирает все локализованные строки в одну таблицу, из которой вы можете редактировать ключи, значения и комментарии к ним.\nТаблицы можно переводить на другие языки, при этом Xcode превращается в таск-менеджер на минималках: отображает общий прогресс перевода, дает возможность выставлять статус перевода у каждой из строк.\nЗдесь же можно настраивать плюрализацию и даже разное значение строк в зависимости от девайса, на котором запускается приложение.
Организация межмодульного взаимодействия в многомодульном приложении\nРазбор того, как архитектура межмодульного взаимодействия может влиять на скорость компиляции, вес приложения и релизный процесс. А начать чтение можно с первой статьи цикла – про то, кому вообще стоит выбирать распил приложения на модули.
Памятка по тому, как репортить баги Apple\nПриближается выход Beta версий Xcode и новых SDK, а значит – тонны новых багов. Apple подготовили новую страницу документации про то, как репортить проблемы с максимально подробным контекстом, и какие инструменты могут это облегчить. \nНичего все равно не исправят, конечно же.
Swift AST Explorer – инструмент для тех, кто хочет писать макросы\nЕсли вы хотите научиться писать макросы, вам важно понимать, как выглядит AST вашего кода. Swift AST Explorer умеет парсить любой Swift код в AST и показывать разную статистику и метаинформацию.
Расшифровки сессий на WWDC Notes\nСамое время напомнить вам про офигенный ресурс от коммьюнити – WWDC Notes. Ребята смотрят сессии и превращают их в статьи, выделяя все самое важное. В этом году они обещают расшифровать 80% сессий в течение первой недели!
Лог Q&A про SwiftUI\nОдна из обязательных активностей на WWDC – Q&A с инженерами Apple. На ней можно получить комментарии по темам, которые не освещаются в документации. Пролистайте всю дискуссию про SwiftUI – можете найти себе что-то полезное.
Официальный дизайн-кит в Figma от Apple\nНачиная с 2017 года, в дизайн-команде Apple крутилась идея опубликовать официальный дизайн-кит в Figma. Спустя пять лет, он наконец появился!\n- Куча компонентов, от алертов и уведомлений до навигации\n- Шаблоны виджетов\n- Макеты поддерживают Dynamic Type\n- Встроенные стандартные настройки цветов, стилей и материалов\nДизайн-кит будет постоянно дополняться. Скоро там появится поддержка iOS 17, и компоненты из macOS, tvOS, watchOS и visionOS.
Что нового в Swift 5.9\n👉if и switch теперь можно использовать при присвоении значения переменной или для возврата значения из функции\n👉Можно писать макросы, которые исполняются во время компиляции\n👉Структуры и enum’ы, которве нельзя копировать, а можно только передавать по ссылке\n👉Новый оператор consume, который копирует значение переменной и уничтожает ее\nВ статье очень детально разбираются эти и другие новые фичи. Идеальный материал, чтобы подготовиться к WWDC!
Как устроена DispatchQueue под капотом\nВ статье разбирается, как с нуля написать аналог DispatchQueue на мьютексах, который умеет выполнять операции синхронно и асинхронно.
Курс «Английский для разработчиков» Яндекс Практикума\nДля тех, кто хочет изменить свою профессиональную жизнь и работать в международной команде.\nОбучение построено не вокруг абстрактной теории, а вокруг рабочих ситуаций и полезных для карьеры навыков:\n✋Стендапы. Подготовитесь обсуждать задачи, задавать вопросы и просить о помощи.\n👨💻 Работа с заказчиками. Научитесь презентовать решения, говорить про баги и фичи.\n📣 Митапы. Сможете понимать на слух доклады и выступать сами.\n😎 Собеседования. Научитесь рассказывать про свой опыт, понимать вопросы и тактично переспрашивать.\n👯 Неформальное общение с коллегами. Сможете рассказать о своих интересах, опыте, планах на будущее.\n💻 Код-ревью. Сможете описать сделанное, дать обратную связь, тактично отстоять своё мнение.\nЗапишитесь на бесплатную консультацию. Кураторы определят ваш уровень языка и расскажут подробнее про обучение.\nРеклама АНО ДПО "Образовательные технологии Яндекса", ИНН:7704282033, erid: LjN8JuH9p
Серия статей про CloudKit\nОчень подробный цикл про все аспекты работы с CloudKit – начиная от общих концепций, заканчивая обработкой сложных кейсов изменений стейта.
Пример Scroll Transitions в новом SwiftUI\nВ SwiftUI появился новый очень простой способ реализовывать анимации при скроллинге таблицы – блок scrollTransition.
Как MVC менялся со временем\nПервое описание архитектуры MVC появилось еще в 1979 году. В коротком документе на 500 слов были сформулированы основные идеи:\n- Model сообщает View о происходящих изменениях.\n- View может не только получать сообщения об изменениях, но и проактивно запрашивать стейт, и даже самостоятельно менять модель. Но при этом ничего не знает о пользовательских ивентах.\n- Controller обрабатывает пользовательские ивенты, меняет модель и вьюшку при необходимости.\nВ статье сравнивается два направления развития идей оригинального MVC – хорошо известный нам Apple-Style MVC и Model-2, популяризированный Ruby on Rails.
Номинанты Apple Design Awards\nОбъявили номинантов на ежегодную премию Apple Design Awards. Этот список – отличный пример того, что Apple ценит в приложениях. Вот несколько интересных приложений:\n✈️Flighty – за интуитивный интерфейс и хорошую интеграцию с платформой\n🧘Headspace – за социальный импакт\n🎥Riveo – за интерфейс и анимации\n🏓SwingVision – за инновации в пользовательском опыте\nПобедителей объявят через неделю после кейноута WWDC.
Все анонсы WWDC\nApple собрали документацию по всем новым фреймворкам и API на одной странице. А отдельно можно скачать кучу семплов, которые показывали в сессиях.
Обзорная статья про Compose Multiplatform\nНа Хабре вышла неплохая обзорная статья на русском языке про то, как работает Compose Multiplatform, и как собрать свой первый простой проект. Если стало интересно, вот еще несколько материалов по теме:\nОфициальный блог пост с анонсом\nПодробный доклад
Act – инструмент для локального запуска GitHub Actions\nAct – консольная тула, которая позволяет прогонять любой GitHub Action локально. Нужен только установленный Docker Desktop.\nВызов экшна выглядит так:\nact pull_request --container-architecture linux/amd64\nПеревод на русский язык
Подробный разбор Observation\nНа WWDC Apple окончательно закопали Combine, и предложили при работе со SwiftUI использовать вместо него новый фреймворк Observation. В статье разбирается, чем же он лучше Combine, как с ним работать, и какие ограничения уже заметны.
Превью DocC в Xcode 15\nВ новой версии Xcode появилась возможность смотреть, как будет выглядеть сгенерированная с помощью DocC документация.
Inspector – новый тип модального представления в SwiftUI\nВ SwiftUI появился новый модификатор – inspector(isPresented:content:). На macOS и iPadOS он добавляет колонку настраиваемой ширины с правой стороны экрана. На айфоне показывает Bottom Sheet.
Пропуск тестов с XCTSkip\nЕсли вы хотите, чтобы какие-то из ваших тестов временно не исполнялись, правильным подходом будет не переименовывать или комментировать их, а добавить вызов XCTSkip. А если вы хотите не выполнять тест только в каких-то условиях, например, в зависимости от типа устройства или версии OS, используйте XCTSkipIf и XCTSkipUnless.
Интеграция ChatGPT и Xcode\nЭкспериментальный экстеншн для Xcode, который использует ChatGPT для генерации кода по инструкциям, комментариев к нему, рефакторинга кода и других фичей. Можно добавлять и свои собственные команды.
Introspect – библиотека для доступа к внутренним вьюхам SwiftUI\nIntrospect позволяет обращаться к внутренним UIKit элементам, находящимся под капотом у большинства компонентов SwiftUI. Это нужно, чтобы изменять свойства, которые не видны из SwiftUI напрямую. Например, убрать сепараторы в таблице, или добавить RefreshControl к ScrollView.\nБиблиотеку безопасно использовать в проде, так как она не обращается к приватным API.
Опубликован вижн интеропа Swift -> C++\nИнтероп Swift и C++ состоит из двух частей:\n- Вызов Swift из C++ кода (этот пропозал уже давно опубликован и принят)\n- Вызов C++ из Swift (вот ему и посвящен этот документ)\nВ пропозале разбираются цели такого интеропа, сложности его реализации и то, как предполагается подружить основные концепции из двух языков друг с другом с учетом гораздо более сильных гарантий, которые дает Swift.
Подробный разбор основных изменений в SwiftUI\n💅Улучшения ScrollView: постраничная анимация, возможность начинать скролл с нижней границы вьюшки, кастомные транзишны при скролле.\n 💅Анимации и рисование: добавление Metal шейдеров, комплишн блоки для анимаций, функции для комбинирования форм.\n💅Интеграция с внутренними покупками, сериализация Color, повторение действия кнопки при долгом нажатии и многое другое.
Дизайн-киты для macOS Sonoma\nApple выложили дизайн-киты для новой версии macOS: все UI компоненты, окна, алерты, поповеры, элементы интерфейса вроде дока и уведомлений, цвета и стили.\n🔗Sketch\n🔗Figma
Реплика системного блюра на CAFilter\nРазработчик зареверсинжинирил реализацию блюра и повторил его, используя приватные API. Есть возможность обойтись и без них, перейдя на SceneKit и Metal шейдеры, но качество будет чуть хуже.\nКод на GitHub
Главные обновления SwiftUI\n👉Больше никакого Combine, вместо него для полписки на изменения используется новый фреймворк Observation.\n👉Анимациям теперь можно добавлять completion handler’ы и анимировать изменения по кейфреймам.\n👉У ScrollView можно следить за изменением оффсета с помощью модификатора.\n👉Можно программно ставить фокус в поле поиска, а также прятать и показывать его.\n👉Новые жесты: rotate и magnify.
package – новый access modifier\nВ Swift 5.9 появится новый модификатор доступа – package. К символам, помеченным таким образом, можно будет получить доступ только коду из того же пакета. В статье разбирается несколько примеров его использования и его совместимость с другими модификаторамич\nПеревод на русский язык
Анимация отрываемого стикера из iMessage\nВыбор стикера для отправки в iMessage сопровождается анимацией, которая повторяет реальный эффект от отрывания стикера. Наш подписчик поделился статьей с реализацией такого эффекта, включая добавление теней и блеска.\nКод на GitHub
Как Apple могли бы переписать Core Data на Swift\nВторая вещь, которая происходит каждый год перед WWDC – люди скрещивают пальчики и ждут, что Apple выпустит современную замену для Core Data. Подписываюсь под всеми хотелками из статьи!\nПеревод на русский язык
Документация и схема событий аналитики\nВ какой-то момент в приложении Headhunter стало так много разных событий аналитики, что ребята решили навести в них порядок. Вот что получилось:\n👉Отдельный репозиторий, который стал источником правды про все события.\n👉Каждое событие описывается yaml файлом, который содержит название, описание, категории, к которым оно относится, и параметры.\n👉Схема умеет рендериться в маркдаун, и благодаря этому генерируется человекочитаемый справочник всех событий.\n👉Аналитики сами пишут yaml файлы.\n👉Из схемы также генерируется код для приложения.
Почему мы всё время начинаем и бросаем учить английский?\nОдна из причин — мы не знаем свой уровень языка и берёмся за контент, который нам не по силам. Например, сериал «Друзья» часто советуют смотреть тем, кто начинает учить язык, но в нём полно юмора, который начинающие пока понять не могут. В итоге разрыв знаний удручает и мотивация учить язык падает.\nЕсли вы готовы дать английскому ещё один шанс, Яндекс Практикум поможет поверить в свои силы и довести дело до конца. Приходите на бесплатную консультацию в Яндекс Практикум:\n- Проведут устный тест на уровень языка,\n- Покажут, чего реально добиться и за какой срок,\n- Расскажут, как данные курсы помогут достичь цели.\nP. S. С 1 июня курсы станут больше: количество занятий с личным преподавателем увеличится с 72 до 80. Цена вырастет тоже. До 31 мая вы можете купить курс по старой цене: целиком или по частям. И если решите купить полный курс сразу — сэкономите и получите обновлённую программу из 80 занятий по прежней цене.
Выпуск PointFree про тестирование асинхронного кода\nТестировать асинхронный код встроенными средствами Swift и Xcode – сложно. В новом выпуске PointFree разбираются с костылями, нужными, чтобы протестировать код, в котором есть несколько отдельных асинхронных шагов.
SwiftUI Index\nSwiftUI Index – сервис, который трекает добавление новых API, вьюх и модификаторов в каждой версии SwiftUI.
Trailing label TextField в SwiftUI\nБывают кейсы, когда в TextField вам надо отображать не только введенный пользователем текст, но и какой-то суффикс. Например, автоматически добавлять домен почтового ящика при вводе логина. В короткой статье разбирается несколько трюков, которые помогут сверстать такую вьюху.
The Composable Architecture в Swift 5.9\nПосмотрите на пруф-ов-концепт того, насколько сильно сократится код фичей, написанных по TCA, благодаря макросам и Observability Framework.
Как адоптить новые фичи в кроссплатформенной кодовой базе на iOS и macOS\nИз-за того, что Apple выпускает стабильные версии новой iOS и новой macOS в разное время, вы можете столкнуться с довольно неприятной проблемой – после выхода Xcode 15.0 ваш кроссплатформенный код с поддержкой новых фичей перестанет собираться под мак. В статье разбирается, как комбинировать compile-time и runtime проверки, чтобы облегчить свою жизнь.
Собираем каталог митапов с просмотром WWDC\nКейноут WWDC пройдет вот уже через неделю. Если вы планируете организовать совместный просмотр – напишите в личку @tatiana_2209. Мы соберем каталог всех событий, чтобы вам проще было найти что-то рядом с вами.\n👉Ссылка на каталог
Макросы в Swift\nХороший русскоязычный разбор того, как устроены макросы, как они запускаются, и что с их помощью можно автоматизировать.