Тестирование Android PagingSource
В этой статье я расскажу о том, как протестировать PagingSource.
Зачем тестировать
Тестирование очень важно в разработке. Тестовый код делает вашу кодовую базу стабильной. С тестовым кодом рефакторинг становится проще, потому что после рефакторинга, если все тесты пройдены, вы можете быть уверены, что не создали новую ошибку.
https://ayousuf.hashnode.dev/testing-android-pagingsource
#Android
👉 @developer_mobila
В этой статье я расскажу о том, как протестировать PagingSource.
Зачем тестировать
Тестирование очень важно в разработке. Тестовый код делает вашу кодовую базу стабильной. С тестовым кодом рефакторинг становится проще, потому что после рефакторинга, если все тесты пройдены, вы можете быть уверены, что не создали новую ошибку.
https://ayousuf.hashnode.dev/testing-android-pagingsource
#Android
👉 @developer_mobila
Force Update Mechanism
В постоянно развивающемся ландшафте мобильных приложений обновление приложения - не просто лучшая практика, это часто необходимость. Будь то критический патч безопасности, выпуск новой функции или простое исправление ошибки, обеспечение того, что ваши пользователи работают с последней версией приложения, может иметь решающее значение как для удобства пользователей, так и для безопасности. Именно здесь в игру вступает концепция "принудительного обновления". Механизм принудительного обновления позволяет заставить пользователей обновить приложение, чтобы продолжить его использование. Это особенно полезно для критических обновлений, которые вы не можете позволить пользователям пропустить.
https://www.manu.show/2023-09-29-force-update-mechanism/
#ios
👉 @developer_mobila
В постоянно развивающемся ландшафте мобильных приложений обновление приложения - не просто лучшая практика, это часто необходимость. Будь то критический патч безопасности, выпуск новой функции или простое исправление ошибки, обеспечение того, что ваши пользователи работают с последней версией приложения, может иметь решающее значение как для удобства пользователей, так и для безопасности. Именно здесь в игру вступает концепция "принудительного обновления". Механизм принудительного обновления позволяет заставить пользователей обновить приложение, чтобы продолжить его использование. Это особенно полезно для критических обновлений, которые вы не можете позволить пользователям пропустить.
https://www.manu.show/2023-09-29-force-update-mechanism/
#ios
👉 @developer_mobila
manu.show
Force Update Mechanism
Implementing a basic force update mechanism in your SwiftUI app
Rise of Jetpack Media 3 — революция в воспроизведении мультимедиа на Android
https://proandroiddev.com/rise-of-jetpack-media-3-revolutionising-media-playback-on-android-45686bdb648
#Android
👉 @developer_mobila
https://proandroiddev.com/rise-of-jetpack-media-3-revolutionising-media-playback-on-android-45686bdb648
#Android
👉 @developer_mobila
Построение архитектуры дизайна системы Android для эффективной загрузки изображений с помощью чистой архитектуры
В постоянно развивающемся мире разработки мобильных приложений создание хорошо проработанного системного дизайна Android является залогом успеха. В этой статье мы расскажем вам о том, как построить надежную архитектуру дизайна системы Android для эффективной загрузки изображений, используя принципы чистой архитектуры. Мы обсудим, почему хорошо спроектированная система жизненно важна и что может пойти не так, если в вашем проекте отсутствует такая архитектура. Мы также приведем реальные примеры проектов с плохой архитектурой и их последствия.
https://murainoyakubu.medium.com/android-system-design-architecture-on-a-real-life-senario-d35f4e203b51
#Android
👉 @developer_mobila
В постоянно развивающемся мире разработки мобильных приложений создание хорошо проработанного системного дизайна Android является залогом успеха. В этой статье мы расскажем вам о том, как построить надежную архитектуру дизайна системы Android для эффективной загрузки изображений, используя принципы чистой архитектуры. Мы обсудим, почему хорошо спроектированная система жизненно важна и что может пойти не так, если в вашем проекте отсутствует такая архитектура. Мы также приведем реальные примеры проектов с плохой архитектурой и их последствия.
https://murainoyakubu.medium.com/android-system-design-architecture-on-a-real-life-senario-d35f4e203b51
#Android
👉 @developer_mobila
🕹️ apk.sh
Упрощает реверс инжиниринг приложений для Android, автоматизируя некоторые повторяющиеся задачи, такие как извлечение, декодирование, восстановление и исправление APK.
Особенности
– патчинг APK для загрузки frida-gadget.so при запуске
– поддержка пакетов приложений/разделенных APK
– разборка ресурсов до почти оригинального вида с помощью apktool
– восстановление декодированных ресурсов обратно в бинарный APK/JAR с помощью apktool
– подпись apk с помощью apksigner
– поддержка нескольких архитектур (arm, arm64, x86, x86_64)
– не требуется рутованное Android-устройство
https://github.com/ax/apk.sh
#Android
👉 @developer_mobila
Упрощает реверс инжиниринг приложений для Android, автоматизируя некоторые повторяющиеся задачи, такие как извлечение, декодирование, восстановление и исправление APK.
Особенности
– патчинг APK для загрузки frida-gadget.so при запуске
– поддержка пакетов приложений/разделенных APK
– разборка ресурсов до почти оригинального вида с помощью apktool
– восстановление декодированных ресурсов обратно в бинарный APK/JAR с помощью apktool
– подпись apk с помощью apksigner
– поддержка нескольких архитектур (arm, arm64, x86, x86_64)
– не требуется рутованное Android-устройство
https://github.com/ax/apk.sh
#Android
👉 @developer_mobila
GitHub
GitHub - ax/apk.sh: Makes reverse engineering Android apps easier, automating repetitive tasks like pulling, decoding, rebuilding…
Makes reverse engineering Android apps easier, automating repetitive tasks like pulling, decoding, rebuilding and patching an APK. - ax/apk.sh
Понимаем @ discardableResult в Swift
Атрибут
Swift известен тем, что в нем большое внимание уделяется безопасности типов и читаемости кода. Одним из свойств, соответствующих этим принципам, является атрибут
https://medium.com/mobile-app-development-publication/understanding-discardable-results-in-swift-1bb193738f25
#ios
👉 @developer_mobila
Атрибут
@discardableResult
в Swift является ценным инструментом для улучшения читаемости кода и управления функциями, возвращающими значения, которые не всегда нужно использовать.Swift известен тем, что в нем большое внимание уделяется безопасности типов и читаемости кода. Одним из свойств, соответствующих этим принципам, является атрибут
@discardableResult
. Этот атрибут позволяет пометить возвращаемое значение функции как «отбрасываемое» (discardable), что означает возможность игнорировать возвращаемое значение, не выдавая предупреждения компилятора. В этой статье мы рассмотрим, что такое отбрасываемый результат, почему он полезен и как эффективно использовать его в Swift.https://medium.com/mobile-app-development-publication/understanding-discardable-results-in-swift-1bb193738f25
#ios
👉 @developer_mobila
Архитектура Android. Понятно и подробно
Если вы хотите сделать хорошую архитектуру, то используйте эту схему и строго соблюдайте правила, без каких-либо исключений.
https://habr.com/ru/articles/766762/
#Android
👉 @developer_mobila
Если вы хотите сделать хорошую архитектуру, то используйте эту схему и строго соблюдайте правила, без каких-либо исключений.
https://habr.com/ru/articles/766762/
#Android
👉 @developer_mobila
Чем занимается Android-разработчик, или Хватит уже спрашивать у них алгоритмы
Статья поделена на две части — в первой я описываю работу в команде и какие навыки для этого нужны, во второй части расскажу, что нужно для создания новой функциональности в приложении или для исправления старого. Иначе говоря, первая часть про людей, вторая — про код.
https://habr.com/ru/companies/yandex_praktikum/articles/726540/
#Android
👉 @developer_mobila
Статья поделена на две части — в первой я описываю работу в команде и какие навыки для этого нужны, во второй части расскажу, что нужно для создания новой функциональности в приложении или для исправления старого. Иначе говоря, первая часть про людей, вторая — про код.
https://habr.com/ru/companies/yandex_praktikum/articles/726540/
#Android
👉 @developer_mobila
Компиляция Record для Android
В Android Developers Blog выходила статья Records in Android Studio Flamingo про то как компиляторы R8/D8 преобразуют классы java.lang.Record. В статье рассказывается как добиться минификации компонентов toString() у Kotlin data-классов. Меня заинтересовала эта тема и я решил чуть более подробно в нее углубиться.
В этом посте я подсвечу некоторые моменты, оставшиеся "между строк" в оригинальной статье. Благодаря чему R8 может переписать метод toString() у Record. В чем разница между Record в Java и Kotlin. Можно ли добиться от Record в Android такой же динамики как в "настольной" JVM. Стоит ли для описания моделей использовать Record'ы вместо data-классов.
https://habr.com/ru/articles/766800/
#Android
👉 @developer_mobila
В Android Developers Blog выходила статья Records in Android Studio Flamingo про то как компиляторы R8/D8 преобразуют классы java.lang.Record. В статье рассказывается как добиться минификации компонентов toString() у Kotlin data-классов. Меня заинтересовала эта тема и я решил чуть более подробно в нее углубиться.
В этом посте я подсвечу некоторые моменты, оставшиеся "между строк" в оригинальной статье. Благодаря чему R8 может переписать метод toString() у Record. В чем разница между Record в Java и Kotlin. Можно ли добиться от Record в Android такой же динамики как в "настольной" JVM. Стоит ли для описания моделей использовать Record'ы вместо data-классов.
https://habr.com/ru/articles/766800/
#Android
👉 @developer_mobila
Хабр
Компиляция Record для Android
В Android Developers Blog выходила статья Records in Android Studio Flamingo про то как компиляторы R8/D8 преобразуют классы java.lang.Record . В статье рассказывается как добиться минификации...
В AppMetrica появился инструмент прогнозирования LTV и оттока
С помощью Предиктов владельцы и маркетологи мобильных приложений смогут оптимизировать рекламные кампании на пользователей с высоким LTV, находить эффективные рекламные каналы с высокой рентабельностью, а также вовремя начать работу по удержанию пользователей.
https://www.sostav.ru/publication/appmetrica-66491.html
👉 @developer_mobila
С помощью Предиктов владельцы и маркетологи мобильных приложений смогут оптимизировать рекламные кампании на пользователей с высоким LTV, находить эффективные рекламные каналы с высокой рентабельностью, а также вовремя начать работу по удержанию пользователей.
https://www.sostav.ru/publication/appmetrica-66491.html
👉 @developer_mobila
Как использовать TimelineView в SwiftUI
TimelineView в SwiftUI идеально подходит для создания сложных, многоступенчатых анимаций. В этом видео мы узнаем, как его использовать, и рассмотрим несколько различных реализаций.
00:00 Timeline
02:30 Welcome back!
03:37 Xcode 15
04:17 What is TimelineView?
06:56 Why do we need this?
08:16 Example Implementations
11:04 Customize Intervals
12:22 Real Time vs Real-Time
14:07 Pausing Animations
15:53 Timeline Cadence
17:06 Wrapping up
https://www.youtube.com/watch?v=ZmXp6Pd5Elg
#ios
👉 @developer_mobila
TimelineView в SwiftUI идеально подходит для создания сложных, многоступенчатых анимаций. В этом видео мы узнаем, как его использовать, и рассмотрим несколько различных реализаций.
00:00 Timeline
02:30 Welcome back!
03:37 Xcode 15
04:17 What is TimelineView?
06:56 Why do we need this?
08:16 Example Implementations
11:04 Customize Intervals
12:22 Real Time vs Real-Time
14:07 Pausing Animations
15:53 Timeline Cadence
17:06 Wrapping up
https://www.youtube.com/watch?v=ZmXp6Pd5Elg
#ios
👉 @developer_mobila
YouTube
How to use TimelineView in SwiftUI | Advanced Learning #26
The TimelineView in SwiftUI is perfect for making complex, multi-step animations. In this video we will learn how to use it and review a few different implementations.
🤙 WELCOME BACK 🤙
WEBSITE: https://www.swiftful-thinking.com
DISCORD: https://disco…
🤙 WELCOME BACK 🤙
WEBSITE: https://www.swiftful-thinking.com
DISCORD: https://disco…
Как я осваивал Jetpack Compose
Привет, я Михаил Селезнев, андроид-разработчик в компании 1221Systems. Поделюсь своими впечатлениями о Compose — будет интересно коллегам, которые думают о переходе на него. Расскажу, в чем были сложности и что помогло мне быстрее разобраться.
Пару слов о моем бэкграунде: я в профессии больше четырех лет, в 1221Systems пришел полтора года назад на проект по разработке большого приложения для заказа продуктов ритейлинговой сети. Проработал около года, в марте этого года перешел на другой проект — приложение для сотрудников компании.
Само приложение написано на достаточно современном стеке: MVI, Koin, Coroutines + Flow, Jetpack Compose. При этом навигация реализована на фрагментах. В onCreateView возвращаем ComposeView, где в setContent прокидываем composable функцию.
https://habr.com/ru/articles/766814/
#Android
👉 @developer_mobila
Привет, я Михаил Селезнев, андроид-разработчик в компании 1221Systems. Поделюсь своими впечатлениями о Compose — будет интересно коллегам, которые думают о переходе на него. Расскажу, в чем были сложности и что помогло мне быстрее разобраться.
Пару слов о моем бэкграунде: я в профессии больше четырех лет, в 1221Systems пришел полтора года назад на проект по разработке большого приложения для заказа продуктов ритейлинговой сети. Проработал около года, в марте этого года перешел на другой проект — приложение для сотрудников компании.
Само приложение написано на достаточно современном стеке: MVI, Koin, Coroutines + Flow, Jetpack Compose. При этом навигация реализована на фрагментах. В onCreateView возвращаем ComposeView, где в setContent прокидываем composable функцию.
https://habr.com/ru/articles/766814/
#Android
👉 @developer_mobila
Хабр
Как я осваивал Jetpack Compose
Привет, я Михаил Селезнев, андроид-разработчик в компании 1221Systems. Поделюсь своими впечатлениями о Compose — будет интересно коллегам, которые думают о переходе на него. Расскажу, в чем были...
Сенсорная обратная связь в SwiftUI
https://swiftwithmajid.com/2023/10/10/sensory-feedback-in-swiftui/
#ios
👉 @developer_mobila
https://swiftwithmajid.com/2023/10/10/sensory-feedback-in-swiftui/
#ios
👉 @developer_mobila
Swift with Majid
Sensory feedback in SwiftUI
SwiftUI introduced the new sensoryFeedback view modifier, allowing us to play haptic feedback on all Apple platforms. This week, we will learn how to use the sensoryFeedback modifier to give haptic feedback on different actions in our apps.
Как мониторить здоровье вашей Gradle-сборки
Привет! Я Сергей Боиштян, Software engineer в команде Speed. Мы делаем инструменты для тестирования, андроид-разработки, CI и CD. Чтобы больше узнать о том, чем мы занимаемся, посмотрите наш github или канал для обсуждения CI и сборки под андроид.
В Авито постоянно что-нибудь обновляется, улучшается и дорабатывается, поэтому мы хотим, чтобы код быстро писался и проверялся, чтобы его быстро мёржили и проверяли после интеграции. В итоге мы получаем новую версию раз в неделю. В этой статье я расскажу, что мы делаем, чтобы весь CI работал четко.
https://habr.com/ru/companies/avito/articles/766764/
#Android
👉 @developer_mobila
Привет! Я Сергей Боиштян, Software engineer в команде Speed. Мы делаем инструменты для тестирования, андроид-разработки, CI и CD. Чтобы больше узнать о том, чем мы занимаемся, посмотрите наш github или канал для обсуждения CI и сборки под андроид.
В Авито постоянно что-нибудь обновляется, улучшается и дорабатывается, поэтому мы хотим, чтобы код быстро писался и проверялся, чтобы его быстро мёржили и проверяли после интеграции. В итоге мы получаем новую версию раз в неделю. В этой статье я расскажу, что мы делаем, чтобы весь CI работал четко.
https://habr.com/ru/companies/avito/articles/766764/
#Android
👉 @developer_mobila
Using Core Data and Swift Data side by side
Недавно я изучал, как настроить Core Data и Swift Data в NowPlaying так, чтобы они указывали на одно и то же постоянное хранилище данных, и тогда я смогу использовать оба фреймворка бок о бок.
Это полезно, если вы собираетесь перейти с Core Data на Swift Data, но хотите делать это постепенно, или если вы хотите использовать Swift Data для конкретных случаев использования в вашем приложении, таких как виджеты.
Учитывая, что Swift Data выполняет операции исключительно в главном потоке, я бы не рекомендовал полностью переходить на него, так как это негативно скажется на производительности вашего приложения, но он действительно может быть очень полезен для небольших и не затратных операций.
https://www.polpiella.dev/core-data-and-swift-data/
#ios
👉 @developer_mobila
Недавно я изучал, как настроить Core Data и Swift Data в NowPlaying так, чтобы они указывали на одно и то же постоянное хранилище данных, и тогда я смогу использовать оба фреймворка бок о бок.
Это полезно, если вы собираетесь перейти с Core Data на Swift Data, но хотите делать это постепенно, или если вы хотите использовать Swift Data для конкретных случаев использования в вашем приложении, таких как виджеты.
Учитывая, что Swift Data выполняет операции исключительно в главном потоке, я бы не рекомендовал полностью переходить на него, так как это негативно скажется на производительности вашего приложения, но он действительно может быть очень полезен для небольших и не затратных операций.
https://www.polpiella.dev/core-data-and-swift-data/
#ios
👉 @developer_mobila
www.polpiella.dev
Using Core Data and Swift Data side by side
How to set up Core Data and Swift Data to use the same data store in your app.
Использование on-demand ресурсов для безопасного хранения ключей API в iOS-приложениях
Следует помнить, что извлечь строки из файлов IPA довольно просто, и поэтому, если мы храним API-ключи в коде, кто-то другой может получить к ним доступ. Это, конечно, большая проблема для безопасности.
https://augmentedcode.io/2023/11/27/using-on-demand-resources-for-securely-storing-api-keys-in-ios-apps/
#ios
👉 @developer_mobila
Следует помнить, что извлечь строки из файлов IPA довольно просто, и поэтому, если мы храним API-ключи в коде, кто-то другой может получить к ним доступ. Это, конечно, большая проблема для безопасности.
https://augmentedcode.io/2023/11/27/using-on-demand-resources-for-securely-storing-api-keys-in-ios-apps/
#ios
👉 @developer_mobila
Swift Data Many to Many relationships
Table of Contents:
0:00 Introduction
1:10 Many to Many Relationships
1:42 The Genre Model
9:41 The GenreView
17:43 The NewGenreView
25:48 The GenreStackView
29:54 Deleting Genres
https://www.youtube.com/watch?v=lHdBkXp3j74
#ios
👉 @developer_mobila
Table of Contents:
0:00 Introduction
1:10 Many to Many Relationships
1:42 The Genre Model
9:41 The GenreView
17:43 The NewGenreView
25:48 The GenreStackView
29:54 Deleting Genres
https://www.youtube.com/watch?v=lHdBkXp3j74
#ios
👉 @developer_mobila
YouTube
6. Swift Data Many to Many relationships
This is the 6th video in the SwiftData series where I am building an app to track books you want to read, are currently reading or have read.
In this video, I will be introducing a many to many relationship so that we an create a list of genres and associate…
In this video, I will be introducing a many to many relationship so that we an create a list of genres and associate…
Готовим конфигурацию Android-приложения с помощью Dynamic Proxy и рефлексии
Android-разработчик RuStore Анатолий Гусев расскажет, как приготовить систему «холодных» конфигов для большого Android-приложения, построенного на многомодульной архитектуре. Под «холодными» конфигами здесь подразумеваются настройки приложения, которые нужно делать локально на девайсе без необходимости загружать их из сети.
https://habr.com/ru/companies/vk/articles/777874/
#Android
👉 @developer_mobila
Android-разработчик RuStore Анатолий Гусев расскажет, как приготовить систему «холодных» конфигов для большого Android-приложения, построенного на многомодульной архитектуре. Под «холодными» конфигами здесь подразумеваются настройки приложения, которые нужно делать локально на девайсе без необходимости загружать их из сети.
https://habr.com/ru/companies/vk/articles/777874/
#Android
👉 @developer_mobila
Как устроен протокол iMessage
В этом посте я вкратце расскажу о внутреннем устройстве iMessage, изученном мной в процессе работы над pypush — опенсорсным проектом воссоздания реализации iMessage.
Ради краткости и понятности я не буду вдаваться в технические подробности. Если вы хотите узнать, как конкретно всё реализовано, то изучите репозиторий pypush.
https://habr.com/ru/articles/779064/
#ios
👉 @developer_mobila
В этом посте я вкратце расскажу о внутреннем устройстве iMessage, изученном мной в процессе работы над pypush — опенсорсным проектом воссоздания реализации iMessage.
Ради краткости и понятности я не буду вдаваться в технические подробности. Если вы хотите узнать, как конкретно всё реализовано, то изучите репозиторий pypush.
https://habr.com/ru/articles/779064/
#ios
👉 @developer_mobila