← 返回文章列表

修復:更新後英雄聯盟在 Mac 上無法開啟

在 Mac 上更新英雄聯盟之後跳出「The application League of Legends can't be opened」嗎?這是 Riot 補丁程式破壞 App 代碼簽章造成的反覆發生問題。一行指令就能修好。

如果你曾經在 Mac 上更新完英雄聯盟,然後看到 「The application League of Legends can’t be opened」 這個錯誤訊息,你不是一個人。每次發新補丁都可能會碰到這個問題,而且跟你的 Mac 或安裝檔是不是壞掉一點關係都沒有。

實際上發生了什麼

當 Riot 的補丁程式更新英雄聯盟時,會修改 App bundle 內部的檔案——但更新完之後並沒有重新簽章外層的封裝 App。macOS 透過 Gatekeeper 檢查代碼簽章來驗證 App 有沒有被竄改。當簽章對不上的時候,macOS 會直接拒絕啟動這個 App。

你可以執行以下指令來確認問題是不是出在這裡:

spctl --assess --type execute "/Applications/League of Legends.app"

如果看到類似這樣的訊息:

/Applications/League of Legends.app: invalid resource directory
(directory or signature have been modified)

那就代表 Gatekeeper 把你的 App 擋下來了。

修復方法

在終端機輸入一行指令:

codesign --force --deep --sign - "/Applications/League of Legends.app"

這會用臨時簽章重新簽章外層的 App bundle,讓 macOS 重新接受它。內層的 LeagueClient.app(也就是真正的遊戲客戶端)還是有 Riot 的有效簽章——這個修復只是處理壞掉的外層封裝。

就這樣,重新開啟英雄聯盟,應該就可以正常啟動了。

為什麼這個問題會一直出現

你在「應用程式」資料夾裡看到的 League of Legends.app 其實只是一層薄薄的封裝。真正的執行檔位於:

League of Legends.app/Contents/LoL/LeagueClient.app

當你啟動 App 時,它會先啟動 LeagueClient,再交給 Riot Client,由它來管理實際的遊戲。Riot 在每次更新後都會正確地重新簽章內層的 LeagueClient.app,但外層封裝的簽章因為內容被改動了就會失效。macOS 偵測到不一致,連啟動都不讓你啟動。

快速參考

未來再發新補丁碰到一樣的問題,直接執行:

codesign --force --deep --sign - "/Applications/League of Legends.app"

不用重新安裝、不用重開機,大概兩秒就搞定。

標籤

mactroubleshootingfix