Kotlin Multiplatform для iOS: мифы об интеграции, производительности и рабочем процессе
Если вы годами разрабатывали приложения для iOS, возможно, вы задаётесь вопросом: пострадает ли производительность при использовании Kotlin Multiplatform? Придётся ли отказаться от возможностей и элегантности Swift? Не станет ли работа разработчика похожа на решение второго сорта? Именно такие вопросы чаще всего возникают у опытных iOS-разработчиков, когда речь заходит о KMP.
В этой статье на основе практического опыта разобраны самые распространённые опасения iOS-разработчиков по поводу Kotlin Multiplatform, чтобы вы могли получить практическое представление о том, как на самом деле выглядит разработка для iOS с Kotlin Multiplatform.
Что Kotlin Multiplatform означает для iOS-разработчиков
Kotlin Multiplatform — это технология, позволяющая совместно использовать столько кода, сколько имеет смысл: от одного модуля до большей части бизнес-логики и даже пользовательских интерфейсов с помощью Compose Multiplatform, если это уместно.
Это не попытка заменить нативную разработку. KMP позволяет совместно использовать код на разных платформах, сохраняя полный контроль над тем, что останется нативным.
В целом KMP позволяет командам:
Без проблем совместно использовать бизнес-логику.
Вызывать код на Kotlin из Swift.
Использовать все возможности API iOS в коде на Kotlin.
Использовать Compose Multiplatform для создания экранов, которые можно встраивать в SwiftUI, или создавать весь пользовательский интерфейс на Kotlin.
Использовать платформенные фреймворки, например MapKit или AVFoundation, непосредственно из кода на Kotlin.
Узнайте больше о Kotlin Multiplatform
KMP — это просто ещё один уровень абстракции для кросс-платформенной разработки?
Нет. KMP не заменяет SwiftUI или UIKit, а дополняет нативную разработку.
На практике это означает, что вы можете:
Создавать пользовательский интерфейс на SwiftUI или UIKit, используя нативный код на Swift.
Получать прямой доступ к API iOS без обёрток и промежуточных слоёв.
Интегрировать общий код там, где он приносит пользу, а не везде по умолчанию.
Действительно ли KMP полезен iOS-разработчикам?
Хотя KMP входит в экосистему Kotlin, он не ограничивается Android: это универсальный подход к совместному использованию функциональности на разных платформах, который iOS-команды могут применять на собственных условиях.
Он особенно полезен командам, сталкивающимся с дублированием логики, несогласованным поведением платформ и растущими затратами на сопровождение. Общий слой позволяет устранить дублирование, сохраняя полный нативный контроль.
Основной принцип прост:
Совместно используйте то, что имеет смысл, например бизнес-логику, данные и сетевой код.
Оставляйте нативным то, что должно быть нативным, например платформенные функции, а решение о том, будет ли интерфейс общим или нативным, принимайте отдельно для каждого проекта.
При необходимости со временем меняйте этот баланс.
Kotlin Multiplatform — не решение, ориентированное только на Android, а универсальная технология, которая помогает командам разработчиков повысить согласованность, не теряя нативного пользовательского опыта.
KMP часто окружён мифами о производительности, сложности и потере нативного контроля, которые не отражают того, как он работает на практике. Разберём их и ответим на вопросы, опираясь на опыт.
Миф: кросс-платформенные фреймворки ухудшают производительность и пользовательский опыт iOS
Реальность: Kotlin Multiplatform позволяет совместно использовать код, не ухудшая производительность приложения и пользовательский опыт.
Многие опасаются, что Kotlin Multiplatform негативно скажется на производительности или пользовательском опыте приложения для iOS. Часто это предположение основано на предыдущем опыте использования фреймворков с мостами или собственными средами выполнения, таких как React Native.
KMP работает иначе. Для iOS он генерирует общий код с помощью LLVM — семейства инструментов, к которому относится и цепочка инструментов Swift. Здесь нет моста JavaScript, встроенного слоя среды выполнения или абстракции между вашим кодом и iOS. Это означает, что приложение по-прежнему представляет собой полностью нативный исполняемый файл, производительность которого соответствует типичной разработке для iOS.
Миф: Kotlin Multiplatform — нишевая или рискованная технология
Реальность: Kotlin Multiplatform используется в реальных крупномасштабных приложениях известных компаний, таких как Google, Duolingo, Booking.com и Sony.
Возможно, вы всё ещё ассоциируете Kotlin Multiplatform с ранним экспериментальным периодом. Однако в ноябре 2023 года Kotlin Multiplatform официально получил статус Stable и готов к промышленной эксплуатации на всех поддерживаемых платформах. KMP уже используется в реальных крупномасштабных приложениях для iOS таких известных компаний, как Google, Duolingo, Booking.com, Sony, Philips и McDonald's.
Экосистема тоже продолжает развиваться: в 2025 году Compose Multiplatform для iOS получил статус Stable, благодаря чему помимо общей бизнес-логики стало возможно создавать готовые к промышленному использованию общие пользовательские интерфейсы. Согласно исследованию Kotlin Multiplatform Survey 2025, KMP теперь считается пригодным для промышленного использования: около 70% пользователей плагинов довольны или очень довольны, а около 80% используют Compose Multiplatform.
Посмотрите примеры использования KMP в реальных проектах
KMP поддерживает JetBrains — компания, разработавшая Kotlin. Это не побочный проект, а стратегическая инвестиция, которая будет развиваться благодаря надёжным инструментам, регулярным обновлениям и растущей поддержке экосистемы.
Так безопасно ли внедрять KMP?
KMP прошёл проверку в производственной среде в самых разных отраслях, включая финтех, электронную коммерцию и транспортную мобильность, а также здравоохранение, СМИ и развлечения, туризм и логистику. Технология активно поддерживается и развивается. Кроме того, её можно внедрять постепенно, снижая риски.
И самое главное:
Вы не привязаны к технологии и можете расширять или сокращать её использование.
Ваше приложение для iOS остаётся полностью нативным, даже если вы перестанете использовать общий код.
Kotlin Multiplatform — зрелое решение, готовое к промышленному использованию. Команды уже применяют его для решения реальных кросс-платформенных задач, не подвергая риску всю архитектуру.
Миф: Kotlin Multiplatform предназначен только для Android-разработчиков
Реальность: Kotlin — язык общего назначения, а Kotlin Multiplatform предназначен для кросс-платформенных команд и позволяет iOS-разработчикам формировать общий код.
Kotlin Multiplatform часто воспринимают как технологию, в первую очередь ориентированную на Android, в которой iOS-разработчики лишь следуют за остальными.
Kotlin — язык общего назначения, а общий код в KMP — просто ещё одна часть кодовой базы, а не то, чем владеет какая-то одна платформа. iOS-разработчики могут читать и дополнять его, формировать API и влиять на кросс-платформенную архитектуру.
На практике команды выбирают разные модели работы. Многие iOS-разработчики продолжают в основном работать на Swift, особенно над функциями с насыщенным пользовательским интерфейсом, тогда как общую бизнес-логику разрабатывают совместно или поручают инженерам, специализирующимся на кросс-платформенном коде.
Это улучшает взаимодействие: команды совместно отвечают за логику, уменьшают количество несоответствий и исправляют проблемы один раз вместо того, чтобы дублировать усилия.
Останетесь ли вы в стороне как iOS-разработчик?
KMP не отодвигает iOS-инженеров на второй план, а расширяет их роль, вовлекая в общий слой, где они могут вносить такой же вклад и при этом отвечать за нативный пользовательский опыт. При желании интерфейс iOS может остаться нативным, Swift по-прежнему необходим, а iOS-разработчики сохраняют контроль над решениями, касающимися платформы.
Миф: мой рабочий процесс разработки для iOS станет сложнее
Реальность: Вы не теряете привычный ритм работы, а приобретаете новые навыки. Kotlin Multiplatform рассчитан на постепенное, а не одномоментное внедрение.
Одно из главных опасений по поводу KMP связано с тем, что он может нарушить привычный рабочий процесс iOS-разработки. Если вам уже приходилось переживать такие переходы, как Objective-C → Swift → SwiftUI, и постоянные изменения цепочки инструментов, идея добавить «ещё кое-что» может казаться утомительной. Это обоснованное опасение, поэтому Kotlin Multiplatform и рассчитан на постепенное, а не одномоментное внедрение.
Не нужно за одну ночь переходить на совершенно новую цепочку инструментов. Многие iOS-разработчики могут начать с использования общего модуля. Это позволит почти не менять повседневный рабочий процесс, пока вы оцениваете пользу технологии.
По мере углубления в технологию вы будете осваивать её постепенно — это не выбор по принципу «всё или ничего»:
Начните с использования общих API Kotlin.
Изучите Kotlin настолько, чтобы читать общий код и находить в нём проблемы.
При необходимости участвуйте в разработке общей логики.
Замедлит ли вас внедрение KMP?
Поначалу придётся потратить некоторое время на изучение конфигурации. Но использование общей логики и отказ от параллельных реализаций экономят время, а инструменты оказываются проще, чем вы ожидаете:
Не нужно отказываться от Xcode как основной среды разработки.
Не требуется переходить на незнакомые фреймворки для интерфейса.
Сложность последовательности сборки обычно не затрагивает ваш основной рабочий процесс разработки для iOS.
Вы можете и дальше создавать приложения для iOS так же, как и раньше. KMP лишь добавляет общий слой и даёт дополнительную свободу, не требуя начинать всё с нуля.
Миф: Kotlin Multiplatform создаёт API на Swift, не соответствующие идиомам языка
Реальность: При командной работе и с подходящими инструментами можно создавать API, соответствующие идиомам Swift. Новые инструменты, такие как Swift Export, позволяют интегрировать Kotlin со Swift ещё прямее и естественнее.
Совместимость Kotlin Multiplatform со Swift по-прежнему вызывает вопросы. Сейчас код на Kotlin предоставляется iOS через мост Objective-C, из-за чего API на Swift могут выглядеть менее естественно, особенно в вопросах именования, обрабатываемых значений, обобщённых типов и асинхронных операций.
Да, без должного внимания API могут казаться чуждыми Swift. Однако можно создавать хорошие API на Swift, если при разработке общего кода учитывать потребности iOS. Вот несколько рекомендаций:
Делайте API простыми и продуманными.
Избегайте конструкций Kotlin, которые плохо отображаются в Swift.
При необходимости добавляйте тонкие обёртки на Swift.
Проверяйте API непосредственно в Xcode.
Также можно посмотреть запись доклада «Алхимия Kotlin Multiplatform: как превратить взаимодействие со Swift в золото».
Новые инструменты Kotlin, в частности Swift Export, приближают будущее, в котором API Kotlin будут интегрироваться со Swift более напрямую и естественно, что ещё больше упростит взаимодействие.
Swift Export призван устранить слой Objective-C, а Interopedia служит практической документацией, которая помогает разработчикам понять, как код Kotlin предоставляется Swift и каких конструкций ожидать. Библиотеки, такие как KMP-NativeCoroutines и SKIE, идут ещё дальше: они сглаживают проблемные места текущей модели взаимодействия, улучшают преобразование корутин в async/await Swift и делают сгенерированные API более удобными для Swift.
Миф: совместное использование интерфейса лишает приложение нативного опыта iOS
Реальность: Совместное использование интерфейса необязательно. Команды могут оставить его полностью нативным, используя SwiftUI или UIKit, добавить общий интерфейс с помощью Compose Multiplatform или сочетать оба подхода в зависимости от своих потребностей.
Распространённое заблуждение заключается в том, что для использования Kotlin Multiplatform нужно отказаться от полностью нативного интерфейса iOS. Это не так.
KMP вовсе не требует общего интерфейса. Можно совместно использовать только базовую функциональность, а остальное оставить нативным:
Интерфейс можно написать на SwiftUI или UIKit, используя нативный код на Swift.
Анимации и взаимодействия могут оставаться полностью нативными.
Доступ к API платформы осуществляется напрямую, без обёрток.
Значит ли это, что приложение перестанет ощущаться как приложение для iOS?
Нет, ведь от нативного интерфейса отказываться не нужно.
Обязательно ли использовать общий интерфейс?
Этот подход полностью необязателен, и каждая команда выбирает его самостоятельно. Основная идея проста: Kotlin Multiplatform не ограничивает способы проектирования интерфейса. Можно оставить его полностью нативным, используя SwiftUI или UIKit, добавить общий интерфейс с помощью Compose Multiplatform или сочетать оба подхода в зависимости от своих потребностей.
Экраны, которыми пользуются чаще всего, например панели управления и ключевые пользовательские сценарии продукта, нередко лучше реализовывать полностью нативными средствами, чтобы добиться максимальной производительности и максимально точно учесть особенности платформы. Для менее важных областей хорошо подойдёт Compose Multiplatform. Например, экраны настроек или редко используемые сценарии, такие как аутентификация, отлично подходят для общего интерфейса Compose: здесь скорость разработки и повторное использование кода важнее глубокой нативной оптимизации.
Важно, что Compose Multiplatform совместим с традиционными интерфейсами iOS: общие компоненты можно встраивать рядом с нативными представлениями или внедрять постепенно. Это позволяет командам менять стратегию разработки интерфейса, не выбирая заранее единственный подход.
Узнайте больше о Compose Multiplatform
Миф: внедрение Kotlin Multiplatform означает, что Swift больше не понадобится
Реальность: Swift остаётся необходимым для нативной разработки под iOS, а Kotlin Multiplatform добавляет общий слой для тех частей приложения, которым полезно повторное использование кода.
Многие опасаются, что внедрение Kotlin Multiplatform сделает Swift устаревшим. Но KMP не призван его заменить: Swift остаётся необходимым для разработки под iOS.
Вы продолжите писать на Swift всё, что делает приложение по-настоящему приложением для iOS:
Интерфейс на SwiftUI или UIKit.
Навигацию, анимации и взаимодействие с пользователем.
Платформенные функции и интеграции.
Управление жизненным циклом приложения и системные API.
KMP просто добавляет рядом общий слой. Это означает, что iOS-разработчики продолжают отвечать за нативный пользовательский опыт, общая бизнес-логика часто разрабатывается совместно командами разных платформ, а одни iOS-инженеры вносят вклад в код на Kotlin, в то время как другие сосредоточены преимущественно на Swift.
Значит ли это, что вы перестанете писать на Swift?
Нет, вы по-прежнему будете проводить за ним большую часть времени. А ваша роль расширится: вы получите новые знания о кросс-платформенной логике и сможете влиять на решения, касающиеся общей архитектуры.
Интеграция Kotlin Multiplatform для iOS в существующий проект
Лучше всего начинать интеграцию Kotlin Multiplatform в существующее приложение для iOS с малого. Не нужно заново создавать приложение, перестраивать всё или с первого дня переходить на полностью кросс-платформенный подход.
На практике общий модуль обычно предоставляется для iOS в виде:
Фреймворка, созданного на основе общего кода.
XCFramework для распространения среди целевых сборок.
В зависимости от рабочего процесса команды, зависимости можно интегрировать с помощью Swift Package Manager или настроить другим способом.
Главное — интеграция не обязательно требует серьёзных изменений. Вы не заменяете архитектуру приложения, слой интерфейса или существующий код на Swift. Вы создаёте общий модуль, который код iOS может использовать там, где это имеет смысл.
Поэтому на практике лучше всего начать с небольшой и малорискованной области, например:
Модели данных
Логика валидации
Сетевой код
Отдельный модуль функции
Так команда сможет понять, как KMP вписывается в кодовую базу, сохранив исходный пользовательский опыт iOS. Большинство команд выбирают постепенное внедрение: они добавляют общий код для решения конкретной проблемы и расширяют его использование, только если видят реальную пользу. Так проще поддерживать ответственность за код.
Как безопасно начать использовать KMP?
Выберите одну обособленную задачу, ограничьте её масштаб и рассматривайте KMP как дополнение к проекту, а не как возможность начать всё заново.
Начните работу с Kotlin Multiplatform
Когда Kotlin Multiplatform имеет смысл (и когда нет)
Kotlin Multiplatform имеет смысл, когда логика iOS и Android пересекается, а дублирование начинает создавать проблемы. Он особенно полезен командам, которые хотят сохранить нативный пользовательский опыт iOS и совместно использовать на разных платформах бизнес-правила, сетевой код, обработку данных или логику предметной области.
KMP обычно хорошо подходит, когда:
В приложениях для iOS и Android используется одна и та же базовая логика продукта.
Команды по два раза исправляют одни и те же ошибки.
Поведение платформ постоянно перестаёт быть согласованным.
Он может не подойти, когда:
Приложение в значительной степени зависит от особенностей платформы.
Большая часть сложной логики находится в слое пользовательского интерфейса.
Логики недостаточно, чтобы оправдать дополнительные настройки и координацию.
Заключение
Используя KMP, вы сокращаете дублирование, но добавляете общий слой, который нужно сопровождать. Вы добиваетесь согласованности и сохраняете нативный интерфейс, но при этом вводите взаимодействие между командами и принимаете некоторую сложность, связанную с совместимостью и инструментами.
Kotlin Multiplatform наиболее эффективен, когда общий код приносит очевидную пользу — будь то небольшой изолированный фрагмент логики или более крупный слой предметной области, — не затрагивая области, с которыми лучше справляются платформенные решения.
Часто задаваемые вопросы
- Какую часть кода действительно можно совместно использовать в приложениях для Android и iOS?
Фиксированного процента нет: большинство команд совместно используют бизнес-логику, сетевой код и слой данных. Конкретный объём зависит от приложения и степени сходства платформ. В некоторых случаях команды также решают совместно использовать части интерфейса с помощью Compose Multiplatform, сохраняя при этом нативный внешний вид на iOS или интегрируя общий интерфейс со SwiftUI или UIKit.
- Влияет ли Kotlin Multiplatform на производительность приложений для iOS?
Сам по себе — нет. Общий код компилируется в нативный код, поэтому его производительность сопоставима с обычным кодом iOS. Проблемы возникают только из-за того, как написан код, а не из-за самого KMP.
Какую часть кода действительно можно совместно использовать в приложениях для Android и iOS?
Фиксированного процента нет: большинство команд совместно используют бизнес-логику, сетевой код и слой данных. Конкретный объём зависит от приложения и степени сходства платформ. Kotlin Multiplatform с Compose Multiplatform позволяет совместно использовать до 100% кода приложения, включая пользовательский интерфейс, сохраняя при этом интеграцию с нативными API.
Влияет ли Kotlin Multiplatform на производительность приложений для iOS?
Сам по себе — нет. Общий код компилируется в нативный код, поэтому его производительность сопоставима с обычным кодом iOS.
Как Kotlin Multiplatform взаимодействует со Swift?
Общий код Kotlin преобразуется в нативный фреймворк, который может использовать Swift. В текущей модели взаимодействие обеспечивается мостом Objective-C, что может создавать некоторые неудобства. В будущем ситуация изменится: Swift Export от JetBrains призван полностью устранить слой Objective-C и обеспечить более прямую и естественную интеграцию со Swift.
Нужно ли iOS-разработчикам изучать Kotlin, чтобы использовать KMP?
Не обязательно. Можно начать с использования общего кода Kotlin, а затем постепенно изучать язык по мере необходимости для отладки или участия в разработке.
Обязательно ли совместно использовать интерфейс с помощью Kotlin Multiplatform?
Нет, совместное использование интерфейса необязательно. Многие команды оставляют интерфейс iOS полностью нативным и используют совместно только базовую функциональность. Однако всё больше компаний решают совместно использовать код интерфейса, поскольку на iOS результат выглядит нативно.
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform/kmp-for-ios.html