Библиотека мобильного разработчика | Android, iOS, Swift, Retrofit, Moshi, Chuck
9.82K 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
🥷💪 Продвинутая анимация SwiftUI – Часть 1: Paths

В этой статье рассматриваются продвинутые методы создания Swift UI анимации пользовательского интерфейса. Автор рассказывает о протоколах Animatable, animatableData, GeometryEffect и AnimatableModifier.

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

Explicit vs. Implicit

В Swift UI есть два типа анимации — Explicit и Implicit. Implicit анимации — которые указываются с помощью модификатора .animation(). Всякий раз, когда во вью изменяется анимируемый параметр, Swift UI будет анимировать от старого к новому значению. Некоторыми анимируемыми параметрами являются size, offset, color, scale и т.д.

Explicit — это те, которые указаны с помощью Animation { ... }. Будут анимированы только те параметры, которые зависят от значения, измененного внутри Animation.

Как работает анимация

За всеми анимациями SwiftUI стоит Animatable. При анимировании Swift UI каждый раз изменяет параметр анимации, переходя от исходного значения к конечному.

Предположим, создается линейная анимация для opacity. Нужно перейти с 0,3 на 0,8. Фреймворк будет многократно восстанавливать вьюшку, изменяя opacity небольшими шагами. Поскольку opacity выражается в Double, и он соответствует VectorArithmetic, SwiftUI может интерполировать требуемые значения opacity.

Подробности и реализация вас ждут тут

#обучалка
👍53🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
#memes

Понапридумывают своих драгонКрю, телеграмов, инстраграмов...
Учитесь! 💪
😁13🤔32
🤖🏞️ Автоматизируем тестирование скриншотов для Compose через reflection

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

Showkase

Одним из способов автоматизации тестирования скриншотов является использование Showkase, библиотеки Airbnb, созданной для создания браузера компонентов, который дополнительно позволяет автоматически тестировать все методы, помеченные @Preview, с помощью Paparazzi. Этот способ требует указания Showkase в качестве зависимости для каждого модуля, в котором есть любые превью, которые нужно покрыть тестами. Поскольку Showkase основан на генерации кода, это увеличит время сборки для всех этих модулей. Таким образом, использование его только для скриншот-тестов может оказаться не лучшим решением, поскольку это не его основная функция.

Reflection

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

Предлагаемое решение может работать с другими библиотеками тестирования скриншотов. Если вам интересны альтернативы — вот вам еще вариант.

Далее вас ждут реализация примера и немного кода.

#туториал
🥰11😁98👍8👏8
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

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

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
👍6
🧑‍🎓 Best Practices для Compose Navigation в мультимодульном проекте

В подопытном проекте есть Drawer navigation с экранами Articles, Settings и About. В многоэкранном проекте у каждого экрана должен быть свой отдельный модуль. В примере автор создал три отдельных модуля для каждого экрана и использовал их в модуле приложения для реализации базовой навигации.

Стартовый проект

Есть стартовый проект по ссылке Github, откуда можно загрузить код и получить проект из папки starter. Репозиторий Github также содержит final folder, который является окончательным проектом Navigation Compose.

Структура проекта

Чтобы получить общее представление о структуре модуля starter project: у него есть отдельный модуль для каждого экрана, и все эти модули добавляются как зависимости в app module.

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

#туториал
👍3👾21
🤔 #дайджест полезностей для мобильного разработчика

✳️ Миграция конфигурации сборки с Groovy на Kotlin — материал написан с акцентом на проекты Android на этапе перехода на Kotlin DSL

✳️ Unseen Dangers — скрытые угрозы безопасности мобильных приложений в библиотеках Android

✳️ Автоматизация сборок Android с помощью GitHub Actions — процесс настройки рабочего воркфлоу для создания отладочной версии приложения и релизной сборки

✳️ Добавляем кастомные Google Fonts в приложение — полный перечень действий для добавления шрифтов с использованием Jetpack Compose

✳️ Разбираемся с Ignite — что такое Ignite, почему его стоит выбирать и где применять
👍11🔥11🎉9👏86
Нужно вывести каждое число в отдельной строке с указанием ее порядкового номера. Какой метод без var или val допускает итерацию со значением и с его позицией?
Anonymous Quiz
66%
.forEachIndexed()
17%
.forEach()
6%
.forIndexes()
11%
.withIndex()
🥱65
Самые полезные каналы для программистов в одной подборке!

Сохраняйте себе, чтобы не потерять 💾

🔥Для всех

Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы

🐘PHP

Библиотека пхпшника
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты

🐍Python

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

Java

Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков

👾Data Science

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

🦫Go

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

🧠C++

Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++

💻Другие профильные каналы

Библиотека фронтендера
Библиотека шарписта
Библиотека мобильного разработчика
Библиотека хакера
Библиотека devops’a
Библиотека тестировщика

💼Каналы с вакансиями

Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
Вакансии по DevOps & SRE
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности

📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈

🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT

Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook
🔸Instagram
6👍1
#memes

На собеседовании:
У нас отличная документация на проекте!

Документация на проекте:
😁192👍2🌚2
🚀🚀 Кастомные уведомления в приложении

В этом видео автор покажет, как создавать пользовательские уведомления в приложении, которые будут органично сочетаться с уведомлениями в приложении, всплывающие в Dynamic Island. Кода много, код понятный и интересный — рекомендуем 🔥👍

Смотреть

#видео
👍52🥰1
🏃🏃‍♂️ Как ускорить сборку проекта и не остановить разработку

Видос о том, как спикер применил в iOS-проектах предкомпилированные зависимости в виде XCFramework с использованием CocoaPods, fastlane, GitLab CI и ускорил холодную сборку до 2 раз.

Содержание:

6:59 XCFramework
11:46 Публикация XCFramework с CocoaPods
13:14 Builder
14:07 Deploy_xcframework
15:21 Alamofire:podspec
16:45 Transform_podspec
17:59 Интеграция
19:46 Семантическое версионирование
21:09 Обратная совместимость
26:46 Ограничения и советы
32:41 Практика
35:41 Готовый проект

#видео
7🥰2
🍭🍭 Улучшения в отладке Swift 5.9

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

🍕 Более быстрый контроль переменных с помощью p и po
LLDB предоставляет сокращенный псевдоним команды p для проверки переменных и po для вызова свойства debugDescription объектов.

🍕 Поддержка параметров generic в выражениях
LLDB теперь поддерживает обращение к параметрам generic при вычислении выражения. Например:
func use(_ t: T) {
print(t) // break here
}

use(5)
use("Hello!")

При запуске po T.self, когда он перестанет использоваться, выведет Int при входе через первый вызов и String во втором.

🍕 Fine-grained информация для скоупа

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

#новость
👍53
🤔 #дайджест полезностей для мобильного разработчика

✳️ Kotlin и Virtual Threads — Kotlin на JDK 21 backend стал поддерживать виртуальные потоки

✳️ Flutter SDK с поддержкой платформы ОС Аврора — т. к. Flutter SDK для ОС Аврора не состоит в upstream, установка происходит отличным от основного метода установки

✳️ Async / Await Coroutines — как с помощью KMP-NativeCoroutines использовать собственные решения Swift (Async await, Combine или RxSwift) для асинхронного кода Kotlin

✳️ Gradle Release Notes — Java 21 теперь поддерживается для компиляции, тестирования и запуска таких проектов, а еще несколько полезных фиксов

✳️ Измеряем sequence — видос о том, насколько корректно правило CouldBeSequence, и в каких случаях использование sequence дает реальный выигрыш
🥰2214🔥11👏8👍4
👩‍💻 Женщины в ИТ: проблемы и преимущества сложной профессии

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

Читать статью
🥱109🥰2
This media is not supported in your browser
VIEW IN TELEGRAM
#memes

Когда разработчику говорят, что с удаленки нужно выйти в офис
👍17😁113
🍏📚 ТОП-7 книг по Swift и iOS-разработке в 2023 году

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

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

#книги
👍64😁2