Promptberry: Thư viện Swift tạo giao diện tương tác cho CLI
Promptberry là một thư viện Swift giúp phát triển công cụ dòng lệnh (CLI) trở nên tương tác và thân thiện hơn với nhiều tính năng như nhập liệu có xác thực, chọn lựa từ danh sách, nhập đa dòng, xác nhận hành động và hiển thị thanh tiến trình.

Promptberry: Thư viện Swift tạo giao diện tương tác cho CLI
Swift là một ngôn ngữ tuyệt vời để xây dựng các công cụ dòng lệnh như trình quản lý gói, bộ sinh code hay các script triển khai. Tuy nhiên, thư viện chuẩn của Swift khi nhận input từ người dùng chỉ có print và readLine, gây hạn chế về trải nghiệm tương tác.
Giới thiệu Promptberry
Để khắc phục điều này, thư viện Promptberry ra đời với mục tiêu cung cấp các thành phần tương tác cho CLI một cách dễ dàng và trực quan hơn. Promptberry hỗ trợ:
- Nhập liệu có placeholder và xác thực trực tiếp (inline validation)
- Các dạng prompt lựa chọn một hoặc nhiều mục từ danh sách
- Xác nhận hành động của người dùng
- Nhập liệu đa dòng
- Các spinner, thanh tiến trình hiển thị trạng thái công việc bất đồng bộ
- Xử lý hủy tác vụ (Ctrl+C) một cách mượt mà
Các dạng prompt cơ bản
Nhập liệu văn bản với xác thực
Khác với readLine truyền thống, Promptberry.text có hỗ trợ placeholder, và nhận một closure để validate đầu vào. Nếu input không hợp lệ, lỗi được hiển thị ngay bên dưới mà không xóa dữ liệu đã nhập.
let name = try Promptberry.text(
"Project name?",
placeholder: "MyApp",
validate: { $0.isEmpty ? "Name cannot be empty." : nil }
)
Nhập mật khẩu được mã hóa
Muốn nhập mật khẩu, chỉ cần dùng Promptberry.password và input sẽ được ẩn tự động.
let secret = try Promptberry.password("Choose a password:", mask: "•")
Chọn lựa trong danh sách
Lựa chọn một mục (select)
Cho phép người dùng di chuyển qua các tùy chọn bằng phím mũi tên hoặc j/k, sau đó nhấn Enter để chọn.
let projectType = try Promptberry.select(
"Project type:",
options: ["Executable", "Library", "Plugin"]
)
Nếu không có sẵn lựa chọn phù hợp, có thể bật allowOther để người dùng tự nhập giá trị khác.
Tự động hoàn thành (autocomplete)
Dành cho danh sách dài, tính năng này lọc dần tùy chọn khi gõ, giúp tìm nhanh hơn.
let license = try Promptberry.autocomplete(
"License:",
options: ["MIT", "Apache 2.0", "GPL-3.0", "BSD-2-Clause", "MPL-2.0"],
placeholder: "Type to filter..."
)
Chọn nhiều mục (multiselect)
Người dùng có thể bật/tắt các mục bằng phím Space và xác nhận bằng Enter.
let features = try Promptberry.multiselect(
"Include extras:",
options: ["Tests", "CI workflow", "README", "SwiftLint"],
initialValues: ["Tests", "README"]
)
Xác nhận hành động
Trước khi thực hiện các thao tác không thể hoàn tác, Promptberry cung cấp prompt xác nhận với hai lựa chọn dễ hiểu.
let confirmed = try Promptberry.confirm(
"Create \"\(name)\"?",
active: "Yes, create it",
inactive: "No, cancel"
)
guard confirmed else {
Promptberry.cancel("Nothing created.")
exit(0)
}
Nhập liệu đa dòng
Khi cần nhập văn bản dài, multiline giữ cho người dùng ở lại khung nhập, mỗi Enter xuống dòng mới và Ctrl+D kết thúc.
let description = try Promptberry.multiline(
"Short description:",
placeholder: "What does this project do?"
)
Hiển thị spinner và thanh tiến trình cho tác vụ bất đồng bộ
Sau khi thu thập thông tin, bạn có thể dùng spinner động để hiển thị tiến trình của các bước async.
try await tasks([
PromptTask("Scaffolding project structure") { try await scaffold() },
PromptTask("Writing Package.swift") { try await writeManifest() },
PromptTask("Installing dependencies") { try await installDeps() }
])
Nếu có tổng số bước cố định, thanh tiến trình (progress bar) truyền đạt rõ ràng hơn thay vì spinner đơn.
let p = Promptberry.progress(total: files.count, message: "Copying files...")
for file in files {
try await copy(file)
await p.advance()
}
await p.complete("All files copied!")
Xử lý hủy prompt khi nhấn Ctrl+C
Promptberry ném lỗi PromptCancelled khi người dùng bấm Ctrl+C. Bạn nên bắt lỗi này để xử lý hủy một cách lịch sự.
do {
let name = try Promptberry.text("Project name?")
// ...
} catch is PromptCancelled {
Promptberry.cancel("Cancelled.")
exit(0)
}
Giới thiệu và kết thúc phiên làm việc
intro và outro giúp đánh dấu rõ ràng điểm bắt đầu và kết thúc tương tác, khiến công cụ trông chuyên nghiệp và thân thiện hơn với người dùng.
Promptberry.intro("New Swift Project")
// prompts...
Promptberry.outro("Happy coding!")
Promptberry là giải pháp hữu ích giúp các nhà phát triển Swift nâng cao trải nghiệm tương tác CLI, giảm bớt việc phải tự triển khai các cơ chế phức tạp và tập trung vào chức năng chính của công cụ. Đối với cộng đồng phát triển Swift tại Việt Nam, đây là một thư viện đáng để thử khi xây dựng các tiện ích dòng lệnh chuyên nghiệp.
Bài viết liên quan

Phần mềm
Anthropic ra mắt Claude Opus 4.7: Nâng cấp mạnh mẽ cho lập trình nhưng vẫn thua Mythos Preview
16 tháng 4, 2026

Công nghệ
Qwen3.6-35B-A3B: Quyền năng Lập trình Agentic, Nay Đã Mở Cửa Cho Tất Cả
16 tháng 4, 2026

Công nghệ
Spotify thắng kiện 322 triệu USD từ nhóm pirate Anna's Archive nhưng đối mặt với bài toán thu hồi
16 tháng 4, 2026
