iOS Good Reads – swift, разработка мобильных приложений, архитектура, блокчейн, VR, AR, карьера, IT
12.4K subscribers
654 photos
64 videos
3.95K links
Самые интересные статьи, видео и новости, связанные с iOS разработкой. Не больше трёх материалов в день.

Лучшее iOS сообщество в Телеге: @iosgt

Размещение рекламы: @tanyasanovna
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
ReMafoX – инструмент для простой локализации текстов

- ReMafoX – GUI для уже существующей CLI утилиты BartyCrouch
- Новые строки в Localizable.strings добавляются сразу же при определении их в Swift-файле
- Автоматический перевод строк на 40 языков
- Линтинг на тот случай, если какой-то ключ все-таки не перевелся
- Упрощенная работа с pluralized – их тоже можно определять и переводить, не закрывая исходный файл кода
- Скачать текущую актуальную версию можно здесь
SQLite – структуры данных под капотом

SQLite – одна из самых простых и благодаря этому надежных баз данных. В статье подробно рассматриваются алгоритмы кодирования данных в ней, используемые структуры данных и алгоритмы поиска по ним.
Успеть за 60 секунд

У вашего приложения есть 60 секунд на то, чтобы стартовать, иначе системный watchdog его убьет. Посмотрите на интересный кейс со стектрейсом – приложение не успевает запуститься за выделенное время, потому что система не выделяет ему на это ресурсы и занимает CPU чем-то другим.
Content transition в SwiftUI

В последней версии SwiftUI появился встроенный механизм анимаций для изменений контента вьюшки. Например, текста или прозрачности TextView. Чтобы это заработало, достаточно просто использовать view modifier .contentTransition.
Воркшоп по KMM

Оптимальный способ использования KMM – взять бизнес-логику, уже реализованную в Android, и конвертировать ее в общий модуль, который будет работать и в iOS. 16 августа в 20:00 мск, Анна Жаркова расскажет, как конкретно Android код адаптируется для работы в iOS, про общую кроссплафторменную архитектуру и про то, какие подводные камни могут встретиться при реализации.

Вебинар пройдет в рамках специализации «iOS Developer» на онлайн-платформе OTUS.
Проверка безопасности приложения на CI

- MobSF – коллекция инструментов для автоматизированных проверок безопасности
- Среди них есть mobsfscan, который проходит по всей кодовой базе и выдает отчет с уязвимостями
- Его можно запускать на CI и использовать результаты проверок как блокеры на PR
- Это решение не даст 100% гарантий безопасности, но поможет не допустить уже известные ошибки
Как работают 3D трансформации View

Топовая серия постов про устройство матриц CATransform3D и линейную алгебру, используемую для расчетов трансформаций.
Советы по работе с Accessibility

Разработчик организовал себе челлендж – каждый день постить один твит про работу с Accessibility в iOS в течение года. Набралось уже 80 советов, среди которых есть много интересных идей.

- О событиях в приложении, которые происходят асинхронно, можно уведомлять через CoiceOver. По умолчанию такие уведомления прерывают друг друга. Чтобы этого не происходило, можно складывать их в очередь, передав специальный параметр в атрибутах.
- Если в результате действий пользователя меняется лэйаут, хорошей практикой будет переместить фокус VoiceOver, отправив layout changed notification.
- Если установить у вьюшки свойство isAccessibilityElement в true, то движок Accessibility перестанет учитывать ее сабвью, и все, что расположено на ней, перестанет быть доступно.
Реализация градиентов на шейдерах

Первая статья из планируемого цикла разработки шейдеров на Metal. Автор сравнивает реализацию градиента на CPU и GPU с 1D и 2D текстурами.
Как использовать UIPasteControl, чтобы работать с буфером обмена

Начиная с iOS 16, приложения не могут свободно читать содержимое буфера обмена. Вместо этого у пользователя каждый раз запрашивается разрешение. Способ обойти запрос разрешения – использовать новый UIPasteControl.
SwiftUI и навигация через Tab

На macOS можно переходить между полями ввода с помощью нажатия Tab. Это удобно при работе с большими формами. В статье рассказывается, как можно переопределить логику определения следующего поля для фокуса, если поведение по умолчанию вам не подходит.
Sendable и @Sendable

Среди последних нововведений в Swift Concurrency появились протокол Sendable и одноименный атрибут для функций. Их задача – гарантировать типобезопасность при передачи значений в многопоточном коде. В статье разбираются детали и ограничения работы с протоколом и то, как подготовить свой код к strict concurrency checking в Swift 6.
Как устроено логирование в приложении Авито

- Точки отказа в мобильных приложениях
- Классификация типов ошибок
- Как в архитектуру приложения встроена система репортинга и логирования разных типов ошибок
- Зачем и как логировать ошибки с экранов приложения
- Примеры пользы, полученной от детального логирования
Создание и поддержка фермы из 200 Mac Mini

- Каждый день Agoda гоняет 800 билдов на CI, в рамках каждого из которых проходит 23000 тестов
- Быстрый рост количества тестов сделал невыгодными сторонние сервисы
- Детали про организацию электроснабжения и охлаждения фермы
- Подходы к виртуализации
- Плюсы и минусы поддержки своей фермы
Разбор нового компонента SwiftUI – Gauge

- Gauge – это view, которая умеет отображать прогресс изменения какого-то значения
- У Gauge есть много стилей: accessoryCircular, accessoryCircularCapacity, accessoryLinear, accessoryLinearCapacity, defaultStyle
- В твиттер-треде показаны видео с примерами его работы и короткие сниппеты с настройкой
Как работать с NSZombie не только локально

- NSZombie – это механизм, позволяющий отлавливать ошибки типа EXC_BAD_ACCESS
- Предоставляемый Apple тулинг работает только локально
- Похожую функциональность можно реализовать самостоятельно, включить на пользователях тестфлайта и получать в Crashlytics подробную информацию о крешах
- В продакшн тащить такой подход не рекомендуется
- Код доступен здесь
Новый Grid Layout в SwiftUI

- Новый вид сетки сразу же отрисовывает все дочерние элементы в отличие от LazyVGrid или LazyHGrid
- Настраивать можно как расстояния между рядами и столбцами, так и поведение внутри ячейки
- Разумно использовать этот контрол по умолчанию, и переключаться на Lazy версию только при работе с большим количеством данных