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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4adec1b17b35b6c0d8389
Download Telegram
🔒 Оптимистическая vs пессимистическая блокировка

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

👉 Подробнее в статье

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
📣 SQL или NoSQL — вот в чём вопрос

Все мы знаем, что в мире технологий баз данных существует два основных направления: SQL и NoSQL, реляционные и нереляционные базы данных. Различия между ними заключаются в том, как они спроектированы, какие типы данных поддерживают, как хранят информацию.

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

Нереляционные БД устроены иначе. Например, документо-ориентированные базы хранят информацию в виде иерархических структур данных. Речь может идти об объектах с произвольным набором атрибутов. То, что в реляционной БД будет разбито на несколько взаимосвязанных таблиц, в нереляционной может храниться в виде целостной сущности.

Приходилось ли вам выбирать системы управления базами данных для собственных проектов? Голосуйте и пишите, что и почему вы в итоге выбрали 💬

❤️ — SQL
👍 
NoSQL
🤝использую оба подхода

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

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
6🤝3👍1
🗓 Новости недели

Приготовили для вас дайджест по актуальному из мира iOS, Android и кроссплатформы.

🔵 Generic'и и protocol'ы в Swift

В этой статье автор разберёт, как они работают и почему без них невозможно представить современный Swift.

🔵В App Store открыт прием приложений для новейшие версии ОС

Создавайте свои приложения и игры, используя Xcode 26 Release Candidate и последние SDK, тестируйте с помощью TestFlight и отправляйте на рассмотрение в App Store.

🔵 Compose + Koin + Jetpack Navigation: что мы поняли за 2 года

Автор делится опытом развития архитектуры приложения на Jetpack Compose: с какими ограничениями столкнулись, как укротили навигацию от Google и какими молитвами всё это подружили с Koin. В начале затронет структуру модулей, затем обсудит скоупы в Koin для многомодульных проектов, и завершит это все библиотекой Jetpack Navigation.

🔵 Swift на Android: создаём библиотеку

Автор покажет, как написать ваш первый Swift код для Android. Это будет увлекательное приключение, так что налейте чашечку чая и давайте начнём.

🔵 Release — CherryPick 3.x

CherryPick — лёгкий и модульный DI-фреймворк для Dart и Flutter, который решает задачу через строгую типизацию, кодогенерацию и контроль за зависимостями. Недавно вышла версия 3.x, где появились заметные улучшения.

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

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

Senior IOS/Teamlead mobile developer Kotlin Multiplatform — удалёнка

Android-разработчик приложений —‍ от 180 000 до 350 000 ₽, удалёнка

Разработчик iOS —‍ от 200 000 ₽, удалёнка

Senior/Lead Mobile Developer —‍ от 400 000 до 560 000 ₽, удалёнка

iOS-разработчик —‍ от 350 000 ₽, удалёнка

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

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
👨‍💻 Model Context Protocol Server для документации Apple

Apple Docs MCP дает доступ к официальной документации Apple для разработчиков по языку Swift, фреймворкам, API, SwiftUI, UIKit и видеоматериалам WWDC через Model Context Protocol. Это позволяет реализовать, например, поиск документации по iOS, macOS, watchOS, tvOS и visionOS с помощью ИИ-запросов на естественном языке.

Получайте мгновенный доступ к примерам кода на Swift/Objective-C, справочникам по API и техническим руководствам прямо в Claude, Cursor или любом другом совместимом с MCP ИИ-помощнике.

💻 Apple Docs MCP на GitHub

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🤖⚡️ ТОП-9 популярных AI-агентов для разработки в 2025 году

Знаешь, что общего у всех крутых девелоперов в 2025? Они не пишут код руками — они управляют AI-агентами. От автодополнения до генерации целых модулей: показываю, какие инструменты реально ускоряют разработку и почему без них ты уже отстаешь.

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

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🔴 Настройка отправки Push-уведомлений

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

📝 Промпт:

Implement push notifications for a mobile app that includes:

— Set up Firebase Cloud Messaging (FCM) for Android and APNS for iOS
— Configure notification channels and categories
— Handle notification permissions and user opt-in flow
— Implement deep linking from notifications
— Manage notification grouping and summary
— Add analytics for notification engagement
— Handle foreground/background notification delivery


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

— Добавьте Implement rich notifications with images and actions для интерактивных уведомлений
— Добавьте Set up geofencing and trigger-based notifications для персонализированных сообщений
— Добавьте Create notification scheduling system для отложенных уведомлений

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32
🔥 Отладка iOS-приложения

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

Старая школа (так не делайте):

func calculateScore() {
print("Начало расчета") // ← Лишний шум
// Код...
print("Результат: \(score)") // ← Забудете удалить
}


Профессиональный подход:

1. Умные точки останова

• Условные: срабатывают только при user.age < 18

• С действиями: логируют без остановки выполнения

• Символьные: ловят все вызовы viewDidLoad в проекте

2. Команды LLDB (в консоли Xcode):

(lldb) po user.name          // Вывести значение
(lldb) expr user.age = 25 // Изменить переменную на лету
(lldb) thread backtrace // Показать весь стек вызовов


3. 3D-отладка интерфейса

Кнопка «Debug View Hierarchy» показывает слои UI в 3D — находите незаметные баги за секунды.

4. Логирование через OSLog (вместо print):

import os.log
let log = Logger(subsystem: "com.youapp", category: "network")
log.debug("Загрузка данных...") // Автоматически скрывается в продакшене


5. Instruments — для сложных багов:

• Allocations: ищет утечки памяти

• Time Profiler: находит тормозящие методы

💡 Главный совет:

Настройте условную компиляцию для отладочного кода:

#if DEBUG
// Этот код исчезнет в продакшене
validateData()
#endif


Итог: Забудьте о print(). Используйте точки останова + LLDB + Instruments. Это в 10 раз быстрее и не засоряет код.

Какой ваш главный инструмент отладки? Делитесь в комментариях 💬

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32
This media is not supported in your browser
VIEW IN TELEGRAM
📅 24 сентября в 19:00 МСК — бесплатный вебинар с Максимом Шаланкиным.

Тема: «ИИ-агенты: новая фаза развития искусственного интеллекта».

🔹 Почему все говорят про ИИ-агентов и куда вливаются миллиарды инвестиций.
🔹 Чем они отличаются от ChatGPT и обычных ботов.
🔹 Как работает цикл агента: восприятие → планирование → действие → обучение.
🔹 Живое демо простого агента.
🔹 Потенциал для бизнеса: автоматизация процессов и ROI до 80%.

Не придёшь — будешь потом рассказывать, что «агенты — это как чат-боты», и ловить косые взгляды от коллег 😏

👉 Регистрируйтесь через форму на лендинге
😁1
Локальная разработка vs Облачная среда — где лучше работать?

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

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

❤️ — локально
👍 
в облаке
🤝гибрид

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

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
11🤝4👍2
5 SwiftUI-хаков для более чистых приложений

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

1️⃣ Более безопасный способ развертывания Optional в представлениях

Вместо бесконечных операторов if let создайте простое расширение, которое сделает обработку опциональных параметров естественной:

extension View {
@ViewBuilder
func ifLet<T, Content: View>(_ value: T?, content: (T) -> Content) -> some View {
if let value {
content(value)
} else {
self
}
}
}


Теперь вы можете просто писать:

Text("Hello")
.ifLet(username) { Text("Welcome, \($0)") }


2️⃣ Условные модификаторы без лишних сложностей

Мы все пишем .padding() или .opacity() с условиями. Вместо того, чтобы заключать целые представления в блоки if, используйте это:

extension View {
@ViewBuilder
func apply(_ condition: Bool, modifier: (Self) -> some View) -> some View {
if condition {
modifier(self)
} else {
self
}
}
}


Использование:

Text("Premium")
.apply(isPro) { $0.foregroundColor(.yellow) }


Одна строка, ничего лишнего.

3️⃣ Многоразовый AsyncImage с плейсхолдером

Загрузка изображений — обычное дело, но повторение одной и той же логики плейсхолдера утомляет. Сделайте один раз:

struct RemoteImage: View {
let url: URL
var body: some View {
AsyncImage(url: url) { phase in
switch phase {
case .success(let image): image.resizable().scaledToFit()
case .failure(_): Color.gray
case .empty: ProgressView()
@unknown default: EmptyView()
}
}
}
}


Теперь вам больше не придётся переписывать загрузчики изображений.

4️⃣ Форматирование даты в одну строку

Вместо того, чтобы создавать DateFormatter везде, добавьте расширение:

extension Date {
func formatted(_ style: DateFormatter.Style = .medium) -> String {
let formatter = DateFormatter()
formatter.dateStyle = style
return formatter.string(from: self)
}
}


Использование:

Text(Date().formatted(.long))


Легко читаемый и многоразовый код.

5️⃣ Автоматические вставки SafeArea

Не любите бороться с .ignoresSafeArea()? Добавьте небольшой вспомогательный метод:

extension View {
func fillScreen() -> some View {
self.frame(maxWidth: .infinity, maxHeight: .infinity)
.ignoresSafeArea()
}
}


Теперь для каждого полноэкранного представления требуется всего один модификатор.

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
4🥱3👍2👏1🤔1