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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4adec1b17b35b6c0d8389
Download Telegram
Текстовые редакторы vs IDE

Выбор между IDE и текстовым редактором - один из важных вопросов, на который должен ответить каждый разработчик.

IDE, как правило, включает в себя инструменты отладки, системы контроля версий и инструменты управления проектами, установленные в единой среде, помимо инструментов редактирования текста.

В то время как текстовый редактор сравнительно меньше по размеру и имеет специальные инструменты только для текста.

Что же лучше для программирования: текстовый редактор или IDE? Голосуйте и пишите своё мнение в комментариях 💬

❤️ 
— текстовый редактор
👍 
IDE

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

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍224😁2
📲 Топ вакансий для мобильных разработчиков за неделю

iOS Developer — от 200 000 до 350 000 ₽, удалёнка

Junior Android Developer — удалёнка

Android-разработчик — от 200 000 ₽, удалёнка

IOS разработчик (Middle) — удалёнка

Android Developer (Middle+/Senior, Kotlin Multiplatform) — до 350 000 ₽, удалёнка

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

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
📌 Кратко про анонимные классы и объекты, object и companion object

Анонимный класс
— это класс, которые явно не объявлен с помощью class, наследуется от заданного класса или реализует заданный интерфейс.

Анонимный класс не всегда является синглтоном. Анонимный класс создается каждый раз при вызове соответствующего конструктора и используется только в контексте, где был создан.

При этом каждый экземпляр анонимного класса имеет свое уникальное состояние и может отличаться от других экземпляров того же анонимного класса. В Kotlin анонимный класс создается следующим образом:

val obj = object : SuperClassOrInterface() {
// implementation here
}


Объекты анонимных классов полезны для одноразового использования.

Экземпляры анонимных классов называют анонимными объектами, потому что они объявляются выражением, а не именем.
Анонимный объект начинается с ключевого слова object.

• можно задавать свойства, функции, блоки инициализации;

• можно наследоваться от других классов и реализовывать интерфейсы;

нельзя создавать конструкторы (как основные, так и вторичные).

Ключевое слово object позволяет одновременно объявить класс и создать его экземпляр (т.е. объект). При этом применять его можно по-разному:

object Name — это объявление объекта(оbject declaration), реализация паттерна Singleton;

companion object — это объект-компаньон внутри класса (также Singleton);

object — это объект-выражение (анонимный объект/object expression), не Singleton.

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍1🌚1
🖥 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