Ищем неиспользуемый код с 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
Apple Watch на Android
На рынке существует немало умных часов, предлагающих решения для мониторинга здоровья, но Apple Watch уже много лет лидируют по точности отслеживания частоты сердечных сокращений, сна и физических нагрузок; на самом деле часы Apple Watch четырехлетней давности точнее, чем большинство последних коммерческих конкурентов.
Единственная проблема заключается в том, что я решил больше не давать денег Apple несколько лет назад, после того как мне надоели их огороженный сад, злоупотребление монополией, вопиющий маркетинг в стиле aspiration porn, препятствование ремонту и т.д.
Статья: https://abishekmuthian.com/apple-watch-with-android/
Платформа: Android
На рынке существует немало умных часов, предлагающих решения для мониторинга здоровья, но Apple Watch уже много лет лидируют по точности отслеживания частоты сердечных сокращений, сна и физических нагрузок; на самом деле часы Apple Watch четырехлетней давности точнее, чем большинство последних коммерческих конкурентов.
Единственная проблема заключается в том, что я решил больше не давать денег Apple несколько лет назад, после того как мне надоели их огороженный сад, злоупотребление монополией, вопиющий маркетинг в стиле aspiration porn, препятствование ремонту и т.д.
Статья: https://abishekmuthian.com/apple-watch-with-android/
Платформа: Android
👍1👎1
AniVu - универсальное приложение для подкастов на Android, позволяющее просматривать RSS и воспроизводить медиафайлы. Внутри MVI, Jetpack Compose, корутины и Flow, Material You, ViewModel, Room, Paging 3, Hilt и пр.
AniVu на GitHub: https://github.com/SkyD666/AniVu
Платформа: Android
⭐️: 855
AniVu на GitHub: https://github.com/SkyD666/AniVu
Платформа: Android
⭐️: 855
Создание Custom Layout в Jetpack Compose
Сегодня я расскажу о том, как создавать Custom Layout в Jetpack Compose, а также мы решим одну связанную с данной темой практическую задачку. Создание Custom Layout может показаться чем-то сложным на первый взгляд, но я постараюсь все объяснить максимально понятно и подробно. Итак, приступим!
Статья: https://habr.com/ru/articles/867822/
Платформа: Android
Сегодня я расскажу о том, как создавать Custom Layout в Jetpack Compose, а также мы решим одну связанную с данной темой практическую задачку. Создание Custom Layout может показаться чем-то сложным на первый взгляд, но я постараюсь все объяснить максимально понятно и подробно. Итак, приступим!
Статья: https://habr.com/ru/articles/867822/
Платформа: Android
Как в Duolingo ускорили сборки для Android и iOS на 50%
Представьте себе, что вы ждете каждой проверки кода до и после слияния более 50 минут. Звучит мучительно, верно? А теперь представьте, что вы проходите через эту каторгу 200 с лишним раз в неделю. Такова была наша реальность, пока мы, команда Test and Release Infrastructure (TRI), не решили, что хватит.
Переходим к сегодняшнему дню. Эти 50-минутные ожидания исчезли. Время сборки Android и iOS теперь составляет менее 20 минут. Вот подробная информация о том, как мы добились этого волшебства — да, это потребовало веселых экспериментов и немного пота (но, к счастью, без слез).
Статья: https://apptractor.ru/info/articles/kak-my-uskorili-sborki-dlya-android-i-ios-na-50.html
Платформа: разработка
Представьте себе, что вы ждете каждой проверки кода до и после слияния более 50 минут. Звучит мучительно, верно? А теперь представьте, что вы проходите через эту каторгу 200 с лишним раз в неделю. Такова была наша реальность, пока мы, команда Test and Release Infrastructure (TRI), не решили, что хватит.
Переходим к сегодняшнему дню. Эти 50-минутные ожидания исчезли. Время сборки Android и iOS теперь составляет менее 20 минут. Вот подробная информация о том, как мы добились этого волшебства — да, это потребовало веселых экспериментов и немного пота (но, к счастью, без слез).
Статья: https://apptractor.ru/info/articles/kak-my-uskorili-sborki-dlya-android-i-ios-na-50.html
Платформа: разработка
Назад в будущее: превью Compose для представлений на основе XML
В отличие от этого, старые представления Android на основе XML позволяют предварительно просматривать макеты. Но они ограничиваются статичными макетами с содержимым, не представляющим никакой реальной логики или данных - они настолько просты, насколько это возможно.
Так что если некоторые части вашего приложения все еще полагаются на представления на основе XML, вы можете упустить всю мощь предварительных просмотров Compose... или нет?
Ведь Compose Preview действительно можно использовать с XML-представлениями!
Статья: https://apptractor.ru/info/articles/nazad-v-buduschee-prevyu-compose-dlya-predstavleniy-na-osnove-xml.html
Платформа: Android
В отличие от этого, старые представления Android на основе XML позволяют предварительно просматривать макеты. Но они ограничиваются статичными макетами с содержимым, не представляющим никакой реальной логики или данных - они настолько просты, насколько это возможно.
Так что если некоторые части вашего приложения все еще полагаются на представления на основе XML, вы можете упустить всю мощь предварительных просмотров Compose... или нет?
Ведь Compose Preview действительно можно использовать с XML-представлениями!
Статья: https://apptractor.ru/info/articles/nazad-v-buduschee-prevyu-compose-dlya-predstavleniy-na-osnove-xml.html
Платформа: Android
This media is not supported in your browser
VIEW IN TELEGRAM
The SwiftUI Christmas Tree - новогодняя елка с анимацией на чистом SwiftUI. 31 декабря обещают добавить фейерверков.
The SwiftUI Christmas Tree на GitHub: https://github.com/GetStream/SwiftUIChristmasTree
Платформа: iOS
⭐️: 50
The SwiftUI Christmas Tree на GitHub: https://github.com/GetStream/SwiftUIChristmasTree
Платформа: iOS
⭐️: 50