Библиотека мобильного разработчика | Android, iOS, Swift, Retrofit, Moshi, Chuck – Telegram
Библиотека мобильного разработчика | Android, iOS, Swift, Retrofit, Moshi, Chuck
9.49K subscribers
1.74K photos
85 videos
52 files
4.57K links
Все самое полезное для мобильного разработчика в одном канале.

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

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

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

РКН: https://gosuslugi.ru/snet/67a4adec1b17b35b6c0d8389
Download Telegram
🤖🔎 Подборка AI-инструментов для поиска работы в IT за рубежом

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

📌 Лучшие вакансии для мобильных разработчиков

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

#MadeInProglib
Please open Telegram to view this post
VIEW IN TELEGRAM
🗓 Новости недели

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

🔵 Ускорение CI сборок в Xcode с кэшированием слотов

Далее следует полный технический анализ решения, которое автор в итоге реализовал, которое автор называет кэшированием с подогревом слотов.

🔵 Улучшение доступности в Android-приложениях

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

🔵 Нейминг в Dart: полезные примеры из документации

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

📌 Лучшие вакансии для мобильных разработчиков

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
Объявление объекта (object declaration), object как Singleton

Объявляется объект при помощи ключевого слова object, после которого следует имя объекта.

Файл, содержащий только object представляет из себя Singleton, т.е. будет создан только один экземпляр этого класса. Пример:

object One {
val cats = arrayListOf<Cat>()

fun callCat() {
for (cat in cats) {
...
}
}
}


Можно обращаться к методам и свойствам класса через имя объекта:

One.cats.add(Cat(...))
One.callCat()


Инициализация объявления объекта потокобезопасна и выполняется при первом доступе (лениво).

📌 Лучшие вакансии для мобильных разработчиков

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

#буст #JuniorKit #Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔴 Как распознать нажатие на произвольную фигуру в Jetpack Compose

В Android-разработке определение нажатия на сложную нестандартную фигуру — нетривиальная задача. Класс Path не предоставляет готового API, а распространённые решения с проверкой пересечения маленького прямоугольника и фигуры — медленные и не всегда точные.

В Jetpack Compose есть простое и эффективное решение: PathHitTester.

🔹 Как это работает

1. Создайте хит-тестер, передав ему ваш Path:

val hitTester = PathHitTester(imagePath)


2. Проверяйте координаты нажатия с помощью метода contains(). Важно привести координаты касания к той же системе координат, что и путь:

val tap = down.position - imagePosition // Применяем обратное преобразование
val isTapped = tap in hitTester // Вызывает hitTester.contains(tap)


🔹 Ключевые особенности и преимущества

🔘 Точность: Определяет нажатие с точностью до пикселя.

🔘 Производительность: Использует специальную структуру данных для быстрой проверки, что позволяет использовать PathHitTester даже для обработки событий перетаскивания (drag) с высокой частотой.

🔘 Переиспользование: Чтобы обновить тестируемый путь, используйте метод update(newPath) вместо создания нового объекта.

🔹 Получение пути из изображения

В демонстрационном видео используется библиотека pathway. Её основная функция — генерация Path из Bitmap:

val contour = bitmap.toPath().asComposePath()


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

🔹 Итог

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

📌 Лучшие вакансии для мобильных разработчиков

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

#PixelPerfect #MiddlePath #Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Snowdrop — простая работа с сетью

Snowdrop — типобезопасный, простой в использовании фреймворк на основе Swift Macros, созданный для того, чтобы вы могли с легкостью создавать и поддерживать сложные сетевые запросы.

Функции:

🔘 Создание типобезопасных сервисов с помощью макроса @Service
🔘 Поддержка различных типов методов запроса (например, @GET, @POST, @PUT, @DELETE, @PATCH, @CONNECT, @HEAD, @OPTIONS и т.п.)
🔘 Пиннинг SSL/сертификатов
🔘 Перехватчики
🔘 Возможность создания мок-объектов

💻 Snowdrop на GitHub

📌 Лучшие вакансии для мобильных разработчиков

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

#буст #iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
🎮 Как избежать циклов сохранения при работе с задачами в Swift

Всякий раз, когда мы создаем задачу, например с помощью Task {}, Swift фиксирует все значения, на которые мы ссылаемся в теле задачи. По умолчанию эти фиксации являются сильными.

Это означает:

• Задача сохраняет захваченные значения до завершения задачи.
• Если мы захватываем self сильным захватом, а self также содержит ссылку на задачу, мы создаём цикл сохранения.
• Но важно отметить, что этот цикл длится только в течение времени существования задачи.

Давайте рассмотрим конкретный пример:

класс ImageLoader {
приватное поле task: Задача<Пустота, Никогда>?

func load() {
задача = Задача {
ожидание загрузка изображения()
}
}

func loadImage() async {
// ...
}
}


То, что здесь происходит, это:

• экземпляр ImageLoader строго удерживает задачу (поскольку задача является сохранённым свойством)
• задача строго удерживает своё замыкание
• замыкание строго удерживает self (поскольку мы вызываем downloadImages())

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

ImageLoaderTaskImageLoader

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

Это означает:

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

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

🔹 Там, где циклы сохранения приводят к утечкам памяти

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

1. Мы сохраняем задачу (как свойство).
2. Замыкание задачи сильно привязывает себя к ней.
3. Задача никогда не завершается или завершается намного позже, чем мы ожидаем.

Это может происходить в длительных циклах или при потоковой обработке:

класс MessageListener {
приватное поле task: Задача<Пустота, Никогда>?

func start() {
задача = Задача { [слабый я] в
for await сообщение in await сообщения .stream() {
guard let self else { return }
self.handle(message)
}
}
}

функция обработчик(_ сообщение: Сообщение) { }
}


В этом примере цикл может выполняться бесконечно. Без [weak self] задача сохраняет self в живых, а self сохраняет задачу в живых, образуя классический цикл сохранения.

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

📌 Лучшие вакансии для мобильных разработчиков

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

#АрхитектурныйКод #MiddlePath #Swift
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31
💸 Топ вакансий для мобильных разработчиков за неделю

Middle iOS Developer — от 2 400 до 3 500 $, удалёнка

Android Developer — от $2 000 - $3 500, удалёнка

Senior iOS Developer — от 450 000 ₽, удалёнка

Kotlin Multiplatform/ Android разработчик — от 200 000 до 450 000 ₽, удалёнка/гибрид (Москва)

Senior iOS Developer — от 160 000 до 320 000₽, удалёнка

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

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👨‍💻 Снепшот-тестирование SwiftUI View в legacy-проекте

Снепшот-тестирование — один из немногих надёжных способов контролировать визуальную целостность SwiftUI-компонентов. Но что делать, если ваш проект ограничен Xcode 13.3 и Swift 5.6, а большинство компонентов дизайн-системы обёрнуты в UIViewRepresentable?

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

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

📌 Лучшие вакансии для мобильных разработчиков

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

#свежак #iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
🎅 Секретный Санта для айтишников от Proglib.academy

Весь этот год команда Академии запускала курсы для айтишников. А под Новый год мы запускаем новый курс по ИИ-агентам и ставим под ёлку самый свежий стек 2025 года и обучение проектированию автономных нейросетевых экосистем — от LLM и ReAct-циклов до мультиагентных систем, LangGraph, AutoGen и продакшн-практик.

🎁 Хотим дарить подарки и приглашаем вас поучаствовать в конкурсе:

1️⃣ Упомяните курс Академии у себя в блоге.
2️⃣ Пришлите скрин сюда.
3️⃣ Получите секретный промокод на 10 000 ₽ при оплате любого курса.

Подходит всё — соцсети, блоги, Telegram-каналы от 300 подписчиков и более.

🎄 Акция действует до Нового года.

Win-win, всё как мы любим!
1
📱 Работа с камерой и медиа в мобильном приложении

Хотите добавить съёмку фото и видео в своё приложение? Этот промпт поможет реализовать работу с камерой и медиафайлами правильно и эффективно.

📝 Промпт:

Implement camera and media handling for a mobile app that includes:

— Set up camera permissions and runtime requests
— Implement photo and video capture with device camera
— Add image/video picker from gallery
— Implement image cropping and basic editing
— Handle file compression and format conversion
— Manage storage permissions and file system access
— Add preview and playback functionality


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

— Добавьте Implement custom camera UI with filters and effects для улучшенного UX
— Добавьте Add batch media upload with progress trackin для множественных файлов
— Добавьте Support advanced editing (rotate, adjust, watermark) для профессиональной обработки

📌 Лучшие вакансии для мобильных разработчиков

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

#буст #MiddlePath
Please open Telegram to view this post
VIEW IN TELEGRAM
WANTED: MOBILE MASTERMIND

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

Приметы:

— уверенно пишет под iOS/Android и понимает взаимодействие с backend на Java или Go;
— прошёл через десятки релизов и тысячи баг-репортов;
— способен внятно объяснить принципы мобильной архитектуры;
— нацелен на развитие своего бренда в большой IT-среде.

Суть предложения:

— участие в создании курсов и контента;
— медийный вес и признание коллег;
— вознаграждение за переданный опыт.

Явка с повинной

P.S. Знаешь мобайл-гения? Пришли ему эту ориентировку.
🤖 Топ профессий в IT, которые появились благодаря ИИ

В карточках рассмотрели, какие «экзотические» профессии уже входят в IT, благодаря искусственному интеллекту.

📌 Лучшие вакансии для мобильных разработчиков

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

#MadeInProglib
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM