Еще про MVI-архитектуру
• Ваш первый чистый MVI-проект для Android
• Android Broadcast: все тайны MVI
• Modern MVI и MVVM+ со всех сторон в 2023
• Finita la State Machine — MVI в iOS-приложении
• PokeCardCompose: Compose, Koin, MVI и покемоны
• MVI в iOS-приложении
• Ваш первый чистый MVI-проект для Android
• Android Broadcast: все тайны MVI
• Modern MVI и MVVM+ со всех сторон в 2023
• Finita la State Machine — MVI в iOS-приложении
• PokeCardCompose: Compose, Koin, MVI и покемоны
• MVI в iOS-приложении
AppTractor
Ваш первый чистый MVI-проект для Android
В этой статье автор представляет чистую архитектуру со своей точки зрения без каких-либо сложных и тяжелых объяснений. Зачем переходить на чистую архитектуру? Она: Поддерживаема Расширяема Соответствует принципам SOLID Хорошо подходит для больших команд и…
👍2
Swift Testing Revolutionary конвертирует тестовые кейсы, написанные в XCTest, в Swift Testing. Этот инструмент можно использовать как плагин для Xcode или, например, как инструмент командной строки.
По умолчанию все тестовые файлы будут перезаписаны, если вы не передали флаг --dry-run. Не забудьте сделать резервную копию тестовых файлов перед запуском этого инструмента.
Swift Testing Revolutionary на GitHub: https://github.com/giginet/swift-testing-revolutionary
Платформа: iOS
⭐️: 1.5K
По умолчанию все тестовые файлы будут перезаписаны, если вы не передали флаг --dry-run. Не забудьте сделать резервную копию тестовых файлов перед запуском этого инструмента.
Swift Testing Revolutionary на GitHub: https://github.com/giginet/swift-testing-revolutionary
Платформа: iOS
⭐️: 1.5K
This media is not supported in your browser
VIEW IN TELEGRAM
Как уменьшить расход памяти при загрузке UIImage с диска
Загрузка изображений с диска в массив внутренней памяти может увеличить потребление памяти. Переписав код с использованием API несистемного кэширования, мы значительно улучшили использование памяти. Если ваше приложение требует обработки изображений, решение на основе NSCache будет полезным.
Статья: https://apptractor.ru/info/articles/kak-umenshit-rashod-pamyati-pri-zagruzke-uiimage-s-diska.html
Платформа: iOS
Загрузка изображений с диска в массив внутренней памяти может увеличить потребление памяти. Переписав код с использованием API несистемного кэширования, мы значительно улучшили использование памяти. Если ваше приложение требует обработки изображений, решение на основе NSCache будет полезным.
Статья: https://apptractor.ru/info/articles/kak-umenshit-rashod-pamyati-pri-zagruzke-uiimage-s-diska.html
Платформа: iOS
Разбираемся с новой уязвимостью Android-библиотеки Jetpack Navigation: как открыть любой фрагмент из вашего приложения?
Недавно специалисты из компании Positive Technologies нашли серьезную проблему безопасности в популярной библиотеке для навигации в приложениях Android – Jetpack Navigation. Эта уязвимость позволяет открывать любые фрагменты внутри приложения.
К большому сожалению, несмотря на усилия сообщества, об этой уязвимости мало кто знает. Поэтому сегодня мы хотим еще раз подсветить данную проблему с углублением в детали. В статье мы разберем, что из себя представляет библиотека Jetpack Navigation и ее основные элементы, в чем заключается уязвимость и насколько она опасна, а также приведем немного статистики по уязвимым приложениям.
Статья: https://habr.com/ru/companies/swordfish_security/articles/830338/
Платформа: Android/безопасность
Недавно специалисты из компании Positive Technologies нашли серьезную проблему безопасности в популярной библиотеке для навигации в приложениях Android – Jetpack Navigation. Эта уязвимость позволяет открывать любые фрагменты внутри приложения.
К большому сожалению, несмотря на усилия сообщества, об этой уязвимости мало кто знает. Поэтому сегодня мы хотим еще раз подсветить данную проблему с углублением в детали. В статье мы разберем, что из себя представляет библиотека Jetpack Navigation и ее основные элементы, в чем заключается уязвимость и насколько она опасна, а также приведем немного статистики по уязвимым приложениям.
Статья: https://habr.com/ru/companies/swordfish_security/articles/830338/
Платформа: Android/безопасность
Paperize - это приложение для автоматической смены обоев. Внутри Kotlin, Jetpack Compose, Material 3, Dagger Hilt, Room, анимации Lottie Compose, Landscapist и еще несколько библиотек.
Paperize на GitHub: https://github.com/Anthonyy232/Paperize
Платформа: Android
⭐️: 129
Paperize на GitHub: https://github.com/Anthonyy232/Paperize
Платформа: Android
⭐️: 129
Health Lens - это приложение для HealthKit, которое позволяет пользователям экспортировать и анализировать данные о своем здоровье. Цель HealthLens - стать недостающей кнопкой «экспорта» данных о здоровье для одержимых данными пользователей, которым нужна персонализированная аналитика.
Health Lens на GitHub: https://github.com/wkaisertexas/HealthLens
Платформа: iOS
⭐️: 1
Health Lens на GitHub: https://github.com/wkaisertexas/HealthLens
Платформа: iOS
⭐️: 1
Видео и подкасты за неделю @AppFiles
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Что вы посмотрели за неделю?
#ios #android #mobile #video
•
(iOS Ru) Разбор SwiftUI проекта стартапа с AI на борту•
(iOS Ru) Вам не нужно хранилище в приложении•
(iOS En) SwiftUI Coverflow Carousel•
(iOS En) My Story & iOS Dev Career Advice•
(iOS En) Building iOS 18 Photos App UI•
(iOS En) Zoom Transitions SwiftUI•
(iOS En) Custom Operators in Swift•
(And Ru) Роман Елизаров про Kotlin, корутины и работу в Jetbrains•
(And En) Advanced layout animations in Compose (Shared elements)•
(And En) Refactoring to Expressive Kotlin•
(And En) From Zero to Billions: Building a High-Performance Kotlin App in Two Months•
(And En) Managing Complexity With Ktor•
(Crs Ru) Flutter Dev Podcast: навигация во Flutter•
(Crs Ru) Особенности сервиса Яндекс Про и будущее Flutter•
(Crs En) Permission Handling in Compose Multiplatform•
(Crs En) Create a Splash Screen in Compose Multiplatform for iOS & Android•
(Crs En) Uniting Native SDKs into Kotlin Multiplatform•
(Crs En) Compose Multiplatform on Mobile at Instabee for Over a Year•
(Dev Ru) Личный бренд разработчика•
(Dev Ru) Ход королевы: как российское шахматное приложение покорило мир•
(Dev En) Building an Effective Data Product Strategy•
(Dev En) System Design Concepts Course and Interview PrepЧто вы посмотрели за неделю?
#ios #android #mobile #video
Fantasy Premier League - проект на Kotlin Multiplatform с клиентами Jetpack Compose, Compose for Desktop и SwiftUI (с использованием Ktor для удаленных API-запросов и Room для персистентности). В настоящее время работает на Android, iOS и десктопах.
+ у автора есть еще десяток проектов на KMP, ссылки в репозитории
Fantasy Premier League на GitHub: https://github.com/joreilly/FantasyPremierLeague
Платформа: Android/кроссплатформа
⭐️: 451
+ у автора есть еще десяток проектов на KMP, ссылки в репозитории
Fantasy Premier League на GitHub: https://github.com/joreilly/FantasyPremierLeague
Платформа: Android/кроссплатформа
⭐️: 451
❤1
Подсветка элементов онбординга в SwiftUI iOS15+
Наш опыт в Ozon показывает, что отличным решением по информированию пользователя о новом функционале в мобильном приложении является онбординг. Его реализацию в нашем исполнении я и хотел бы сегодня рассмотреть в данной статье.
Статья: https://habr.com/ru/companies/ozontech/articles/830802/
Платформа: iOS
Наш опыт в Ozon показывает, что отличным решением по информированию пользователя о новом функционале в мобильном приложении является онбординг. Его реализацию в нашем исполнении я и хотел бы сегодня рассмотреть в данной статье.
Статья: https://habr.com/ru/companies/ozontech/articles/830802/
Платформа: iOS
PinLockSreen на основе KeyStore. Kotlin. Jetpack Compose
В данной любительской статье разберемся, что такое KeyStore в контексте мобильной разработки, для чего нужен и применим его в крайне легком варианте. Также погрузимся в разработку экрана входа в ваше приложение. Статья будет разделена на 3 так называемых раздела - KeyStore, UI и ViewModel.
Статья: https://habr.com/ru/articles/831914/
Платформа: Android
В данной любительской статье разберемся, что такое KeyStore в контексте мобильной разработки, для чего нужен и применим его в крайне легком варианте. Также погрузимся в разработку экрана входа в ваше приложение. Статья будет разделена на 3 так называемых раздела - KeyStore, UI и ViewModel.
Статья: https://habr.com/ru/articles/831914/
Платформа: Android
Водитель приедет через 3 минуты: реализация Uber Live Activity на iOS
Создание Live Activity для приложения Rider на iOS было напряженным, но полезным путешествием. От неожиданного анонса на WWDC до сложностей разработки и внедрения новой технологии в сжатые сроки, этот опыт продемонстрировал стойкость, адаптивность и креативность нашей команды. Мы преодолели технические препятствия, пересмотрели подход к UX и в итоге создали функцию, которая, по нашему мнению, улучшила впечатления водителей и пассажиров. Я надеюсь, что частички изобретательности, которые мы продемонстрировали в этой статье, могут вдохновить любого разработчика, работающего над Live Activities, и помочь ему преодолеть аналогичные сценарии и в целом использовать прагматичный подход к опыту, который живет за пределами основного приложения.
Статья: https://apptractor.ru/info/articles/uber-live-activity.html
Платформа: iOS
Создание Live Activity для приложения Rider на iOS было напряженным, но полезным путешествием. От неожиданного анонса на WWDC до сложностей разработки и внедрения новой технологии в сжатые сроки, этот опыт продемонстрировал стойкость, адаптивность и креативность нашей команды. Мы преодолели технические препятствия, пересмотрели подход к UX и в итоге создали функцию, которая, по нашему мнению, улучшила впечатления водителей и пассажиров. Я надеюсь, что частички изобретательности, которые мы продемонстрировали в этой статье, могут вдохновить любого разработчика, работающего над Live Activities, и помочь ему преодолеть аналогичные сценарии и в целом использовать прагматичный подход к опыту, который живет за пределами основного приложения.
Статья: https://apptractor.ru/info/articles/uber-live-activity.html
Платформа: iOS
Еще про Live Activity
• «Этот маленький остров меняет все» — опыт проектирования Live Activity в Lyft
• Исследуем Dynamic Island и ActivityKit
• Проектирование с ограничениями — Live Activity и Dynamic Island
• Как не наломать дров с Live Activity
Платформа: iOS
• «Этот маленький остров меняет все» — опыт проектирования Live Activity в Lyft
• Исследуем Dynamic Island и ActivityKit
• Проектирование с ограничениями — Live Activity и Dynamic Island
• Как не наломать дров с Live Activity
Платформа: iOS
AppTractor
«Этот маленький остров меняет все» — опыт проектирования Live Activity в Lyft
Мы ожидаем, что Live Activities станет хорошим дополнением для многих приложений iOS, но для таких специфических случаев использования, как поездки на автомобиле, где своевременные обновления могут сформировать или сломать прекрасный опыт, это будет настоящим…
Giphy Trending - пример приложения для Android с популярными анимированными гифками Giphy для обмена или загрузки. Сделано на основе Kotlin, MVVM, Jetpack Compose (Single Activity), корутин и Flow, Dagger Hilt, Material 3, Gradle Kotlin DSL и Version Catalog, Baseline Profile.
Giphy Trending на GitHub: https://github.com/ryanw-mobile/giphy-trending
Платформа: Android
⭐️: 14
Giphy Trending на GitHub: https://github.com/ryanw-mobile/giphy-trending
Платформа: Android
⭐️: 14
Упадок мобильной разработки
Эти мобильные штучки уже не так интересны. Вы понимаете, что тратите все свое время на борьбу с платформой и очень мало времени на создание чего-либо. Создание - это самое интересное. Создание - это радость. Когда вы убираете радость из уравнения, это перестает приносить удовольствие, и тогда вы начинаете задаваться вопросом...
Есть ли что-то лучше? Что-то более увлекательное, что позволит мне создавать вещи быстрее, с быстрыми циклами обратной связи и более разумным тестированием?
Именно тогда мобильные разработчики часто пробуют что-то новое, например, веб-разработку (часто на основе JavaScript, Ruby, Python и т. д.), и обнаруживают, что жизнь на другой стороне безумно весела и продуктивна.
Статья: https://apptractor.ru/info/articles/upadok-mobilnoy-razrabotki.html
Платформа: разработка
Эти мобильные штучки уже не так интересны. Вы понимаете, что тратите все свое время на борьбу с платформой и очень мало времени на создание чего-либо. Создание - это самое интересное. Создание - это радость. Когда вы убираете радость из уравнения, это перестает приносить удовольствие, и тогда вы начинаете задаваться вопросом...
Есть ли что-то лучше? Что-то более увлекательное, что позволит мне создавать вещи быстрее, с быстрыми циклами обратной связи и более разумным тестированием?
Именно тогда мобильные разработчики часто пробуют что-то новое, например, веб-разработку (часто на основе JavaScript, Ruby, Python и т. д.), и обнаруживают, что жизнь на другой стороне безумно весела и продуктивна.
Статья: https://apptractor.ru/info/articles/upadok-mobilnoy-razrabotki.html
Платформа: разработка
DominantColors позволяет легко найти доминирующие на изображении цвета. Библиотека возвращает палитру цветов, наиболее часто встречающихся в изображении. Есть несколько алгоритмов получения главных цветов, можно даже получить контрастный цвет для нанесения текста.
DominantColors на GitHub: https://github.com/DenDmitriev/DominantColors
Платформа: iOS
⭐️: 31
DominantColors на GitHub: https://github.com/DenDmitriev/DominantColors
Платформа: iOS
⭐️: 31
🔥1
Инженер по машинному обучению — новый путь обучения от Google
Google предлагает новый полный путь обучения по основам машинного обучения с использованием технологий Google Cloud. Этот путь обучения вы можете пройти самостоятельно и бесплатно. Однако он является довольно длительным, поскольку каждый отдельный курс (а их 15 во всем потоке) требует от 8 до 32 часов.
Новость: https://apptractor.ru/learn/inzhener-po-mashinnomu-obucheniyu-novyy-put-obucheniya-ot-google.html
Платформа: обучение
Google предлагает новый полный путь обучения по основам машинного обучения с использованием технологий Google Cloud. Этот путь обучения вы можете пройти самостоятельно и бесплатно. Однако он является довольно длительным, поскольку каждый отдельный курс (а их 15 во всем потоке) требует от 8 до 32 часов.
Новость: https://apptractor.ru/learn/inzhener-po-mashinnomu-obucheniyu-novyy-put-obucheniya-ot-google.html
Платформа: обучение
Apple выпустила библиотеку гомоморфного шифрования для Swift
Гомоморфное шифрование - это криптографическая техника, которая позволяет производить вычисления на зашифрованных данных, не раскрывая операционному процессу лежащие в их основе незашифрованные данные. Она позволяет клиентам отправлять зашифрованные данные на сервер, который обрабатывает эти зашифрованные данные и возвращает результат, который клиент может расшифровать. Во время выполнения запроса сам сервер никогда не расшифровывает исходные данные и даже не имеет доступа к ключу дешифрования. Такой подход открывает новые возможности для работы облачных сервисов, обеспечивая конфиденциальность и безопасность данных пользователя, что, безусловно, очень привлекательно для многих сценариев.
В Apple используют гомоморфное шифрование в своей работе, поэтому они рады поделиться этой Swift-реализацией с сообществом, чтобы другие могли использовать ее и вносить свой вклад.
Одним из примеров использования этой реализации в iOS 18 является новая функция Live Caller ID Lookup, которая предоставляет услуги определения номера абонента и блокировки спама. Live Caller ID Lookup использует гомоморфное шифрование для отправки зашифрованного запроса на сервер, который может предоставить информацию о телефонном номере без того, чтобы сервер знал конкретный номер телефона, указанный в запросе.
Новость: https://apptractor.ru/info/news/apple-vypustila-biblioteku-gomomorfnogo-shifrovaniya-dlya-swift.html
Платформа: iOS
Гомоморфное шифрование - это криптографическая техника, которая позволяет производить вычисления на зашифрованных данных, не раскрывая операционному процессу лежащие в их основе незашифрованные данные. Она позволяет клиентам отправлять зашифрованные данные на сервер, который обрабатывает эти зашифрованные данные и возвращает результат, который клиент может расшифровать. Во время выполнения запроса сам сервер никогда не расшифровывает исходные данные и даже не имеет доступа к ключу дешифрования. Такой подход открывает новые возможности для работы облачных сервисов, обеспечивая конфиденциальность и безопасность данных пользователя, что, безусловно, очень привлекательно для многих сценариев.
В Apple используют гомоморфное шифрование в своей работе, поэтому они рады поделиться этой Swift-реализацией с сообществом, чтобы другие могли использовать ее и вносить свой вклад.
Одним из примеров использования этой реализации в iOS 18 является новая функция Live Caller ID Lookup, которая предоставляет услуги определения номера абонента и блокировки спама. Live Caller ID Lookup использует гомоморфное шифрование для отправки зашифрованного запроса на сервер, который может предоставить информацию о телефонном номере без того, чтобы сервер знал конкретный номер телефона, указанный в запросе.
Новость: https://apptractor.ru/info/news/apple-vypustila-biblioteku-gomomorfnogo-shifrovaniya-dlya-swift.html
Платформа: iOS
👍3
Вопросы доступности при использовании моего кастомного макета стопки карт
Пару недель назад я опубликовала статью «Кастомные макеты в Compose — стопка карточек с кошками». У макета есть некоторые проблемы с доступностью, и в этой статье я опишу то, как постаралась исправить некоторые из них. Есть несколько проблем, которые я не буду устранять из-за объема этой статьи; вместо этого я обсужу проблемы, которые они вызывают, и возможные решения.
В этот раз я также укажу на некоторые положительные моменты в макете. Мне кажется, что я часто говорю только о проблемах и пытаюсь их найти, но в этот раз я поделюсь и тем, что работает хорошо.
Статья: https://apptractor.ru/info/articles/voprosy-dostupnosti-pri-ispolzovanii-kastomnogo-maketa-stopki-kart.html
Платформа: Android
Пару недель назад я опубликовала статью «Кастомные макеты в Compose — стопка карточек с кошками». У макета есть некоторые проблемы с доступностью, и в этой статье я опишу то, как постаралась исправить некоторые из них. Есть несколько проблем, которые я не буду устранять из-за объема этой статьи; вместо этого я обсужу проблемы, которые они вызывают, и возможные решения.
В этот раз я также укажу на некоторые положительные моменты в макете. Мне кажется, что я часто говорю только о проблемах и пытаюсь их найти, но в этот раз я поделюсь и тем, что работает хорошо.
Статья: https://apptractor.ru/info/articles/voprosy-dostupnosti-pri-ispolzovanii-kastomnogo-maketa-stopki-kart.html
Платформа: Android
This media is not supported in your browser
VIEW IN TELEGRAM
ImageCropView - это библиотека Jetpack Compose, которая предоставляет простое и настраиваемое представление для обрезки изображений. Она поддерживает различные стили обрезки, такие как свободная форма, квадратная и круговая обрезка, что позволяет легко интегрировать функцию обрезки изображений в пользовательский интерфейс Compose.
ImageCropView на GitHub: https://github.com/rroohit/ImageCropView
Платформа: Android
⭐️: 67
ImageCropView на GitHub: https://github.com/rroohit/ImageCropView
Платформа: Android
⭐️: 67
👍1
Как создать плитку из изображений в SwiftUI
«Я справлюсь!» Думаю, именно такой была первая реакция большинства людей, увидевших название этой статьи. Хотя плитка изображений не является часто используемой функцией, большинство разработчиков могут легко освоить ее реализацию. Запрос в поисковой системе показывает, что почти все результаты указывают на одно и то же решение - использование модификатора resizable.
Однако для мощного фреймворка пользовательского интерфейса явно не подходит только одно решение. В этой статье мы рассмотрим две различные реализации тайлинга изображений, а затем представим менее распространенный метод построения изображений в SwiftUI.
Статья: https://fatbobman.com/en/posts/how-to-tile-images-in-swiftui/
Платформа: iOS
«Я справлюсь!» Думаю, именно такой была первая реакция большинства людей, увидевших название этой статьи. Хотя плитка изображений не является часто используемой функцией, большинство разработчиков могут легко освоить ее реализацию. Запрос в поисковой системе показывает, что почти все результаты указывают на одно и то же решение - использование модификатора resizable.
Однако для мощного фреймворка пользовательского интерфейса явно не подходит только одно решение. В этой статье мы рассмотрим две различные реализации тайлинга изображений, а затем представим менее распространенный метод построения изображений в SwiftUI.
Статья: https://fatbobman.com/en/posts/how-to-tile-images-in-swiftui/
Платформа: iOS