Từ chối Xcode: Kỹ sư xây dựng ứng dụng iOS hoàn chỉnh chỉ với Doom Emacs

Phần mềm03 tháng 6, 2026·4 phút đọc

Một kỹ sư lập trình đã chia sẻ hành trình phát hành ứng dụng iOS đầu tiên hoàn toàn trong môi trường Doom Emacs, thay thế Xcode bằng các công cụ dòng lệnh và kịch bản tùy chỉnh. Bài viết đi sâu vào quy trình xây dựng, chạy thử trên nhiều thiết bị ảo và quản lý logs một cách tối ưu.

Từ chối Xcode: Kỹ sư xây dựng ứng dụng iOS hoàn chỉnh chỉ với Doom Emacs

Đối với hầu hết các lập trình viên iOS, Xcode là "bất di bất dịch". Tuy nhiên, Wassim, một kỹ sư phần mềm, đã chứng minh điều ngược lại khi phát hành ứng dụng iOS đầu tiên của mình là SPEEM hoàn toàn bên trong Doom Emacs.

Không chỉ đơn thuần là soạn thảo mã nguồn, anh đã xây dựng một quy trình làm việc trọn vẹn: viết code Swift, biên dịch (build), khởi động trình giả lập (simulator), cài đặt ứng dụng, chạy và thậm chí là lọc logs. Tất cả đều được thực hiện thông qua các phím tắt riêng bên trong Emacs.

Tại sao lại là Doom Emacs?

Wassim là người dùng Emacs "cứng" với 4 năm kinh nghiệm sử dụng Doom Emacs hàng ngày cho Rust, Elixir, Kotlin/Android và web. Khi quay lại với iOS, việc sử dụng Xcode trong hai tuần khiến anh cảm thấy như "đi mượn giày người khác".

Để duy trì sự nhất quán trong quy trình làm việc đa ngôn ngữ của mình, anh đã quyết định viết một module cấu hình riêng tên là modules/ios.el, biến Emacs thành một môi trường phát triển iOS đầy đủ tính năng.

Các công cụ nền tảng của Apple

Bí mật nằm ở việc Apple cung cấp một kho tàng các công cụ dòng lệnh (command-line tools) mạnh mẽ mà Xcode chỉ đóng vai trò là một giao diện đồ họa bao bọc chúng. Bằng cách kết hợp các công cụ này, bất kỳ trình soạn thảo nào có thể chạy lệnh shell đều có thể trở thành IDE cho iOS.

Các công cụ chủ chốt được sử dụng bao gồm:

  • xcodebuild: Dùng để biên dịch dự án .xcodeproj hoặc .xcworkspace.
  • xcrun simctl: Điều khiển trình giả lập iOS (boot, cài đặt, chụp màn hình).
  • sourcekit-lsp: Máy chủ ngôn ngữ (Language Server Protocol) chính thức của Apple cho Swift, hỗ trợ gợi ý code và tìm kiếm định nghĩa.
  • xcode-build-server (của bên thứ ba): Tạo file buildServer.json để LSP hiểu rõ cấu trúc dự án.

Xây dựng quy trình "Made in Emacs"

Với khoảng 1000 dòng mã Emacs Lisp, Wassim đã tạo ra các phím tắt với tiền tố SPC i (iOS) để xử lý mọi thứ.

Biên dịch và Chạy

Lệnh SPC i b sẽ giải quyết các phụ thuộc Swift Package, biên dịch dự án và tự động khởi động lại LSP để làm mới chẩn đoán lỗi. Đặc biệt, tác giả đã bật COMPILER_INDEX_STORE_ENABLE=YES, giúp con trỏ "tìm tham chiếu" (find references) hoạt động chính xác tuyệt đối thay vì chỉ đoán văn bản.

Để chạy ứng dụng, lệnh SPC i s cho phép chọn nhiều trình giả lập cùng lúc (ví dụ: chạy song song trên iPhone và iPad với ngôn ngữ Ả Rập và tiếng Anh). Emacs sẽ tự động khởi chạy các thiết bị ảo này, cài đặt file .app và mở ứng dụng.

Quản lý Logs thông minh

Một trong những điểm sáng nhất là hệ thống xem logs. Thay vì một luồng dữ liệu lộn xộn, Emacs tạo ra một bộ lọc "whitelist" riêng biệt. Tác giả sử dụng các ký tự emoji trong code Swift của mình (ví dụ: , , ⚠️) để đánh dấu. Chỉ những dòng logs chứa các emoji này hoặc từ khóa như error, fault, CloudKit mới được hiển thị và tô màu theo mức độ nghiêm trọng. Điều này giúp loại bỏ hoàn toàn các "噪音" (tiếng ồn) hệ thống không cần thiết.

Tự động tải lại (Auto-reload)

Tính năng SPC i r sử dụng fdentr để theo dõi các thay đổi trong file Swift. Ngay khi file được lưu, ứng dụng sẽ tự động biên dịch và cài đặt lại lên simulator, tạo ra trải nghiệm giống như "hot-reload" cho các chỉnh sửa giao diện SwiftUI nhỏ.

Vẫn còn những thứ cần Xcode

Mặc dù rất tự tin vào thiết lập của mình, Wassim thừa nhận rằng vẫn có những việc anh buộc phải mở Xcode:

  • Cấp phép và ký ứng dụng (Provisioning & Signing).
  • Chỉnh sửa Asset Catalogs (biểu tượng, màu sắc) phức tạp.
  • Sử dụng Storyboards hoặc .xib files (dù anh cố gắng dùng SwiftUI càng nhiều càng tốt).
  • Tối ưu hóa hiệu năng và phân tích bộ nhớ với Instruments.

Kết luận

Câu chuyện này không phải là khuyến khích mọi lập trình viên iOS từ bỏ Xcode, mà là minh chứng cho sự linh hoạt của các công cụ dòng lệnh mà Apple cung cấp. Nếu bạn đã là một người dùng Emacs "bài bản", việc phát triển iOS mà không cần chạm vào Xcode hoàn toàn khả thi. Ngược lại, nếu bạn mới bắt đầu, Xcode vẫn là một công cụ xuất phát an toàn và mạnh mẽ.

Thiết lập này cho thấy sự sáng tạo của các lập trình viên trong việc tùy chỉnh công cụ để phục vụ phong cách làm việc riêng biệt, biến trình soạn thảo văn bản thuần túy thành một môi trường phát triển ứng dụng di động đầy sức mạnh.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗