Episode ini membawa Swift keluar dari ekosistem Apple: pengenalan server-side Swift dengan Vapor, Kitura, dan SwiftNIO, perbandingan use case dengan platform lain, package Swift yang lintas platform, serta menjalankan Swift di Linux dan Docker untuk produksi.

Sejak Swift menjadi open source pada 2015, bahasanya tidak lagi milik Apple semata. Episode 19 membahas cross-platform dan server-side Swift: memakai Swift untuk backend dengan framework seperti Vapor dan SwiftNIO, menjalankannya di Linux dan Docker, serta menempatkannya pada use case yang tepat.
Satu bahasa untuk client dan server membawa keuntungan nyata: model data dan logika bisnis bisa dibagikan, dan developer tidak perlu pindah mental antar bahasa. Bagi kalian yang sudah menguasai Swift, ini adalah superpower tambahan.
Vapor adalah framework web paling populer untuk Swift, menawarkan routing, middleware, template, dan integrasi database dalam satu ekosistem. Konsepnya mirip Express di Node.js atau Gin di Go:
import Vapor
func routes(_ app: Application) throws {
app.get("health") { req in
return "OK"
}
app.get("halo", ":nama") { req -> String in
let nama = req.parameters.get("nama") ?? "dunia"
return "Halo, \(nama)!"
}
}app.get("halo", ":nama"){ ... } mendaftarkan handler untuk route dengan parameter dinamis. Vapor ditulis di atas SwiftNIO, sehingga mendukung concurrency tinggi dengan resource yang rendah.
SwiftNIO adalah framework low-level untuk networking asynchronous dan event-driven — fondasi Vapor. Ia memberikan kontrol penuh atas protokol, cocok untuk server custom dan proxy. Kitura, framework dari IBM, kini dalam mode pemeliharaan dengan migrasi yang disarankan ke Vapor atau SwiftNIO — bukti bahwa ekosistem server-side Swift terus konsolidasi.
Server-side Swift paling kuat pada use case berikut:
Sebaliknya, jika ekosistem library dan kecepatan membangun adalah prioritas utama, bahasa dengan kematangan backend yang lebih panjang seperti Go atau Node bisa lebih cepat. Pilih berdasarkan kebutuhan tim dan project, bukan tren.
Kekuatan utama satu bahasa adalah package lintas platform: library yang sama dipakai di aplikasi iOS dan di server. Kuncinya adalah bergantung pada API lintas platform — Foundation, SwiftNIO, dan library Vapor murni:
// swift-tools-version: 6.0
import PackageDescription
let package = Package(
name: "IntiBisnis",
platforms: [.macOS(.v13), .iOS(.v16)],
products: [
.library(name: "IntiBisnis", targets: ["IntiBisnis"])
],
targets: [
.target(name: "IntiBisnis")
]
)platforms: [.macOS(.v13), .iOS(.v16)] mendeklarasikan platform yang didukung package. Kode di IntiBisnis memakai Foundation saja sehingga bisa berjalan di iOS dan server Linux — model domain dan validasi menjadi satu sumber kebenaran.
Agar benar-benar lintas platform, jauhi API yang hanya ada di platform Apple seperti UIKit dan Core Data di package inti. Pisahkan ke target terpisah: library inti tetap murni lintas platform, sementara integrasi spesifik platform hidup di target aplikasi.
Swift berjalan penuh di Linux dengan toolchain resmi dari swift.org. Pemasangannya beragam per distribusi; setelah terinstall, semua perintah yang sudah kalian kenal bekerja sama:
swift --version
swift build
swift testswift build di Linux membangun package dengan cara yang identik dengan macOS — tidak ada konfigurasi tambahan untuk portability. Ini yang membuat Swift cocok sebagai bahasa server di mesin Linux apa pun.
Untuk deployment yang reproducible, bungkus server Swift dalam Docker image:
FROM swift:6.0 AS builder
WORKDIR /app
COPY Package.swift Package.resolved ./
COPY Sources ./Sources
RUN swift build -c release
FROM swift:6.0-slim
WORKDIR /app
COPY --from=builder /app/.build/release/App /app/
EXPOSE 8080
CMD ["./App"]FROM swift:6.0 AS builder memakai image builder resmi, dan FROM swift:6.0-slim image runtime yang lebih ramping. Build dijalankan dengan swift build -c release dan hasilnya disalin ke image runtime.
Build dan jalankan container:
docker build -t app-swift .
docker run -p 8080:8080 app-swiftdocker build -t app-swift . membangun image dari Dockerfile, dan docker run -p 8080:8080 app-swift menjalankan server di port 8080. Container ini berjalan sama di laptop, staging, dan production — deployment yang konsisten untuk episode 20.
Info
Saat membangun image Swift, cache layer dependency dengan menyalin Package.swift dan Package.resolved sebelum source code — perubahan kode tidak akan memicu re-resolve dependency, mempercepat iterasi build.
Inti yang harus dibawa pulang:
Di episode 20 selanjutnya kita akan membahas deployment dan app distribution — distribusi aplikasi iOS melalui App Store, beta testing dengan TestFlight, deployment untuk macOS, watchOS, dan tvOS, serta code signing, notarization, dan release management. Karya kalian akan sampai ke pengguna!