Forwarded from Код Воробья для iOS разработчиков
Как устроен онбординг в App Store. Контроллер назвали
Заголовок “What’s New…” поместили в контейнер, хотя внутри него только лейбл. Ячейки это
Тулбар обычная вью с фоном
Иконка, текст и кнопки в тулбаре поместили в вертикальный стек. Ненормально большой отсуп снизу тулбара задан фикс значением от layoutMargins.bottom + 89.
#ViewHierarchy
OnboardingViewController
. Не оборачивали в навигейшн. Основной вью выступает не коллекция, а UIScrollView
. Заголовок “What’s New…” поместили в контейнер, хотя внутри него только лейбл. Ячейки это
UIView
, а тайтл-описание находятся в стеке.Тулбар обычная вью с фоном
UIVisualEffectView
. Текст с кнопкой "See how your data..." это UITextView
. Иконка, текст и кнопки в тулбаре поместили в вертикальный стек. Ненормально большой отсуп снизу тулбара задан фикс значением от layoutMargins.bottom + 89.
#ViewHierarchy
👍6💩1
WindowState — это компонент для Jetpack Compose от Microsoft, который помогает вам легко получить сведения о состоянии окон на устройствах с двумя, складными или большими экранами с помощью библиотеки Google Jetpack WindowManager. Компонент предоставляет текущую информацию об окне в виде состояния Compose, включая положение складывания, ориентацию и классы размера окна. Для устройств с двумя экранами и складных устройств, сочетающих различные положения и ориентации складывания, компонент представляем четыре положения дисплея, чтобы можно было воспользоваться преимуществами этих новых форм-факторов: Двойной книжный, Двойной альбомный, Одиночный портретный, Одиночный альбомный.
Библиотека на GitHub: https://github.com/microsoft/surface-duo-compose-sdk/tree/main/WindowState
Платформа: Android
⭐️: 9
Библиотека на GitHub: https://github.com/microsoft/surface-duo-compose-sdk/tree/main/WindowState
Платформа: Android
⭐️: 9
Новые стенания про Google Play.
«Ваше приложение нарушает правила Google Play»: сводки из ада
Маркет Google Play хорошо всем известен. Он предустановлен на всех Android-девайсах, которые продаются в магазинах, так что приток пользователей там максимальный. Однако этим преимущества, собственно говоря, и исчерпываются. Проблема Google Play, впрочем, заключается не в деньгах, а в некомпетентности сотрудников.
Статья: https://apptractor.ru/prgp
Платформа: Android
⬆️: +22
«Ваше приложение нарушает правила Google Play»: сводки из ада
Маркет Google Play хорошо всем известен. Он предустановлен на всех Android-девайсах, которые продаются в магазинах, так что приток пользователей там максимальный. Однако этим преимущества, собственно говоря, и исчерпываются. Проблема Google Play, впрочем, заключается не в деньгах, а в некомпетентности сотрудников.
Статья: https://apptractor.ru/prgp
Платформа: Android
⬆️: +22
This media is not supported in your browser
VIEW IN TELEGRAM
Swimat - плагин Xcode для форматирования вашего кода Swift.
Плагин на GitHub: https://github.com/Jintin/Swimat
Платформа: iOS
⭐️: 1.5К
Плагин на GitHub: https://github.com/Jintin/Swimat
Платформа: iOS
⭐️: 1.5К
Учебный курс по GitHub Actions на YouTube
Курс посвящен GitHub как платформе автоматизации. Фактически, он научит вас, как написать свой первый конвейер рабочего процесса с GitHub Actions и GitHub API для автоматизированного создания, тестирования и развертывания ПО.
Есть 4 видео:
1. Написание вашего первого workflow с помощью GitHub Actions и GitHub API.
2. Создание конвейеров непрерывной интеграции (CI) Python и NodeJS с помощью GitHub Actions.
3. Непрерывное развертывание (CD) с помощью GitHub Actions.
4. Управляйте инфраструктурой AWS с помощью Terraform как профессиональный DevOps-инженер.
Видео: https://apptractor.ru/gthbact
Курс посвящен GitHub как платформе автоматизации. Фактически, он научит вас, как написать свой первый конвейер рабочего процесса с GitHub Actions и GitHub API для автоматизированного создания, тестирования и развертывания ПО.
Есть 4 видео:
1. Написание вашего первого workflow с помощью GitHub Actions и GitHub API.
2. Создание конвейеров непрерывной интеграции (CI) Python и NodeJS с помощью GitHub Actions.
3. Непрерывное развертывание (CD) с помощью GitHub Actions.
4. Управляйте инфраструктурой AWS с помощью Terraform как профессиональный DevOps-инженер.
Видео: https://apptractor.ru/gthbact
Введение в Jetpack DataStore
DataStore — это библиотека хранения данных Jetpack, которая обеспечивает безопасный и последовательный способ хранения небольших объемов данных, таких как настройки или состояние приложения. Он основан на корутинах Kotlin и Flow, которые обеспечивают асинхронное хранение данных. DataStore призван заменить SharedPreferences, поскольку является потокобезопасным и неблокирующимся. Он предоставляет две разные реализации: Proto DataStore, в котором хранятся типизированные объекты (поддерживаемые буферами протокола), и Preferences DataStore, в котором хранятся пары ключ-значение.
В этой статье более подробно рассматривается DataStore — как он работает, какие реализации предоставляет и каковы разные варианты его использования. Мы также рассмотрим, какие преимущества и улучшения он дает по сравнению с SharedPreferences, и почему это делает DataStore достойным вашего внимания.
Статья: https://apptractor.ru/info/articles/jetpack-datastore.html
Платформа: Android
DataStore — это библиотека хранения данных Jetpack, которая обеспечивает безопасный и последовательный способ хранения небольших объемов данных, таких как настройки или состояние приложения. Он основан на корутинах Kotlin и Flow, которые обеспечивают асинхронное хранение данных. DataStore призван заменить SharedPreferences, поскольку является потокобезопасным и неблокирующимся. Он предоставляет две разные реализации: Proto DataStore, в котором хранятся типизированные объекты (поддерживаемые буферами протокола), и Preferences DataStore, в котором хранятся пары ключ-значение.
В этой статье более подробно рассматривается DataStore — как он работает, какие реализации предоставляет и каковы разные варианты его использования. Мы также рассмотрим, какие преимущества и улучшения он дает по сравнению с SharedPreferences, и почему это делает DataStore достойным вашего внимания.
Статья: https://apptractor.ru/info/articles/jetpack-datastore.html
Платформа: Android
Faradle - игра типа Wordle, сделанная на Jetpack Compose.
Проект на GitHub: https://github.com/adibfara/Faradle
Платформа: Android
⭐️: 80
Проект на GitHub: https://github.com/adibfara/Faradle
Платформа: Android
⭐️: 80
Как меня разорили мои облачные расходы
Я был и остаюсь ярым сторонником «облака». Я создал Have I Been Pwned (HIBP) как cloud-first сервис, в котором использовались преимущества современных облачных парадигм, таких как Azure Table Storage, для значительного снижения затрат при сумасшедшем уровне производительности, которого я никогда раньше не мог достичь. Я написал много статей о том, как делать большие дела за небольшие деньги, и говорил по всему миру о большом успехе, которого я добился с помощью этих подходов. Один из таких докладов был «Как я поимел свои облачные расходы», поэтому кажется уместным, что сегодня я пишу о полной противоположности — о том, как мои облачные затраты поимели меня.
Статья: https://apptractor.ru/cldpwnd
Платформа: облако
Я был и остаюсь ярым сторонником «облака». Я создал Have I Been Pwned (HIBP) как cloud-first сервис, в котором использовались преимущества современных облачных парадигм, таких как Azure Table Storage, для значительного снижения затрат при сумасшедшем уровне производительности, которого я никогда раньше не мог достичь. Я написал много статей о том, как делать большие дела за небольшие деньги, и говорил по всему миру о большом успехе, которого я добился с помощью этих подходов. Один из таких докладов был «Как я поимел свои облачные расходы», поэтому кажется уместным, что сегодня я пишу о полной противоположности — о том, как мои облачные затраты поимели меня.
Статья: https://apptractor.ru/cldpwnd
Платформа: облако
Skailer - красивый музыкальный плеер, сделанный с помощью SwiftUI и демонстрирующий неоморфизм и использование MVVM-архитектуры.
Плагин на GitHub: https://github.com/jijotp/MusicPlayer
Платформа: iOS
⭐️: 4
Плагин на GitHub: https://github.com/jijotp/MusicPlayer
Платформа: iOS
⭐️: 4
🔥2
Исправление снижения производительности до того, как оно произойдет
В этом посте описывается, как команда Netflix TVUI реализовала надежную стратегию для быстрого и легкого обнаружения аномалий производительности до того, как они будут выпущены, а часто даже до того, как они будут приняты в кодовую базу.
Статья: https://apptractor.ru/ntflxprf
Платформа: тестирование
В этом посте описывается, как команда Netflix TVUI реализовала надежную стратегию для быстрого и легкого обнаружения аномалий производительности до того, как они будут выпущены, а часто даже до того, как они будут приняты в кодовую базу.
Статья: https://apptractor.ru/ntflxprf
Платформа: тестирование
4 малоизвестные функции Swift
Многие разработчики работают со стандартными функциями и часто не подозревают о многих выдающихся возможностях, скрытых в знакомых языках и библиотеках. Эти возможности могут быть уже знакомы некоторым читателям, но для меня они в последнее время стали небольшим открытием.
Статья: https://apptractor.ru/4swft
Платформа: iOS/Swift
👋: 525
Многие разработчики работают со стандартными функциями и часто не подозревают о многих выдающихся возможностях, скрытых в знакомых языках и библиотеках. Эти возможности могут быть уже знакомы некоторым читателям, но для меня они в последнее время стали небольшим открытием.
Статья: https://apptractor.ru/4swft
Платформа: iOS/Swift
👋: 525
Импакт-анализ на примере Android-проекта
Одной из самых дорогих по времени операций на CI-сервере является прогон автотестов. Есть множество способов их ускорения, например, распараллеливание выполнения по нескольким CI-агентам и/или эмуляторам, полная эмуляция внешнего окружения (backend/сервисы Google/вебсокеты), тонкая настройка эмуляторов (отключение анимации/Headless-сборки/отключение снепшотов) и так далее. Сегодня поговорим про импакт-анализ или запуск только тех тестов, которые связаны с последними изменениями в коде. Расскажу какие шаги нужны для импакт-анализа и как мы реализовали это в нашем проекте.
Статья: https://apptractor.ru/pktnlz
Платформа: Android/тестирование
⬆️: +22
Одной из самых дорогих по времени операций на CI-сервере является прогон автотестов. Есть множество способов их ускорения, например, распараллеливание выполнения по нескольким CI-агентам и/или эмуляторам, полная эмуляция внешнего окружения (backend/сервисы Google/вебсокеты), тонкая настройка эмуляторов (отключение анимации/Headless-сборки/отключение снепшотов) и так далее. Сегодня поговорим про импакт-анализ или запуск только тех тестов, которые связаны с последними изменениями в коде. Расскажу какие шаги нужны для импакт-анализа и как мы реализовали это в нашем проекте.
Статья: https://apptractor.ru/pktnlz
Платформа: Android/тестирование
⬆️: +22
Butterfly помогает создавать адаптивные и отзывчивые пользовательские интерфейсы для Android с помощью Jetpack WindowManager. Кроме того, библиотека поддерживает полезные функции для интеграции Jetpack Compose и LiveData.
Библиотека на GitHub: https://github.com/GetStream/butterfly
Платформа: Android
⭐️: 106
Библиотека на GitHub: https://github.com/GetStream/butterfly
Платформа: Android
⭐️: 106
Обзор решений для навигации в iOS
Навигация в iOS это сложно. Нужно уметь открывать целые цепочки экранов, проверять, не открыт ли уже этот экран, передавать аргументы, анимировать переходы, навешивать интерсепторы на авторизацию, поддерживать диплинки и многое другое!
В этом видео HH.ru формализует критерии выбора библиотеки мечты для навигации и прогоняет через них самые мощные из текущих решений.
Видео: https://apptractor.ru/iosnav
Платформа: iOS
Навигация в iOS это сложно. Нужно уметь открывать целые цепочки экранов, проверять, не открыт ли уже этот экран, передавать аргументы, анимировать переходы, навешивать интерсепторы на авторизацию, поддерживать диплинки и многое другое!
В этом видео HH.ru формализует критерии выбора библиотеки мечты для навигации и прогоняет через них самые мощные из текущих решений.
Видео: https://apptractor.ru/iosnav
Платформа: iOS
👍3
Lucilla — это библиотека для полнотекстового поиска в памяти для Kotlin. Она позволяет вам создавать индекс для данных, которые не нужно сохранять в базе и выполнять поисковые запросы по нему, чтобы быстро найти соответствующие документы. Есть расширенный конвейер обработки текста с поддержкой токенизации, стемминга, удаления пунктуации и т.п., расширяемая обработка текста с настраиваемыми шагами, ранжирование результатов поиска с использованием оценок, настраиваемый анализ документов с возможностью игнорировать нежелательные поля.
Библиотека на GitHub: https://github.com/haroldadmin/lucilla
Платформа: Android/Kotlin
⭐️: 52
Библиотека на GitHub: https://github.com/haroldadmin/lucilla
Платформа: Android/Kotlin
⭐️: 52
GitHub
GitHub - haroldadmin/lucilla: Fast, efficient, in-memory Full Text Search for Kotlin
Fast, efficient, in-memory Full Text Search for Kotlin - haroldadmin/lucilla
Как справляться с техническим долгом в масштабе суперприложения
Во Flo каждая команда ориентирована на продукт, даже платформенные команды. Сосредоточение внимания на продукте очень важно, но оно должно соответствовать скорости разработки, которая со временем может снижаться, давая меньше возможностей экспериментировать или приносить пользу.
В этой статье Директор по инжинирингу во Flo рассказывает, как в компании работают с техническим долгом и как эволюционная архитектура и SRE помогают сбалансировать инновации и качество в мобильной разработке.
Статья 🇬🇧: https://apptractor.ru/flodbt
Платформа: разработка
👋: 233
Во Flo каждая команда ориентирована на продукт, даже платформенные команды. Сосредоточение внимания на продукте очень важно, но оно должно соответствовать скорости разработки, которая со временем может снижаться, давая меньше возможностей экспериментировать или приносить пользу.
В этой статье Директор по инжинирингу во Flo рассказывает, как в компании работают с техническим долгом и как эволюционная архитектура и SRE помогают сбалансировать инновации и качество в мобильной разработке.
Статья 🇬🇧: https://apptractor.ru/flodbt
Платформа: разработка
👋: 233
Тренды Android-разработки 2022 - текстовая расшифровка видео Android Broadcast
Вот и наступил 2022 год, а это значит, что нам нужно определить тренды и вектор развития — куда в этом году стоит развиваться Android-разработчикам, что будет интересного, какую архитектуру использовать, нужны ли еще Android View, что там с Compose, готов ли он уже к продакшн и или мы уже опаздываем? На все эти вопросы отвечаем в этой статье.
Статья 🇷🇺: https://apptractor.ru/drddev2022
Платформа: Android
Вот и наступил 2022 год, а это значит, что нам нужно определить тренды и вектор развития — куда в этом году стоит развиваться Android-разработчикам, что будет интересного, какую архитектуру использовать, нужны ли еще Android View, что там с Compose, готов ли он уже к продакшн и или мы уже опаздываем? На все эти вопросы отвечаем в этой статье.
Статья 🇷🇺: https://apptractor.ru/drddev2022
Платформа: Android
Siren - библиотека уведомляет пользователя о том, что вышла новая версия приложения и предлагает обновиться. Данные берет из App Store, есть три вида предупреждений, настраиваемые правила показа, проверка совместимости устройства, локализация на более чем 40 языков.
Библиотека на GitHub: https://github.com/ArtSabintsev/Siren
Платформа: iOS
⭐️: 3.9К
Библиотека на GitHub: https://github.com/ArtSabintsev/Siren
Платформа: iOS
⭐️: 3.9К
Flutter vs натив: почему мы переходим с первого на второй
Наступил момент, когда наш продукт из стартапа с документооборотом решил перерасти в долгоиграющий проект, бизнесу захотелось перейти от количественного к качественному: более нативного поведения и вообще, чтобы ставили только пять звёзд. Как убедить бизнес, что нужно всё переписать на Native? И вообще надо ли? А что будет с командой? Захотят ли спецы на Flutter возвращаться на старый добрый Native-стек?
Статья 🇷🇺: https://apptractor.ru/fltntv
Платформа: разработка
⬆️: +19
Наступил момент, когда наш продукт из стартапа с документооборотом решил перерасти в долгоиграющий проект, бизнесу захотелось перейти от количественного к качественному: более нативного поведения и вообще, чтобы ставили только пять звёзд. Как убедить бизнес, что нужно всё переписать на Native? И вообще надо ли? А что будет с командой? Захотят ли спецы на Flutter возвращаться на старый добрый Native-стек?
Статья 🇷🇺: https://apptractor.ru/fltntv
Платформа: разработка
⬆️: +19
👍3👎1
Чему мы научились, используя KMM для iOS
В этой статье я рассказал о некоторых основных задачах и проблемах, с которыми мы столкнулись при работе с KMM на iOS. Не обо всем, но вполне достаточно, чтобы дать вам представление о KMM. Несмотря на проблемы и более длительное, чем ожидалось, время разработки, MVP был успешным, и у нас был рабочий модуль KMM, который использовался на двух платформах сразу. Мы продолжали работать с КММ, и теперь он с большим успехом используется в продакшене. KMM все еще может быть в ранней стадии разработки, но если вы проявите упорство, несмотря на все трудности, вы, безусловно, сможете использовать его. Моей целью при изложении проблем было не напугать вас, а поделиться с вами трудностями использования KMM в сегодняшнем состоянии.
Статья 🇷🇺: https://apptractor.ru/kmmios
Платформа: iOS/кроссплатформа
👋: 688
В этой статье я рассказал о некоторых основных задачах и проблемах, с которыми мы столкнулись при работе с KMM на iOS. Не обо всем, но вполне достаточно, чтобы дать вам представление о KMM. Несмотря на проблемы и более длительное, чем ожидалось, время разработки, MVP был успешным, и у нас был рабочий модуль KMM, который использовался на двух платформах сразу. Мы продолжали работать с КММ, и теперь он с большим успехом используется в продакшене. KMM все еще может быть в ранней стадии разработки, но если вы проявите упорство, несмотря на все трудности, вы, безусловно, сможете использовать его. Моей целью при изложении проблем было не напугать вас, а поделиться с вами трудностями использования KMM в сегодняшнем состоянии.
Статья 🇷🇺: https://apptractor.ru/kmmios
Платформа: iOS/кроссплатформа
👋: 688
Forwarded from Код Воробья для iOS разработчиков
Как устроен системный калькулятор.
Приложение написано на сценах. Root-контроллер называется
Клавиатуру сделали обычный вью и назвали
#ViewHierarchy
Приложение написано на сценах. Root-контроллер называется
DisplayViewController
. Лейбл с введенными цифрами обернули в контейнер DisplayView
и добавили жесты LongPress, Swipe и Tap.Клавиатуру сделали обычный вью и назвали
CalculatorKeypadView
. Кнопки сделаны как UIButton. Все кнопки - объекты одного класса, даже измененный 0. Контейнер лейаутится через AutoLayout, а вот сетку с кнопками расставили с помощью фреймов.#ViewHierarchy
👍4