VPS

Build app iOS có cần Mac không? Ranh giới thật

Thanh Nguyễn Đăng 9 phút đọc

Build app iOS có cần Mac không? Ranh giới thật
Mục lục bài viết
  1. Vì sao bắt buộc phải có macOS
  2. Những việc máy chủ Linux làm trọn vẹn
  3. Ba cách có được máy Mac
  4. Kiến trúc thực tế cho đội làm cả hai nền tảng
  5. Những lời khuyên trên mạng nên bỏ qua
  6. Ranh giới thật: việc gì cần máy Mac, việc gì không
  7. Ba cách có được máy Mac cho việc dựng
  8. Máy chủ Linux gánh phần nào trong luồng làm việc
  9. Câu hỏi thường gặp
  10. Bài viết liên quan

Trả lời nhanh: Câu trả lời thẳng: có, khâu biên dịch, ký và đóng gói file IPA bắt buộc chạy trên macOS. Đó là ràng buộc từ điều khoản và công cụ của Apple chứ không phải giới hạn kỹ thuật vượt qua được. Nhưng đừng vì thế mà nghĩ máy chủ Linux vô dụng với dự án iOS: backend, API, database, kho bản dựng, phần tự động hóa và toàn bộ nhánh Android đều chạy trên Linux. Ranh giới nằm đúng ở bước tạo file cài đặt cho iPhone.

Câu hỏi này xuất hiện trong mọi nhóm lập trình di động Việt Nam, thường kèm hy vọng có mẹo nào đó lách được. Trả lời trung thực thì tiết kiệm cho bạn nhiều thời gian hơn: không có mẹo hợp lệ nào cả. Điều đáng bàn hơn là vẽ cho rõ ranh giới, để bạn biết phần nào đầu tư máy Mac, phần nào dùng máy chủ Linux vốn rẻ hơn nhiều.

Vì sao bắt buộc phải có macOS

Chuỗi công cụ biên dịch iOS gồm trình biên dịch, bộ khung hệ thống và các tiện ích ký số đều nằm trong Xcode, mà Xcode chỉ chạy trên macOS. Việc ký ứng dụng cũng dựa vào kho chứng chỉ của hệ điều hành. Cuối cùng, thao tác nộp bản lên cửa hàng cũng đi qua công cụ chỉ có trên nền tảng đó.

Có người sẽ nhắc tới chuyện dựng máy ảo macOS trên phần cứng khác. Về mặt kỹ thuật thì làm được, nhưng điều khoản cấp phép của Apple chỉ cho phép chạy macOS trên phần cứng do Apple sản xuất. Với dự án cá nhân bạn tự chịu trách nhiệm, còn với hệ thống của công ty thì đây là rủi ro pháp lý không đáng đánh đổi, nhất là khi bạn đã bỏ tiền mua tài khoản nhà phát triển.

Những việc máy chủ Linux làm trọn vẹn

Danh sách này dài hơn phần lớn người ta tưởng:

  • Backend và API mà app iOS gọi tới. Đây thường là phần tốn công nhất của cả dự án và không liên quan gì tới Apple.
  • Database, bộ nhớ đệm, hàng đợi phục vụ ứng dụng.
  • Kho lưu bản dựng, nơi cất các file đã build để đội kiểm thử tải về.
  • Máy chủ điều phối CI, chạy các bước không cần Mac như kiểm tra định dạng mã nguồn, chạy unit test phần logic thuần, chuẩn bị tài nguyên.
  • Toàn bộ nhánh Android, kể cả khi dự án dùng Flutter hay React Native, theo đúng cách làm trong bài build APK trên VPS Linux.
  • Máy làm việc từ xa cho lập trình viên, như mô tả ở bài máy dev từ xa.

Nói cách khác, với một dự án đa nền tảng thì máy Mac chỉ cần cho một khâu, còn lại chạy trên hạ tầng rẻ hơn nhiều.

Ba cách có được máy Mac

Mua máy đặt tại văn phòng. Rẻ nhất về lâu dài nếu đội bạn build thường xuyên. Một máy Mac mini cấu hình vừa phải phục vụ tốt cho đội nhỏ. Nhược điểm là bạn tự lo điện, mạng, và phải để máy bật liên tục nếu muốn CI chạy ban đêm.

Đặt máy tại trung tâm dữ liệu. Mua máy rồi gửi vào chỗ đặt máy chủ để có điện và mạng ổn định, truy cập từ xa mọi lúc. Hợp với công ty đã có nhu cầu build đều đặn và muốn máy nằm cùng chỗ với hạ tầng còn lại.

Thuê máy Mac theo giờ hoặc theo tháng. Không phải bỏ vốn ban đầu, hợp với dự án ngắn hoặc lúc chưa chắc nhu cầu dài hạn. Đổi lại chi phí theo thời gian dùng, và cần cân nhắc chuyện chứng chỉ ký số nằm trên máy của bên khác.

Kiến trúc thực tế cho đội làm cả hai nền tảng

Mô hình nhiều đội Việt Nam đang dùng, chia theo đúng ranh giới ở trên:

  • Một VPS Linux chạy backend, database và các dịch vụ phụ trợ, đặt trong nước để người dùng kết nối nhanh.
  • Một VPS Linux thứ hai làm máy build Android và chạy runner CI cho các bước không cần Mac.
  • Một máy Mac duy nhất chỉ làm đúng việc build và nộp bản iOS, nhận lệnh từ hệ thống CI chung.

Cách chia này giữ chi phí ở mức hợp lý vì phần đắt nhất là máy Mac chỉ cần đúng một cái, trong khi phần chạy liên tục hai bốn trên bảy là backend thì nằm trên hạ tầng rẻ và dễ nâng cấp.

Những lời khuyên trên mạng nên bỏ qua

Dịch vụ build iOS không cần Mac. Chúng vẫn chạy trên máy Mac ở phía sau, chỉ là bạn không nhìn thấy. Không có gì sai khi dùng, nhưng đừng hiểu nhầm rằng ràng buộc đã biến mất.

Biên dịch chéo từ Linux. Có vài dự án thử nghiệm, nhưng chưa cái nào đủ tin cậy cho ứng dụng thật, và bạn vẫn kẹt ở khâu ký số cùng khâu nộp bản.

Máy ảo macOS trên máy chủ thuê. Vi phạm điều khoản như đã nói, và rủi ro thật là mất tài khoản nhà phát triển, thứ đắt hơn nhiều so với khoản tiết kiệm được.

Kết luận thực dụng: chấp nhận chi phí một máy Mac cho khâu iOS, rồi tối ưu mạnh phần còn lại trên Linux. Đó là cách vừa đúng luật vừa rẻ.

Ranh giới thật: việc gì cần máy Mac, việc gì không

ViệcCần máy Mac không
Viết mã, quản lý kho mã nguồnKhông
Chạy kiểm thử logic không liên quan giao diệnKhông
Chạy máy chủ phía sau cho ứng dụngKhông
Biên dịch và đóng gói ứng dụng iOSCó, bắt buộc
Ký và nộp ứng dụng lên cửa hàngCó, bắt buộc
Chạy trình giả lập iOSCó

Nói rõ: yêu cầu này đến từ điều khoản cấp phép hệ điều hành của Apple, không phải từ giới hạn kỹ thuật. Các cách lách bằng máy ảo trên phần cứng không phải của Apple vi phạm điều khoản, và với doanh nghiệp thì đó là rủi ro không đáng.

Ba cách có được máy Mac cho việc dựng

CáchChi phíPhù hợp
Mua một máy Mac để bàn làm máy dựng chungTrả một lầnĐội làm iOS thường xuyên
Thuê máy Mac theo giờ trên dịch vụ đám mâyTheo giờ hoặc theo thángĐội dựng vài lần mỗi tuần
Dùng dịch vụ dựng tự động có sẵn máy MacTheo số phút dựngĐội nhỏ, ít bản dựng

Cách tính: đếm số lần dựng mỗi tháng nhân thời gian mỗi lần, so với chi phí thuê. Với đội dựng dưới vài chục lần mỗi tháng, thuê thường rẻ hơn mua.

Máy chủ Linux gánh phần nào trong luồng làm việc

  • Máy chủ Linux làm phần lớn công việc: chạy kiểm thử, dựng bản Android, chạy máy chủ phía sau, lưu trữ mã nguồn.
  • Một máy Mac chỉ để dựng và nộp bản iOS, gọi tới từ quy trình tự động.
  • Không để một người giữ máy Mac trên bàn riêng. Máy dựng nên là tài nguyên chung, người đó nghỉ phép thì cả đội không dựng được.
  • Sao lưu chứng chỉ ký và hồ sơ cấp phép ở nơi khác máy đó. Mất chúng là không phát hành cập nhật được.

Phần dựng Android và máy chủ phía sau chạy trên máy chủ Linux, xem bài về dựng ứng dụng Android trên máy chủ.

Câu hỏi thường gặp

Có cách hợp lệ nào build iOS mà không cần Mac không?

Không có cách nào bỏ được macOS khỏi chuỗi công cụ. Các dịch vụ quảng cáo build không cần Mac thực chất vẫn chạy trên máy Mac phía sau. Điều bạn chọn được là sở hữu máy Mac hay thuê, chứ không phải có cần hay không.

Dự án Flutter hoặc React Native thì sao?

Phần code chung viết ở đâu cũng được, nhánh Android build trên Linux bình thường, nhưng bản iOS vẫn phải qua máy Mac ở bước cuối. Vì vậy đội đa nền tảng thường chỉ cần một máy Mac dùng chung cho cả nhóm.

Máy Mac cấu hình nào là đủ để build?

Một máy Mac mini đời gần đây với bộ nhớ vừa phải đã build tốt cho phần lớn dự án. Yếu tố ảnh hưởng nhiều nhất là dung lượng ổ đĩa vì Xcode và các bản dựng chiếm rất nhanh, nên hãy chọn ổ rộng hơn mức bạn nghĩ là đủ.

Backend cho app iOS nên đặt ở đâu?

Đặt trong nước nếu người dùng của bạn ở Việt Nam, vì độ trễ ảnh hưởng trực tiếp tới cảm giác mượt của ứng dụng. Đây là phần chạy liên tục và cần ổn định nhất, khác hẳn máy build vốn chỉ chạy khi có bản mới.

Chia sẻ:Facebook

Thanh Nguyễn

TND

Tư vấn bản quyền, VPS và máy chủ kèm hóa đơn VAT, hợp đồng đầy đủ cho doanh nghiệp.