Swift вырвался за пределы экосистемы Apple
Долгое время язык Swift ассоциировался исключительно с iOS, macOS и watchOS. Если вы хотели написать приложение для Android или веб-сервер, вы брали Java, Kotlin или Python. Но времена изменились. Сегодня кроссплатформенная разработка на Swift — это не эксперимент энтузиастов, а зрелая индустрия с поддержкой на уровне ядра Linux, официальными инструментами от Apple и активным сообществом.
В этой статье мы разберём, как писать на Swift под Windows, Linux, Android и даже для веба. Вы увидите реальные примеры кода, узнаете о фреймворках Vapor и SwiftUI, а также получите дорожную карту для старта. Поехали!
Почему Swift? Три причины выйти за рамки Apple
1. Производительность и безопасность памяти
Swift — компилируемый язык с автоматическим подсчётом ссылок (ARC). Он даёт скорость, близкую к C++, но при этом защищает от утечек памяти и null-pointer ошибок на уровне компиляции. Для серверных и десктопных приложений это критично.
2. Современный синтаксис
Протоколы, расширения, дженерики, опциональные типы — Swift впитал лучшее из функционального и объектно-ориентированного программирования. Код получается лаконичным и читаемым.
3. Единая кодовая база
Написав логику один раз на Swift, вы можете запустить её на iOS, Android (через Swift Android Toolchain), Linux, Windows и даже в браузере (через WebAssembly). Это снижает стоимость поддержки и ускоряет выход на новые платформы.
Инструментарий для кроссплатформенной разработки на Swift
Прежде чем писать код, давайте разберёмся, какие инструменты нам понадобятся. Вот основной стек для кроссплатформенной разработки на Swift в 2025 году:
- Swift Package Manager (SPM) — стандартный менеджер пакетов, работает на всех платформах.
- Vapor — самый популярный веб-фреймворк на Swift. Серверная логика, REST API, WebSockets.
- SwiftUI — декларативный UI-фреймворк. На macOS и iOS работает нативно, на других платформах — через
SwiftUI-WebилиTokamak. - Swift for TensorFlow / NumPy — машинное обучение и научные вычисления.
- Android NDK + Swift Android Toolchain — компиляция Swift-кода под Android.
- WebAssembly (WASI) — запуск Swift в браузере.
Пишем сервер на Swift с Vapor (Linux / macOS / Windows)
Начнём с самого простого и полезного — веб-сервера. Vapor — это зрелый аналог Express.js или Flask, но на Swift. Код работает на Linux, macOS и Windows (через Swift 6).
Установка Vapor
brew install vapor # macOS
curl -sL https://apt.vapor.codes/install.sh | bash # Linux
# Windows: установите Swift 6, затем vapor через SPM
Простой REST API на Vapor
Создадим проект и напишем эндпоинт для работы с задачами (ToDo):
// Sources/App/routes.swift
import Vapor
func routes(_ app: Application) throws {
// GET /hello
app.get("hello") { req -> String in
return "Hello, кроссплатформенный Swift!"
}
// GET /tasks
app.get("tasks") { req -> [String] in
return ["Изучить Swift", "Написать статью", "Запустить на Android"]
}
// POST /task
app.post("task") { req -> String in
let task = try req.content.decode(Task.self)
return "Добавлена задача: \(task.title)"
}
}
struct Task: Content {
let title: String
let isCompleted: Bool
}
Запустите сервер командой vapor run и откройте http://localhost:8080/hello. Вы увидите приветствие. Этот же код без изменений работает на Ubuntu, Windows Server и macOS.
Swift под Android: пишем нативную библиотеку
Многие считают, что Swift для Android — это миф. На самом деле, с помощью Swift Android Toolchain (официальный проект от Apple) вы можете компилировать Swift-код в нативные .so библиотеки, которые вызываются из Java/Kotlin через JNI.
Пример: математическая библиотека на Swift для Android
Создадим простой модуль, который будет считать факториал:
// Sources/Calc/Calc.swift
import Foundation
@_cdecl("calculateFactorial")
public func calculateFactorial(_ n: Int) -> Int {
guard n > 0 else { return 1 }
return (1...n).reduce(1, *)
}
Компилируем под Android:
swift build \
--destination /path/to/android-toolchain.json \
-Xswiftc -target -Xswiftc armv7-unknown-linux-androideabi
Полученный файл .so можно подключить в Android-проект через System.loadLibrary(). Вызов из Kotlin будет выглядеть так:
// MainActivity.kt
external fun calculateFactorial(n: Int): Int
fun main() {
val result = calculateFactorial(5)
println("Факториал 5 = $result") // 120
}
Таким образом, вы можете переиспользовать бизнес-логику, написанную на Swift, в Android-приложениях без переписывания на Kotlin.
SwiftUI на Windows и Linux: Tokamak и SwiftUI-Web
Если вы хотите писать UI на Swift не только для Apple, обратите внимание на Tokamak — реализацию SwiftUI, работающую через DOM (браузер) и GTK (Linux).
Пример: простое приложение с кнопкой на Tokamak
// main.swift
import TokamakShim
struct CounterApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
struct ContentView: View {
@State private var count = 0
var body: some View {
VStack {
Text("Счётчик: \(count)")
.font(.title)
Button("Нажми меня") {
count += 1
}
.padding()
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(8)
}
.padding()
}
}
Запустите через swift run — приложение откроется в браузере (через WebAssembly) или в нативном окне (на Linux через GTK). Это идеальный инструмент для прототипирования кроссплатформенных интерфейсов на Swift.
Swift на Windows: официальная поддержка и WSL
Начиная с Swift 5.7, Microsoft и Apple совместно поддерживают официальные билды для Windows. Вы можете:
- Установить Swift через
winget install Swift - Писать консольные ути