Готов ли 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
An iOS Engineer learns about Android’s Jetpack Compose and loves it (7 мин)
Cамое время серьезно подумать о том, чтобы стать горизонтальным мобильным разработчиком и вот почему:
👉 объединение экспертизы между разработчиками Android и iOS позволяет писать лучшие приложения
👉 Jetpack Compose и SwiftUI - обновление своих императивных предшественников. Оба декларативны, являются state-driven и реактивны
👉 Kotlin несложно освоить для разработчиков Swift
Кривые обучения ускорились, и, поскольку обе платформы имеют схожие принципы, их легче освоить. Это отличный способ закрепить свой набор навыков в будущем, потому что давайте посмотрим правде в глаза: популярность любой из доминирующих мобильных платформ не гарантируется навсегда.
#crossplatform
Cамое время серьезно подумать о том, чтобы стать горизонтальным мобильным разработчиком и вот почему:
👉 объединение экспертизы между разработчиками Android и iOS позволяет писать лучшие приложения
👉 Jetpack Compose и SwiftUI - обновление своих императивных предшественников. Оба декларативны, являются state-driven и реактивны
👉 Kotlin несложно освоить для разработчиков Swift
Кривые обучения ускорились, и, поскольку обе платформы имеют схожие принципы, их легче освоить. Это отличный способ закрепить свой набор навыков в будущем, потому что давайте посмотрим правде в глаза: популярность любой из доминирующих мобильных платформ не гарантируется навсегда.
#crossplatform
👍6👎1
Внедрение Allure (отчётность) в UI-тесты (swift, XCTest)
Преимущества связки xcresults с Allure (фреймворк для отчётности) при автоматизации UI тестов:
👉 процентное соотношение пройденных, проваленных, скипнутых и др. тестов
👉 таймлайн
👉 графики с количественной статистикой по статусам, длительности, ретраям и др.
👉 подробная информация по каждому тесту (название теста, ссылка на кейс, шаги, скриншот, длительность теста и каждого шага, ретраи, уровень критичности и др.)
👉 Allure используется при автоматизации других направлений (web, API)
#testing
Преимущества связки xcresults с Allure (фреймворк для отчётности) при автоматизации UI тестов:
👉 процентное соотношение пройденных, проваленных, скипнутых и др. тестов
👉 таймлайн
👉 графики с количественной статистикой по статусам, длительности, ретраям и др.
👉 подробная информация по каждому тесту (название теста, ссылка на кейс, шаги, скриншот, длительность теста и каждого шага, ретраи, уровень критичности и др.)
👉 Allure используется при автоматизации других направлений (web, API)
#testing
🔥2👎1