iOS Roadmap - Полезное | Swift, SwiftUI, Интервью
Один Swift модуль для iOS и Android
Давай представим, что ты написал на Swift расчёты, парсер или обработку звука. Всё отлично работает, никаких проблем нет, но ты видишь, как коллега по Android собирается реализовать ту же логику на Kotlin.
И тут ты вспоминаешь: Swift же умеет и в Android
Можно попробовать вынести этот код в общий модуль, и интерфейсы оставить отдельными для каждой платформы.
Так уже кто-то делает? 🤔
Оказывается, что да! Spark использует Swift для общего кода между платформами. При этом такие команды начинали со своими инструментами задолго до нынешнего официального SDK. Можно подробнее посмотреть и про другие приложения.
И вот в сентябрьском Swift 6.4 релизе доработали сборку и взаимодействие языков:
• Swift Build теперь поддерживает Android в SwiftPM без дополнительного post-install скрипта.
• Swift / Java интероп расширил поддержку async и throws в обёртках для протоколов и колбэков.
Как это устроено? Swift модуль компилируется в нативную библиотеку под Android и включается в приложение.
Kotlin / Java код обращается к нему через JNI и инструменты Swift / Java помогают сгенерировать нужные обёртки. Интерфейс при этом можно оставить на Jetpack Compose. Если интересно углубиться, вот ссылка! 👌
Есть и примеры, которые можно изучить:
1. Swift пакет, который считает SHA256 через swift-crypto, где андроид приложение на Kotlin с Compose вызывает его по нажатию кнопки. [репозиторий]
2. Пример с асинхронными вызовами и реализацией Swift протокола на Java.
Как по мне, для эксперимента можно взять один небольшой модуль. Подключить, прогнать тесты (и написать если не написаны) на Android и посмотреть, сколько приседаний потребуется.
Тогда будет понятнее, что выгоднее для конкретного проекта: поддерживать эту интеграцию или две реализации логики.
4 · 132 ·