Воркшоп по KMM
Оптимальный способ использования KMM – взять бизнес-логику, уже реализованную в Android, и конвертировать ее в общий модуль, который будет работать и в iOS. 16 августа в 20:00 мск, Анна Жаркова расскажет, как конкретно Android код адаптируется для работы в iOS, про общую кроссплафторменную архитектуру и про то, какие подводные камни могут встретиться при реализации.
Вебинар пройдет в рамках специализации «iOS Developer» на онлайн-платформе OTUS.
Оптимальный способ использования KMM – взять бизнес-логику, уже реализованную в Android, и конвертировать ее в общий модуль, который будет работать и в iOS. 16 августа в 20:00 мск, Анна Жаркова расскажет, как конкретно Android код адаптируется для работы в iOS, про общую кроссплафторменную архитектуру и про то, какие подводные камни могут встретиться при реализации.
Вебинар пройдет в рамках специализации «iOS Developer» на онлайн-платформе OTUS.
Проверка безопасности приложения на CI
- MobSF – коллекция инструментов для автоматизированных проверок безопасности
- Среди них есть mobsfscan, который проходит по всей кодовой базе и выдает отчет с уязвимостями
- Его можно запускать на CI и использовать результаты проверок как блокеры на PR
- Это решение не даст 100% гарантий безопасности, но поможет не допустить уже известные ошибки
- MobSF – коллекция инструментов для автоматизированных проверок безопасности
- Среди них есть mobsfscan, который проходит по всей кодовой базе и выдает отчет с уязвимостями
- Его можно запускать на CI и использовать результаты проверок как блокеры на PR
- Это решение не даст 100% гарантий безопасности, но поможет не допустить уже известные ошибки
Benoit Pasquier
Security Application Static Analysis applied to iOS and Gitlab CI
Security is a big topic in software engineering but how does it apply to mobile development? We care about user experience or mobile performance, security issues are rarely prioritized. This week, I’ll share how to integrate security tools into your CI pipeline…
Как работают 3D трансформации View
Топовая серия постов про устройство матриц CATransform3D и линейную алгебру, используемую для расчетов трансформаций.
Топовая серия постов про устройство матриц CATransform3D и линейную алгебру, используемую для расчетов трансформаций.
Советы по работе с Accessibility
Разработчик организовал себе челлендж – каждый день постить один твит про работу с Accessibility в iOS в течение года. Набралось уже 80 советов, среди которых есть много интересных идей.
- О событиях в приложении, которые происходят асинхронно, можно уведомлять через CoiceOver. По умолчанию такие уведомления прерывают друг друга. Чтобы этого не происходило, можно складывать их в очередь, передав специальный параметр в атрибутах.
- Если в результате действий пользователя меняется лэйаут, хорошей практикой будет переместить фокус VoiceOver, отправив layout changed notification.
- Если установить у вьюшки свойство isAccessibilityElement в true, то движок Accessibility перестанет учитывать ее сабвью, и все, что расположено на ней, перестанет быть доступно.
Разработчик организовал себе челлендж – каждый день постить один твит про работу с Accessibility в iOS в течение года. Набралось уже 80 советов, среди которых есть много интересных идей.
- О событиях в приложении, которые происходят асинхронно, можно уведомлять через CoiceOver. По умолчанию такие уведомления прерывают друг друга. Чтобы этого не происходило, можно складывать их в очередь, передав специальный параметр в атрибутах.
- Если в результате действий пользователя меняется лэйаут, хорошей практикой будет переместить фокус VoiceOver, отправив layout changed notification.
- Если установить у вьюшки свойство isAccessibilityElement в true, то движок Accessibility перестанет учитывать ее сабвью, и все, что расположено на ней, перестанет быть доступно.
Реализация градиентов на шейдерах
Первая статья из планируемого цикла разработки шейдеров на Metal. Автор сравнивает реализацию градиента на CPU и GPU с 1D и 2D текстурами.
Первая статья из планируемого цикла разработки шейдеров на Metal. Автор сравнивает реализацию градиента на CPU и GPU с 1D и 2D текстурами.
Как использовать UIPasteControl, чтобы работать с буфером обмена
Начиная с iOS 16, приложения не могут свободно читать содержимое буфера обмена. Вместо этого у пользователя каждый раз запрашивается разрешение. Способ обойти запрос разрешения – использовать новый UIPasteControl.
Начиная с iOS 16, приложения не могут свободно читать содержимое буфера обмена. Вместо этого у пользователя каждый раз запрашивается разрешение. Способ обойти запрос разрешения – использовать новый UIPasteControl.
SwiftUI и навигация через Tab
На macOS можно переходить между полями ввода с помощью нажатия Tab. Это удобно при работе с большими формами. В статье рассказывается, как можно переопределить логику определения следующего поля для фокуса, если поведение по умолчанию вам не подходит.
На macOS можно переходить между полями ввода с помощью нажатия Tab. Это удобно при работе с большими формами. В статье рассказывается, как можно переопределить логику определения следующего поля для фокуса, если поведение по умолчанию вам не подходит.
Nil Coalescing
Adjust the direction of focus-based navigation in SwiftUI
We can customize how the user navigates through focusable views in our macOS apps with the help of the new focusSection() modifier.
Sendable и @Sendable
Среди последних нововведений в Swift Concurrency появились протокол Sendable и одноименный атрибут для функций. Их задача – гарантировать типобезопасность при передачи значений в многопоточном коде. В статье разбираются детали и ограничения работы с протоколом и то, как подготовить свой код к strict concurrency checking в Swift 6.
Среди последних нововведений в Swift Concurrency появились протокол Sendable и одноименный атрибут для функций. Их задача – гарантировать типобезопасность при передачи значений в многопоточном коде. В статье разбираются детали и ограничения работы с протоколом и то, как подготовить свой код к strict concurrency checking в Swift 6.
SwiftLee
Sendable and @Sendable closures explained with code examples
The Sendable protocol and @Sendable attribute help to eliminate data races and create thread-safety in Swift Concurrency.
Как устроено логирование в приложении Авито
- Точки отказа в мобильных приложениях
- Классификация типов ошибок
- Как в архитектуру приложения встроена система репортинга и логирования разных типов ошибок
- Зачем и как логировать ошибки с экранов приложения
- Примеры пользы, полученной от детального логирования
- Точки отказа в мобильных приложениях
- Классификация типов ошибок
- Как в архитектуру приложения встроена система репортинга и логирования разных типов ошибок
- Зачем и как логировать ошибки с экранов приложения
- Примеры пользы, полученной от детального логирования
Создание и поддержка фермы из 200 Mac Mini
- Каждый день Agoda гоняет 800 билдов на CI, в рамках каждого из которых проходит 23000 тестов
- Быстрый рост количества тестов сделал невыгодными сторонние сервисы
- Детали про организацию электроснабжения и охлаждения фермы
- Подходы к виртуализации
- Плюсы и минусы поддержки своей фермы
- Каждый день Agoda гоняет 800 билдов на CI, в рамках каждого из которых проходит 23000 тестов
- Быстрый рост количества тестов сделал невыгодными сторонние сервисы
- Детали про организацию электроснабжения и охлаждения фермы
- Подходы к виртуализации
- Плюсы и минусы поддержки своей фермы
Разбор нового компонента SwiftUI – Gauge
- Gauge – это view, которая умеет отображать прогресс изменения какого-то значения
- У Gauge есть много стилей: accessoryCircular, accessoryCircularCapacity, accessoryLinear, accessoryLinearCapacity, defaultStyle
- В твиттер-треде показаны видео с примерами его работы и короткие сниппеты с настройкой
- Gauge – это view, которая умеет отображать прогресс изменения какого-то значения
- У Gauge есть много стилей: accessoryCircular, accessoryCircularCapacity, accessoryLinear, accessoryLinearCapacity, defaultStyle
- В твиттер-треде показаны видео с примерами его работы и короткие сниппеты с настройкой
Как работать с NSZombie не только локально
- NSZombie – это механизм, позволяющий отлавливать ошибки типа EXC_BAD_ACCESS
- Предоставляемый Apple тулинг работает только локально
- Похожую функциональность можно реализовать самостоятельно, включить на пользователях тестфлайта и получать в Crashlytics подробную информацию о крешах
- В продакшн тащить такой подход не рекомендуется
- Код доступен здесь
- NSZombie – это механизм, позволяющий отлавливать ошибки типа EXC_BAD_ACCESS
- Предоставляемый Apple тулинг работает только локально
- Похожую функциональность можно реализовать самостоятельно, включить на пользователях тестфлайта и получать в Crashlytics подробную информацию о крешах
- В продакшн тащить такой подход не рекомендуется
- Код доступен здесь
Async Composable Architecture
Pointfree выпустили 200 эпизод своего видеокурса, а вместе с этим выложили большое обновление библиотеки Composable Architecture. Основные изменения связаны с внесением в нее различных фич Swift Concurrency.
Pointfree выпустили 200 эпизод своего видеокурса, а вместе с этим выложили большое обновление библиотеки Composable Architecture. Основные изменения связаны с внесением в нее различных фич Swift Concurrency.
www.pointfree.co
Episode #200: Async Composable Architecture in Practice
This week we are releasing the biggest update to the Composable Architecture since its first release over 2 years ago, bringing more of Swift’s modern concurrency tools to the library. To celebrate we will demonstrate how these tools can massively simplify…
Новый Grid Layout в SwiftUI
- Новый вид сетки сразу же отрисовывает все дочерние элементы в отличие от LazyVGrid или LazyHGrid
- Настраивать можно как расстояния между рядами и столбцами, так и поведение внутри ячейки
- Разумно использовать этот контрол по умолчанию, и переключаться на Lazy версию только при работе с большим количеством данных
- Новый вид сетки сразу же отрисовывает все дочерние элементы в отличие от LazyVGrid или LazyHGrid
- Настраивать можно как расстояния между рядами и столбцами, так и поведение внутри ячейки
- Разумно использовать этот контрол по умолчанию, и переключаться на Lazy версию только при работе с большим количеством данных
Воркшоп по архитектуре Flux
MVVM – отличная архитектура, но при использовании ее со SwiftUI возникает много проблем. 22 августа в 20:00 Ексей Пантелеев расскажет, с какими проблемами приходится сталкиваться, как их можно решить, расширив MVVM с помощью SOA и Coordinator’ов, и покажет, как можно строить архитектуру по принципам Flux.
Вебинар является частью онлайн-курса «iOS Developer. Professional» от OTUS. Партнер курса: Certiport.
MVVM – отличная архитектура, но при использовании ее со SwiftUI возникает много проблем. 22 августа в 20:00 Ексей Пантелеев расскажет, с какими проблемами приходится сталкиваться, как их можно решить, расширив MVVM с помощью SOA и Coordinator’ов, и покажет, как можно строить архитектуру по принципам Flux.
Вебинар является частью онлайн-курса «iOS Developer. Professional» от OTUS. Партнер курса: Certiport.
Fucking Format Style
Подробная документация по FormatStyle и ParseableFormatStyle. Удобно смотреть все возможные атрибуты для перевода различных типов данных в локализованные строки.
Подробная документация по FormatStyle и ParseableFormatStyle. Удобно смотреть все возможные атрибуты для перевода различных типов данных в локализованные строки.
Kintsugi – решение конфликтов в project.pbxproj
При конфликте Kintsugi анализирует изменения, сделанные в pbxproj файле, отменяет их, и делает заново.
При конфликте Kintsugi анализирует изменения, сделанные в pbxproj файле, отменяет их, и делает заново.
Пропозал по миграции компилятора Swift на Swift
- Важный этап в развитии любого языка – это бутстраппинг. Этот термин означает, что для того, чтобы скомпилировать новую версию компилятора, используется предыдущая версия этого же компилятора.
- Большая часть компилятора Swift написана на С++ и для ее компиляции Swift не нужен
- Исключение – несколько опциональных компонентов, которые уже реализованы на Swift. Среди них – Swift Driver, управляющий процессом компиляции, экспериментальный движок для pattern matching и некоторые SIL passes.
- Автор пропозала предлагает начать переписывать на Swift не только опциональные части компилятора
- Пост интересен в том числе как хороший инсайт в то, как сейчас организован процесс сборки компилятора
- Важный этап в развитии любого языка – это бутстраппинг. Этот термин означает, что для того, чтобы скомпилировать новую версию компилятора, используется предыдущая версия этого же компилятора.
- Большая часть компилятора Swift написана на С++ и для ее компиляции Swift не нужен
- Исключение – несколько опциональных компонентов, которые уже реализованы на Swift. Среди них – Swift Driver, управляющий процессом компиляции, экспериментальный движок для pattern matching и некоторые SIL passes.
- Автор пропозала предлагает начать переписывать на Swift не только опциональные части компилятора
- Пост интересен в том числе как хороший инсайт в то, как сейчас организован процесс сборки компилятора