Логирование частоты рендера SwiftUI вьюх
DataTile – логгер, который умеет визуализировать серии данных. Один из примеров его использования – логирование того, насколько часто пересоздаются какие-то вьюхи. Для этого создается кастомный модификатор, который при каждом своем вызове логирует номер своего вызова с помощью os_log. Данные из os_log уже подхватываются и визуализируются DataTile.
Перевод на русский язык
Серия статей про Swift Charts
Завершилась отличная серия статей от Маджида про Swift Charts.
📊Basics
📊Mark styling
📊Custom Marks
📊Interactions
📊Customizations
📊Legends
📊Accessibility
Перевод на русский язык
Point-Free про модуляризацию
Бесплатный эпизод Point-Free про современный подход к модуляризации приложений с помощью SPM. Рассматривают несколько разных подходов к выделению модулей, начиная от самого очевидного вынесения в отдельные модули моделей и хелперов, заканчивая разными способами нарезки фичей.
Команда Ozon в поиске мобильного разработчика iOS 🔍
Вам предстоит развивать мобильное приложение для 100 000 продавцов, участвовать в задаче по переходу с UIKit на SwiftUI, интегрировать внутренние библиотеки и многое другое.
Стек: SwiftUI, Combine (View слой), Needle, Alamofire, Unit, Snapshot, UI-тесты
Задачи:
✔️ Участвовать в разработке приложения
✔️ Включаться в обсуждение дизайна
✔️ Разрабатывать новые идеи по фичам
✔️ Участвовать в code review
✔️ Писать тесты
Условия:
✔️ Удаленка, гибрид или офис (Россия, Казахстан) — выбирать тебе
✔️ Свобода действий в принятии решений
✔️ Конкурентное предложение по зарплате
✔️ А также система бонусов, с возможностью влиять на свой совокупный доход
Если ты хочешь влиться в команду крупнейшего e-commerce и твой опыт разработки на Swift от 2 лет — оставляй отклик на сайте
Нотации чисел при форматировании
Если вы пропустили, то в iOS 15 появилась возможность форматировать числа в компактный вид. Например, 1,1К вместо 1100.
Эта настройка форматирования чейнится и с другими, например, .significantDigits, позволяя получить 10,6К из числа 10645.
Бенчмарки в App Store Connect
App Store Connect теперь дает возможность сравнить ключевые метрики своего приложения с о средним по конкурентам:
📈Конверсия в загрузку
📈Дневной, недельный и месячный ретеншн
📈Креш рейт
📈ARPPU
Best practices по работе с TCA
Команда The Browser Company, которые разрабатывают браузер Arc на Swift, самые крупные адоптеры архитектуры ТСА. Они подготовили набор рекомендаций, которых стоит придерживаться в больших кодовых базах с ТСА: моделирование стейта, редьюсеры, тестирование, зависимости и слой View.
Перевод на русский язык
ВКонтакте подготовили Weekend Offer для C++ и мобильных разработчиков
ВКонтакте — крупнейшая социальная сеть в России и странах СНГ, а Weekend Offer, в свою очередь, — шанс попасть в одну из десяти команд профессионалов за одни выходные. Направления три: Android, iOS и BackEnd (C++).
Отклики ждут до 9 марта тут: до этого времени с вами свяжутся, назначат короткий техскрининг и после - слот для онлайн-интервью в выходные.
Новый модификатор scrollViewBounceBehavior
В iOS 16.4 появился новый модификатор для скроллящихся вьюх в SwiftUI – .scrollBounceBehavior(.basedOnSize)
. Благодаря ему сделать вьюху, которая будет скроллиться только когда ее контент выходит за границы ее фрейма, супер просто.
Почему Rust плохо подходит для работы с UI
Про Rust регулярно заходят разговоры в нашем чате, поэтому держите еще одну статью.
Несмотря на то, что Rust проникает практически везде – ядра операционных систем, браузеры и облака, UI проектов на Rust практически нет. При этом фреймворк для создания GUI – одна из самых часто запрашиваемых пользователями фичей. В статье разбирается, какие особенности языка делают работу с UI тяжелой, и как их можно обойти с помощью Elm или ECS like архитектур.
В Xcode 14.3 пропадет совместимость с Rosetta
Если вы запускали Xcode в режиме совместимости с Rosetta, чтобы собирать старые Cocoapods зависимости на Apple Silicon, скоро у вас будут проблемы.
Поддержка merge queues на GitHub
Больше не придется по несколько раз подливать main ветку и заново дожидаться прохождения всех проверок. Когда вы нажимаете кнопку «Merge», ваша ветка сравнивается не против main, а против main+всех остальных веток, которые висят в очереди перед вами.
EditKit Pro – расширение для Xcode с поддержкой разных рефакторингов
Примеры фичей:
💅Beautify JSON
📐Разбитие длинной строки кода на мультилайн
👀Сортировка импортов или любого выделения по алфавиту
🤷Оборачивание в ifdef
📘Автооборачивание строк в NSLocalizedString
VK Mini Apps в 3 раза увеличила выплаты за показ в приложениях баннерной рекламы.
Платформа стремится сделать всё, чтобы разработчики могли монетизировать свои проекты и зарабатывать на них. Новая технология ротации баннерной рекламы в опубликованных сервисах позволит легче интегрировать рекламу в мини-приложения и увеличит доход владельцев сервисов.
Объявления подбираются под аудиторию конкретного сервиса, рендерятся и отображаются с помощью инструментов VK Mini Apps. Также не нужно адаптировать элементы объявления вручную, как было раньше. Все очень удобно.
Судьба Fastlane
Начнем с предыстории. Когда-то у Twitter был замечательный сервис Fabric, в который входило распространение тестовых билдов, аналитика по крешам и перфомансу. В какой-то момент в команду Fabric наняли Felix Krause, основного ментейнера Fastlane. Не очень понятно, что в этот момент произошло с правами на IP, но основной идеей было дать Феликсу возможность фуллтайм работать над проектом, важным для всех разработчиков.
Спустя два года, Fabric был продан гуглу, которые интегрировали его в Firebase. В нагрузку к Fabric к ним перешел и Fastlane, причем уже, кажется, без Феликса.
Последствия этого решения начали отстреливать сейчас. Внутри Google Fastlane никому не нужен, его развитием занимается только несколько сторонних контрибьюторов на бесплатной основе. Получать донаты от других компаний за свою работу они не могут, ведь все права на проект принадлежат Google.
У сообщества появилась идея передать Fastlane в Mobile Native Foundation. К этому готовы и основной ментейнер проекта, и сам фонд. Основная проблема – найти в Google хоть кого-то, кто готов задрайвить принятие решения о переносе проекта. Пока, кажется, безуспешно.
upd: Процесс пошел
Test Plans стали дефолтными в Xcode 14.3
Я совсем пропустил – в Xcode 11 появились Test Plans. По сути, это способ организовать вместе группы тестов, чтобы их удобно было запускать в Xcode или из консоли. Так вот, в новой версии Xcode Test plans – дефолтный способ организации тестов. Если вы еще не конвертнулись в них, сейчас самое время.
Перевод на русский язык
Перевод на Bazel большого проекта
Подробный кейс-стади перевода большого iOS проекта на сборку с помощью Bazel. В статье рассказывают про настройку удаленных билд кэшей, распределенную сборку проекта, проблемы с интеграцией с Xcode и управление зависимостями.
Использование Swift Charts для создания анимаций
Swift Charts можно использовать не только для того, чтобы строить графики, но и для вот таких анимаций, в которых участвует несколько кривых.
Когда лучше использовать кастомные View, а когда – модификаторы
В SwiftUI и того же внешнего вида и поведения можно добиться, как написав кастомную вьюху, так и сделав свой модификатор. В статье разбирается, в каких случаях какой из вариантов будет предпочтительнее.
Перевод на русский язык
Для работы в международной команде базового английского может не хватить. Держите 5 советов, которые помогут подготовиться к общению с иностранными коллегами.
Если хотите подтянуть язык для работы в IT — попробуйте Яндекс Практикум. Они запустили курсы специально для разработчиков, аналитиков и продакт-менеджеров.
В основе обучения — занятия с личным преподавателем, дополнительно вас ждёт разговорная практика с иностранными IT-специалистами. Они помогут освоить язык на примере собеседований, стендапов, ревью и других рабочих встреч. Будет проще пройти реальное англоязычное собеседование, если вы уже тренировали его на занятиях.
Записывайтесь на бесплатную консультацию к куратору. Он определит ваш уровень языка и расскажет о курсе.
Миграция большого проекта на Tuist
Asana перевели свой проект на Tuist и, как результат, сократили время сборки проекта с 45 до 15 секунд. В статье рассказывают про процесс миграции, встреченные проблемы и другие полученные плюсы.
Градиенты на SwiftUI под любыми углами
У LinearGradient
есть несколько стандартных направлений градиента, например top и leading. Под капотом эти направления представляют собой тип UnitPoint,
и вы можете с его помощью задавать произвольные направления. В статье приводится пример кода по конвертации углов в нужные значения.
Перевод на русский язык
Appwrite – бесплатный self-hosted BaaS, альтернатива Firebase
- В Appwrite есть cloud-функции, база данных, хранение файлов, пуши.
- Инстанс Appwrite можно поднять в любом облаке, тарифы которого вам подходят.
- Есть готовые SDK для всех платформ.
User breakpoints в Xcode
Со временем в проекте появляются не только специфичные для его кода брейкпойнты, но и универсальные. Например, срабатывающие в определенные этапы жизненного цикла приложения, или завязанные на эксепшны. Чтобы не настраивать их каждый раз отдельно, в Xcode есть возможность пошарить их между всеми проектами.
Для этого нажиите правой кнопкой мыши на брейкпойнте -> Move breakpoint to -> User.
Как собрать XCFramework из Rust кода
В статье дается подробная инструкция по тому, как собрать Rust библиотеку для разных платформ и архитектур, собрать хэдеры и modulemap, завернуть это в XCFramework, подебажить его и подключить к своему проекту. Статья будет полезна и тем, кто хочет разобраться в структуре и принципах работы XCFramework в отрыве от Rust.
Релиз VoiceOver Designer
Михаил Рубанов зарелизил инструмент для дизайна, прототипирования и тестирования accessibility.
Идея такая – загружаете макет экрана, размечаете доступные элементы, прописываете их свойства. После этого макет можно заливать на телефон и проверять, как он ведет себя с точки зрения незрячего пользователя. Или передать разработчикам на реализацию в приложении.
🛒App Store
🎥Видео с историей создания
💻Код проекта
Если хотите получить промокод для стора, расскажите в комментариях, как вы организуете accessibility в ваших проектах. Миша отберет лучшие комменты и пришлет им промокоды!
KMM глазами iOS разработчика
Команда автора статьи использует КММ для шаринга всей независимой от платформы бизнес-логики: запросов в сеть, парсинга и хранения данных, авторизации, валидации, работы со стейтом экранов.
Основные проблемы, с которыми сталкиваются у них iOS разработчики:
- Интероп Kotlin с Objective-C/Swift не всегда простой и очевидный.
- Для разработки требуется держать открытыми сразу несколько IDE, что повышает требования к железу.
Помимо проблем, в статье разбирается, как использование КММ влияет на архитектуру проекта, как проще всего прокидывать зависимости, реализовывать навигацию и дебажить проект.
Heroku без предупреждения удаляет продакшн базы данных
А помните, был такой Heroku? Благодаря хорошо проработанному UX и бесплатным тарифам многие мобильщики использовали его для хостинга бэкенда своих проектов.
Полгода назад они решили изменить прайсинг и убить бесплатные тарифы. Причем сделали они это довольно не красиво, дав довольно мало времени на миграцию с сервиса.
А сейчас выяснилась еще одна проблема. Даже для платных инстансов могут удалить подключенную базу, причем без уведомлений об этом и без возможности восстановить ее. Поэтому, если у вас остаются проекты на Хероку, задумайтесь о переезде или хотя бы о бэкапе.
IceCube – опенсорсный клиент для Mastodon на SwiftUI
IceCube – один из лучших айосных клиентов для Мастодона по наполненности фичами, интерфейсу и удобству пользования им. Но что еще круче – он полностью бесплатный, а код приложения лежит в опенсорсе и активно допиливается айосным коммьюнити. Например, автор Pulse, про который я регулярно тут рассказываю, периодически закидывает PR по оптимизации перфоманса.
Если вам стало интересно залезть в кодовую базу, то в статье по ссылке рассказано больше деталей про организацию проекта, архитектуру и реализацию навигации. За проектом я рекомендую следить – у него есть все шансы стать одним из лучших открытых примеров крупных SwiftUI проектов.
💻Проект на GitHub
Как генерировать консистеные палитры со случайными цветами
На прошлой неделе я делился записью подкаста про цветовые пространства. Если вам стало интересно, то можете продолжить знакомство с темой этой статьей. Автор рассказывает о недостатках RGB, и делится алгоритмом генерации палитр из подходящих друг другу цветов с помощью пространств HSL и LCh.
Перевод на русский язык