Если вы добавляете в приложение много фич, которые работают только на iOS 26, стоит сделать кастомный сниппет с автодополнением. Я использовал «IF2» (if iOS 26) как шорткат completion, и это уже сэкономило мне кучу времени.
Чтобы открыть меню сниппетов и создать такой, можно использовать Shift+CMD+L.
↓ Вот код, который я использую в сниппете
👉 @MobDevPortal
Чтобы открыть меню сниппетов и создать такой, можно использовать Shift+CMD+L.
↓ Вот код, который я использую в сниппете
if #available(iOS 26, macOS 26, *) {
<#code#>
}Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤4
Новое в SwiftUI
Используйте
Это гарантирует, что заголовки останутся идеально выровненными, даже если иконки имеют разный размер.
👉 @MobDevPortal
Используйте
labelReservedIconWidth(), чтобы зарезервировать фиксированную ширину для иконок в Label.Это гарантирует, что заголовки останутся идеально выровненными, даже если иконки имеют разный размер.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤4👍2
Android ViewModel Data Loading: Best Practices and Flow-Based Architecture
Большая статья, с примерами кода, в которой автор рассказывает про проблемы загрузки данных в
🔸 Читать
👉 @MobDevPortal
Большая статья, с примерами кода, в которой автор рассказывает про проблемы загрузки данных в
ViewModel.init{ } блоке и рассматривает Flow-Based решение, как более правильный, удобный и оптимальный архитектурный подход.Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Наложить Liquid Glass на ваш кастомный SwiftUI-вью так же просто, как добавить к нему модификатор
👉 @MobDevPortal
.glassEffect()Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍4
Compose + Koin + Jetpack Navigation: что мы поняли за 2 года
Большая и полезная статья от разработчика core-команды WB Partners Wildberries & Russ, в которой он делится опытом развития архитектуры приложения на Jetpack Compose: с какими ограничениями столкнулись, как укротили навигацию от Google и каким образом всё это подружили с Koin.
🔸 Читать
👉 @MobDevPortal
Большая и полезная статья от разработчика core-команды WB Partners Wildberries & Russ, в которой он делится опытом развития архитектуры приложения на Jetpack Compose: с какими ограничениями столкнулись, как укротили навигацию от Google и каким образом всё это подружили с Koin.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍3
Совет по SwiftUI
В iOS 26 элементы тулбара по умолчанию получают стеклянный эффект фона.
Управлять его видимостью можно модификатором
👉 @MobDevPortal
В iOS 26 элементы тулбара по умолчанию получают стеклянный эффект фона.
Управлять его видимостью можно модификатором
sharedBackgroundVisibility().Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Годный сайт с наглядной демонстрацией процесса рекомпозиции, с примерами удачных и неудачных практик:
https://ivk1800.github.io/recomposition-visualization/
Подробности реализации описаны в статье, а исходный код выложен на GitHub
👉 @MobDevPortal
https://ivk1800.github.io/recomposition-visualization/
Подробности реализации описаны в статье, а исходный код выложен на GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍4
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17❤2👍2
Clipping and Masking in Jetpack Compose
Полезная статья про то, как в Jetpack Compose использовать Clipping и Masking для более дружелюбного UI: как обрезать компонент, кастомные шейпы, наложение градиента, различные эффекты и режимы наложение.
🔸 Читать
👉 @MobDevPortal
Полезная статья про то, как в Jetpack Compose использовать Clipping и Masking для более дружелюбного UI: как обрезать компонент, кастомные шейпы, наложение градиента, различные эффекты и режимы наложение.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥2👀1
Быстрый совет по Flutter: как показать Live Activity на iOS с помощью Flutter
(это не так уж сложно)
вот как сделать это шаг за шагом 👆
👉 @MobDevPortal
(это не так уж сложно)
вот как сделать это шаг за шагом 👆
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
Media is too big
VIEW IN TELEGRAM
Отличная библиотека анимаций для разработчиков React Native
Она упрощает создание плавных, высокопроизводительных анимаций и добавление движения в ваш UI
https://github.com/software-mansion/react-native-reanimated
👉 @MobDevPortal
Она упрощает создание плавных, высокопроизводительных анимаций и добавление движения в ваш UI
https://github.com/software-mansion/react-native-reanimated
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1
Челлендж 120FPS в SwiftUI: производительность LazyVStack
LazyVStack — это подход, рекомендуемый Apple для скроллируемых лент. Ленивые стеки подгружают и рендерят свои сабвью по требованию, когда они приближаются к вьюпорту (видимой на экране части вашего лейаута).
Трейс в Instruments при загрузке и скролле выглядит гораздо «здоровее». На нём видно, что VSync стабильно укладывается в целевые 16,67 мс на кадр для 60fps, даже в режиме энергосбережения.
При скролле вниз через сотни элементов мы получаем лишь несколько совсем незначительных просадок фреймрейта, но без лагов. С точки зрения SwiftUI, на экране одновременно находится всего несколько айтемов, поэтому всё можно без проблем посчитать и отрендерить в те миллисекунды, что есть между кадрами.
Использование памяти у LazyVStack достаточно стабильное. Оно немного подскакивало, когда я скроллил очень быстро, но не было резких всплесков: данные вью выкидывались из памяти по мере того, как они уходили за пределы вьюпорта.
Полную статью смотрите здесь
👉 @MobDevPortal
LazyVStack — это подход, рекомендуемый Apple для скроллируемых лент. Ленивые стеки подгружают и рендерят свои сабвью по требованию, когда они приближаются к вьюпорту (видимой на экране части вашего лейаута).
Трейс в Instruments при загрузке и скролле выглядит гораздо «здоровее». На нём видно, что VSync стабильно укладывается в целевые 16,67 мс на кадр для 60fps, даже в режиме энергосбережения.
При скролле вниз через сотни элементов мы получаем лишь несколько совсем незначительных просадок фреймрейта, но без лагов. С точки зрения SwiftUI, на экране одновременно находится всего несколько айтемов, поэтому всё можно без проблем посчитать и отрендерить в те миллисекунды, что есть между кадрами.
Использование памяти у LazyVStack достаточно стабильное. Оно немного подскакивало, когда я скроллил очень быстро, но не было резких всплесков: данные вью выкидывались из памяти по мере того, как они уходили за пределы вьюпорта.
Полную статью смотрите здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍2
This media is not supported in your browser
VIEW IN TELEGRAM
ZoomTransition в SwiftUI почти не поддается кастомизации, но «под капотом» у него есть опции вроде
В этом демо используются приватные API. В UIKit эти опции доступны публично.
👉 @MobDevPortal
dimmingVisualEffect. С их помощью можно было бы воссоздать переходы, как в приложении Photos, но, к сожалению, эти API в SwiftUI приватные.В этом демо используются приватные API. В UIKit эти опции доступны публично.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2
Совет по SwiftUI
В iOS 16+ используйте
👉 @MobDevPortal
В iOS 16+ используйте
toolbarTitleMenu(), чтобы показывать меню при тапе по заголовку навигации.Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍2
Загрузка данных во ViewModel: рекомендации и Flow-based архитектура
Перевод на Хабре вот этой статьи, про паттерны загрузки данных во ViewModel.
- Читать
👉 @MobDevPortal
Перевод на Хабре вот этой статьи, про паттерны загрузки данных во ViewModel.
- Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7
Совет по SwiftUI
Хотите, чтобы заголовок панели навигации оставался крупным, но был inline?
В iOS 17+ используйте
👉 @MobDevPortal
Хотите, чтобы заголовок панели навигации оставался крупным, но был inline?
В iOS 17+ используйте
.toolbarTitleDisplayMode(.inlineLarge).Please open Telegram to view this post
VIEW IN TELEGRAM
❤7