Прививка от созависимости. Зачем нужен DI и как он работает в iOS-приложениях hh.ru
В статье мы рассмотрим основы DI, поговорим о том, какую проблему решает этот принцип, окинем общим взглядом возможные варианты реализации: паттерны и популярные библиотеки. Подробно рассмотрим схему, по которой работает DI в многомодульном iOS проекте hh.ru. В конце статьи будет разобран пример простого приложения с аналогичным подходом к инъекции.
Статья: https://habr.com/ru/companies/hh/articles/783002/
Платформа: iOS
В статье мы рассмотрим основы DI, поговорим о том, какую проблему решает этот принцип, окинем общим взглядом возможные варианты реализации: паттерны и популярные библиотеки. Подробно рассмотрим схему, по которой работает DI в многомодульном iOS проекте hh.ru. В конце статьи будет разобран пример простого приложения с аналогичным подходом к инъекции.
Статья: https://habr.com/ru/companies/hh/articles/783002/
Платформа: iOS
CodeEdit - это редактор кода, созданный сообществом для сообщества, написанный для сециально macOS. Среди возможностей - подсветка синтаксиса, завершение кода, поиск и замена по всему проекту, сниппеты, терминал, запуск задач, отладка, интеграция с git, code review, расширения и многое другое.
Цель авторов - сохранить легковесный интерфейс, похожий на TextEdit, но при этом иметь возможность при необходимости масштабировать функциональность до редактора, сравнимого с Xcode.
CodeEdit на GitHub: https://github.com/CodeEditApp/CodeEdit
Платформа: Swift/macOS
⭐️: 19.5K
Цель авторов - сохранить легковесный интерфейс, похожий на TextEdit, но при этом иметь возможность при необходимости масштабировать функциональность до редактора, сравнимого с Xcode.
CodeEdit на GitHub: https://github.com/CodeEditApp/CodeEdit
Платформа: Swift/macOS
⭐️: 19.5K
🔥3💩1
ATHYLPS: пет-проект, приносящий радость от экспериментов с технологиями
Мое новое интервью с Сергеем Опиваловым, Senior Software инженером в Gradle. Обсуждаем его пет-проект — приложение ATHYLPS, тренажер для математических навыков в покере.
Интервью: https://apptractor.ru/info/interview/athylps.html
Платформа: кроссплатформа
Мое новое интервью с Сергеем Опиваловым, Senior Software инженером в Gradle. Обсуждаем его пет-проект — приложение ATHYLPS, тренажер для математических навыков в покере.
Интервью: https://apptractor.ru/info/interview/athylps.html
Платформа: кроссплатформа
❤1
Compose Drag And Drop - это библиотека, которая позволяет легко добавить функциональность перетаскивания в ваши проекты Jetpack Compose или Compose Multiplatform.
Compose Drag And Drop на GitHub: https://github.com/MohamedRejeb/compose-dnd
Платформа: Android
⭐️: 63
Compose Drag And Drop на GitHub: https://github.com/MohamedRejeb/compose-dnd
Платформа: Android
⭐️: 63
Видео и подкасты за неделю:
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
В комментариях поделитесь интересным видео, который вы посмотрели!
•
(iOS Ru)
SwiftData: новый persistence framework от Apple•
(iOS En)
Simple, Clean Empty States in SwiftUI - ContentUnavailableView•
(iOS En)
SwiftUI Parallax Scroll Effect•
(iOS En)
SwiftUI Pie & Donut Charts•
(iOS En)
SwiftData Storing Images and Bug Fixes•
(iOS En)
SwiftUI App Theme Switcher - Dark Mode Switch•
(And Ru)
Android Auto: как Organic Maps переносили в машину•
(And Ru)
Сколько памяти нужно для сборки: Android-разработчикам о JVM•
(And Ru)
Добавь немного сахара в Espresso или как писать UI тесты под Android•
(And En)
I've Built an Android App With Google's New AI Gemini•
(And En)
Top 3 Hacks to Remove LazyColumn Lag in Jetpack Compose•
(Crs En)
Best Practices for Developing Amazing Kotlin Multiplatform Apps with Pamela Hill•
(Dev Ru)
Как работает видеостриминг в мобильных приложениях•
(Dev Ru)
Sber ML Meetup: AutoML, трейдинг и мультимодальность•
(Dev Ru)
Как мы ВКонтакте ускоряем получение результатов тестов•
(Dev Ru)
Тестируем с широко закрытыми глазами•
(Dev En)
Microsoft Azure Fundamentals Certification CourseВ комментариях поделитесь интересным видео, который вы посмотрели!
AppTractor
SwiftData: новый persistence framework от Apple
Выделим плюсы, минусы и сделаем вывод — хотим ли затаскивать SwiftData в свои проекты.
This media is not supported in your browser
VIEW IN TELEGRAM
AnimatedBottomBarCompose - это библиотека Jetpack Compose, которая упрощает создание стильных нижних навигационных панелей с настраиваемыми анимациями. Она позволяет легко интегрировать привлекательные навигационные панели в ваше приложение для Android, улучшая пользовательский опыт. Библиотека позволяет выбрать один из предопределенных стилей или создать собственный, сделать анимацию, настроить цвета, иконки и анимацию для соответствия стилю вашего приложения.
AnimatedBottomBarCompose на GitHub: https://github.com/canopas/compose-animated-navigationbar
Платформа: Android
⭐️: 57
AnimatedBottomBarCompose на GitHub: https://github.com/canopas/compose-animated-navigationbar
Платформа: Android
⭐️: 57
А вы знаете, что новые каталоги строк в Xcode позволяют вам варьировать переводы в зависимости от устройства?
Платформа: iOS
Платформа: iOS
Зачем и как в Альфе была написана библиотека для скриншот тестов под Android
В статье рассказывают о проблемах и неочевидных моментах скриншот тестов в контексте Android, и погружают нас в то, как это может работать (и как это сделали в Альфе).
Статья: https://habr.com/ru/companies/alfa/articles/783602/
Платформа: Android
В статье рассказывают о проблемах и неочевидных моментах скриншот тестов в контексте Android, и погружают нас в то, как это может работать (и как это сделали в Альфе).
Статья: https://habr.com/ru/companies/alfa/articles/783602/
Платформа: Android
SwiftEasyPop - это легкая и простая в использовании библиотека SwiftUI для отображения оповещений и тостов в приложениях. Из особенностей - простой и интуитивно понятный API для отображения оповещений и тостов, высокая настраиваемость, поддержка пользовательских иконок, цветов и сообщений, совместимость с iOS 14.0+, поддерживает светлый и темный режим.
SwiftEasyPop на GitHub: https://github.com/tunahancelik/SwiftEasyPop
Платформа: iOS
⭐️: 7
SwiftEasyPop на GitHub: https://github.com/tunahancelik/SwiftEasyPop
Платформа: iOS
⭐️: 7
Принципы функционального программирования — Обучающий курс Университета Карнеги-Меллона
Пройдя этот курс, вы поймете, как функциональное программирование помогает улучшить нашу способность общаться как программистов - с помощью описательного, модульного и сопровождаемого кода.
Описание: https://apptractor.ru/learn/printsipy-funktsionalnogo-programmirovaniya-obuchayuschiy-kurs-universiteta-karnegi-mellona.html
Платформа: программирование/обучение
Пройдя этот курс, вы поймете, как функциональное программирование помогает улучшить нашу способность общаться как программистов - с помощью описательного, модульного и сопровождаемого кода.
Описание: https://apptractor.ru/learn/printsipy-funktsionalnogo-programmirovaniya-obuchayuschiy-kurs-universiteta-karnegi-mellona.html
Платформа: программирование/обучение
Влияние AnyView на производительность SwiftUI
AnyView — это представление без типа (type-erased), которое может пригодиться в контейнерах SwiftUI, состоящих из разнородных представлений. В таких случаях вам не нужно указывать конкретный тип всех представлений, которые могут находиться в иерархии. При таком подходе можно избежать использования дженериков, что упрощает код. Однако его использование может сопровождаться снижением производительности. Как известно, SwiftUI полагается на тип представлений для вычисления разниц (диффинга). Если это AnyView (который, по сути, является оберткой), SwiftUI будет сложно определить идентичность представления и его структуру, и он просто всегда будет перерисовывать всё представление, что не очень эффективно.
В этой статье на примере Stream SDK отслеживаем производительность ленты (заминки анимации и FPS) - без AnyView и с ним.
Статья: https://apptractor.ru/info/articles/anyview.html
Платформа: iOS
AnyView — это представление без типа (type-erased), которое может пригодиться в контейнерах SwiftUI, состоящих из разнородных представлений. В таких случаях вам не нужно указывать конкретный тип всех представлений, которые могут находиться в иерархии. При таком подходе можно избежать использования дженериков, что упрощает код. Однако его использование может сопровождаться снижением производительности. Как известно, SwiftUI полагается на тип представлений для вычисления разниц (диффинга). Если это AnyView (который, по сути, является оберткой), SwiftUI будет сложно определить идентичность представления и его структуру, и он просто всегда будет перерисовывать всё представление, что не очень эффективно.
В этой статье на примере Stream SDK отслеживаем производительность ленты (заминки анимации и FPS) - без AnyView и с ним.
Статья: https://apptractor.ru/info/articles/anyview.html
Платформа: iOS
Что такое Функциональное программирование
Функциональное программирование — это парадигма программирования, в которой программы строятся из функций. Функции — это блоки кода, которые принимают входные данные и возвращают выходные данные. В функциональном программировании функции не изменяют состояние программы, а просто вычисляют значения.
Проще говоря, функциональное программирование — это способ написания программ, который похож на математические уравнения. В математике мы можем решать задачи, используя уравнения, которые описывают отношения между переменными. В функциональном программировании мы можем решать задачи, используя функции, которые описывают отношения между данными.
Статья: https://apptractor.ru/info/articles/chto-takoe-funktsionalnoe-programmirovanie.html
Платформа: программирование
Поставьте 👍, если хотите почитать больше о функциональном программировании.
Функциональное программирование — это парадигма программирования, в которой программы строятся из функций. Функции — это блоки кода, которые принимают входные данные и возвращают выходные данные. В функциональном программировании функции не изменяют состояние программы, а просто вычисляют значения.
Проще говоря, функциональное программирование — это способ написания программ, который похож на математические уравнения. В математике мы можем решать задачи, используя уравнения, которые описывают отношения между переменными. В функциональном программировании мы можем решать задачи, используя функции, которые описывают отношения между данными.
Статья: https://apptractor.ru/info/articles/chto-takoe-funktsionalnoe-programmirovanie.html
Платформа: программирование
Поставьте 👍, если хотите почитать больше о функциональном программировании.
👍4🤮1
Compose Stacked Snackbar - мультиплатформенная библиотека (Android, iOS и десктопы) для отображения уведомлений (снеков) внизу экранов. Имеет встроенные типы (ошибка, предупреждение, информация, успех), поддерживает кастомные уведомления, сами они свайпятся вправо или влево для закрытия или можно привязать действия, есть анимация, автоматическое удаление.
Compose Stacked Snackbar на GitHub: https://github.com/rizmaulana/compose-stacked-snackbar
Платформа: Android/кроссплатформа
⭐️: 16
Compose Stacked Snackbar на GitHub: https://github.com/rizmaulana/compose-stacked-snackbar
Платформа: Android/кроссплатформа
⭐️: 16
Perception - инструменты наблюдения для платформ, которые официально не поддерживают Observation. Библиотека предоставляет инструменты, которые имитируют @Observable и withObservationTracking в Swift 5.9, но при этом они бэкпортированы для работы на iOS 13, macOS 10.15, tvOS 13 и watchOS 6. Это означает, что вы можете начать использовать преимущества инструментов наблюдения Swift 5.9 уже сегодня, даже если вы не можете отказаться от поддержки старых платформ Apple. Использование инструментов этой библиотеки работает почти так же, как и использование официальных инструментов.
Perception на GitHub: https://github.com/pointfreeco/swift-perception
Платформа: iOS
⭐️: 191
Perception на GitHub: https://github.com/pointfreeco/swift-perception
Платформа: iOS
⭐️: 191
Традиционная пятничная подборка - видео и подкасты за неделю:
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Что вы посмотрели/послушали интересного про разработку? Киньте ссылку в комментарии.
🌐 AppFiles
•
(iOS Ru)
Как делать браузер под iOS и управлять большой командой•
(iOS Ru)
Топ-10 вопросов по iOS: cобеседование с разбором ответов и материалами•
(iOS Ru)
Swift-уроки: PropertyWrappers — обертки свойств•
(iOS En)
Detecting Sensitive Content in your own iOS app•
(iOS En)
SwiftUI Custom File Extensions | Import & Export•
(iOS En)
How to write Unit Tests for Code Performance in Xcode•
(iOS En)
How To Use Context Menus In Xcode 15 (SwiftUI)•
(iOS En)
Customized Animated Paywalls - RevenueCat•
(And Ru)
Рефакторинг аналитики в многомодульном Android приложение для ускорения сборки•
(And Ru)
Разработка Карт и первый коммит с KMM в Яндексе•
(And Ru)
Как мы создавали дизайн систему на Jetpack Compose•
(And Ru)
Из 1С в Android-разработчики? Кодревью кода на Kotlin•
(And En)
The FASTEST Local Search - Introduction to AppSearch on Android•
(And En)
The #1 Thing Android Developers Ignore When Testing Their App•
(And En)
Top 3 Secret Jetpack Compose Modifiers I Bet You Didn’t Know•
(And En)
Digging into Android System Services•
(And En)
What's up with Android's back?•
(Dev Ru)
Agile на масштабе. 100 команд. планирование, синхронизация, прозрачность•
(Dev En)
Data Analyst Bootcamp for Beginners (SQL, Tableau, Power BI, Python, Excel, Pandas, Projects, more)•
(Mrk Ru)
Темные паттерны в UX: как приложения нами манипулируютЧто вы посмотрели/послушали интересного про разработку? Киньте ссылку в комментарии.
🌐 AppFiles
AppTractor
Как делать браузер под iOS и управлять большой командой
В гостях: Павел Воробкалов, руководитель iOS-разработки Супераппа Яндекса.
👍1
Вопросы с собеседований: Для чего нужны фрагменты, если есть активити
Давайте представим, что ваше мобильное приложение - это книга, а активити и фрагменты - это страницы в этой книге.
Активити (Activity):
• Активити - это целая страница с информацией или задачей.
• Если у вас есть несколько страниц (активити), то каждая страница представляет отдельный экран в вашей книге.
Фрагмент (Fragment):
• Фрагмент - это как раздел на странице, небольшая часть информации или задачи.
• Вы можете использовать фрагменты для создания различных частей на своей странице (активити), делая ее более интересной и гибкой.
• Если вам нужно что-то изменить или добавить на странице, вы можете обновить только этот фрагмент, не трогая остальные части.
Так почему фрагменты важны, если у нас уже есть активити?
• Гибкость в дизайне: Фрагменты позволяют легко изменять и улучшать отдельные части экрана без изменения всего экрана (активити).
• Переиспользование: Вы можете использовать один и тот же фрагмент на разных страницах (в разных активити), делая ваш код более удобным и переиспользуемым.
• Многозадачность: Фрагменты помогают в создании сложных экранов, например, с разными частями информации, которые могут обновляться независимо друг от друга.
Так что, вместо того чтобы иметь одну большую страницу (активити), вы можете разделить ее на много маленьких частей (фрагменты), чтобы сделать вашу книгу (приложение) более удобной и управляемой.
Подробнее: https://apptractor.ru/info/techhype/voprosy-s-sobesedovaniy-dlya-chego-nuzhny-fragmenty-esli-est-aktiviti.html
Платформа: Android
Давайте представим, что ваше мобильное приложение - это книга, а активити и фрагменты - это страницы в этой книге.
Активити (Activity):
• Активити - это целая страница с информацией или задачей.
• Если у вас есть несколько страниц (активити), то каждая страница представляет отдельный экран в вашей книге.
Фрагмент (Fragment):
• Фрагмент - это как раздел на странице, небольшая часть информации или задачи.
• Вы можете использовать фрагменты для создания различных частей на своей странице (активити), делая ее более интересной и гибкой.
• Если вам нужно что-то изменить или добавить на странице, вы можете обновить только этот фрагмент, не трогая остальные части.
Так почему фрагменты важны, если у нас уже есть активити?
• Гибкость в дизайне: Фрагменты позволяют легко изменять и улучшать отдельные части экрана без изменения всего экрана (активити).
• Переиспользование: Вы можете использовать один и тот же фрагмент на разных страницах (в разных активити), делая ваш код более удобным и переиспользуемым.
• Многозадачность: Фрагменты помогают в создании сложных экранов, например, с разными частями информации, которые могут обновляться независимо друг от друга.
Так что, вместо того чтобы иметь одну большую страницу (активити), вы можете разделить ее на много маленьких частей (фрагменты), чтобы сделать вашу книгу (приложение) более удобной и управляемой.
Подробнее: https://apptractor.ru/info/techhype/voprosy-s-sobesedovaniy-dlya-chego-nuzhny-fragmenty-esli-est-aktiviti.html
Платформа: Android
🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
RichEditor - WYSIWYG редактор для Jetpack Compose. Пока, правда, редактор предлагает только жирный, наклонный, подчеркнутый шрифты и заголовки.
RichEditor на GitHub: https://github.com/canopas/rich-editor-compose
Платформа: Android
⭐️: 24
RichEditor на GitHub: https://github.com/canopas/rich-editor-compose
Платформа: Android
⭐️: 24
Android-разработка в 2023 году: год эволюции
Давайте (совсем поверхностно) вспомним некоторые ключевые фичи и вехи 2023 года, которые упростили Android-разработку и облегчили жизнь разработчиков.
• Jetpack Compose 1.5.7
• Studio Bot
• Android 14 (“Upside Down Cake”)
• Android Studio Hedgehog
• Jetpack Glance
• Библиотека Telecom Jetpack
• Библиотека Jetpack Media3
• Менеджер учетных данных
• Kotlin DSL
• Gemini
Статья: https://apptractor.ru/info/articles/android-2023.html
Платформа: Android
Давайте (совсем поверхностно) вспомним некоторые ключевые фичи и вехи 2023 года, которые упростили Android-разработку и облегчили жизнь разработчиков.
• Jetpack Compose 1.5.7
• Studio Bot
• Android 14 (“Upside Down Cake”)
• Android Studio Hedgehog
• Jetpack Glance
• Библиотека Telecom Jetpack
• Библиотека Jetpack Media3
• Менеджер учетных данных
• Kotlin DSL
• Gemini
Статья: https://apptractor.ru/info/articles/android-2023.html
Платформа: Android
❤1🤔1
Google удалил курс Android Basics with Kotlin
Google удалил курс Android Basics with Kotlin с сайта, теперь вместо него доступен только Android Basics with Compose.
Компания ясно дает понять, что если вы начинаете новое приложение, то должны делать его в Compose, а если вы учитесь, то должны изучать Compose. Это не значит, что вещи, написанные на XML и системе представлений, перестанут работать, это просто значит, что вам не стоит изучать это, если вы начинаете работать с Android сейчас.
Обсуждение на Reddit: https://www.reddit.com/r/androiddev/comments/194r5xm/google_just_removed_their_android_basics_with/
Платформа: Android
Google удалил курс Android Basics with Kotlin с сайта, теперь вместо него доступен только Android Basics with Compose.
Компания ясно дает понять, что если вы начинаете новое приложение, то должны делать его в Compose, а если вы учитесь, то должны изучать Compose. Это не значит, что вещи, написанные на XML и системе представлений, перестанут работать, это просто значит, что вам не стоит изучать это, если вы начинаете работать с Android сейчас.
Обсуждение на Reddit: https://www.reddit.com/r/androiddev/comments/194r5xm/google_just_removed_their_android_basics_with/
Платформа: Android
Reddit
Google just removed their Android basics with kotlin course. Is there any way to access it : r/androiddev
114 votes, 94 comments. 238K subscribers in the androiddev community. News for Android developers with the who, what, where, when and how of the…
❤1
This media is not supported in your browser
VIEW IN TELEGRAM
ScrollView с прилипающим выделенным элементом на SwiftUI
Внедрение новой технологии - это всегда увлекательно и интересно, но стоит признать, что иногда довольно простая на первый взгляд задача может серьезно озадачить пушистый разработческий мозг.
Статья: https://habr.com/ru/articles/784768/
Платформа: iOS
Внедрение новой технологии - это всегда увлекательно и интересно, но стоит признать, что иногда довольно простая на первый взгляд задача может серьезно озадачить пушистый разработческий мозг.
Статья: https://habr.com/ru/articles/784768/
Платформа: iOS