Reddit улучшил скорость запуска приложений более чем на 50% с помощью базовых профилей и R8
Reddit - один из крупнейших в мире интернет-форумов, объединяющий бесчисленные сообщества, ищущие развлечения, ответы на повседневные вопросы и многое другое. Недавно команда оптимизировала свое приложение для Android, чтобы улучшить скорость запуска и повысить производительность рендеринга с помощью Baseline Profiles. Но на этом команда не остановилась. Разработчики приложения Reddit также включили компилятор R8 на полный режим, чтобы максимально оптимизировать байткод, и использовали Jetpack Compose для переписывания устаревшего пользовательского интерфейса, улучшая работу пользователей и разработчиков.
Статья: https://android-developers.googleblog.com/2024/12/reddit-improved-app-startup-speed-using-baseline-profiles-r8.html
Платформа: Android
Reddit - один из крупнейших в мире интернет-форумов, объединяющий бесчисленные сообщества, ищущие развлечения, ответы на повседневные вопросы и многое другое. Недавно команда оптимизировала свое приложение для Android, чтобы улучшить скорость запуска и повысить производительность рендеринга с помощью Baseline Profiles. Но на этом команда не остановилась. Разработчики приложения Reddit также включили компилятор R8 на полный режим, чтобы максимально оптимизировать байткод, и использовали Jetpack Compose для переписывания устаревшего пользовательского интерфейса, улучшая работу пользователей и разработчиков.
Статья: https://android-developers.googleblog.com/2024/12/reddit-improved-app-startup-speed-using-baseline-profiles-r8.html
Платформа: Android
👍3
CoordinatorX - навигационный фреймворк SwiftUI для iOS, macOS, tvOS, watchOS и visionOS, основанный на паттерне Координатор.
CoordinatorX на GitHub: https://github.com/edon2005/CoordinatorX
Платформа: iOS
⭐️: 5
Еще: видео "Паттерн Координатор для навигация в iOS-приложении"
CoordinatorX на GitHub: https://github.com/edon2005/CoordinatorX
Платформа: iOS
⭐️: 5
Еще: видео "Паттерн Координатор для навигация в iOS-приложении"
Как собрать и внедрить высоконагруженный модуль. Опыт Звука
На связи Ринат Кутуев, iOS-разработчик в платформенной команде HiFi-стриминга Звук. В iOS-разработке уже 5 лет. Успел заложить архитектуру для 3 высоконагруженных приложений, которые стабильно расширяют свой функционал. Сегодня я поделюсь своим опытом построения сложного модуля на примере сетевого слоя и расскажу, какими инструментами и подходами мы пользовались в процессе работы.
Статья: https://habr.com/ru/companies/zvuk/articles/864166/
Платформа: iOS
На связи Ринат Кутуев, iOS-разработчик в платформенной команде HiFi-стриминга Звук. В iOS-разработке уже 5 лет. Успел заложить архитектуру для 3 высоконагруженных приложений, которые стабильно расширяют свой функционал. Сегодня я поделюсь своим опытом построения сложного модуля на примере сетевого слоя и расскажу, какими инструментами и подходами мы пользовались в процессе работы.
Статья: https://habr.com/ru/companies/zvuk/articles/864166/
Платформа: iOS
❤1😁1
Добавляем Image Playground в приложение
Помимо приложения для пользователей, разработчикам Image Playground предлагает фреймворк, позволяющий интегрировать генерацию изображений в приложения, встраивая компоненты, вызывающие и представляющие интерфейс Image Playground, доступный как в UIKit, так и в SwiftUI.
Чтобы углубиться в тему, мы реализуем приложение, генерирующее обложки для текстовых историй.
Статья: https://apptractor.ru/info/articles/dobavlyaem-image-playground-v-prilozhenie.html
Платформа: iOS
Помимо приложения для пользователей, разработчикам Image Playground предлагает фреймворк, позволяющий интегрировать генерацию изображений в приложения, встраивая компоненты, вызывающие и представляющие интерфейс Image Playground, доступный как в UIKit, так и в SwiftUI.
Чтобы углубиться в тему, мы реализуем приложение, генерирующее обложки для текстовых историй.
Статья: https://apptractor.ru/info/articles/dobavlyaem-image-playground-v-prilozhenie.html
Платформа: iOS
❤1👍1
Интегрируем Rust в Android-приложение
Rust — это язык системного программирования общего назначения, который существует уже довольно давно. Его можно использовать для выполнения задач, которые реализуются сейчас на C и C++, но с гораздо большей безопасностью памяти. Это позволяет использовать Rust для написания программ или скриптов для многих операционных систем, включая Android. Вы можете задаться вопросом, как это возможно и есть ли простой способ сделать это. Вот об этом эта статья!
Статья: https://apptractor.ru/info/articles/integriruem-rust-v-android-prilozhenie.html
Платформа: Android
Rust — это язык системного программирования общего назначения, который существует уже довольно давно. Его можно использовать для выполнения задач, которые реализуются сейчас на C и C++, но с гораздо большей безопасностью памяти. Это позволяет использовать Rust для написания программ или скриптов для многих операционных систем, включая Android. Вы можете задаться вопросом, как это возможно и есть ли простой способ сделать это. Вот об этом эта статья!
Статья: https://apptractor.ru/info/articles/integriruem-rust-v-android-prilozhenie.html
Платформа: Android
👍2
ADBR-Server - современная реализация сервера Android Debug Bridge (ADB), написанная на Rust, с упором на сопровождаемость кода, стабильность и лучшую обработку ошибок. В настоящее время поддерживает только Linux-системы и USB-устройства (пока что).
Этот сервер работает в тандеме с ADBR Client, чтобы обеспечить полную замену ADB. Вместе они обеспечивают повышенную стабильность, лучшую обработку ошибок и уникальные возможности при использовании в паре. В будущих выпусках будут представлены эксклюзивные функции, использующие совместную работу клиента и сервера.
Проект ADBR направлен на улучшение возможностей отладки Android-приложений.
ADBR-Server на GitHub: https://github.com/xDvir/ADBRServer
Платформа: Android
⭐️: 21
Этот сервер работает в тандеме с ADBR Client, чтобы обеспечить полную замену ADB. Вместе они обеспечивают повышенную стабильность, лучшую обработку ошибок и уникальные возможности при использовании в паре. В будущих выпусках будут представлены эксклюзивные функции, использующие совместную работу клиента и сервера.
Проект ADBR направлен на улучшение возможностей отладки Android-приложений.
ADBR-Server на GitHub: https://github.com/xDvir/ADBRServer
Платформа: Android
⭐️: 21
👍2
Ищем неиспользуемый код с Periphery
Недавно мне рассказали о Periphery, инструменте командной строки для поиска неиспользуемого кода в проектах на Swift. Для чего нужен свободный от работы день, как не для того, чтобы весело поиграть с новым инструментом?
Статья: https://apptractor.ru/info/articles/ischem-neispolzuemyy-kod-s-periphery.html
Платформа: iOS
Недавно мне рассказали о Periphery, инструменте командной строки для поиска неиспользуемого кода в проектах на Swift. Для чего нужен свободный от работы день, как не для того, чтобы весело поиграть с новым инструментом?
Статья: https://apptractor.ru/info/articles/ischem-neispolzuemyy-kod-s-periphery.html
Платформа: iOS
👍2
Почему никогда не следует использовать
Использование
Статья: https://apptractor.ru/info/articles/pochemu-nikogda-ne-sleduet-ispolzovat-v-kotlin.html
Платформа: Android
!! в KotlinИспользование
!! - это плохая практика; множество альтернатив покрывают все остальные возможные случаи. Использование этого оператора - это хак и сокращение, которое приведет к обратному результату и не сэкономит вам много времени даже в момент написания. Не стоит использовать его, если только вы не пишете короткий личный скрипт.Статья: https://apptractor.ru/info/articles/pochemu-nikogda-ne-sleduet-ispolzovat-v-kotlin.html
Платформа: Android
❤2
Понимаем целостность ViewModel при изменении конфигурации в Android
Одна из самых распространенных проблем, с которой сталкиваются Android-разработчики - управление данными при изменении конфигурации, например при повороте экрана. Традиционно для сохранения и восстановления данных требовалась обработка onSaveInstanceState() или использование сохраненных фрагментов. Архитектурный компонент ViewModel упрощает этот процесс, выживая при изменении конфигурации и сохраняя данные, связанные с пользовательским интерфейсом. Но как ViewModel достигает этого сохранения внутри себя? Давайте погрузимся в механику и внутреннюю реализацию системы ViewModel.
Статья: https://proandroiddev.com/understanding-viewmodel-persistence-across-configuration-changes-in-android-4dc26fa8ae59
Платформа: Android
Одна из самых распространенных проблем, с которой сталкиваются Android-разработчики - управление данными при изменении конфигурации, например при повороте экрана. Традиционно для сохранения и восстановления данных требовалась обработка onSaveInstanceState() или использование сохраненных фрагментов. Архитектурный компонент ViewModel упрощает этот процесс, выживая при изменении конфигурации и сохраняя данные, связанные с пользовательским интерфейсом. Но как ViewModel достигает этого сохранения внутри себя? Давайте погрузимся в механику и внутреннюю реализацию системы ViewModel.
Статья: https://proandroiddev.com/understanding-viewmodel-persistence-across-configuration-changes-in-android-4dc26fa8ae59
Платформа: Android
❤1
Фоновая загрузка на сервер в iOS 🚀
Я заметил, что в сети есть тонны статей с советами и туманными теориями, но почти нет реальных примеров того, как реализовать фоновую загрузку в iOS-приложениях. Поэтому в этой статье я расскажу об основах выполнения кода в фоновом режиме и покажу вам реальный проект, в котором я реализовал фоновую загрузку файлов.
Статья: https://medium.com/@diananareiko8/background-upload-in-ios-f885ed439bd3
Платформа: iOS
Я заметил, что в сети есть тонны статей с советами и туманными теориями, но почти нет реальных примеров того, как реализовать фоновую загрузку в iOS-приложениях. Поэтому в этой статье я расскажу об основах выполнения кода в фоновом режиме и покажу вам реальный проект, в котором я реализовал фоновую загрузку файлов.
Статья: https://medium.com/@diananareiko8/background-upload-in-ios-f885ed439bd3
Платформа: iOS
👍2🔥1
SRNetworkManager - это мощный и гибкий сетевой уровень для приложений Swift. Он обеспечивает общий, ориентированный на протоколы подход к обработке API-запросов, поддерживая как Combine, так и парадигму async/await. Этот пакет разработан как простой в использовании, хорошо настраиваемый и полностью совместимый со Swift 6 и протоколом Sendable.
SRNetworkManager на GitHub: https://github.com/siamakrostami/SRNetworkManager
Платформа: iOS
⭐️: 16
SRNetworkManager на GitHub: https://github.com/siamakrostami/SRNetworkManager
Платформа: iOS
⭐️: 16
Интеграция Расширений в большие iOS-приложения
Сегодня, когда вы открываете Apple Maps и выбираете пункт назначения, вы можете увидеть список доступных предложений Lyft, что позволит вам легко перейти в приложение Lyft, чтобы заказать следующую поездку. Однако для создания такого плавного и удобного опыта в экосистеме iOS инженерам приходится решать целый ряд технических задач, от управления зависимостями в высокомодульном приложении до оптимизации производительности при сохранении высокого качества пользовательского опыта.
Статья Lyft: https://eng.lyft.com/integrating-extensions-into-large-scale-ios-apps-8f15dc5f3be9
Платформа: iOS
Сегодня, когда вы открываете Apple Maps и выбираете пункт назначения, вы можете увидеть список доступных предложений Lyft, что позволит вам легко перейти в приложение Lyft, чтобы заказать следующую поездку. Однако для создания такого плавного и удобного опыта в экосистеме iOS инженерам приходится решать целый ряд технических задач, от управления зависимостями в высокомодульном приложении до оптимизации производительности при сохранении высокого качества пользовательского опыта.
Статья Lyft: https://eng.lyft.com/integrating-extensions-into-large-scale-ios-apps-8f15dc5f3be9
Платформа: iOS
👍1
Как обычно :), для статьи, получившей вчера больше всего просмотров, русский перевод.
Фоновая загрузка файлов на сервер в iOS
Когда приложение переходит в приостановленное состояние, все задачи останавливаются. Но не волнуйтесь! iOS предоставляет несколько способов продолжить выполнение задач в фоновом режиме.
Статья: https://apptractor.ru/info/articles/fonovaya-zagruzka-faylov-na-server-v-ios.html
Платформа: iOS
Фоновая загрузка файлов на сервер в iOS
Когда приложение переходит в приостановленное состояние, все задачи останавливаются. Но не волнуйтесь! iOS предоставляет несколько способов продолжить выполнение задач в фоновом режиме.
Статья: https://apptractor.ru/info/articles/fonovaya-zagruzka-faylov-na-server-v-ios.html
Платформа: iOS
👍1
Dagger 2: как сделать свой DI за 10 минут
Эта статья будет полезна тем, кто использует Dagger 2 в своих приложениях и иногда/часто попадает в ситуации непонимания, почему Dagger 2 ведёт себя не так, как мы ожидаем. А это может создавать определённые трудности, особенно при отладке сложных проблем или при необходимости настройки более сложных сценариев внедрения зависимостей.
Статья: https://habr.com/ru/companies/ozontech/articles/866452/
Платформа: Android
Эта статья будет полезна тем, кто использует Dagger 2 в своих приложениях и иногда/часто попадает в ситуации непонимания, почему Dagger 2 ведёт себя не так, как мы ожидаем. А это может создавать определённые трудности, особенно при отладке сложных проблем или при необходимости настройки более сложных сценариев внедрения зависимостей.
Статья: https://habr.com/ru/companies/ozontech/articles/866452/
Платформа: Android
👍1
Inure - это менеджер пакетов для Android. Он может сканировать внутренние компоненты любого приложения и изменять их на ходу. Кроме того, в нем есть эмулятор терминала, статистика использования, установщик Split/APK и другие инструменты, хотя многие из них еще ждут своей реализации. Кроме того, все функции Inure работают как в режиме Root, так и в режиме Shizuku.
Разработка Inure началась как независимый учебный проект, который впоследствии стал одним из самых амбициозных и удобных приложений для Android, разработанных одним человеком. Приложение на 100% основано на кастомных UI API, разработанных для использования только в этом приложении с собственным движком тем, обработчиком крешей, рендерером изображений и красивым анимационным фреймворком.
Inure на GitHub: https://github.com/Hamza417/Inure
Платформа: Android
⭐️: 1.2K
Разработка Inure началась как независимый учебный проект, который впоследствии стал одним из самых амбициозных и удобных приложений для Android, разработанных одним человеком. Приложение на 100% основано на кастомных UI API, разработанных для использования только в этом приложении с собственным движком тем, обработчиком крешей, рендерером изображений и красивым анимационным фреймворком.
Inure на GitHub: https://github.com/Hamza417/Inure
Платформа: Android
⭐️: 1.2K
👍1
Совместить DDD и MVVM: Разработка приложения-трекера расходов по правилу 50-30-20 на .NET MAUI
Сегодня я бы хотел рассказать вам про свое приложение Profitocracy, которое помогает мне следить за личными расходами, а также автоматически планировать бюджет на месяц.
Статья: https://habr.com/ru/articles/867768/
Платформа: кроссплатформа
Сегодня я бы хотел рассказать вам про свое приложение Profitocracy, которое помогает мне следить за личными расходами, а также автоматически планировать бюджет на месяц.
Статья: https://habr.com/ru/articles/867768/
Платформа: кроссплатформа
👍1
Понимаем аннотации Hilt за 5 минут
Hilt - это библиотека инъекции зависимостей для Android, которая позволяет сократить количество ручных инъекций зависимостей в вашем проекте. Она построена на основе хорошо зарекомендовавшей себя библиотеки Dagger2.
Аннотации Hilt - это специальные слова или фразы, которые используются для того, чтобы помочь библиотеке Hilt правильно работать в Android-проекте. В этом руководстве мы расскажем о некоторых основных аннотациях, с которыми вы столкнетесь в любом проекте с инъекцией Hilt, а также приведем примеры кода.
Статья: https://proandroiddev.com/5-minute-guide-on-understanding-hilt-annotations-50fe33b1919b
Платформа: Android
Hilt - это библиотека инъекции зависимостей для Android, которая позволяет сократить количество ручных инъекций зависимостей в вашем проекте. Она построена на основе хорошо зарекомендовавшей себя библиотеки Dagger2.
Аннотации Hilt - это специальные слова или фразы, которые используются для того, чтобы помочь библиотеке Hilt правильно работать в Android-проекте. В этом руководстве мы расскажем о некоторых основных аннотациях, с которыми вы столкнетесь в любом проекте с инъекцией Hilt, а также приведем примеры кода.
Статья: https://proandroiddev.com/5-minute-guide-on-understanding-hilt-annotations-50fe33b1919b
Платформа: Android
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Ловушки и меры борьбы с аномальными вызовами onAppear в SwiftUI
onAppear - чрезвычайно важный метод жизненного цикла в SwiftUI, используемый для внедрения ключевой логики при отображении представления. Поскольку экземпляры представлений могут создаваться и перестраиваться часто, разработчики часто предпочитают подготавливать данные и выполнять операции инициализации в этом методе. Теоретически, вызов этих методов жизненного цикла должен быть предсказуемым и последовательным. Однако в некоторых конкретных сценариях onAppear может вызываться неожиданно и без необходимости. Это может не только привести к снижению производительности, но и вызвать неконтролируемые изменения в состоянии приложения. В этой статье мы раскроем эту легко упускаемую из виду ловушку поведения SwiftUI и предложим временные меры борьбы с ней.
Статья: https://fatbobman.com/en/posts/traps-and-countermeasures-for-abnormal-onappear-calls-in-swiftui/
Платформа: iOS
onAppear - чрезвычайно важный метод жизненного цикла в SwiftUI, используемый для внедрения ключевой логики при отображении представления. Поскольку экземпляры представлений могут создаваться и перестраиваться часто, разработчики часто предпочитают подготавливать данные и выполнять операции инициализации в этом методе. Теоретически, вызов этих методов жизненного цикла должен быть предсказуемым и последовательным. Однако в некоторых конкретных сценариях onAppear может вызываться неожиданно и без необходимости. Это может не только привести к снижению производительности, но и вызвать неконтролируемые изменения в состоянии приложения. В этой статье мы раскроем эту легко упускаемую из виду ловушку поведения SwiftUI и предложим временные меры борьбы с ней.
Статья: https://fatbobman.com/en/posts/traps-and-countermeasures-for-abnormal-onappear-calls-in-swiftui/
Платформа: iOS
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Ifrit - это библиотека нечеткого (fuzzy) поиска, написанная на чистом Swift
Алгоритм нечеткого поиска предназначен для поиска приблизительных совпадений по заданному поисковому запросу. Допустим, у вас есть список товаров, и пользователь ищет «Czy Swetr». Точное совпадение ничего не даст, но нечеткий поиск найдет «Cozy Sweater». Если вам нужно точное совпадение - используйте стандартную функцию .filter { } вместо этой библиотеки.
Преимущества Ifrit:
• Суперлегкий
• Никаких зависимостей
• Поддерживает MacOS, iOS, visionOS, watchOS, twOS, Linux
• Асинхронный поиск (async/await + callbacks)
• Поддерживает выделения текста (AttributedString)
• Покрыт тестами
Ifrit на GitHub: https://github.com/ukushu/Ifrit
Платформа: iOS
⭐️: 33
Алгоритм нечеткого поиска предназначен для поиска приблизительных совпадений по заданному поисковому запросу. Допустим, у вас есть список товаров, и пользователь ищет «Czy Swetr». Точное совпадение ничего не даст, но нечеткий поиск найдет «Cozy Sweater». Если вам нужно точное совпадение - используйте стандартную функцию .filter { } вместо этой библиотеки.
Преимущества Ifrit:
• Суперлегкий
• Никаких зависимостей
• Поддерживает MacOS, iOS, visionOS, watchOS, twOS, Linux
• Асинхронный поиск (async/await + callbacks)
• Поддерживает выделения текста (AttributedString)
• Покрыт тестами
Ifrit на GitHub: https://github.com/ukushu/Ifrit
Платформа: iOS
⭐️: 33
❤1
Как заставить крутиться таймер – инструкция для iOS-разработчиков
Кажется, что таймер – простая для реализации вещь. Но если добавить сюда сжатые сроки, код (рефакторинг которого часто откладывается по разным причинам), пласты бизнес-логики и UI-элементы – получим нетривиальную задачу.
Статья: https://habr.com/ru/companies/ecom_tech/articles/867660/
Платформа: iOS
Кажется, что таймер – простая для реализации вещь. Но если добавить сюда сжатые сроки, код (рефакторинг которого часто откладывается по разным причинам), пласты бизнес-логики и UI-элементы – получим нетривиальную задачу.
Статья: https://habr.com/ru/companies/ecom_tech/articles/867660/
Платформа: iOS
😁6🔥1
Видео и подкасты за неделю на @AppFiles
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
#ios #android #mobile #video
•
(iOS En) Avoid Crashes in Swift: How Overflow Operators Work•
(iOS En) Stacked Cards - Looping Cards - SwiftUI•
(iOS En) First Look at Xcode 16.2: New Swift Testing Feature•
(iOS En) SwiftUI Searchable Modifier: Build a Search Feature in 15 Minutes•
(And Ru) Публикация Android и KMP библиотеки в Maven Central•
(And Ru) Запускаем мобильные UI-тесты эффективно•
(And En) Now in Android: 112 - Android 16 Developer Preview 1, Passkeys Spotlight Week, and more•
(And En) Designing apps for Android XR•
(And En) Adapting Android apps for XR•
(And En) Build immersive apps & experiences with OpenXR & Unity•
(And En) How to Draw On a Canvas In Jetpack Compose•
(And En) Multi-dollar String Interpolation in Kotlin•
(Crs Ru) Flutter Dev Podcast #49: многомодульность на Flutter•
(Crs En) Remind users to Rate your App - Compose Multiplatform•
(Dev Ru) Compose и SwiftUI: найди 10 отличий•
(Dev Ru) Как мы писали проигрыватель с нуля под каждую платформу•
(Dev Ru) Как ВКонтакте измеряет перфоманс приложений•
(Dev Ru) Очевидные и неочевидные дыры безопасности в мобильной разработке•
(Dev Ru) Страх и ненависть в мобильных автотестах. Строим своё облачное решение•
(Dev Ru) Лучший UI фреймворк для разработки на Java — JavaFx, Swing, UI разработка#ios #android #mobile #video
❤1