Библиотека мобильного разработчика | Android, iOS, Swift, Retrofit, Moshi, Chuck
9.81K subscribers
1.47K photos
71 videos
52 files
4.23K links
Все самое полезное для мобильного разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/b60af5a4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a4adec1b17b35b6c0d8389
Download Telegram
🖥 2D-скролл во Flutter

Да кто такой этот ваш 2D-скролл? Зачем он нужен, если не делать аналог excel? На самом деле, двумерный скролл нужен в огромном количестве сценариев использования мобильных приложений.

В этой статье автор рассмотрит, как на Flutter можно реализовать двумерный скролл с помощью решений из коробки, почему они могут не подойти и что тогда делать.

Подробно разберёт, как сделать собственную производительную реализацию 2D-скролла, и оценит влияние на производительность на примере видеоредактора Yappy — приложения вертикальных видео.

👉 Читать статью

🐸 Библиотека мобильного разработчика

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
4
🔌 Реализация оффлайн-режима

Пользователи часто остаются без интернета, но хотят продолжать работать с приложением. Разберём, как грамотно реализовать оффлайн-режим.

⚙️ Техники реализации

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):

@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
🚀 Глубокая настройка CI/CD для мобильных приложений

Путаетесь в настройке пайплайнов? Этот промпт поможет автоматизировать сборку и публикацию приложений.

Промпт:

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 и как прошло внедрение этого фреймворка.

👉 Читать статью

🐸 Библиотека мобильного разработчика

#свежак
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
3🤔1
☝️ Последний шанс купить курсы Proglib Academy с доступом навсегда!

Это не просто летняя распродажа, это финал эпохи. Мы дарим скидку 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 $, удалёнка

➡️ Еще больше топовых вакансий — в нашем канале Mobile jobs

🐸 Библиотека мобильного разработчика

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🗂 Оптимизируем размер APK и IPA файлов

Раздутые размеры сборок:

• Увеличивают время загрузки приложения
• Отталкивают пользователей с ограниченным хранилищем
• Ухудшают конверсию установок

👾 Техники уменьшения размера (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
Функциональный стиль в Swift

Многие думают, что функциональный стиль это просто когда ты используешь map, filter, reduce и чувствуешь себя умным. Типа, "я же не пишу for, значит я уже в functional game". И это…правда. Но только частично.

Функции высшего порядка - лишь вершина айсберга. На деле функциональный стиль это про мышление. Про то, как ты подходишь к задаче, а не просто какими методами бросаешься.

👉 Читать полностью

🐸 Библиотека мобильного разработчика

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
4
😺 FluidAudio — фреймворк диаризации на CoreML

FluidAudio — Swift Speaker Diarization на CoreML. Это высокопроизводительный фреймворк Swift для диаризации на устройстве и обработки звука, разработанный для соответствия самым высоким стандартам.

Цель — максимизировать производительность, используя исключительно модели CoreML. Все модели были вручную преобразованы командой разработчиков из вариантов с открытым исходным кодом и доступны на Hugging Face.

💻 FluidAudio на GitHub

🐸 Библиотека мобильного разработчика

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🎙 Подкасты и видео о мобильной разработке

Собрали лучшее о мобильной разработке. Включаем и смотрим по пути на работу.

🔘 Перерисовки в Swift

🔘 Мок-собеседование Android-разработчика: middle и выше

🔘 Рынок разработки в СНГ, iOS, Переезд в UK

🐸 Библиотека мобильного разработчика

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
2
👾 Знакомство с парадигмой

Мир программирования быстро меняется. Возможно, скоро свою нишу в нём займёт и не особо популярная в кругах 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