Какие API теперь нельзя использовать без разрешения от Apple
Apple закручивают гайки для приложений, которые пытаются использовать различные косвенные признаки, чтобы идентифицировать пользователя или его девайс. Начиная с этой осени, нельзя использовать следующие API без объяснения причин:
- UserDefaults
- File timestamp
- System boot time
- Disk space
- Active keyboard
Конечно, горит у всех именно от первого пункта – запретить использовать UserDefaults, которые есть в каждом приложении, это сильно.
Список еще не финальный и будет постепенно пополняться🤷♂️
Исследование продуктовых дизайнеров
Я периодически провожу исследования различных областей разработки. Например, вот уже много лет подряд я опрашиваю кучу людей, чтобы понять, а что там происходит у айосеров и андроидщиков.
Вот прямо сейчас мы заканчиваем наш первый опрос продуктовых дизайнеров про то, чем они занимаются на работе, какие навыки прокачивают, как используют AI и за кем в сообществе следят. Чтобы результаты были репрезентативными, хочется получить как можно больше ответов. Если в вашей текущей или бывшей команде есть продуктовые дизайнеры – я буду очень благодарен, если вы пошарите им ссылку на опрос! Результаты я потом тоже обязательно в канал выложу.
Как обновляют супераппы в Яндексе, откуда берутся новые фичи и как они связаны с клиентскими метриками, — обсудят на PLUS CAMP.
4 августа собираемся в Поле, поедим хот-догов, отдохнём, обменяемся опытом и поговорим о продуктовых командах. Будет много внутрянки и рабочих советов.
Такой формат IT-тусовки для тимлидов и техлидов от сервисов Яндекс Go и Яндекс Плюса. Подробности и регистрация.
Реклама ООО "ЯНДЕКС.ТАКСИ" erid: Kra23Vbx8
Вебинар про то, как айосеру вкатиться в Vapor
Уметь писать бэкенд – полезный для мобильщика навык. Иногда нужно быстро накидать заглушки сервисов, иногда – поднять простой бэкенд с базой для своего пет-проекта, а иногда – бахнуть Telegram-бота для автоматизации какой-то рутинной задачи. Самый быстрый путь к решению таких задач для айосера – использовать Swift в связке с фреймворком Vapor. Знакомый язык, удобный тулинг для запуска сервисов прямо в Xcode, простой для изучения фреймворк.
В рамках вебинара с помощью Vapor будет написан простой API, организована база данных, и показано, как писать реактивный код с помощью SwiftNIO.
📆Дата: 1 августа в 20:00 по Москве
👉Регистрация: https://otus.pw/zlqY/
Вебинар является частью продвинутого онлайн-курса «iOS Developer. Professional» от Отус
Как выбирать имена ключам UserDefaults
Автор поста пишет про частую практику, которую я тоже замечал – добавлять к названиям ключей UserDefaults префикс с Bundle ID приложения. На самом деле, это не имеет практически никакого смысла – plist с этими настройками уже лежит в папке с вашим Bundle ID.
Совет очевидный, но к статье накидали интересных комментов, когда коллизии все-таки возможны:
- Когда вы шарите UserDefaults с каким-то экстеншном.
- При использовании ключей, которые в UserDefaults сохраняет SwiftUI или AppKit.
- При использовании библиотеки, которая втихую пишет что-то в UserDefaults со своими ключами.
Как уменьшить время прогона тестов в два раза
Команда приложения Qonto, у которого написано 9.000 тестов, на прогон которых уходит 19 минут, поделились рекомендациями, которые помогли им срезать время прогона в два раза. В основном все крутится вокруг оптимизации генерации моков библиотеки SwiftyMocky.
Unidirectional Flow в Swift
Обзор того, как с помощью новых языковых фичей реализовать UDF-архитектуру, обладающую следующими свойствами: предсказуемость, тестируемость, поддержка превью, удобство дебага, модульность. Реализация есть на GitHub.
_Davidsmith/110710731841983583">Названия макросов теперь зарезервированы
Если вы использовали какое-то слово для названия макроса, при попытке использовать его же в названии объекта вы получите неочевидную ошибку – No macro named xxx
. Пример – макрос #Preview
.
Как тестируют в 100 компаниях
Реаозиторий с подборкой ресурсов о том, как организовано тестирование и CI/CD мобильных приложений в очень разных компаниях. В списке есть Netflix, Reddit, Revolut и Uber.
Новая библиотека от Apple – swift-http-types
Библиотека содержит в себе базовые типы для работы с сетевыми запросами: HTTPRequest
, HTTPResponse
, HTTPFields
, конвертеры в аналогичные типы в Foundation и хелперы для URLSession
.
Основная идея – иметь единую библиотеку и для клиента, и для сервера, чтобы было проще шарить одинаковый код.
Apple Push Notifications Console
Apple выпустили новый сервис для тестирования push уведомлений. С его помощью можно отправлять тестовые пуши с любым пэйлоадом на конкретные девайсы, видеть детальные логи процесса доставки, проверять ваши токены.
Программировали, программировали и переросли свои задачи?
Работайте над масштабными ИТ-проектами в Тинькофф. Здесь тимлид хороший и задачи интересные. А работать можно прямо там, где живете: у Тинькофф есть ИТ-хабы в 25 городах России, в Беларуси, Армении и Казахстане.
Вакансии тут: https://u.tinkoff.ru/it-prof.2023
Запуск Xcode Preview на девайсе
В последнем Xcode превью можно запускать на реальных девайсах. Детали есть в этой сессии WWDC.
Какие приложения были первыми в App Store
Ребята собирают список 500 первых приложений и игр, появившихся в App Store. Пока получилось найти следы только 130 из них. Идеально для тех, кто хочет поностальгировать по старым временам.
История миграции библиотеки из CocoaPods на SwiftPM
Разработчики ETTrace рассказывают, как они добавляли поддержку SwiftPM, и что она им дала.
Основной плюс переезда – конфигурация билда проекта стала проще, так как вместо xcodeproj используется простой Package.swift.
Из встреченных проблем:
- Много мелких багов в SPM
- Если зависимость не поддерживает SPM, приходится ее форкать и добавлять поддержку самостоятельно
- Пришлось рефакторить проект, чтобы Swift и ObjC код не были в одном таргете
Законы UX
Список из 21 правила, которых стоит придерживаться при разработке интерфейсов. Каждое подкреплено ссылками на исследования.
🏎️Doherty Threshold – Пользователь воспринимает свою производительность оптимальной, если реакция на его действия не превышает 400мс.
🎯Fitt's Law – Время на то, чтобы прицелиться во что-то – функция от размера и удаленности цели.
🤔Jakob's Law – Пользователь проводит большую часть времени в других приложениях, поэтому для него будет идеально, если ваше приложение не будет от них отличаться.
⛰️Peak-End rule – Люди запоминают не весь опыт работы с чем-то, а его самый пиковый момент и самый последний.
Swift Macro Toolkit
Набор хелперов, которые упрощают написание макросов. Например, позволяют не писать вручную обработку всех возможных представлений чисел с плавающей точкой (вдруг в макросе кто-то захочет использовать число -0xF_ep-0_2
).
Инструкция по чекауту SPM зависимостей в репозиторий проекта
По умолчанию SwiftPM, в отличие от CocoaPods, не скачивает все зависимости прямо в папку проекта. Из-за этого на CI тратится значительно больше времени. В статье разбирается, как написать скрипт, который будет клонировать нужные зависимости в репозиторий, с минимизацией потребляемого места на диске.
Рекомендации по работе с OSLog
Статья с рекомендациями по организации работы с OSLog:
📐Выравнивание данных с помощью alignment APIs
🌡️Уровни логирования и их визуализация
🔎Разные фичи Console.app
Кейс адаптации приложения под visionOS
David Smith рассказывает, как он поэтапно адаптирует одно из своих приложений под visionOS, экспериментируя с различными подходами к его дизайну.
Как шарить закладки в Xcode
В Xcode 15 появились закладки, с помощью которых можно размечать важные места в коде. По умолчанию закладки шарить нельзя, но если вы захотите это сделать – они хранятся в папке xcuserdata
, которая, скорее всего, лежит у вас в .gitignore. Закладки лежат в подпапках для каждого пользователя.
Подходы к тестированию в Reddit
Во вчерашнюю подборку Reddit попал совсем недавно, когда они написали подробную статью про свою стратегию тестирования. Основные хайлайты того, что команда достигла за год:
👉1800 UI тестов, написанных поверх XCUITest
. Они покрывают фичи, аналитику, пуши, эксперименты, локализацию и перфоманс.
👉Небольшой набор из этих тестов гоняется на PR, чтобы не пропускать критичные баги. В среднем занимает 16 минут. Полный сьют тестов гоняется по ночам, и занимает пару часов.
👉Для проверки локализации используется тот же самый набор функциональных кейсов, который оверрайдится настройкой локали.
👉Стабильность тестов держится на уровне 90%. Если какие-то тесты флакуют чаще ожиданий, они отправляются на карантин специальным сервисом.
Вакансия для тех, кто хочет работать с видео и AI
Ребята из 4spaces ищут iOS разработчиков на три приложения: редактор видео для рилсов/тиктока, создание медиаконтента с помощью AI и фоторедактор, тоже на базе AI. Приложения уже были в топе в нескольких странах в App Store. Требования довольно стандартные для любого айосера мидла. А если вы работали с AVFoundation, Metal, или набрались опыта по настройке CI/CD, то это будет значительным плюсом. Ах, да – вакансия полностью удаленная, а на весь процесс собеса ребята обещают потратить не больше 2 часов вашего времени!
Недостатки SwiftPM при шаринге общих модулей между проектами
Женя Ртищев рассказал про то, как он пытался красиво разложить общий код своих проектов по нескольким пакетам, и затягивать их к себе из приватного репозитория.
Разбор новых фичей Figma
👉Переменные, которые могут представлять цвета, размеры, эффекты, типографику и локализованные строки.
👉Новые настройки автолейаута, с помощью которых можно прямо в Figma делать адаптивный дизайн.
👉Новый Developer Mode, который позволяет готовить экраны для передачи их разработчикам.
👉Песочница компонентов, в которой дизайнер может легко переключать разные настройки экспортируемых компонентов и смотреть, как они себя ведут в граничных состояниях.
👉Поддержка в VSCode для работы с макетом прямо в IDE.
👉Плагины для экспорта дизайна в код на любом фреймворке.
Что видят пользователи неподдерживаемых версий OS в App Store
Когда вы предложите своему продакту дропнуть поддержку старых версий iOS, он скорее всего спросит, как именно будет выглядеть опыт тех, кто на них все еще сидит. По ссылке собрали скриншоты и ответы на другие частые вопросы.
Отслеживание переключателя тихого режима
Бесшумный режим в iOS не распространяется автоматически на проигрывание медиа. Поэтому Instagram умеет детектить включенность этого режима и глушить звук, если нужно. Проблема в том, что задокументированного API для этого нет. Самый известный воркэраунд – проиграть звук, и, если коллбэк о его окончании придет сразу же, считать бесшумный режим включенным.
Автор статьи пошел дальше и раскопал, на какое системное событие надо подписаться, чтобы "честно" узнавать о бесшумном режиме, и выпустил обертку, которую можно использовать и в ваших проектах.
SwiftUI Data Flow 2023
Системный разбор всех способов организации работы со стейтом в SwiftUI с учетом новинок последней WWDC.
👉Код на GitHub
Почему мы всё время начинаем и бросаем учить английский?
Одна из причин — мы не знаем свой уровень языка. В итоге берёмся за контент, который нам не по силам. Например, сериал «Друзья» часто советуют смотреть тем, кто начинает учить язык, но в нём полно юмора, который начинающие пока понять не могут.
В итоге разрыв знаний удручает и мотивация снова падает.
Если вы готовы дать английскому ещё один шанс, Яндекс Практикум поможет поверить в свои силы и довести дело до конца.
Приходите на бесплатную консультацию в Яндекс Практикум:
- Проведут устный тест на уровень языка,
- Покажут, чего реально добиться и за какой срок,
- Расскажут, как их курсы помогут достичь цели.
Записаться
Реклама АНО ДПО "Образовательные технологии Яндекса", ИНН:7704282033, erid: LjN8KKsBt
Проигрывание gif в SwiftUI
В SwiftUI добавили новую функцию CGAnimateImageAtURLWithBlock
, с помощью которой можно легко запускать анимированные гифки.
С ними связана и новая настройка accessibility, которая позволяет отключать анимированные изображения. Поэтому, если будете их реализовывать, не забывайте подписываться на AXAnimatedImagesEnabledDidChangeNotification
и проверять AXAnimatedImagesEnabled
перед проигрыванием гифок.