Что мы на нём делаем

Swift — место, где наши Flutter-приложения по-настоящему встречаются с iOS. Кроссплатформенный слой владеет большей частью продукта, но не тем, что живёт в операционной системе: фоновое выполнение, notification service extensions, keychain и биометрия, NFC, вендорские SDK, поставляемые нативными фреймворками, и всё, что должно появляться за пределами самого приложения.

Это пишется на Swift за platform channel, так что со стороны Dart виден чистый API и ни одной детали жизненного цикла iOS. Это точный аналог того, что делает Kotlin на Android, — и платформенная интеграция обычно означает написать обе половины.

Где он нужен

Внутри наших Flutter-проектов, а не рядом с ними, поэтому отдельной строкой в портфолио не появляется. Он возникает там, куда кроссплатформенный код не дотягивается, — например в App Clip-половине работы с отложенными диплинками, о которой мы писали: переносимой реализации у неё нет.

Виджеты на домашнем экране, share-расширения и поверхности на SwiftUI — второй частый случай: это отдельные таргеты, в которых движок Flutter не работает.

Когда мы его рекомендуем

Для iOS-половины платформенной интеграции и для полностью нативного iOS-приложения, когда продукт действительно привязан к платформе: глубокая интеграция с ОС, аудитория только у Apple или команда, уже вложившаяся туда.

Не по умолчанию для продукта, которому нужен ещё и Android. Две нативные кодовые базы — это две команды, два релизных цикла и два набора багов; если ничего к этому не вынуждает, Flutter со слоем Swift под ним даёт те же возможности заметно дешевле.