Библиотека мобильного разработчика | 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
ПОСЛЕДНИЙ ДЕНЬ
КУРСЫ ПОДОРОЖАЮТ ЗАВТРА‼️

ML за 34к вместо 44к + Python в подарок
Математика → второй доступ в подарок
— Ранний доступ к AI-агентам с 15 сентября
— И МОЖНО УСПЕТЬ КУПИТЬ ВСЁ ДО ПОДОРОЖАНИЯ

👉 Proglib Academy
❗️Прогресс в технологическом стеке

С 2022 IT-рынок в России продолжает расти с высокой скоростью, однако в последнее время начал падать темп роста. Роль в этом сыграло и санкционное давление, и дефицит кадров, и необходимость быстрой перестройки после ухода западных продуктов.

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

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

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

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰2
⚡️ Команда дня: git rebase -i

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

Что он умеет?
squash (s) — объединить несколько коммитов в один. Удобно при 10-ти коммитах «fix»
reword (r) — поменять сообщение коммита, не трогая сам код
edit (e) — остановиться на коммите, чтобы поправить код прямо в процессе переписывания истории
drop (d) — удалить ненужный коммит
pick (p) — оставить коммит как есть (по умолчанию)

Когда это пригодится?

🔸Перед созданием merge/pull request, чтобы не тащить в историю «мусорные» коммиты
🔸 Чтобы объединить мелкие правки в один логичный коммит
🔸 Чтобы откатить или отредактировать только часть изменений без лишнего шума

💡 А вы часто squash-ите коммиты или оставляете как есть?

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🤩1
📉💼 Грейдинг умер, ИИ захватил собесы: 5 трендов IT-найма 2025

Помнишь времена, когда можно было поменять работу и сразу получать на 50% больше? Забудь. В 2025-м правила игры кардинально изменились — теперь компании боятся ChatGPT на собесах, а искать работу через LinkedIn стало бесполезно. Разбираем 5 трендов, которые перевернули IT-найм с ног на голову.

🔗 Читать статью

🐸 Библиотека мобильного разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
😁41
👀 Настройка мониторинга производительности мобильного приложения

Проблема

Пользователи удаляют приложения из-за:

• Долгой загрузки экранов
•Подвисаний интерфейса
•Высокого потребления батареи

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

📊 Ключевые метрики для отслеживания

• Время запуска приложения (Cold/Warm/Hot start)
• Частота кадров (FPS) на основных экранах
• Потребление памяти (RAM)
• Использование CPU и батареи
• Скорость загрузки данных (сеть)

🛠 Инструменты мониторинга

1. Firebase Performance Monitoring (Android/iOS)

// Android: добавьте в build.gradle
implementation 'com.google.firebase:firebase-perf:20.5.1'


// iOS: добавьте в Podfile
pod 'FirebasePerformance'


2. Создание кастомных трейсов:

// Android
val trace = Firebase.performance.newTrace("screen_load")
trace.start()

// Выполнение работы...
trace.stop()

// iOS
let trace = Performance.startTrace(name: "screen_load")
// Работа...
trace.stop()


3. Отслеживание скорости загрузки экрана:

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val trace = Firebase.performance.newTrace("main_activity_create")
trace.start()

setContentView(R.layout.activity_main)
// Инициализация UI

trace.stop()
}
}


📱 Настройка мониторинга FPS

Android (Choreographer)

class FpsMonitor : Choreographer.FrameCallback {
private var frameCount = 0
private var startTime = 0L

override fun doFrame(frameTimeNanos: Long) {
if (startTime == 0L) {
startTime = frameTimeNanos
}

frameCount++
val elapsed = (frameTimeNanos - startTime) / 1_000_000
if (elapsed >= 1000) {
val fps = (frameCount * 1000 / elapsed).toFloat()
// Отправка метрики
frameCount = 0
startTime = frameTimeNanos
}
Choreographer.getInstance().postFrameCallback(this)
}
}


iOS (CADisplayLink)

class FpsMonitor {
private var displayLink: CADisplayLink?
private var lastTimestamp: CFTimeInterval = 0
private var frameCount: Int = 0

func startMonitoring() {
displayLink = CADisplayLink(target: self, selector: #selector(step))
displayLink?.add(to: .main, forMode: .common)
}

@objc func step(displayLink: CADisplayLink) {
if lastTimestamp == 0 {
lastTimestamp = displayLink.timestamp
return
}

frameCount += 1
let delta = displayLink.timestamp - lastTimestamp
if delta >= 1 {
let fps = Double(frameCount) / delta
// Отправка метрики
frameCount = 0
lastTimestamp = displayLink.timestamp
}
}
}


📈 Анализ и визуализация данных

• Firebase Console – готовые графики и отчеты
• Custom dashboards – Grafana, Data Studio
• Оповещения – при падении FPS ниже 50 или росте потребления памяти

💡 Лучшие практики

• Мониторьте в продакшене – реальные данные пользователей
• Сегментируйте данные – по устройствам, версиям ОС, сетям
• Установите целевые показатели – например, 60 FPS, холодный запуск < 2 сек

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Переворачиваем календарь — а там скидки, которые уже закончились.

Но мы их вернули на последний день 🤔

До 00:00 третьего сентября (цены как до 1 сентября):

▪️ Математика для Data Science — 35.199 ₽ вместо 44.900 ₽
▪️ Алгоритмы и структуры данных — 31.669 ₽ вместо 39.900 ₽
▪️ Основы IT — 14.994 ₽ вместо 19.900 ₽
▪️ Архитектуры и шаблоны — 24.890 ₽ вместо 32.900 ₽
▪️ Python — 24.990 ₽ вместо 32.900 ₽
▪️ ML для Data Science — 34.000 ₽ вместо 44. 000 ₽
▪️ AI-агенты — 49.000 ₽ вместо 59.000 ₽

👉 Хватаем скидки из прошлого

P.S. Машину времени одолжили у дяди Миши
⚙️ Внедрение in-app purchases (встроенных покупок)

Хотите monetize ваше приложение, но запутались в правилах App Store и Google Play? Этот промпт поможет реализовать покупки без головной боли.

📝 Промпт:

Implement in-app purchases for a mobile app that includes:
— Set up products in App Store Connect/Google Play Console
— Initialize billing clients for [Android/Kotlin/iOS/Swift]
— Implement purchase flow with proper error handling
— Restore purchases functionality
— Validate receipts on backend/server
— Handle subscription management and status tracking
— Manage consumable/non-consumable products


💡 Расширения:

— Добавьте Implement local validation for offline purchases для проверки при отсутствии сети
— Добавьте Add grace period for subscription renewals для улучшения пользовательского опыта
— Добавьте Handle price changes and introductory offers для гибкой монетизации

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
3
😎 Сколько баллов набрали вы?

Голосуйте, какой у вас уровень разработчика:

😁 — 5-12 баллов (стажер)
👍 — 13-25 баллов (джуниор)
⚡️ — 26-40 баллов (джуниор+)
👏 — 41-60 баллов (миддл)
🔥 — 61-80 баллов (миддл+)
🎉 — 81-100 баллов (сеньор)
🤩 — 100+ баллов (тимлид)

Но вот в чем прикол — опытный разработчик набирает баллы не случайными косяками, а осознанными решениями.

👉 Научим, как быстро прокачаться от стажера до сеньора
👨‍💻 ARC в Swift

ARC (Automatic Reference Counting) - это метод подсчёта ссылок на объекты, который используется Apple для управления памятью в Swift.

Автор разберёт, что такое ARC на самом деле, посмотрит, как он работает на уровне SIL, и заглянет немного в историю управления памятью в iOS.

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

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
3
🔥 6 горячих клавиш VS Code

Горячие клавиши — добро, польза и экономия времени. Давайте разберёмся, как с их помощью упростить себе жизнь в Visual Studio Code.

1️⃣ Перейти к парной скобке

Windows — Ctrl + Shift + \

macOS — Shift + Command + \

Когда кода становится много, очень просто запутаться в закрывающих и открывающих скобках, непонятно, где какой блок, и вообще, что происходит. На помощь приходит Ctrl + Shift + \ — это хорошее дополнение к стандартной подсветке парных скобок в VS Code.

2️⃣ Переименовать переменную

Windows — F2

macOS — F2

Писали, писали, а старший разработчик пришёл и сказал, что ваши переменные a, b и c — дурной тон. Чтобы не выискивать их по всему документу и не менять руками, есть F2.

3️⃣ Отформатировать документ

Windows — Shift + Alt + F

macOS — Shift + Option + F

VS Code предложит установить расширение или выбрать из существующих, а потом красиво отформатирует документ — расставит по местам блоки и скобки, сделает строки кода читаемыми.

4️⃣ Перейти к переменной

Windows — F12

macOS — F12

Иногда вообще непонятно, откуда взялась переменная, какая у неё область видимости и где она объявлена. F12 перенесёт вас к объявлению выделенной переменной, функции или метода. Если объявление в другом файле — всё равно перенесёт.

5️⃣ Включить или выключить перенос слов

Windows — Alt + Z

macOS — Option + Z

Если строки кода или текст не вмещаются в редактор по ширине, включите перенос.

6️⃣ Включить дзен-режим

Windows — Ctrl + KZ

macOS — Command + KZ

Лучшее решение для тех, кто входит в состояние потока, когда пишет код. Дзен-режим скрывает все панели, разворачивает редактор на весь экран, и вы можете плыть в волнах кода и думать только о нём. Чтобы вернуться в реальный мир, нажмите Escape.

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🔒 Оптимистическая vs пессимистическая блокировка

Что произойдет, если несколько пользователей одновременно начнут менять одни и те же данные? Скорее всего — потеря изменений и ошибки.

Чтобы этого избежать, в системах используются блокировки: пессимистические — когда конфликтам не дают случиться, и оптимистические — когда система проверяет их только перед сохранением.

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

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

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🎮 КВЕСТОВАЯ ЛИНИЯ: «Путь Data Scientist'а»

⮕ Твой стартовый набор искателя данных:
Python — твое легендарное оружие (урон по багам +∞)
Математика — твой базовый интеллект (влияет на понимание алгоритмов)
Машинное обучение — твое дерево навыков (открывает новые способности)


⚡️ АКТИВЕН ВРЕМЕННЫЙ БАФФ: «Щедрость наставника»

Эффект: –30% к цене полного набора ДСника
Было: 121.800 ₽ → Стало: 84.900 ₽

☞ Что ждет тебя в этом квесте

— Получение артефактов: портфолио проектов и сертификаты— Прокачка от новичка до Senior Data Scientist— Босс-файты с реальными задачами из индустрии— Доступ к гильдии единомышленников


📎 Забрать бафф
Рассрочки: 3 мес | 6 мес | 12 мес