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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4adec1b17b35b6c0d8389
Download Telegram
😎 Очередной #дайджест по мобильной разработке

✍️ 10 советов по повышению качества вашего iOS-кода — шаблоны расширения для группировки фрагментов кода, создавать переменные и функции с описательными именами и прочие.

✍️ Что происходит, когда вы запускаете программу — как работает процессор, как несколько процессов работают одновременно, зачем нужен libc, как идет взаимодействие с памятью

✍️ Рефакторинг многомодульного проекта с Konsist — как использовать Konsist в реальном проекте

✍️ Продвинутые трюки lldb для Swift — хороший разбор возможностей, вспомогательных методов и их сочетания с брейкпоинтами

✍️ Потокобезопасность swift через - lock — блокировка доступа к переменной во время чтения или записи для гарантированного эксклюзивного доступа
🥰84👏4🔥3😁3
Совместимость версий Gradle и Java: Руководство для начинающих

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

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

#туториал
👍73
🧑‍🎓✍️ Объяснение, понимание и использование размеров SwiftUI

В Swift UI чрезвычайно важная концепция размеров стала несколько загадочной. Установка размеров или их получение не так интуитивно понятны, как можно было бы ожидать.
Эта статья должна сделать более понятным, что творится с размерами в SwiftUI с точки зрения компоновки, помогая вам понять и освоить значения и способы их использования. А еще, это даст более глубокое понимание механизма компоновки SwiftUI, создав копии модификаторов frame и FixedSize view, которые соответствуют протоколу компоновки.

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

#гайд
👍63🔥2
😱💰 Unity вводит новую систему оплаты для разработчиков

C 1 января 2024 года будет введена схема ценообразования принципу «плати за загрузки».

🔹 Плата за Unity Runtime будет взиматься каждый раз, когда игра, отвечающая требованиям, загружается конечным пользователем.
🔹 Для Tier-1 рынков это 20 центов за каждую установку.
🔹 Чтобы попасть под такое налогообложение игра должна достичь пороговых значений - для Unity Personal и Unity Plus это $200,000 дохода и 200,000 установок за все время. После этого за каждые 100,000 загрузок нужно будет платить $20,000.
🔹 Изменения вступают в силу 1 января 2024 года и все начнет считаться только с этого момента.
🔹 Изменения ожидаемо вызвали бурления. Под действие новых тарифов могут попасть пиратские игры, демоверсии, загрузки с нескольких устройств. Кроме того, существует опасение, что злоумышленники смогут манипулировать оплатой, постоянно снова скачивая игры в знак протеста или недовольства.
🔹 Правда, Unity планирует внедрит средства обнаружения мошенничества и позволит разработчикам сообщать о возможных случаях злоупотреблений.
🔹 Отказаться от новой оплаты для уже вышедших или находящихся в стадии релиза игр уже фактически никто не может, так как менять движок (вероятно) будет дороже, чем платить Unity.

И что: все, что в продукте не ваше - всегда находится под угрозой. Сторонний API, движок в один прекрасный момент могут испариться.

#новость
👏6🔥4
Когда использовать Swift Concurrency

🔹 Асинхронные операции. Конкурентность упрощает написание кода для таких операций, как сетевые запросы, файловый ввод-вывод или запросы к БД и управление им.
🔹 Адаптивные пользовательские интерфейсы. Используйте при разработке UI, чтобы он оставался адаптивным при выполнении фоновых задач. Например, извлечение данных из Интернета должно выполняться асинхронно, чтобы избежать блокировки основного потока.
🔹 Параллельная обработка. Если у вас есть задачи, требующие больших вычислительных затрат, которые можно распараллелить, рассмотрите возможность использования конкурентности для распределения рабочей нагрузки между несколькими задачами или потоками, используя преимущества многоядерных процессоров.
🔹 Предотвращение дэдлоков. Конкурентность может помочь избежать дэдлоков, когда нескольким задачам требуется одновременный доступ к общим ресурсам, используя структурированную конкурентность и акторы.

Подробнее

#туториал
8
🤖📄 ChatGPT: эффективная суммаризация с помощью LLM

В этой статье разберём суммаризацию с помощью LLM на примере обработки отзывов в e-commerce.

Читать
👍54🔥2
😎 Очередной #дайджест по мобильной разработке

✍️ SDK Upgrade Assistant — утилита, которая помогает быстро обновить targetSdkVersion в проекте

✍️ Apple’s CDN — теперь все решается через кэширование файл AASA

✍️ SKIE — инструмент для разработчика или команды, вызывающей код Kotlin из Swift.

✍️ Полиморфизм и Kotlinx.Serialization — инструменты для обработки наиболее распространенных форм полиморфных данных

✍️ Создание Media-Rich Android приложений на MediaCodec и Vendor Extensions — как использоваться класс MediaCodec, чтобы разблокировать дополнительные возможности на устройствах Android
🔥62🥰2
🌊🌊 Как FlowMVI изменил судьбу нашего проекта

Автор, он же техлид, поделился опытом работы с MVVM и какие ошибки всплыли у него и его команды в процессе.

Вот некоторые из них:

Передача нескольких параметров в @Composable
Передача лямбд в @Composable, которые фиксировали нестабильные параметры
Наблюдение за состоянием в non-lifecycle-aware
Stateful события
Дампинг всего во ViewModel и еще много чего неприятного

Решилось все с помощью FlowMVI 2.0, а как именно — читайте далее

#обучалка
👍73
🎓💼 ТОП-9 не самых очевидных компаний для стажировки в ИТ

Везде просят опыт работы... Но где его взять? Как раз об этом сейчас и расскажем!

Читать
7👍1
⚡️📈📊 Топ быстрорастущих приложений в России в сентябре

1. Приложения для учебы — ClassDojo и Dnevnik как средства управления учащимися, Brain Out Test & Math Games и Busuu как обучающие приложения.

2. Night Sky.

3. Goodnotes 6 — лучшее приложение для iPad 2022, цифровой блокнот с большим набором дополнительных функций. По данным AppMagic, приложение на iOS заработало в России $68K.

4. Из других занятных приложений в топе быстрорастущих — Falla-Make new friends, китайское приложений для голосовых чатов, совместных игр, знакомств.

#новость
👍43
🤔 PWA vs Native — как выбрать

Что такое PWA

Progressive Web Apps (PWA) или прогрессивные веб-приложения — это не какой-то фреймворк или SDK. Это философия того, как надо строить современные веб-приложения. Говоря по-простому, это режим отображения веб-сайта, который можно запускать в виде приложения на смартфоне. Поэтому PWA могут работать на любом устройстве, будь то компьютер, планшет или смартфон.

Преимущества прогрессивных приложений (PWA)

Кросс-платформенность
Более быстрое развертывание
Производительность приложения
Пуш-уведомления
Независимость от сторов

Минусы PWA

Один из главных недостатков PWA заключается в том, что они могут быть медленнее, чем обычные веб-сайты. Это происходит из-за того, что PWA должны загружать все ресурсы, необходимые для работы приложения, включая шрифты, изображения и JavaScript-файлы.
Некоторые устройства могут не поддерживать определенные функции PWA, такие как пуш-уведомления или офлайн-режим. Также некоторые браузеры могут не поддерживать возможности PWA.
PWA приложения обеспечивают безопасность за счет использования HTTPS-протокола, манифеста веб-приложения и Service Worker`ов.

Преимущества нативных приложений перед PWA

Максимальная производительность и функциональность
Полный доступ к функциям устройства
Лучший пользовательский опыт
Доступ к магазинам приложений
Безопасность в приложение

Минусы нативных приложений в сравнении с PWA

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

Что выбрать?

👉 У вас ограниченное время и бюджет. PWA требуют меньше времени и средств для разработки и публикации.
👉 Вы хотите простое приложение для ваших пользователей. PWA не требует загрузки и позволяет взаимодействовать с пользователями с помощью пуш-уведомлений.
👉 Вам нужна независимость от платформы. PWA собирается под любую платформу Android и iOS, используя браузер. Поэтому неважно, с какой платформы было установлено приложение.
👉 В остальных случаях лучше выбрать нативную разработку или рассмотреть кросс-платформу.

#гайд
9👍3👾2🥰1🥱1
😱🤯😳 Как я стал инженером с зп 800к$

В 2021 году, в последний полный год, который автор проработал в Meta, он заработал более 800 000 долларов. Он рассказывает о своей компенсации и о том, как она менялась каждый год.

Он присоединился к Facebook в 2017 году с общим вознаграждением в размере 400 тысяч долларов, и за следующие 4,5 года его вознаграждение более чем удвоилось.

Вот его общая годовая компенсация за 4,5 года работы в Meta:

2017: $390,000
2018: $370,000
2019: $504,000
2020: $703,000
2021: $823,000 🙀

Но его путешествие не было прямым путем к подсчету 100-долларовых купюр. В течение первых 6 месяцев после того, как он присоединился к Facebook, он был измотан тревогой. Будучи старшим инженером, автор испытывал синдром самозванца, трудности в адаптации к культуре и инструментам компании, и в течение первых нескольких месяцев он столкнулся с реорганизацией. Далее его история успешного успеха.

#холивар
👍103🔥2
Дефолтный аватар как в Telegram

Видео для начинающих iOS разработчиков с использованием такого стэка:

🔹 UITableView
🔹 CustomTableViewCell
🔹 UIAlertController
🔹 String extensions

01:26 - CustomTableView
02:40 - CustomTableViewCell
08:46 - CustomTableView
12:54 - ViewController
17:23 - AlertManager
23:44 - Pass data
27:40 - String extension

#туториал
👍92🔥2
Compose Multiplatform для iOS и Android

Бизнес хочет быстро запускаться, быстро проводить эксперименты — нужно уметь не терять время на разработку одинакового UI.
Правка багов только на одной стороне, так как верстка сразу на iOS & Android.
Time to market сокращается.

📌 Для кого доклад: iOS и Android-разработчики всех уровней. Также будет полезно веб-разработчикам.

📺 Смотреть

#видео
👍72
😎 Очередной #дайджест по мобильной разработке

🔺 Поиск мотивации. Ментор же решит всё. Что мне делать — разбор писем от подписчиков на тему проблем с мотивацией и развитием

🔺 Есть ли смысл начинать писать мобильное приложение не на Kotlin Multiplatform и Compose Multiplatform? — размышления о проблемах при раздельной нативной разработке, KMP и CMP

🔺 Новый инструмент для тестирования макросов в Swift — позволяет проверить все аспекты макросов, включая диагностику, исправления и многое другое

🔺 Android Studio for Platform — версия IDE на основе AOSP при использовании Soong. Поддерживается C++, Java и Kotlin, работает на Linux

🔺 Уровни доступа в Swift с примерами — ознакомление с уровнями доступа, разбор нюансов и изучение реальных примеров того, когда и как их эффективно использовать
24👍4🔥1
🗜Как отслеживать аномалии метрик производительности приложения с помощью перф-тестов

Автор (руководитель разработки iOS-версии приложения Яндекс) подробно рассказал о замерах метрик производительности на стороне клиента. Тезисно:

Плюсы и минусы разных способов получения данных
Откуда берутся проблемы в перф-тестах и как их избежать
Почему полезно детектировать аномалии не только в плане ухудшения, но и улучшения
Из чего состоит перф-ферма Яндекса для iOS и как она выглядит

Читать статью.
🔥51👍1
💪🌊🌊 Kotlin Flow: простая, но мощная реализация

Flow — это простая, но мощная реализация для асинхронного программирования на Kotlin и не что иное, как корутина, возвращающая несколько результатов или два интерфейса и их функции, вызывающие друг друга. Это позволяет разработчикам писать структурно параллельный, асинхронный и неблокирующий код в последовательном стиле.

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

Подробнее

#гайд
🔥84🥰1😁1🥱1
🕹️🎯 ANR internals: touch dispatching через иерархию представлений

ANR триггеры

Как возникает ошибка "Application Not Responding" (ANR)?
Согласно документации Android ANR:

Когда UI поток приложения для Android блокируется слишком надолго, возникает ошибка "Приложение не отвечает" (ANR).

В то время как блокировка UI потока является причиной большинства ANR, ОС Android не заботится о том, что в это время делает основной поток вашего приложения. Вместо этого у него есть ожидания относительно того, сколько времени приложениям потребуется для обработки нескольких конкретных событий. И означает, что приложение не реагирует на систему, а не на пользователя.

Продолжение здесь

#туториал
👍61🔥1