Новый язык дизайна Apple представил эффект светящейся анимированной обводки, которая изящно и динамично подсвечивает формы и компоненты. Давайте рассмотрим, как воссоздать этот эффект в SwiftUI с помощью многоразовых расширений.
🔹 Расширения для View
extension View {
@MainActor
func intelligenceBackground<S: InsettableShape>(in shape: S) -> some View {
background(shape.intelligenceStroke())
}
@MainActor
func intelligenceOverlay<S: InsettableShape>(in shape: S) -> some View {
overlay(shape.intelligenceStroke())
}
}🔹 Базовая реализация для фигур
extension InsettableShape {
@MainActor
func intelligenceStroke(
lineWidths: [CGFloat] = [6, 9, 11, 15],
blurs: [CGFloat] = [0, 4, 12, 15],
updateInterval: TimeInterval = 0.4
) -> some View {
IntelligenceStrokeView(
shape: self,
lineWidths: lineWidths,
blurs: blurs,
updateInterval: updateInterval
)
.allowsHitTesting(false)
}
}🔹 Рендеринг слоёв свечения
private struct IntelligenceStrokeView<S: InsettableShape>: View {
let shape: S
let lineWidths: [CGFloat]
let blurs: [CGFloat]
let updateInterval: TimeInterval
@Environment(\.accessibilityReduceMotion) private var reduceMotion
@State private var stops: [Gradient.Stop] = .intelligenceStyle
var body: some View {
let layerCount = min(lineWidths.count, blurs.count)
let gradient = AngularGradient(stops: stops, center: .center)
ZStack {
ForEach(0..<layerCount, id: \.self) { i in
shape
.strokeBorder(gradient, lineWidth: lineWidths[i])
.blur(radius: blurs[i])
.animation(
reduceMotion ? nil : .easeInOut(duration: 0.5 + Double(i) * 0.2),
value: stops
)
}
}
.task {
while !Task.isCancelled {
stops = .intelligenceStyle
try? await Task.sleep(for: .seconds(updateInterval))
}
}
}
}🔹 Цветовая палитра
private extension Array where Element == Gradient.Stop {
static var intelligenceStyle: [Gradient.Stop] {
let colors = [
Color(red: 188/255, green: 130/255, blue: 243/255),
Color(red: 245/255, green: 185/255, blue: 234/255),
Color(red: 141/255, green: 159/255, blue: 255/255),
Color(red: 255/255, green: 103/255, blue: 120/255),
Color(red: 255/255, green: 186/255, blue: 113/255)
]
return colors
.map { Gradient.Stop(color: $0, location: Double.random(in: 0...1)) }
.sorted { $0.location < $1.location }
}
}🔹 Использование
// Фон
Text("Текст")
.padding(22)
.intelligenceBackground(in: .capsule)
// Наложение
Text("Текст")
.padding(22)
.intelligenceOverlay(in: .rect(cornerRadius: 22))
🔹 Заключение
Эта реализация показывает, как объединить несколько обводок, размытий и анимированных градиентов для достижения эффекта свечения, аналогичного интерфейсу Apple Intelligence. Результат работает с любым объектом
InsettableShape. Его можно использовать для современной и выразительной подсветки кнопок, карточек или текстовых контейнеров.#PixelPerfect #MiddlePath #SwiftUI
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
🆚 Верстать руками или через дизайн-систему
Раньше каждый экран — маленькое произведение искусства (и боли): ручные отступы, кастомные компоненты, всё под себя. Теперь — дизайн-система, токены, готовые UI-киты и чёткий гайд от дизайнера.
Одни говорят: «Система ускоряет и спасает от хаоса».
Другие отвечают: «Креатив умер, теперь мы просто собираем конструктор».
А ты кто?💬
❤️ — Использую дизайн-систему, не хочу страдать
👍 — Верстаю руками, потому что могу
🤝 — Компромисс — система, но с кастомом
🐸 Библиотека мобильного разработчика
#междусобойчик
Раньше каждый экран — маленькое произведение искусства (и боли): ручные отступы, кастомные компоненты, всё под себя. Теперь — дизайн-система, токены, готовые UI-киты и чёткий гайд от дизайнера.
Одни говорят: «Система ускоряет и спасает от хаоса».
Другие отвечают: «Креатив умер, теперь мы просто собираем конструктор».
А ты кто?
❤️ — Использую дизайн-систему, не хочу страдать
👍 — Верстаю руками, потому что могу
🤝 — Компромисс — система, но с кастомом
#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝16👍4❤2
Senior iOS Developer — от 400 000 до 600 000 ₽, гибрид (Москва, Санкт-Петербург)
Senior Flutter разработчик — от 260 000 ₽, удалёнка
iOS-разработчик — от 220 000 до 350 000 ₽, удалёнка
Android Developer — от 200 000 до 300 000 ₽, удалёнка
KMP developer — от 450 000 ₽, удалёнка
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
🔥 Когда понимаешь SOLID — жизнь становится проще
В октябре действует скидка 40% на все курсы от Proglib Academy, включая интенсив «Архитектуры и шаблоны проектирования»
📘 На интенсиве ты:
— разберёшься, как проектировать приложения, которые не ломаются при каждом изменении;
— освоишь SOLID-принципы, IoC, адаптеры и фабрики;
— научишься строить масштабируемые архитектуры;
— создашь собственную игру «Звёздные войны».
👨💻 Примеры кода на C#, Java, Python, PHP, C++ и JavaScript. Главное — понимать принципы, а не язык.
Преподаватель — Евгений Тюменцев, директор компании HWdTech, разрабатывал многопоточные кроссплатформенные приложения для IBM Watson.
📆 Формат: онлайн, 1 месяц.
📚 9 лекций + 2 бонусных занятия + практика.
Интенсив подойдёт джунам, которые хотят апнуться до мидла, и мидлам, мечтающим о роли архитектора.
👉 Переходи к курсам со скидкой 40%
В октябре действует скидка 40% на все курсы от Proglib Academy, включая интенсив «Архитектуры и шаблоны проектирования»
📘 На интенсиве ты:
— разберёшься, как проектировать приложения, которые не ломаются при каждом изменении;
— освоишь SOLID-принципы, IoC, адаптеры и фабрики;
— научишься строить масштабируемые архитектуры;
— создашь собственную игру «Звёздные войны».
👨💻 Примеры кода на C#, Java, Python, PHP, C++ и JavaScript. Главное — понимать принципы, а не язык.
Преподаватель — Евгений Тюменцев, директор компании HWdTech, разрабатывал многопоточные кроссплатформенные приложения для IBM Watson.
📆 Формат: онлайн, 1 месяц.
📚 9 лекций + 2 бонусных занятия + практика.
Интенсив подойдёт джунам, которые хотят апнуться до мидла, и мидлам, мечтающим о роли архитектора.
👉 Переходи к курсам со скидкой 40%
🧩 Почему Feature-модули не решают проблему масштабирования
Многие команды переходят к модульной архитектуре, надеясь, что разбив проект на feature-модули, они автоматически получат масштабируемость. На практике — чаще наоборот.
⚙️ В чём ошибка
Feature-модули решают структурную, а не архитектурную проблему.
Да, они:
• уменьшают время сборки,
• изолируют зависимости,
• упрощают навигацию по проекту.
Но если в каждом модуле копируется один и тот же UI-state, бизнес-логика и сетевой слой — ты не масштабируешь архитектуру, ты масштабируешь хаос.
🧠 Что действительно масштабируется
Масштабируется только архитектурная консистентность:
• единые контракты между слоями,
• повторно используемые базовые интерфейсы (например, для state-management или DI),
• стандартизированный подход к навигации и фичам.
Feature-модуль должен быть потребителем архитектурных решений, а не их источником.
✅ Практическая мысль
Прежде чем делить монолит на 20 модулей, ответь себе:
Без этого модульность превращается в распыление ответственности, а не в масштабирование.
А как у вас реализована модульность в проекте?💬
🐸 Библиотека мобильного разработчика
#АрхитектурныйКод #SeniorView
Многие команды переходят к модульной архитектуре, надеясь, что разбив проект на feature-модули, они автоматически получат масштабируемость. На практике — чаще наоборот.
Feature-модули решают структурную, а не архитектурную проблему.
Да, они:
• уменьшают время сборки,
• изолируют зависимости,
• упрощают навигацию по проекту.
Но если в каждом модуле копируется один и тот же UI-state, бизнес-логика и сетевой слой — ты не масштабируешь архитектуру, ты масштабируешь хаос.
Масштабируется только архитектурная консистентность:
• единые контракты между слоями,
• повторно используемые базовые интерфейсы (например, для state-management или DI),
• стандартизированный подход к навигации и фичам.
Feature-модуль должен быть потребителем архитектурных решений, а не их источником.
Прежде чем делить монолит на 20 модулей, ответь себе:
Есть ли у нас устойчивая архитектурная основа, которую эти модули смогут разделять?
Без этого модульность превращается в распыление ответственности, а не в масштабирование.
А как у вас реализована модульность в проекте?
#АрхитектурныйКод #SeniorView
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁6
adb shell input keyevent – управление устройством с помощью системных событийОтправляйте системные события на Android-устройство через ADB – имитируйте нажатия аппаратных кнопок, жесты и другие действия без физического доступа к устройству.
# Базовые кнопки
adb shell input keyevent 3 # HOME
adb shell input keyevent 4 # BACK
adb shell input keyevent 26 # POWER (вкл/выкл)
adb shell input keyevent 24 # VOLUME_UP
adb shell input keyevent 25 # VOLUME_DOWN
# Медиа и специальные
adb shell input keyevent 85 # PLAY/PAUSE
adb shell input keyevent 86 # STOP
adb shell input keyevent 87 # NEXT
adb shell input keyevent 88 # PREVIOUS
adb shell input keyevent 164 # MUTE
1. Автоматизация тестов:
# Сценарий: открыть приложение, сделать действия, вернуться домой
adb shell am start -n com.yourapp/.MainActivity
sleep 2
adb shell input keyevent 4 # BACK
adb shell input keyevent 3 # HOME
2. Тестирование обработки прерываний:
# Во время работы приложения
adb shell input keyevent 26 # POWER (блокировка)
sleep 2
adb shell input keyevent 26 # POWER (разблокировка)
3. Управление медиа в фоне:
adb shell input keyevent 85 # PLAY/PAUSE музыки
Скриншот через комбинацию:
adb shell input keyevent 120 # SYSRQ (скриншот)
Перезагрузка устройства:
adb shell input keyevent 116 # POWER + перезагрузка через меню
Какие keyevent вы используете чаще всего?
Библиотека мобильного разработчика
#буст #MiddlePath #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Если ты еще не почувствовал, как изменился IT-рынок, то скоро почувствуешь на своей шкуре. Вакансий стало в разы меньше, требования выросли до небес, а конкуренция превратилась в кровавую баню. Рассказываем, как лихорадит рынок труда в IT.
#MadeInProglib
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱6❤2
Пора узнать, на чём живёт Android Studio и Xcode в 2025.
Расскажите в комментариях, какой у вас ноутбук или ПК:
Интересно, сколько у нас счастливчиков с M-чипами и кто до сих пор держится на стареньком i5
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
PostgresNIO — неблокирующий event-driven клиент Swift для PostgreSQL, построенный на SwiftNIO.
Фичи:
#буст #iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
💥 Октябрь — месяц апгрейда!
До конца этого месяца действует скидка 40% на все курсы Proglib Academy(кроме AI-агентов, ML для старта и математики) .
Под акцию попал и наш хит — курс «Алгоритмы и структуры данных».
👨💻 Он подойдёт джунам, мидлам и всем, кто хочет писать код осознанно, а не наугад.
👨🏫 Преподаватели — инженеры из Яндекса и ВШЭ.
🎓 Сертификат по итогам обучения — в портфолио.
➖ 47 видеоуроков и 150 практических задач;
➖ поддержка преподавателей и чат;
➖ доступ к материалам на 12 месяцев.
Полная программа курса тут 👈
👉 Остальные курсы
До конца этого месяца действует скидка 40% на все курсы Proglib Academy
Под акцию попал и наш хит — курс «Алгоритмы и структуры данных».
👨💻 Он подойдёт джунам, мидлам и всем, кто хочет писать код осознанно, а не наугад.
👨🏫 Преподаватели — инженеры из Яндекса и ВШЭ.
🎓 Сертификат по итогам обучения — в портфолио.
➖ 47 видеоуроков и 150 практических задач;
➖ поддержка преподавателей и чат;
➖ доступ к материалам на 12 месяцев.
Полная программа курса тут 👈
👉 Остальные курсы
❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
В чем основная ошибка и почему UI может не обновляться?
Anonymous Quiz
47%
Изменение @Published свойства не в главном потоке
5%
Weak self в Task не используется
14%
@StateObject создается внутри View
4%
Отсутствует обработка ошибок
30%
Посмотреть ответ
👍2
Добавление кастомных изображений в ваше приложение может значительно улучшить и персонализировать пользовательский опыт, а также повысить вовлеченность пользователей.
В этой статье рассматриваются две новые возможности генерации изображений с помощью Firebase AI Logic: специализированные функции редактирования Imagen, которые в настоящее время находятся в стадии предварительной версии, и общедоступный Gemini 2.5 Flash Image (также известный как «Nano Banana»), предназначенный для создания контекстных или диалоговых изображений.
#свежак #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Приходилось ли когда-нибудь развивать библиотечный проект и публиковать из него артефакты? Команде Александра пришлось, когда появилась своя дизайн-система и разные переиспользуемые части приложения. Поначалу все были довольны, но со временем оказалось, что довольно трудно следить за тем, чтобы не сломать неаккуратными изменениями другие проекты.
В конце концов, им надоело бороться с ломающими изменениями вручную и захотелось немного магии: чтобы версии сами поднимались, да еще и показывали, сломали мы что-то или нет.
Александр рассказал о том, как научить Gradle анализировать изменения в API и автоматически поднимать версии артефактов с соблюдением семантического версионирования. Заодно он показал некоторые приемам в Gradle, которые помогут писать плагины.
Доклад будет полезен и тем, кто разрабатывает библиотеки и хочет реализовать аналогичное решение, и тем, кому интересно поучиться писать Gradle-плагины.
#буст #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁7😢3
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Что выведет код?
Anonymous Quiz
56%
Result: 11 Cache value: 7
8%
Result: 10 Cache value: 7
19%
Result: 11 Cache value: 8
17%
Ошибка компиляции
❤3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4
Представь: ты опытный разработчик, знаешь стек как свои пять пальцев. Отправляешь резюме — а в ответ тишина. Проблема не в тебе — просто ATS не увидела нужные ключевые слова или не смогла распарсить твое красивое резюме с инфографикой.
Рассказываем, как устроены эти системы, какие из них используют российские и зарубежные IT-компании, и главное — как адаптировать резюме, чтобы робот тебя пропустил.
#MadeInProglib
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
if age >= 18 {
driveCar()
} else {
doNotDrive()
}Этот код хорошо работает - но можете ли вы предложить небольшое улучшение рефакторинга, чтобы сделать его еще лучше?
age >= 18 ? driveCar() : doNotDrive()
#буст #JuniorKit #Swift
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱6❤2😢2🤔1