Bên trong app macOS có gì? App trông như file đơn khối, thực ra là thư mục có icon đẹp gọi là bundle. Mở bundle → thấy mảng file cần thiết cho ứng dụng. Hiểu bundle hữu ích cho: lập trình viên, admin, mod game, builder Hackintosh, người quan tâm bảo mật, troubleshooting app.
macOS App Bundle là gì?
Theo Apple: bundle là "thư mục có cấu trúc phân cấp chuẩn chứa code thực thi và tài nguyên cho code đó". Tên khác: ứng dụng. Có cấu trúc/định dạng bắt buộc dev phải tuân thủ để app chạy đúng. Vi phạm quy ước → app hỏng. Nếu app chạy không ổn, bundle là nơi troubleshooting hữu ích.
Không chỉ app, bundle còn dùng cho: .framework, .bundle, .plugin, .kext. Finder hiển thị bundle như object đơn nhất, cho đến khi mở package contents.
Mở Application Bundle
Khác với thư mục thường, bundle cần "vũ điệu" ngắn:
- Chuột phải icon app trong
/Applications/. - Menu ngữ cảnh → Show Package Contents.
- Double-click thư mục Contents → vào thư mục chính của app.
Cấu trúc cơ bản macOS App Bundle
Trong thư mục Contents, tìm thấy các file. Tất cả app macOS bắt buộc có:
- Info.plist: cấu hình bắt buộc, chuỗi định danh ứng dụng.
- MacOS/Executable: code chạy khi user mở app, nằm trong thư mục "MacOS". Không có executable → không có bundle.
Thường thấy thêm các thư mục phổ biến:
- Plugins: mini-executable mở rộng chức năng core. Khác với resource tĩnh, plugin thêm chức năng động.
- Resources: file hỗ trợ app phụ thuộc: ảnh, icon, âm thanh, font, file nib, localization, data store. Hỗ trợ chức năng core (khác plugin).
- Frameworks: framework cấp cao app cần – chính là bundle riêng, nhưng cấu trúc phân cấp khác.
- CodeSignature: file plist cấu trúc cung cấp chữ ký mã cho từng phần app. Chữ ký cho app/macOS xác minh tính toàn vẹn, ngăn chặn tấn công chiếm đoạt app.
iOS app bundle dùng cùng cấu trúc cơ bản, nhưng thường phân cấp khác.
Info.plist
Info.plist là "hồ sơ" cơ bản của app: bundle identifier (phải duy nhất – Apple khuyến nghị reverse domain: com.apple.siri.launcher, org.videolan.vlc). Xem danh sách key của Apple để hiểu từng key.
Chứa thêm: icon app, tên app, số phiên bản, bản quyền, link báo lỗi, ngôn ngữ mặc định. Quy ước: chữ "I" trong "Info" luôn viết hoa.
Executable (File thực thi)
Nơi chứa code chính của app. Khi mở app, macOS chạy code trong executable (trong thư mục MacOS của bundle). Gần như mọi app chỉ có 1 executable (có thể 2+ cho helper executable). File này thường chỉ thú vị dev vì user không xem/sửa dễ dàng.
Resources và file hỗ trợ khác
Mọi thứ thiết yếu cho app nên nằm trong bundle. Không phải executable → bỏ vào thư mục resource. Có thể lưu trong Resources chính hoặc chia thư mục con.
- Đa số resource → thư mục Resources.
- Frameworks → Frameworks.
- Plugins → Plugins.
- Localization (
.lproj) → Resources.
Ngoài yêu cầu trên, Apple có nhiều quy ước/khuyến nghị khác nên tuân thủ trừ khi có lý do chính đáng.
Kết luận
App macOS chứa trong bundle – container phân cấp cho file app. Cấu trúc cơ bản giống nhau mọi app. File thú vị nhất cho user nằm trong thư mục Resources bên trong bundle app.