Khắc phục: Không mở được Liên Minh Huyền Thoại trên Mac sau khi cập nhật
Gặp lỗi 'The application League of Legends can't be opened' trên Mac? Đây là sự cố lặp đi lặp lại do trình patcher của Riot làm hỏng chữ ký mã (code signature) của ứng dụng. Đây là cách sửa chỉ với một lệnh duy nhất.
Nếu bạn từng cập nhật Liên Minh Huyền Thoại trên Mac và bị chào đón bằng dòng chữ “The application League of Legends can’t be opened”, thì bạn không hề đơn độc. Đây là sự cố lặp đi lặp lại sau mỗi bản vá, và nó hoàn toàn không liên quan đến việc máy Mac của bạn bị lỗi hay bản cài đặt bị hỏng.
Chuyện gì đang thực sự xảy ra
Khi trình patcher của Riot cập nhật Liên Minh Huyền Thoại, nó chỉnh sửa các tệp bên trong app bundle — nhưng không ký lại (re-sign) lớp wrapper bên ngoài sau khi hoàn tất. macOS sử dụng Gatekeeper để xác minh rằng các ứng dụng không bị can thiệp bằng cách kiểm tra chữ ký mã của chúng. Khi chữ ký không khớp, macOS sẽ từ chối khởi chạy ứng dụng hoàn toàn.
Bạn có thể xác nhận đây đúng là vấn đề bằng cách chạy lệnh:
spctl --assess --type execute "/Applications/League of Legends.app"
Nếu bạn thấy thông báo kiểu như:
/Applications/League of Legends.app: invalid resource directory
(directory or signature have been modified)
Thì Gatekeeper đang chặn ứng dụng của bạn.
Cách khắc phục
Chỉ một lệnh trong Terminal:
codesign --force --deep --sign - "/Applications/League of Legends.app"
Lệnh này ký lại (ad-hoc re-sign) phần app bundle bên ngoài để macOS chấp nhận lại. LeagueClient.app bên trong (chính là client game thật sự) vẫn giữ nguyên chữ ký hợp lệ của Riot — lệnh này chỉ sửa lớp wrapper bị hỏng.
Vậy là xong. Mở lại Liên Minh Huyền Thoại và game sẽ khởi chạy bình thường.
Vì sao tình trạng này cứ tái diễn
League of Legends.app mà bạn thấy trong thư mục Applications thực chất chỉ là một lớp wrapper mỏng. Tệp thực thi thật sự nằm ở:
League of Legends.app/Contents/LoL/LeagueClient.app
Khi bạn mở ứng dụng, nó khởi động LeagueClient, rồi chuyển giao cho Riot Client để quản lý game thật sự. Riot ký đúng chuẩn cho LeagueClient.app bên trong sau mỗi lần cập nhật, nhưng chữ ký của lớp wrapper bên ngoài bị vô hiệu hóa vì nội dung của nó đã thay đổi. macOS phát hiện sự không khớp này và chặn việc khởi chạy ngay từ đầu, trước khi bất cứ thứ gì kịp chạy.
Tham khảo nhanh
Nếu tình trạng này lại xảy ra sau một bản vá trong tương lai, chỉ cần chạy:
codesign --force --deep --sign - "/Applications/League of Legends.app"
Không cần cài lại. Không cần khởi động lại. Chỉ mất khoảng hai giây.