Да кто такой этот ваш 2D-скролл? Зачем он нужен, если не делать аналог excel? На самом деле, двумерный скролл нужен в огромном количестве сценариев использования мобильных приложений.
В этой статье автор рассмотрит, как на Flutter можно реализовать двумерный скролл с помощью решений из коробки, почему они могут не подойти и что тогда делать.
Подробно разберёт, как сделать собственную производительную реализацию 2D-скролла, и оценит влияние на производительность на примере видеоредактора Yappy — приложения вертикальных видео.
👉 Читать статью
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
🔌 Реализация оффлайн-режима
Пользователи часто остаются без интернета, но хотят продолжать работать с приложением. Разберём, как грамотно реализовать оффлайн-режим.
⚙️ Техники реализации
1. Локальное кэширование данных
• Android (Room):
• iOS (Core Data):
2. Очередь запросов
Сохраняйте действия пользователя при отсутствии сети:
3. Умная синхронизация
Используйте WorkManager (Android) или Background Tasks (iOS) для фоновой синхронизации.
🚫 Чего избегать
1. Хранения конфиденциальных данных без шифрования
2. Бесконечного накопления несинхронизированных данных
3. Игнорирования конфликтов данных при синхронизации
💡 Продвинутые техники
1. Дельта-синхронизация – передавайте только изменения
2. Конфликт-менеджмент – стратегии разрешения противоречий
3. Прогрессивная загрузка – сначала кэш, потом обновления
Как вы реализуете оффлайн-режим? Делитесь решениями в комментариях💬
🐸 Библиотека мобильного разработчика
#буст
Пользователи часто остаются без интернета, но хотят продолжать работать с приложением. Разберём, как грамотно реализовать оффлайн-режим.
1. Локальное кэширование данных
• Android (Room):
@Entity
data class CachedData(@PrimaryKey val id: String, val content: String)
@Dao
interface CacheDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(data: CachedData)
}
• iOS (Core Data):
let context = persistentContainer.viewContext
let entity = NSEntityDescription.insertNewObject(forEntityName: "CachedData", into: context)
entity.setValue(content, forKey: "content")
try? context.save()
2. Очередь запросов
Сохраняйте действия пользователя при отсутствии сети:
class OfflineQueue {
private val queue = ConcurrentLinkedQueue<() -> Unit>()
fun addToQueue(action: () -> Unit) {
queue.add(action)
}
fun processQueue() {
while (queue.isNotEmpty()) {
queue.poll()?.invoke()
}
}
}
3. Умная синхронизация
Используйте WorkManager (Android) или Background Tasks (iOS) для фоновой синхронизации.
1. Хранения конфиденциальных данных без шифрования
2. Бесконечного накопления несинхронизированных данных
3. Игнорирования конфликтов данных при синхронизации
1. Дельта-синхронизация – передавайте только изменения
2. Конфликт-менеджмент – стратегии разрешения противоречий
3. Прогрессивная загрузка – сначала кэш, потом обновления
Как вы реализуете оффлайн-режим? Делитесь решениями в комментариях
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8
🔌 Реализация оффлайн-режима
Пользователи часто остаются без интернета, но хотят продолжать работать с приложением. Разберём, как грамотно реализовать оффлайн-режим.
⚙️ Техники реализации
1. Локальное кэширование данных
Android (Room):
iOS (Core Data):
2. Очередь запросов
Сохраняйте действия пользователя при отсутствии сети:
3. Умная синхронизация
Используйте WorkManager (Android) или Background Tasks (iOS) для фоновой синхронизации.
🚫 Чего избегать
1. Хранения конфиденциальных данных без шифрования
2. Бесконечного накопления несинхронизированных данных
3. Игнорирования конфликтов данных при синхронизации
💡 Продвинутые техники
1. Дельта-синхронизация – передавайте только изменения
2. Конфликт-менеджмент – стратегии разрешения противоречий
3. Прогрессивная загрузка – сначала кэш, потом обновления
Как вы реализуете оффлайн-режим? Делитесь решениями в комментариях💬
🐸 Библиотека мобильного разработчика
#буст
Пользователи часто остаются без интернета, но хотят продолжать работать с приложением. Разберём, как грамотно реализовать оффлайн-режим.
1. Локальное кэширование данных
Android (Room):
@Entity
data class CachedData(@PrimaryKey val id: String, val content: String)
@Dao
interface CacheDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(data: CachedData)
}
iOS (Core Data):
let context = persistentContainer.viewContext
let entity = NSEntityDescription.insertNewObject(forEntityName: "CachedData", into: context)
entity.setValue(content, forKey: "content")
try? context.save()
2. Очередь запросов
Сохраняйте действия пользователя при отсутствии сети:
class OfflineQueue {
private val queue = ConcurrentLinkedQueue<() -> Unit>()
fun addToQueue(action: () -> Unit) {
queue.add(action)
}
fun processQueue() {
while (queue.isNotEmpty()) {
queue.poll()?.invoke()
}
}
}
3. Умная синхронизация
Используйте WorkManager (Android) или Background Tasks (iOS) для фоновой синхронизации.
1. Хранения конфиденциальных данных без шифрования
2. Бесконечного накопления несинхронизированных данных
3. Игнорирования конфликтов данных при синхронизации
1. Дельта-синхронизация – передавайте только изменения
2. Конфликт-менеджмент – стратегии разрешения противоречий
3. Прогрессивная загрузка – сначала кэш, потом обновления
Как вы реализуете оффлайн-режим? Делитесь решениями в комментариях
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤🔥3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁19❤3
Путаетесь в настройке пайплайнов? Этот промпт поможет автоматизировать сборку и публикацию приложений.
Промпт:
Create a complete CI/CD setup for mobile apps using GitHub Actions/Fastlane with:
1. Automated build and testing workflow
2. Code signing best practices
3. Beta distribution (Firebase/TestFlight)
4. Production release automation
5. Version bumping strategies
Provide YAML configuration samples and troubleshooting tips for common issues.
Варианты уточнений:
Add multi-module build optimization
Implement automatic changelog generation
Compare different CI services (Jenkins vs CircleCI vs GitHub Actions)
Add App Store Connect API integration
Cовет:
Укажите "For [Android/iOS/Cross-platform]" для таргетированных решений
Пример запроса:
# Нужно:
# - Автосборку по тегам
# - Публикацию в Firebase App Distribution
# - Проверку качества кода
# - Уведомления в Slack
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Опыт внедрения Kotlin Multiplatform
В этом материале автор расскажет, почему выбрал KMP, как погружался в iOS c опытом в Android и как прошло внедрение этого фреймворка.
👉 Читать статью
🐸 Библиотека мобильного разработчика
#свежак
В этом материале автор расскажет, почему выбрал KMP, как погружался в iOS c опытом в Android и как прошло внедрение этого фреймворка.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🌚3
🧗 Как продвинуть резюме в ТОП на HeadHunter
Представим ситуацию: вы обновили резюме, а просмотров ноль. В такие моменты нужно понимать, что проблема не в вас — а в том, как вы «продаете» себя системе.
👉 Читать статью
🐸 Библиотека мобильного разработчика
#свежак
Представим ситуацию: вы обновили резюме, а просмотров ноль. В такие моменты нужно понимать, что проблема не в вас — а в том, как вы «продаете» себя системе.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7😁6
Приготовили для вас дайджест по актуальному из мира iOS, Android и кроссплатформы.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
☝️ Последний шанс купить курсы Proglib Academy с доступом навсегда!
Это не просто летняя распродажа, это финал эпохи. Мы дарим скидку 40% на все курсы, включая полностью обновлённый курс по Python (предложение НЕ ДЕЙСТВУЕТ только на курс по AI-агентам для DS-специалистов).
Но главное: с 1 августа доступ ко всем новым курсам станет ограниченным. Успейте инвестировать в свои знания на самых выгодных условиях!
👉 Выбрать курс
Это не просто летняя распродажа, это финал эпохи. Мы дарим скидку 40% на все курсы, включая полностью обновлённый курс по Python (предложение НЕ ДЕЙСТВУЕТ только на курс по AI-агентам для DS-специалистов).
Но главное: с 1 августа доступ ко всем новым курсам станет ограниченным. Успейте инвестировать в свои знания на самых выгодных условиях!
👉 Выбрать курс
Android-разработчик приложений — от 180 000 до 350 000 ₽, гибрид
Flutter Developer — от 100 000 до 300 000₽, удалёнка
Senior Kotlin Developer — от 300 000 ₽, удалёнка
Android-разработчик — от 300 000 до 350 000 ₽, гибрид (Санкт-Петербург, Пермь, Белград)
Разработчик мобильных бизнес-приложений на базе Unity/Unity3D — от 4000 до 5000 $, удалёнка
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Раздутые размеры сборок:
• Увеличивают время загрузки приложения
• Отталкивают пользователей с ограниченным хранилищем
• Ухудшают конверсию установок
👾 Техники уменьшения размера (Android)
1. Включение R8/ProGuard
android {
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
2. Оптимизация ресурсов
Конвертируйте PNG в WebP:
find . -name "*.png" | xargs -I {} cwebp {} -o {}.webp
Удаляйте неиспользуемые локализации:
resConfigs "en", "ru"
3. Разделение по ABI
splits {
abi {
enable true
reset()
include "armeabi-v7a", "arm64-v8a"
universalApk false
}
}
🍏 Техники уменьшения размера (iOS)
1. Настройка компиляции
Включите оптимизацию кода:
Optimization Level = -Os
Strip Debug Symbols = YES
2. Использование Asset Catalogs
• Конвертируйте изображения в PDF (для векторных assets)
• Оптимизируйте цветовые профили
3. Bitcode и App Thinning
ENABLE_BITCODE = YES
📊 Анализ размера
• Android Studio → Build → Analyze APK
• Xcode → Window → Organizer → Size Report Tool
• Третьи-party инструменты: AppChecker, APK Explorer
🚫 Частые ошибки
• Включение ненужных библиотек
• Дублирование ресурсов
• Отсутствие очистки debug-символов
Проверьте свой проект! Какой размер вашего APK/IPA? Делитесь результатами оптимизации
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Многие думают, что функциональный стиль это просто когда ты используешь map, filter, reduce и чувствуешь себя умным. Типа, "я же не пишу for, значит я уже в functional game". И это…правда. Но только частично.
Функции высшего порядка - лишь вершина айсберга. На деле функциональный стиль это про мышление. Про то, как ты подходишь к задаче, а не просто какими методами бросаешься.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
FluidAudio — Swift Speaker Diarization на CoreML. Это высокопроизводительный фреймворк Swift для диаризации на устройстве и обработки звука, разработанный для соответствия самым высоким стандартам.
Цель — максимизировать производительность, используя исключительно модели CoreML. Все модели были вручную преобразованы командой разработчиков из вариантов с открытым исходным кодом и доступны на Hugging Face.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4❤3
Собрали лучшее о мобильной разработке. Включаем и смотрим по пути на работу.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
👾 Знакомство с парадигмой
Мир программирования быстро меняется. Возможно, скоро свою нишу в нём займёт и не особо популярная в кругах Android-разработчиков парадигма функционального программирования. Знания о ней помогут вам расширить кругозор, даже если вы не будете применять их на практике.
Эта статья открывает цикл материалов о функциональном программировании. В нём автор разберёт, что из этой парадигмы можно применять в архитектуре Android-приложений, а на что стоит смотреть с осторожностью.
👉 Читать статью
🐸 Библиотека мобильного разработчика
#свежак
Мир программирования быстро меняется. Возможно, скоро свою нишу в нём займёт и не особо популярная в кругах Android-разработчиков парадигма функционального программирования. Знания о ней помогут вам расширить кругозор, даже если вы не будете применять их на практике.
Эта статья открывает цикл материалов о функциональном программировании. В нём автор разберёт, что из этой парадигмы можно применять в архитектуре Android-приложений, а на что стоит смотреть с осторожностью.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2🔥1
gradlew assembleDebug --scan
– детальная аналитика сборки проекта AndroidКогда сборка внезапно начинает занимать 5 минут вместо 30 секунд, а логи не дают ответа —
--scan
покажет вам всю подноготную процесса.• Точное время каждого таска (кто тормозит сборку?)
• Зависимости между задачами (можно ли что-то распараллелить?)
• Проблемные модули (неожиданно: ваш
:app
зависит от 300-мегабайтной либы)• Оптимизация CI/CD — находите и убирайте узкие места
• Сравнение сборок — до/after внедрения кеширования
• Обучение — наглядно видите граф зависимостей Gradle
• Требуется регистрация на scans.gradle.com (бесплатно)
• Добавьте в
gradle.properties
:gradle.enterprise.url=https://scans.gradle.com
Делитесь в комментах — сколько минут у вас занимает чистая сборка проекта?
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4