# uikit

Published articles for uikit.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Когда данных от Apple недостаточно: собираем метрики производительности UI

DevFeed: [Когда данных от Apple недостаточно: собираем метрики производительности UI](<https://devfeed.tech/articles/apple-ui-30697.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/hh/articles/988322/>)

Author: hurmavbatone (hh.ru)

Published: 2026-01-26T14:02:45Z

Content type: tutorial

Language: ru

Sources: [HeadHunter RU](<https://devfeed.tech/sources/headhunter-ru.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [SwiftUI](<https://devfeed.tech/topics/swiftui.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [apple](<https://devfeed.tech/tags/apple.md>), [fps](<https://devfeed.tech/tags/fps.md>), [ios](<https://devfeed.tech/tags/ios.md>), [swiftui](<https://devfeed.tech/tags/swiftui.md>), [tag-b92bf5906bbd](<https://devfeed.tech/tags/tag-b92bf5906bbd.md>), [tag-c6d5400b7d88](<https://devfeed.tech/tags/tag-c6d5400b7d88.md>), [tag-cb5ff012b3f0](<https://devfeed.tech/tags/tag-cb5ff012b3f0.md>), [ui](<https://devfeed.tech/tags/ui.md>), [uikit](<https://devfeed.tech/tags/uikit.md>)

### AI overview

An iOS developer from hh.ru describes building custom UI performance metrics collection after Apple's default data proved insufficient for investigating user-reported freezes and slowdowns. The article discusses the company's SwiftUI- and UIKit-based applications and metrics such as Hitch Rate, Hang Rate, and FPS.

### Source excerpt

Привет, Хабр! Меня зовут Виталий Барабанов, я iOS-разработчик в hh.ru. Недавно мы столкнулись с проблемой: пришёл фидбэк от пользователей о тормозах и фризах в мобильном приложении. Но чтобы установить их причину, нам не хватило данных, которые по дефолту собирает Apple. Что делать в такой ситуации? А запилить собственный сбор метрик: с какой угодно фильтрацией, сбором любой информации, интеграцией со своей аналитикой и наблюдением в дебаг-панели! В статье я хочу поделиться с Хабром, как мы это сделали, сколько времени потратили и как интерпретировали результаты. Читать далее

## Rafinad: сахар для UI-тестирования iOS-приложений

DevFeed: [Rafinad: сахар для UI-тестирования iOS-приложений](<https://devfeed.tech/articles/rafinad-ui-ios-30684.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/hh/articles/910380/>)

Author: almazrafi (hh.ru)

Published: 2025-05-26T08:35:00Z

Content type: tutorial

Language: ru

Sources: [HeadHunter RU](<https://devfeed.tech/sources/headhunter-ru.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [dsl](<https://devfeed.tech/tags/dsl.md>), [ios](<https://devfeed.tech/tags/ios.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [source](<https://devfeed.tech/tags/source.md>), [swift](<https://devfeed.tech/tags/swift.md>), [swiftui](<https://devfeed.tech/tags/swiftui.md>), [tag-e932065bc8da](<https://devfeed.tech/tags/tag-e932065bc8da.md>), [ui](<https://devfeed.tech/tags/ui.md>), [ui-3e41457d883f](<https://devfeed.tech/tags/ui-3e41457d883f.md>), [ui-5cd5d1ae7fcb](<https://devfeed.tech/tags/ui-5cd5d1ae7fcb.md>), [uikit](<https://devfeed.tech/tags/uikit.md>), [xctest](<https://devfeed.tech/tags/xctest.md>), [xcuitest](<https://devfeed.tech/tags/xcuitest.md>)

### AI overview

The article introduces Rafinad, an open-source project from hh for UI testing of iOS applications. It explains why the company is revisiting its older testing approach and demonstrates common UI-test implementations, including explicit element identification and shared identifier sources.

### Source excerpt

Мы в hh очень любим UI-тесты, ими покрывается практически вся функциональность наших приложений, и даже backend-разработчики прогоняют тесты мобильных платформ перед развертыванием своих фич. Однако наши механизмы UI-тестирования разрабатывались более 8 лет назад и с тех пор почти не изменились. Кто-то скажет, что старые решения прошли проверку временем и что "работает -- не трогай"... Возможно, и так. Но сейчас мы внедряем новую дизайн-систему, а новые компоненты требуют адаптации всех тестов -- не лучшее ли время для перемен? Поэтому мы пересмотрели наши подходы к UI-тестированию и теперь готовы поделиться наработками с сообществом в виде open-source проекта -- Rafinad. В этой статье расскажем, что он умеет и как им пользоваться. Читать далее

## Jetpack Compose for iOS: Interoping with native Components - Gustavo Fão Valvassori

DevFeed: [Jetpack Compose for iOS: Interoping with native Components - Gustavo Fão Valvassori](<https://devfeed.tech/articles/jetpack-compose-for-ios-interoping-with-native-components-gustavo-fao-valvassori-38229.md>)

Original publisher: [Read original article](<https://touchlab.co/jetpack-compose-ios-interop>)

Published: 2024-04-25T00:00:00Z

Content type: tutorial

Language: en

Sources: [Touchlab | Enterprise Mobile Innovation & Development](<https://devfeed.tech/sources/touchlab-enterprise-mobile-innovation-development.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [interoperability](<https://devfeed.tech/topics/interoperability.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [SwiftUI](<https://devfeed.tech/topics/swiftui.md>), [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [compose](<https://devfeed.tech/tags/compose.md>), [compose-ios](<https://devfeed.tech/tags/compose-ios.md>), [compose-mp](<https://devfeed.tech/tags/compose-mp.md>), [interoperability](<https://devfeed.tech/tags/interoperability.md>), [ios](<https://devfeed.tech/tags/ios.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [migration](<https://devfeed.tech/tags/migration.md>), [swiftui](<https://devfeed.tech/tags/swiftui.md>), [uikit](<https://devfeed.tech/tags/uikit.md>)

### AI overview

A tutorial explaining how Jetpack Compose for iOS interoperates with SwiftUI and UIKit. It covers embedding Compose elements in native iOS views, embedding SwiftUI views in Compose, and sharing data between Swift and Kotlin.

### Source excerpt

One of the best features of Compose is its interoperability. With Compose iOS, you can interop with both UIKit and Swift UI.

## Bottom sheet: Scrolling and interactions

DevFeed: [Bottom sheet: Scrolling and interactions](<https://devfeed.tech/articles/bottom-sheet-scrolling-and-interactions-38015.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/koshelek/articles/703260/>)

Author: Kotenagitare (Кошелёк)

Published: 2022-12-06T10:44:58Z

Content type: tutorial

Language: ru

Sources: ["Кошелёк" RU](<https://devfeed.tech/sources/ru.md>)

Topics: [Swift](<https://devfeed.tech/topics/swift.md>), [.NET 9](<https://devfeed.tech/topics/net-9.md>)

Tags: [bottom-sheet](<https://devfeed.tech/tags/bottom-sheet.md>), [bottomsheet](<https://devfeed.tech/tags/bottomsheet.md>), [development](<https://devfeed.tech/tags/development.md>), [ios](<https://devfeed.tech/tags/ios.md>), [swift](<https://devfeed.tech/tags/swift.md>), [uikit](<https://devfeed.tech/tags/uikit.md>)

### AI overview

The concluding article in a series explains how to extend an iOS bottom sheet with scrolling content and swipe-to-dismiss interactions. It covers interactive transition progress, UIKit's transition driver support, and gesture tracking with a pan recognizer.

### Source excerpt

Отображать контент в виде bottom sheet -- задача со звёздочкой сама по себе, но когда контента становится больше, чем помещается на контроллере, всё становится ещё любопытней. В третьей и заключительной статье про bottom sheet мы: 1) Добавим возможность закрывать контроллеры, презентованные как bottom sheet с помощью свайпа по контенту. 2) Реализуем отображение контента, который не имеет собственных значений высоты для autoLayout (контент с прокруткой). Читать далее

## Bottom sheet: Navigation

DevFeed: [Bottom sheet: Navigation](<https://devfeed.tech/articles/bottom-sheet-navigation-38012.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/koshelek/articles/697626/>)

Author: Kotenagitare (Кошелёк)

Published: 2022-11-28T11:11:09Z

Content type: tutorial

Language: ru

Sources: ["Кошелёк" RU](<https://devfeed.tech/sources/ru.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [navigation](<https://devfeed.tech/topics/navigation.md>)

Tags: [apple](<https://devfeed.tech/tags/apple.md>), [bottom-sheet](<https://devfeed.tech/tags/bottom-sheet.md>), [bottom-sheet-behavior](<https://devfeed.tech/tags/bottom-sheet-behavior.md>), [bottomnavigationview](<https://devfeed.tech/tags/bottomnavigationview.md>), [bottomsheet](<https://devfeed.tech/tags/bottomsheet.md>), [ios](<https://devfeed.tech/tags/ios.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [swift](<https://devfeed.tech/tags/swift.md>), [uikit](<https://devfeed.tech/tags/uikit.md>)

### AI overview

This second article in a bottom sheet series explains how to implement full navigation within an iOS bottom sheet using Auto Layout. It presents a custom navigation controller that mirrors UINavigationController, manages child view controllers, and supports navigation transition animations and a navigation bar.

### Source excerpt

Это вторая статья из цикла про bottom sheet, в которой мы воссоздаём поведение платёжного фрагмента в Кошельке по образу и подобию Apple Pay и сталкиваемся с тем, что это не так то просто. Из материала вы узнаете, как повторить полноценную навигацию в рамках bottom sheet отображения, основанного на autolayout, а не на неудобном ручном расчёте высоты. А ещё мы вместе повторим анимации навигационных переходов и добавим navigation bar как нативный способ управления навигацией. Читать далее

## Bottom sheet: Custom transitioning

DevFeed: [Bottom sheet: Custom transitioning](<https://devfeed.tech/articles/bottom-sheet-custom-transitioning-38013.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/koshelek/articles/697962/>)

Author: Kotenagitare (Кошелёк)

Published: 2022-11-17T14:46:51Z

Content type: tutorial

Language: ru

Sources: ["Кошелёк" RU](<https://devfeed.tech/sources/ru.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [Swift](<https://devfeed.tech/topics/swift.md>)

Tags: [animation](<https://devfeed.tech/tags/animation.md>), [bottom-sheet](<https://devfeed.tech/tags/bottom-sheet.md>), [bottom-sheet-behavior](<https://devfeed.tech/tags/bottom-sheet-behavior.md>), [bottomnavigationview](<https://devfeed.tech/tags/bottomnavigationview.md>), [bottomsheet](<https://devfeed.tech/tags/bottomsheet.md>), [custom](<https://devfeed.tech/tags/custom.md>), [ios](<https://devfeed.tech/tags/ios.md>), [presentation](<https://devfeed.tech/tags/presentation.md>), [swift](<https://devfeed.tech/tags/swift.md>), [tag-08a48a9394c3](<https://devfeed.tech/tags/tag-08a48a9394c3.md>), [uikit](<https://devfeed.tech/tags/uikit.md>)

### AI overview

This tutorial explains how to implement a custom transitioning delegate in an iOS application to present controllers as bottom sheets. It covers presentation and animation controllers, content-sized layout, and the example payment screen in the "Кошелёк" app.

### Source excerpt

Современные требования к дизайну мобильных приложений всё чаще подкидывают задачи по отображению контента со сложным поведением. Для его реализации необходимо понимание того, как работают кастомные презентация и транзишены. В этой статье я расскажу, как мы решили задачу по созданию экрана оплаты в приложении "Кошелёк" с помощью кастомной навигации между контроллерами, которые отображаются как bottom sheet. Читать далее

## Drawing icons using Core Graphics

DevFeed: [Drawing icons using Core Graphics](<https://devfeed.tech/articles/drawing-icons-using-core-graphics-35096.md>)

Original publisher: [Read original article](<https://engineroom.teamwork.com/drawing-icons-using-core-graphics-fed30458f2ed?source=rss----cea4eecd5960---4>)

Author: Diego Freniche

Published: 2020-10-20T09:14:19Z

Content type: tutorial

Language: en

Sources: [Teamwork](<https://devfeed.tech/sources/teamwork.md>)

Topics: [Graphics](<https://devfeed.tech/topics/graphics.md>), [Code](<https://devfeed.tech/topics/code.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [coregraphics](<https://devfeed.tech/tags/coregraphics.md>), [graphics](<https://devfeed.tech/tags/graphics.md>), [ios](<https://devfeed.tech/tags/ios.md>), [playground](<https://devfeed.tech/tags/playground.md>), [swift](<https://devfeed.tech/tags/swift.md>), [swift-playgrounds](<https://devfeed.tech/tags/swift-playgrounds.md>), [uikit](<https://devfeed.tech/tags/uikit.md>)

### AI overview

A hands-on tutorial that uses Core Graphics in an iOS Playground to recreate a notebook icon from rectangles. It explains why vector-based drawing avoids the pixelation of bitmap icons and demonstrates the setup and initial implementation in code.

### Source excerpt

Photo by Harpal Singh on Unsplash Sometimes you need to add an icon to your iOS app, The designer sends you that plain, simple icon. It can be a bitmap-based icon, like a PNG. Problem with those is they get blurry if zoomed in too much. So we can use a vector-based icon, like a Font Icon or a PDF. These are vector based, contains the instructions to draw the icon, not the icon itself. This way you can stretch the icon as much as you want, and you'll never see "big pixels" in your app. But what happens when you have a screen capture of your icon, but can't get any of these options? Well, this means it's time to dust-off your Core Graphics Skills and draw the icon by yourself. Won't even mention the horrible alternative of taking a screenshot and cutting the icon. Don't do it. I've done it and it's, indeed, horrible. Instead of telling you what Core Graphics is and how it works, we'll write code to solve a problem, so you can experiment and learn by doing. This is my preferred way of learning a new framework / library / language: try things, read a bit, try more stuff, read more seriously, watch videos, GOTO 1. The Notebook Icon The icon we'll try to recreate is this one: Represents a notebook with a background color that can change, a darker same color spine and a couple lines to represent the Notebook title. Create a new Playground We'll do all our coding inside a Playground. So we can get instant feedback. In the end, it will look like this: But for now let's create a Playground called Icons. It will just have one Playground page. Remove everything inside that page and just add: https://medium.com/media/b3fbc322df52879b716e63ffdfa765e0/href We'll use the first import to draw Views and use Core Graphics (it's included by UIKit). PlaygroundSupport will help us show nice previews of our work inside the Playground. Planning our work Looking at that notebook icon we can see it's composed of 4 rectangles: a big rectangle that forms the Notebook itself a spine rectangle a