Дайджест интересных материалов для мобильного разработчика #434 (7 — 13 марта)


Мобильная ОС компании Apple


Всем привет! Меня зовут Юра, я iOS-разработчик в core-команде. В этой статье расскажу, как мы работаем с многомодульностью в наших iOS-приложениях. Поговорим про окружение и структуру нашего проекта, затронем тему скорости компиляции и разберем немного кодогенерации.

Сублимация попыток объяснить друзьям чем отличаются классы от протоколов и почему без организации целого концерта здесь никак не обойтись.
Если вы нашли и читаете данную статью, значит пришли к пониманию необходимости тестов в вашем приложении, а это залог качества написанного вами кода и забота о клиентах.
И всё же, зачем нужны тесты?
Опишу самые, на мой взгляд, важные причины:
– при написании тестов вы продумываете все возможные варианты и ситуации, которые могут произайти в приложении, тем самым тестируете все эти подходы и исключаете возможные ошибки на «проде». Как простой пример: функция, выполняющая математическую операцию, должна выдавать определённый результат, но если посчитать руками, то вы обнаруживаете разницу, от которой можно обезопасится тестами
– в момент написания нового функционала (либо вы вернулись к проекту через длительный промежуток времени) проще всего запустить тесты и убедиться в том, что старый функционал по прежнему отрабатывает корректно
– ну и конечно, это экономия времени в будущем, особенно если ваш проект не маленький, а амбициозный и с долгосрочными планами

Жизненный цикл View Controller – это начинающаяся с создания последовательность шагов. Приходит создание View Controller со storyboard (выставляем view, button) или из кода.

Всем привет, меня зовут Юрий Трыков, я Head of Mobile в inDriver. В этой статье расскажу, как в рамках платформенной iOS-команды мы выстраивали модуляризацию DI-контейнеров в проекте, зачем вообще нам нужны DI-контейнеры и как настраивать взаимодействие UDF-компонентов и DI-контейнеров. Приятного чтения!


Нормализация сна и суточных ритмов – востребованная нынче тема. Согласитесь, удобно иметь на смартфоне приложение, способное за пару свайпов обеспечить здоровый сон, исправить суточные ритмы после перелёта или купировать эффекты, связанные с утомлением-переработкой-стрессом.
Спрос рождает предложение – и вот уже YouTube ломится от разного рода «музык для релаксации», «сеансов гипноза» и «исцеления во время сна 432 Гц». А Google Play и App Store, соответственно, от генераторов белого шума, плееров с треками для засыпания, смарт-будильников, интеллектуальных светильников, сервисов для подсчёта медленноволнового сна и прочего биохакерского мусора. Есть ли в подобных приложениях рациональное зерно? Да. безусловно. Но мы не станем перелопачивать народное творчество в поисках жемчужных зёрен, а начнём с правильной постановки задачи и определения технического облика акустического стимулятора на основе имеющихся гипотез. Ведь правильно поставленный вопрос содержит в себе половину ответа, не так ли?

Хабр, привет!
Меня зовут Борис. Я Mobile AQA lead в Vivid Money.
Это вторая статья в цикле статей по iOS-автоматизации, в которых я расскажу о том, как ускорить прохождение UI-тестов.
Данная статья будет полезна iOS-автоматизаторам с опытом, либо разработчикам.
В рамках этой статьи мы разберем такие этапы:
- зачем распараллеливать тесты?;
- распараллеливаем тесты, используя Xcode;
- распараллеливаем тесты, используя Fastlane.


Мобильными приложениями сегодня не пользуется разве что ленивый. Однако немногие знают, что некоторые программы – это не просто удобный сервис, но и средство реабилитации для людей с инвалидностью.
Все современные смартфоны оснащены функцией управления голосом и могут использоваться без применения зрения. А это делает их доступными для незрячих и слабовидящих людей.
Специализированные приложения, установленные на телефон, помогают людям с инвалидностью ориентироваться в пространстве, предупреждают об опасности, позволяют найти нужный транспорт, выстроить маршрут, обратиться за помощью и даже идентифицируют находящихся рядом людей и предметы.
Представляем вашему вниманию обзор наиболее популярных приложений, которые могут помочь незрячим и слабовидящим людям.

Привет! Когда мне по работе понадобилось реализовать список карточек на связке UICollectionView и UICollectionViewCompositionalLayout для iOS 13+, я не нашел хорошего примера. Написал свой и хочу поделиться с сообществом. А заодно показать реализацию для iOS11+.
Примеры можно адаптировать под свои задачи, а все исходники вы найдете в Github-репозитории в конце поста. Поехали!


Первое с чем вы сталкиваетесь при написании мобильного приложения, это переходы с одного экрана на другой и обратно (в случае простого приложения), а так же многоуровневые переходы и моментальный возврат на первый экран (back to root view). Всё это мы разберём на примерах в данной статье, ну а для начала немного углубимся в теорию.
Что такое NavigationView?
Представьте, что перед вами коробка (NavigationView) в которой много мячиков (View) и эти мячики могут соприкасаться друг с другом (переход с View на View) только в рамках этой коробки.
Но есть так же и случаи, когда внутри коробки, помимо шариков, есть ещё одна коробка поменьше, которая содержит другие маленькие шарики (история про .sheet и .fullScreenCover - модальные окна). Это так же разберём ниже в статье.

Добрый день! Я — Иваев Зафар, iOS разработчик в компании Usetech. В этой статье мы узнаем как фреймворк Combine помогает нам разрабатывать функционал приложения с помощью встроенных функций — операторов. В этой статье, мы покроем следующие типы операторов:
1. Последовательные операторы
2. Объединяющие операторы

В предыдущей части мы рассмотрели, что такое домен и какими принципами можно руководствоваться при его модуляризации. В этой части сконцентрируемся на типах связей между модулями и различиях в проектировании ООП и UDF-кода. Приятного чтения!

Эту часть я хотел посвятить анимациям, но понял, что это очень большая тема и для нее тоже нужен контекст. Поэтому сначала расскажу, что же лежит под капотом тех методов, которые мы обычно используем для анимаций.
Заодно разберемся с таким понятием, как неявные анимации.


Всем привет, я Дима из мобильной команды Туту, мы делаем приложения с 20М инсталлов. Расскажу, как можно быстро добавлять в приложение новый контент и обновлять его, не проходя повторные ревью в сторах. Это нужно, например, когда мы хотим быстро донести до людей коронавирусные ограничения.
Ниже реализация на SwiftUI и Kotlin (но вы можете использовать UIkit и серверный язык, принятый в вашей команде), а в GitHub-репозитории в конце статьи вы найдёте код сервера и приложений для детального изучения.
В iOS-приложении Авито куча UI-тестов — вы это уже наверняка знаете, потому что мы говорим про них постоянно. Это позволяет нам релизиться раз в неделю, причём регрессионное тестирование с ручными проверками мы проводим раз в две недели. Между ними в релиз идёт приложение, которое протестировано только нашими UI- и unit-тестами.
Чтобы поддерживать такие масштабы автотестирования, мы написали тест-раннер Emcee, который умеет скейлиться в ширину по физическим машинкам.