Handling multiple caches in App (4 мин)
Вариант имплементации кэширования для разных типов данных:
👉 Слой utils состоит из сущностей, которые реализуют протоколы для получения данных
👉 Assets Manager - посредник между слоем utils и хранилищами. Главной целью является сопоставление типа кэширования и хранилища
👉 На уровне Caching Layer располагаются все хранилища. Работа происходит только с сырыми данными абстрактно от типа
#architecture
Вариант имплементации кэширования для разных типов данных:
👉 Слой utils состоит из сущностей, которые реализуют протоколы для получения данных
👉 Assets Manager - посредник между слоем utils и хранилищами. Главной целью является сопоставление типа кэширования и хранилища
👉 На уровне Caching Layer располагаются все хранилища. Работа происходит только с сырыми данными абстрактно от типа
#architecture
👍2👎1🔥1
SwiftUI, How to create BlurEffect. Introducing 2 ways
Два способа создания эффекта blur в помощью SwiftUI:
👉 С помощью модификатора
👉 Через UIViewRepresentable, если нужно больше возможностей для кастомизации
#swiftUI
Два способа создания эффекта blur в помощью SwiftUI:
👉 С помощью модификатора
.blur
👉 Через UIViewRepresentable, если нужно больше возможностей для кастомизации
#swiftUI
👍4👎1
Готов ли Kotlin Multiplatform к проду на iOS?
Kotlin Multiplatform уже несколько лет широко используется в продакшен приложениях. Насколько готов Kotlin Multiplatform к проду на iOS? Несмотря на сложности с отладкой, отсутствие поддержки аргументов по умолчанию, исчерпывающих перечислений (enum'ов), Codable и некоторые другие проблемы, KMP можно разворачивать со следующими условиями:
👉 Используйте его с осторожностью: нет необходимости идти ва-банк с KMP. Можно попробовать обкатать на небольшом модуле
👉 Общие компоненты: скорее всего, ваша цель использования KMP состоит в том, чтобы обмениваться компонентами между платформами, поэтому начните с них
👉 Помните о версиях: JetBrains поддерживает сайт со стабильностью Kotlin Components, некоторые компоненты Kotlin/Native являются бета-версиями. Определите, достаточно ли стабильности KMP для вашей организации
#crossplatform
Kotlin Multiplatform уже несколько лет широко используется в продакшен приложениях. Насколько готов Kotlin Multiplatform к проду на iOS? Несмотря на сложности с отладкой, отсутствие поддержки аргументов по умолчанию, исчерпывающих перечислений (enum'ов), Codable и некоторые другие проблемы, KMP можно разворачивать со следующими условиями:
👉 Используйте его с осторожностью: нет необходимости идти ва-банк с KMP. Можно попробовать обкатать на небольшом модуле
👉 Общие компоненты: скорее всего, ваша цель использования KMP состоит в том, чтобы обмениваться компонентами между платформами, поэтому начните с них
👉 Помните о версиях: JetBrains поддерживает сайт со стабильностью Kotlin Components, некоторые компоненты Kotlin/Native являются бета-версиями. Определите, достаточно ли стабильности KMP для вашей организации
#crossplatform
👍7👎2
Документация Apple по Dynamic Island
Как добавить Live Activities в приложение:
👉 Создаем widget extension для приложения (WidgetKit, Creating a Widget Extension)
👉 Добавляем
👉 Добавляем структуру ActivityAttributes чтобы описать статический и динамический контент Live Activity
👉 Создаем ActivityConfiguration на основе ActivityAttributes
👉 Конфигурируем начало, обновление и конец Live Activity
Доступно с Xcode 14.1
#iOS16
Как добавить Live Activities в приложение:
👉 Создаем widget extension для приложения (WidgetKit, Creating a Widget Extension)
👉 Добавляем
Supports Live Activities: YES
в Info.plist👉 Добавляем структуру ActivityAttributes чтобы описать статический и динамический контент Live Activity
👉 Создаем ActivityConfiguration на основе ActivityAttributes
👉 Конфигурируем начало, обновление и конец Live Activity
Доступно с Xcode 14.1
#iOS16
🔥15👎1
AttributedString, a better way to handle attributed strings in iOS 15 (2 мин)
С iOS 15 на замену NSAttributedString приходит AttributedString. В скринах пример кода для цветной строки с подчеркиванием, выделение range и markdown
#swift
С iOS 15 на замену NSAttributedString приходит AttributedString. В скринах пример кода для цветной строки с подчеркиванием, выделение range и markdown
#swift
👏5👎1
Data flow in SwiftUI (4 мин)
На схеме случаи использования Binding, ObservableObject, StateObject, ObservedObject, EnvironmentObject
#swiftUI
На схеме случаи использования Binding, ObservableObject, StateObject, ObservedObject, EnvironmentObject
#swiftUI
👍5👎1🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
SwiftUI Advanced Animation: Morphing Shapes (4 мин)
Если две стадии анимации представлены объектами, соответствующими протоколу VectorArithmetic, SwiftUI может высчитать промежуточные состояния и отрисовать переход.
Концептуально создание пузырька из лавовой лампы выглядит так:
👉 Создаем AnimatableVector: VectorArithmetic. Библиотека Accelerate используется для быстрых вычислений
👉 Делим круг на несколько дуг, радиус каждой из которых будет меняться независимо от других (пример в гифке)
#swiftUI
Если две стадии анимации представлены объектами, соответствующими протоколу VectorArithmetic, SwiftUI может высчитать промежуточные состояния и отрисовать переход.
Концептуально создание пузырька из лавовой лампы выглядит так:
👉 Создаем AnimatableVector: VectorArithmetic. Библиотека Accelerate используется для быстрых вычислений
👉 Делим круг на несколько дуг, радиус каждой из которых будет меняться независимо от других (пример в гифке)
#swiftUI
🔥6👎1
How to Show/hide whitespace characters in Xcode
Если вы работаете с CSV, YAML или ваш Linter ругается на пробелы, на скрине небольшой лайфхак, как их отобразить в Xcode
#xcode
Если вы работаете с CSV, YAML или ваш Linter ругается на пробелы, на скрине небольшой лайфхак, как их отобразить в Xcode
#xcode
🔥6👎1
What’s New in SwiftUI 4 for iOS 16 (12 мин)
Что нового в SwiftUI iOS 16?
🔥 SwiftUI Charts - компонент для графиков
🔥 Resizable Bottom Sheet - нижняя шторка
🔥 MultiDatePicker - выбор дат
🔥 NavigationStack и NavigationSplitView для улучшенной навигации
🔥 ShareLink - "поделиться"
🔥 Table for iPadOS - таблицы на iPad
🔥 Expandable Text Field - поле для ввода текста
🔥 Gauge - отображение прогресса
🔥 ViewThatFits - автоматическое вычисление размера для верстки
🔥 Gradient and Shadow - градиенты и тени
🔥 Grid API - верстка для сетки
🔥 AnyLayout and Layout Protocol - кастомные лейауты
#swiftUI
Что нового в SwiftUI iOS 16?
🔥 SwiftUI Charts - компонент для графиков
🔥 Resizable Bottom Sheet - нижняя шторка
🔥 MultiDatePicker - выбор дат
🔥 NavigationStack и NavigationSplitView для улучшенной навигации
🔥 ShareLink - "поделиться"
🔥 Table for iPadOS - таблицы на iPad
🔥 Expandable Text Field - поле для ввода текста
🔥 Gauge - отображение прогресса
🔥 ViewThatFits - автоматическое вычисление размера для верстки
🔥 Gradient and Shadow - градиенты и тени
🔥 Grid API - верстка для сетки
🔥 AnyLayout and Layout Protocol - кастомные лейауты
#swiftUI
🔥4👎1
Exploring Rendering in SwiftUI (4 мин)
SwiftUI перерисовывает компоненты, когда меняются их свойства, а не state.
View является структурой: иммутабельным value типом. Благодаря этому легче отследить изменения.
Если изменяются свойства View, мы должны пересоздать его, что и происходит в body. Таким образом, мы словно говорим рантайму: "Мы создали новую view. Нарисуешь его?” 😄
#swiftUI
SwiftUI перерисовывает компоненты, когда меняются их свойства, а не state.
View является структурой: иммутабельным value типом. Благодаря этому легче отследить изменения.
Если изменяются свойства View, мы должны пересоздать его, что и происходит в body. Таким образом, мы словно говорим рантайму: "Мы создали новую view. Нарисуешь его?” 😄
#swiftUI
👍6👎1
How 5 iOS apps could improve their startup time by an average of 28%
Проанализировали время загрузки популярных приложений с помощью Emerge Performance Analysis на iPhone SE iOS 15.4.1 и вот что получилось:
United Airlines - 2.05 сек, можно улучшить на 40%
Chipotle - 0.57 сек, можно улучшить на 33%
Curb - 0.8 сек, можно улучшить на 22%
Walmart - 0.67 сек, можно улучшить на 33%
Zoom - 0.27 сек, можно улучшить на 15%
Из интересных наблюдений, United Airlines тратит 48 мс на JSONDecoder.decode(), что либо стоит делать в бекграунде, либо использовать более быстрые решения, а еще 677 мс на загрузку CoreData на main потоке.
Walmart тратит 20 мс на принты😅.
Zoom's просто засыпает на 41 мс на main потоке.
#performance
Проанализировали время загрузки популярных приложений с помощью Emerge Performance Analysis на iPhone SE iOS 15.4.1 и вот что получилось:
United Airlines - 2.05 сек, можно улучшить на 40%
Chipotle - 0.57 сек, можно улучшить на 33%
Curb - 0.8 сек, можно улучшить на 22%
Walmart - 0.67 сек, можно улучшить на 33%
Zoom - 0.27 сек, можно улучшить на 15%
Из интересных наблюдений, United Airlines тратит 48 мс на JSONDecoder.decode(), что либо стоит делать в бекграунде, либо использовать более быстрые решения, а еще 677 мс на загрузку CoreData на main потоке.
Walmart тратит 20 мс на принты😅.
Zoom's просто засыпает на 41 мс на main потоке.
#performance
👍3👎1😢1
How To Boost Your iOS Code Performance: Reduce Searching In Array
Поиск в массиве имеет сложность O(n), но на практике бывает нужно использовать вложенные циклы, таким образом сложность вырастает до O(n²) и сильнее.
На скринах два примера, как оптимизировать код с помощью Set или Dictionary и улучшить перфоманс
#performance
Поиск в массиве имеет сложность O(n), но на практике бывает нужно использовать вложенные циклы, таким образом сложность вырастает до O(n²) и сильнее.
На скринах два примера, как оптимизировать код с помощью Set или Dictionary и улучшить перфоманс
#performance
👍5👎2
Fastlane Magic in iOS (3 мин)
Если в вашем проекте еще не используется Fastlane, эта статья напомнит о его преимуществах в автоматизации:
📸 Снятие скриншотов
👩✈️ Дистрибуция бета-версий в TestFlight
🚀 Дистрибуция в App Store
🛠 Ручная конфигурация FastLane File для автоматизации ваших задач
#автоматизация
Если в вашем проекте еще не используется Fastlane, эта статья напомнит о его преимуществах в автоматизации:
📸 Снятие скриншотов
👩✈️ Дистрибуция бета-версий в TestFlight
🚀 Дистрибуция в App Store
🛠 Ручная конфигурация FastLane File для автоматизации ваших задач
#автоматизация
👍5👎2