Готов ли 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
Внедрение iOS 16 идет быстрее iOS 15, но медленнее iOS 14
По данным Mixpanel, внедрение iOS 16 происходит немного быстрее, чем iOS 15. После 24 часов доступности iOS 16 установили 6.71% пользователей по сравнению 6.48% у первого дня iOS 15. Оба обновления отстают от iOS 14, которую загрузили 9.22% пользователей в первый день ее доступности.
Это неудивительно, поскольку iOS 14 была первым обновлением, которое позволило больше настраивать домашний экран iPhone. На домашнем экране появились виджеты, что даже породило свою новую отдельную категорию приложений.
#iOS
По данным Mixpanel, внедрение iOS 16 происходит немного быстрее, чем iOS 15. После 24 часов доступности iOS 16 установили 6.71% пользователей по сравнению 6.48% у первого дня iOS 15. Оба обновления отстают от iOS 14, которую загрузили 9.22% пользователей в первый день ее доступности.
Это неудивительно, поскольку iOS 14 была первым обновлением, которое позволило больше настраивать домашний экран iPhone. На домашнем экране появились виджеты, что даже породило свою новую отдельную категорию приложений.
#iOS
👍4👎1