Детали миникарты в Xcode
Миникарта в большиестве случаев не особо помогает в навигации по файлу. Держите хинт, как сделать ее более полезной. Наведите на нее курсор, удерживая зажатым Cmd, и на ней появится дополнительный слой информации.
Как работает цвет: от HEX до восприятия глазом
Топовый лонгрид на выходные, который закроет все пробелы в вашем понимании того, как работает цвет: электромагнитное излучение, цветовые пространства, колбочки в глазах, устройство пикселей экрана и многое другое.
Отображение только измененных файлов в Xcode
Еще один небольшой хинт про работу в Xcode. Если вы готовите большой PR к ревью, может быть удобно в Project View видеть не все файлы, а только те, в которых были изменения. Для этого в интерфейсе есть специальная галочка, которую легко пропустить.
Swift Package Index теперь спонсируется Apple
Автор рассылки iOS Dev Weekly помимо нее занимается проектом Swift Package Index – реестром Swift зависимостей с автогенерацией документации и проверкой их совместимости. Проект изначально разрабатывался силами комьюнити, но теперь приобрел более официальный статус и получил спонсорство от Apple. Ну круто же!
Все модификаторы, меняющие цвет текста в SwiftUI
В SwiftUI есть несколько модификаторов, которые изменяют цвет текста – foregroundColor, foregroundStyle, tint. В статье разбираются их отличия друг от друга и контекст применения.
История консоли предыдущих билдов
Фича, которая всегда перед глазами, но вообще не очевидна. В истории предыдущих билдов можно перечитать все содержимое консоли.
Новый способ привязывать действия к кнопкам в UIKit
Начиная с iOS 14, в UIKit появился новый API для привязки к кнопке действия. Вместо добавления таргета с селектором можно создать UIAction с нужным замыканием и передать его в конструкторе кнопки.
xcode-timing – CLI утилита для сбора статистики билдов
xcode-timing – скрипт, который логирует время прохождения каждого вашего билда в Xcode и сохраняет их в json файле. Умеет фильтровать по проектам и считать среднее время прохождения билдов.
Еще один пример работы ChatGPT
А вот это уже посложнее анимаций. За несколько промптов автор сгенерировал приложение, которое каждый день рекомендует пять новых фильмов, к каждому из них подтягивает обложку, трейлер и ссылки на стриминговые сервисы. Все API ChatGPT подобрал сам.
Анимация, написанная ChatGPT
Использованные автором промпты можно посмотреть здесь.
Подкаст про мобильную разработку в Spotify
Если вы любите истории про сложности разработки огромных проектов, то подкаст для вас. Инженер из платформенной команды Spotify рассказывает про переезд на Bazel, подходы к уменьшению билд тайма с помощью ремоут кэшей, поддержку разработки в монорепе, и кучу других историй.
Советы по тому, как избежать выгорания
Несколько давно известных, но от этого не менее важных советов по тому, как программистам избегать выгорания:
🎯При работе над большими неопределенными задачами всегда разбивать их на понятные небольшие куски, которые можно завершить за обозримое время.
⏰Управлять своей загрузкой, приоритизируя задачи, и уделяя внимание только важным.
☝️Стараться фокусироваться только на одной задаче, даже когда подходит дедлайн, и надо успеть сделать сразу много всего.
✋Делать перерывы в работе каждый час, даже когда вы входите в состояние потока на часы.
В статье – еще несколько советов и ссылки на глубокие статьи и книги по теме.
Изменения в прайсинге App Store раскатываются на все категории
В декабре Apple сильно улучшили механики прайсинга, добавив настройку цены с шагом в 10 центов. Теперь эти изменения доступны для всех типов продаж, включая платные приложения и единоразовые покупки.
Второй важный момент – вам надо вручную выбрать правильные цены для ваших товаров, иначе в мае Apple сделает это за вас.
Перевод на русский язык
Как не забывать удалять код для поддержки старых версий iOS
Если вы помечаете костыли, которые требуется удалить после отказа от старой версии iOS, TODOшками, то есть способы гораздо лучше.
Swift в Google Summer of Code
Если вы студент, или никогда раньше не контрибьютили в опенсорсные проекты, Google проводит крутую программу – Summer of Code. В ней участники вписываются в интересные задачи различных крупных опенсорс проектов, и под руководством ментора выполняют их. Swift – один из проектов, которые принимают участие.
Задачи, за которые можно взяться
Правила участия
XCTest: Activities и Attachments
Пост про две фичи XCTest, которые полезны для написания UI тестов:
- Activity – группировка нескольких действий с приложением для более читаемых логов
- Attachment - прикрепление к логам дополнительного контекста, например, скриншота состояния экрана
Разбор неочевидных вопросов, связанных с релизами в App Store
Примеры вопросов:
- Какая версия приложения загружается теми, кто скачивает его в первый раз, если прямо сейчас раскатывается phased релиз?
- Можно ли катить новый релиз, пока предыдущий еще в процессе phased release?
- Можно ли обновить билд после того, как ревью пройдено, но до того, как релиз перешел в состояние Rwady for Sale?
Дайджест Swift Evolution за январь-февраль
Новый выпуск дайджеста, в котором автор подробно разбирает все языковые пропозалы, принятые за последнее время.
✅SE-0382: Expression Macros
✅SE-0383: Deprecate @UIApplicationMain and @NSApplicationMain
✅SE-0384: Importing Forward Declared Objective-C Interfaces and Protocols
Реализация пикера эмодзи для iOS
Автор статьи рассказывает, как реализовывал аналог системного macOS пикера эмодзи для iOS.
- Получение списка доступных эмодзи
- Вопросы обратной совместимости
- Тон кожи и двусоставные эмодзи
- Локализация
Библиотека, получившаяся в результате
Как пробовать фичи новых версий Swift до их релиза
В Swift 5.8 появился новый компиляторный флаг -enable-upcoming-feature
. С его помощью можно активировать еще не выпущенные языковые фичи и посмотреть, как себя будет вести ваша кодовая база.
Кроме того, эти фичи можно начать использовать, при этом сохраняя поддержку сборки проекта старым компилятором. Для этого вызов новых фичей надо оборачивать в директиву #if hasFeature()
.
Определение способности Core Data к легковесной миграции
При изменении модели данных в Core Data есть несколько вариантов развития событий:
- легковесная миграция, когда фреймворк сам все похэндлит
- полноценная миграция, которую надо писать вручную
- просто дропнуть все данные из базы, новые сохранять уже в новом формате
Второй способ самый трудозатратный, да еще и увеличивает размер бинаря со временем. Третий способ хорош для проектов, где в базе хранятся некритичные данные вроде кеша, но есть проблема. Если сбрасывать кеш при каждом обновлении, пользователи будут это замечать.
В статье разбирается, как с помощью приватного API можно получить доступ к русной проверке на возможность легковесной миграции, в результате чего можно дропать не весь кеш, а только ту его часть, которая не может быть автоматически смигрирована.
Apple совсем забил на Catalyst
🐞Огромное количество багов, для решения которых нужны нетривиальные костыли.
🙅♀️Многие API, работающие и на iOS, и на macOS, недоступны в Catalyst.
🕵️♂️Системные приложения Apple, собранные на Catalyst, все еще очень плохо работают и выглядят.
😞Все эти проблемы не исправляются со временем, и в целом у технологии сильно ощущение заброшенности.
Accessibility Inspector в macOS
В macOS предустановлено приложение Accessibility Inspector, которое позволяет на лету подключиться к любому приложению на компьютере или в симуляторе, и протестировать, как оно работает с доступностью.
Вот что оно умеет:
👉Смотреть настройки каждого элемента на экране
👉Запускать Voice Over для отдельных элементов
👉Проводить аудит экранов и выдавать список ворнингов по проблемам с доступностью
👉Динамически менять настройки доступности и смотреть, как приложение себя поведет
Приключение на 20 минут, превратившееся в 1 месяц
Простой переезд со своего форка библиотеки скриншотного тестирования на ее официальную версию вылился в месяц расследования странных багов и обновления казалось бы не очень связанных с изначальной задачей частей проекта. Мемы, кровь и слезы.
Performance тестирование с XCTest
У XCTest есть специальный API, который позволяет измерить время прохождения любого блока кода – среднее, минимальное и максимальное. В статье разбираются детали работы с ним и его дополнительные возможности.
Copilot для Xcode
Для Xcode завезли неофициальную поддержку Copilot. Вы печатаете строку в редакторе, а в открытом рядом окне или в комментах показываются саджесты от Copilot.
Фильтрация логов дебаггера
Любой проект со временем обрастает различными логами – статус и содержание сетевых запросов, события жизненного цикла экранов, операции с базой данных. Такой шум в консоли может сильно мешать дебагу.
В Xcode есть возможность отфильтровать все, что падает в консоль, оставив только логи брейкпойнтов и то, что вы печатаете сами с помощью дебаггера.
Поддержка RTL локализации в существующем проекте
Додо рассказывают про кучу проблем и особенностей, с которыми они столкнулись при добавлении в приложение поддержки арабского языка.
⬅️Как меняется верстка
⬅️Отзеркаливание коллекций
⬅️Замена иконок, в которых есть направление
⬅️Цифры и пунктуация
Спойлеры как в Telegram на SwiftUI
- Разбор того, как спойлеры реализованы в исходниках Телеги.
- Реализация своего спойлера с помощью CAEmitterLayer.
- Заворачивание спойлера в модификатор, чтобы его было легко применить к любой вьюхе.
Исходники
Перевод на русский язык
Обзор всех изменений в Swift 5.8
- Сняты все ограничения на работу с переменными в reault builder. Например, можно использовать lazy var.
- Новый атрибут backDeployed, который позволяет использовать часть новых API на старых версиях iOS.
- Неявный self в weak self замыканиях.
Xcode playground, в котором можно попробовать все фичи