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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4adec1b17b35b6c0d8389
Download Telegram
😱 Вся правда об увольнениях в IT в 2025-м

Пока все молчат о том, что происходит на рынке, мы решили выяснить реальную картину. Без прикрас и корпоративного пиара.

Но для этого нам нужна ваша помощь! Мы собираем данные от разработчиков, тестировщиков, менеджеров и всех, кто работает в ИТ, чтобы создать честное исследование о:

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

Почему это важно? Потому что сила в правде. Зная реальную ситуацию, вы сможете лучше понимать тренды рынка и планировать карьеру.

⚡️Пройдите опрос и помогите всему сообществу: https://clc.to/yJ5krg
😁31
📝 Промпт дня: генерация кода для RecyclerView/ListView

Устали вручную писать адаптеры для списков? Попробуйте этот промпт, чтобы ускорить разработку.

⚙️ Промпт для ChatGPT/Copilot:

Generate a complete RecyclerView adapter in Kotlin for displayin
1. ViewHolder pattern implementation
2. Click listeners for items
3. DiffUtil for efficient updates
4. Support for multiple view types
Include sample data class and usage example in Activity/Fragment.


📌 Варианты уточнений:

🔵 Add pull-to-refresh functionality

🔵 Implement animated item insertion/removal

🔵 Add sticky headers implementation

🔵 Optimize for large datasets with pagination

💡 Cовет:

Добавьте Explain each part of the implementation, если хотите не просто код, а объяснение архитектурных решений.

Какой ваш любимый способ работы со списками? Делитесь в комментариях 💬

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
3🌚3
🖥 Создание кастомного тултипа

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

В статье автор разберёт, как создать гибкую и удобную систему тултипов в Jetpack Compose, используя модифайры и специальный оборачивающий блок. Шаг за шагом будет рассмотрено создание необходимых компонентов, их взаимодействие и методы управления тултипом.

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

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍2
👾 AI-агенты — настоящее, о котором все говорят

На днях мы анонсировали наш новый курс AI-агенты для DS-специалистов 🎉

Это продвинутая программа для тех, кто хочет получить прикладной опыт с LLM и решать сложные задачи!

На обучении вы соберете полноценные LLM-системы с учётом особенностей доменных областей, получите hands-on навыки RAG, Crew-AI / Autogen / LangGraph и агентов.

🎓 В рамках курса вы научитесь:
— адаптировать LLM под разные предметные области и данные
— собирать свою RAG-систему: от ретривера и реранкера до генератора и оценки качества
— строить AI-агентов с нуля — на основе сценариев, функций и взаимодействия с внешней средой

Разберете реальные кейсы и научитесь применять похожие подходы в разных доменных областях, получите фундамент для уверенного прохождения NLP system design интервью и перехода на следующий грейд.

Старт 5 июля, а при оплате до 1 июня действует дополнительная скидка и бонус — эксклюзивный лонгрид по API и ML от Proglib.

Начните осваивать тему уже сейчас 👉 https://clc.to/Cttu7A
👍1
Библиотека мобильного разработчика | Android, iOS, Swift, Retrofit, Moshi, Chuck pinned «👾 AI-агенты — настоящее, о котором все говорят На днях мы анонсировали наш новый курс AI-агенты для DS-специалистов 🎉 Это продвинутая программа для тех, кто хочет получить прикладной опыт с LLM и решать сложные задачи! На обучении вы соберете полноценные…»
🎁 Linux vs. Windows: битва операционных систем

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

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

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

❤️ 
— Linux
👍 
Windows
👏 — другое

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

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
23👏20👍19
🆒 5 трюков Jetpack Compose, о которых вы, вероятно, не знаете

Рассмотрим 5 недооцененных или малоизвестных трюков с пользовательским интерфейсом в Jetpack Compose, которые помогут вам создавать более эффективные, красивые и удобные в обслуживании пользовательские интерфейсы.

1️⃣ Анимируйте видимости с помощью переходов Enter/Exit

Вместо того чтобы переключать видимость с помощью if (visible) Box {}, вы можете использовать AnimatedVisibility для чистой анимации входа и выхода.

AnimatedVisibility(
visible = showDetails,
enter = fadeIn() + slideInVertically(),
exit = fadeOut() + slideOutVertically()
) {
Text("Here's a smooth transition")
}


Почему это важно: это избавляет от необходимости ручной обработки анимации и мгновенно улучшает UX.

2️⃣ Используйте модификатора Layout для создания кастомных макетов

Иногда стандартных Row, Column и Box недостаточно. Тогда на помощь приходит модификатор Modifier.layout.

Modifier.layout { measurable, constraints ->
val placeable = measurable.measure(constraints)
layout(placeable.width, placeable.height) {
// Flip layout horizontally
placeable.placeRelative(-placeable.width, 0)
}
}


Пример использования: создание зеркальных макетов, переворачивание компонентов или нестандартное расположение UI.

3️⃣ Разделяйте элементы в LazyColumn

Хотите вставить разделитель или пробел между каждым элементом?

LazyColumn {
itemsIndexed(items) { index, item ->
Text(item)
if (index != items.lastIndex) {
Divider()
}
}
}


Бонус: вы можете не ограничиваться разделителями, а вставлять между рядами рекламу, советы или информационный контент.

4️⃣ Используйте drawBehind для расширения фонового рисунка за пределы границ

Функция drawBehind позволяет рисовать за макетом компонента, игнорируя отступы или даже рисуя за пределами границ.

Modifier
.padding(16.dp)
.drawBehind {
drawRect(Color.Gray)
}


Пример: добавьте тень или градиентный фон, выходящий за границы содержимого.

5️⃣ Закрепляйте заголовки в LazyColumn с помощью stickyHeader

Jetpack Compose имеет нативную поддержку «липких» заголовков:

LazyColumn {
stickyHeader {
Text(
"Section Title",
modifier = Modifier.background(Color.White)
)
}
items(data) {
Text(it)
}
}


Отлично подходит для: групповых списков (например, контакты A-Z), разделов чата по дате и т.д.

Делитесь в комментариях лайфхаками, которыми вы пользуетесь 💬

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4🌚4
Последние 2 дня скидки на курс «AI-агенты для DS-специалистов»

Пока большинство дата-сайентистов строят модели и делают аналитику, рынок уже требует специалистов, которые создают автономные системы на базе ИИ-агентов.

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

🎁 Что вы получите при оплате курса до 1 июня:
— Промокод PROGLIBAIна 10 000 ₽ на курс, чтобы изучать AI-агентов еще выгоднее
— Эксклюзивный лонгрид по API и ML от Proglib

💡Что разберем на курсе «AI-агенты для DS-специалистов»:
— Реализацию памяти в цепочках langchain
— Полный пайплайн RAG-системы с оценкой качества
— Основы мультиагентных систем (MAS)
— Протокол MCP и фреймворк FastMCP

Промокод также действует на курсы «Математика для Data Science» и «Алгоритмы и структуры данных».

👉 Успейте до 1 июня: https://clc.to/Cttu7A
🚨 Что на самом деле происходит с увольнениями в ИТ

Каждый день в чатах разработчиков появляются сообщения «ищу работу», «команду сократили», «проект закрыли». Но никто не говорит о причинах и масштабах катастрофы. Мы запустили большое исследование, чтобы раскрыть правду!

🎯 Что мы выясним:
→ Реальные причины увольнений
→ Сколько времени нужно на поиск работы
→ Самые безумные истории смены работы

Понимая реальную ситуацию, мы сможем принимать взвешенные решения о карьере и не попасться на удочку HR-сказок.

👉 Пройдите опрос за 3 минуты и помогите всему сообществу: https://clc.to/yJ5krg
2
🎁 Топ-вакансий для мобильных разработчиков за неделю

Junior Android-developer — от 110 000 ₽, гибрид (Москва)

Head of iOS Development (WebView-приложения) — гибрид (Санкт-Петербург, Сочи, Ереван, Амстердам, Дубай)

Flutter-разработчик — удалёнка

Java/Kotlin-разработчик (Календарь) — от 300 000 до‍ 500 000 ₽, удалёнка

Middle+/Senior IOS developer — удалёнка

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

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🔧 How to: настраиваем GitLab CI/CD для мобильных тестов

Ручные сборки и деплой занимают время, а человеческий фактор может привести к ошибкам. Автоматизируем процесс!

1️⃣ Создаём .gitlab-ci.yml

Файл .gitlab-ci.yml – сердце CI/CD в GitLab. Здесь описываем, какие тесты и когда запускать.

Пример пайплайна для Android (Appium + Pytest):

stages:
- test

variables:
ANDROID_HOME: "/sdk"
PATH: "$ANDROID_HOME/emulator:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH"

test_ui:
stage: test
image: python:3.9
before_script:
- pip install -r requirements.txt
script:
- pytest tests/ui_tests --junitxml=report.xml
artifacts:
paths:
- report.xml


Что тут происходит?
✔️ stages: Определяем этапы (у нас пока только test).
✔️ variables: Переменные среды (Android SDK и путь к эмулятору).
✔️ test_ui: Джоб, который запускает UI-тесты.
✔️ image: Используем докер-образ с Python 3.9.
✔️ before_script: Устанавливаем зависимости перед запуском.
✔️ script: Запускаем тесты.
✔️ artifacts: Сохраняем отчёт о тестах.

2️⃣ Подключаем GitLab Runner

Чтобы GitLab выполнял тесты, нужен Runner – агент, который их запускает.

Запускаем Runner на своём сервере

➡️ Устанавливаем GitLab Runner:

sudo curl -L --output /usr/local/bin/gitlab-runner \
"https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64"
sudo chmod +x /usr/local/bin/gitlab-runner


➡️ Регистрируем Runner:


gitlab-runner register


Вводим URL репозитория и токен (берём в Settings → CI/CD → Runners).

➡️ Запускаем Runner:


gitlab-runner start


Теперь тесты будут выполняться прямо на твоей машине или сервере.

3️⃣ Добавляем Android-эмулятор в пайплайн
Если нужно гонять тесты на Android:

test_android:
stage: test
image: budtmo/docker-android:emulator_11.0
before_script:
- start-emulator
- adb wait-for-device
script:
- pytest tests/android_tests


✔️ budtmo/docker-android – докер-контейнер с эмулятором Android.
✔️ start-emulator – запускаем эмулятор.
✔️ adb wait-for-device – ждём, пока устройство загрузится.

4️⃣ Автоматизация сборки APK/IPA

Чтобы собирать APK (Android) или IPA (iOS) в GitLab CI/CD:

Android (Gradle)
build_apk:
stage: build
image: openjdk:11
script:
- ./gradlew assembleDebug
artifacts:
paths:
- app/build/outputs/apk/debug/app-debug.apk


iOS (Fastlane)
build_ios:
stage: build
image: circleci/macos-xcode
script:
- bundle exec fastlane build
artifacts:
paths:
- build/ios.ipa


Какой CI/CD используете вы? Делитесь опытом в комментариях 💬

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82🔥1
🛡 6 основных аспектов безопасности

Незащищенный API становится легкой мишенью для хакеров, поэтому его безопасность – приоритет для разработчиков и компаний, дорожащих своей репутацией.

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

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

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍2🤝1
🚀 adb logcat – мощный инструмент для отладки Android-приложений

Когда мобильное приложение ведет себя странно, а в студии нет очевидных ошибок, на помощь приходит adb logcat – ваш "рентген" для Android-устройств.

Как использовать?

adb logcat | grep "MyAppTag"  # фильтр по вашему тегу
adb logcat -s *:E # только ошибки (Error)
adb logcat > logs.txt # сохранить логи в файл


💡 Полезные сценарии:

🔘 Поиск крашей – быстро находите Crash и Exception даже без дебаггера.

🔘 Фильтрация по тегам – если вы добавили свои (Log.d("MyAppTag", "message")).

🔘 Анализ производительности – ищите предупреждения о долгих операциях (Choreographer, ANR).

⚠️ Лайфхак:

Очистите старые логи перед тестированием, чтобы не "тонуть" в данных:

adb logcat -c


А вы часто используете logcat? Делитесь любимыми командами в комментариях 👇

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
2