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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4adec1b17b35b6c0d8389
Download Telegram
🤫 Как продвинуть резюме на hh

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

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

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥1
🔥 Вы ещё можете застать старый добрый Proglib — с вечным доступом к курсам.

С 1 августа всё меняется: навсегда — останутся только те, кто успел купить сейчас.

-40% на все курсы. Включая обновлённый Python (кроме курса по AI-агентам)

Это не просто распродажа. Это — последняя точка входа в Proglib Academy по старым правилам.

📚 Выбрать и забрать свой курс навсегда → https://clc.to/TBtqYA
🖥 Топ вакансий для мобильных разработчиков за неделю

Senior Java/Kotlin Developer — от 4 000 до 5 000 $, удалёнка

Flutter Developer — от 100 000 до 300 000₽, удалёнка

Разработчик программного обеспечения (iOS) — гибрид (Москва)

iOS Developer — от 4 000 до‍ 5 500 $, гибрид (Москва)

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

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

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Torrent Search — поиск торрентов в Material 3

Torrent Search — современное приложение для Android с дизайном Material 3 для поиска и загрузки торрентов с нескольких трекеров.

Фичи: дизайн Material 3, разные категории поиска, управление скачиванием (самого торрент-клиента нет, направляет к другим приложениям),  включение или выключение NSFW контента.

💻 Torrent Search на GitHub

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
2
👾 Переходишь на Compose? Не спеши!

Вас влечет мир Jetpack Compose или вы уже на пороге перехода с View на этот фреймворк? Может, вы уже в процессе миграции или просто исследуете новые горизонты Android? Если да, то доклад Максима о переходе проекта с View на Compose сможет вас заинтересовать.

Спикер поделился тремя ключевыми кейсами-вызовами, с которыми столкнулись в процессе перехода:

• Работа с вложенными скроллами и свайпами.

• Использование Compose в RecyclerView.

• И наиболее значимая задача — решение проблемы медленного первого запуска, вызванной особенностью Compose как unbundled library.

👀 Смотреть доклад

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
3
📎 Мастер Dependency Injection в мобильной разработке

Запутались в подходах внедрения зависимостей? Этот промпт поможет разобраться с DI раз и навсегда.

Промпт:

Сравни подходы Dependency Injection (Dagger/Hilt, Koin, Swinject) для мобильной разработки:
1. Плюсы и минусы каждого решения
2. Кривая обучения для новичков
3. Производительность в runtime
4. Поддержка мультимодульности
5. Интеграция с ViewModel и Compose/SwiftUI
Приведи примеры настройки для типового приложения на Kotlin/Swift


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

Как мигрировать с ручного DI на Hilt/Koin?
Лучшие практики тестирования с DI
DI для кроссплатформенной разработки (KMM)
Оптимизация времени сборки с DI

💡 Лайфхак: Добавьте Show common mistakes and how to avoid them для разбора типовых ошибок

Пример запроса:

// Нужно:
// - Простое приложение с 2 экранами
// - Сетевой слой и локальная БД
// - Легкая замена зависимостей в тестах
// - Поддержка мультимодульности


Какой DI-фреймворк вы предпочитаете и почему? 💬

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
3
👀 Мотив (или мотивированный трафик) — сложная для рынка тема. Среди нескольких основных факторов для выведения приложения на $10k MRR посмотрим на два:

1. Приживаемость мотива

Если следили, то знаете, что 3 этих месяца рынку ASO было несладко. В среднем сервисе мотивированного трафика процент засчитываемого коннектом трафика не превышал 50%. Те, кто работает с китайцами, считал нормой для этих времен — 30%. Но есть и рекордсмены, кому удавалось удержать высокие планки в 80—90%, тот же @Fourasobot

2. Стоимость трафика

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

Математика примерно такая:
➡️ Приложение в районе $3—10k суммарно
➡️ Затраты на мотивированный трафик (зависит от стратегии залива, может быть абсолютно разной).
➡️ После создания приложения и пролива трафика командам удается собрать MRR $1—10k в зависимости от скилла (средние результаты по рынку, бывают больше и меньше, но медиана такая).

Краеугольным камнем является цена мотивированного трафика. По 20 центов 100k установок обойдутся в $20k, по 10 центов — $10k, а по 5 центов - $5k.

В результате, если вы сделали приложение за $5k и потратили на трафик $20k, собрав MRR в $2k — выглядит так себе. Если же общий кост — $10k , а MRR $2k, то уже лучше.

Что интересно, у того же @Fourasobot, как у поставщика мотивированного трафика, себестоимость производства зависит от объема, именно потому делают сетку. В этой сетке большие команды имеют хорошие цены, а мелкие — не очень. Ребята, которые забирают миллионы установок могут окупаться до полугода, а те, которые берут точечно — годами. К сожалению, или к счастью — так работает рынок.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔗 Реализуем deep links в мобильных приложениях

Пользователи ожидают:

• Плавных переходов из писем/сообщений в приложение
• Сохранения контекста при открытии ссылок
• Рабочих ссылок даже когда приложение не установлено

Базовые концепции:

Deep Links - открывают конкретный экран в приложении
Deferred Deep Links - работают даже без установленного приложения
App Links (Android) / Universal Links (iOS) - веб-ссылки, открывающие приложение

Реализация на Android

1. Добавьте intent-filter в манифест:

<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="https" android:host="yourdomain.com"/>
</intent-filter>


2. Обработка ссылки в Activity:

override fun onCreate(savedInstanceState: Bundle?) {
if (intent?.action == Intent.ACTION_VIEW) {
val data = intent.data
// Анализ URL и навигация
}
}


Реализация на iOS

1. Настройка Associated Domains:

<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:yourdomain.com</string>
</array>


2. Обработка в AppDelegate:

func application(_ application: UIApplication, 
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let url = userActivity.webpageURL else {
return false
}
// Обработка URL
return true
}


Продвинутые сценарии

1. Аналитика переходов:

• Добавьте UTM-метки к ссылкам
• Отслеживайте источник установки

2. Совместная работа с бэкендом:

{
"url": "https://app.com/product/123",
"ios_store_id": "123456789",
"android_package": "com.yourapp"
}


3. Тестирование:

# Android
adb shell am start -W -a android.intent.action.VIEW -d "https://yourdomain.com/product/123"

# iOS
xcrun simctl openurl booted "https://yourdomain.com/product/123"



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

• Используйте Firebase Dynamic Links для кроссплатформенного решения
• Поддерживайте веб-версии всех deep link-страниц
• Документируйте все схемы URL для команды

Какие библиотеки для deep links вы используете? Делитесь опытом в комментариях 💬

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
3
⚠️ 5 ловушек Swift, которые вы не заметите, пока не станет слишком поздно

1️⃣ Сильные циклы ссылок в замыканиях

Замыкания по умолчанию захватывают self. Если вы не используете [weak self], вы можете получить цикл удержания и утечку памяти.

class ProfileViewModel {
var onUpdate: (() -> Void)?

func setup() {
onUpdate = {
self.doSomething() // ⚠️ This captures self strongly
}
}
}


Исправление:

onUpdate = { [weak self] in
self?.doSomething()
}


2️⃣ Принудительное развертывание Optional

Это очевидно, но все еще часто встречается это в коде:

let name: String? = getName()
print(name!) // Crashes if nil


Даже «безопасные» места могут подвести вас — например, повторное использование ячеек в UITableView.

Вместо этого используйте guard let или if let. Никогда не доверяйте данным слепо.

3️⃣ Неявно разворачиваемые Optional (String!)

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

var token: String!
print(token.count) // If token is nil, boom.


По умолчанию используется ?. Используйте ! только в том случае, если вы абсолютно уверены, что он инициализирован перед использованием (например, инжектирован через сториборд).

4️⃣ Не помеченные как final классы

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

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

final class UserManager {
// Now faster method calls, no subclassing allowed
}


5️⃣ Отсутствие weak у делегатов

Классическая ошибка в конфигурациях MVC или MVVM.

protocol MyDelegate: AnyObject {
func didUpdate()
}

class MyController {
var delegate: MyDelegate? // Should be weak
}


Всегда объявляйте свойства делегатов как weak, чтобы избежать циклов удержания:

weak var delegate: MyDelegate?


Какие ошибки чаще вам встречаются? Пишите в комментариях 💬

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3🔥1😁1
🏦 Интеграция платежных систем на уровне банковской инфраструктуры

Конкурентоспособность банков и финтех-компаний все больше зависит от скорости и надежности платежей. Сегодня интеграция с национальными системами быстрых платежей вроде SEPA Instant — необходимость для выживания, а не просто полезная надстройка.

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

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

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Системы типов в языке — какие бывают и чем отличаются

Классификация делит языки на статически типизированные и динамически типизированные.

В статически типизированном языке каждая переменная имеет определенный тип на всем протяжении жизни, он не может измениться во время выполнения. То есть все типы известны ещё на этапе написания кода.

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

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

И что лучше?

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

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

❤️ — статическая
👍 
динамическая

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

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
6🎉2👍1