【開發筆記】如何解決 CLI Hardened Runtime is not enabled
Hardened Runtime 是 macOS 10.14,也就是始自 Mojave 加入的安全機制。目的是避免竄改的程式碼,或是程式庫在執行的過程中,竊取使用者的資料,或是複寫系統的控制權。所以要發佈在 Hardened Runtime 環境下執行的程式碼,必須先經過公證(Notarize)的程序來避免惡意程式的散播與執行。
如果不在 Xcode 中開發的程式
雖然是多了一道公證的手續。不過因為整合良好的發佈流程,所以如果是在 Xcode 開發環境下來編譯並且發佈應用,其實並不會增加開發上的負擔。比較麻煩的其實是命令列下編譯的程式,例如 ffmpeg 這一類的 CLI binary,公證與簽章的手續得靠手動輸入指令來完成。
找出開發者簽證名稱 Developer Identity
指令記下的話,其實很簡單。
security find-identity
會看到名稱類似 "Apple Development: XXXXX (XXXXX)" 的就是 Developer Identity。
簽證啟用 Hardened Runtime
至於簽證啟用的方式也不複雜。具體就是將上個步驟的 "Apple Development: XXXXX (XXXXX)" 並且同時帶上需要簽證的 CLI 命令列程式路徑即可。
codesign --force --options runtime --sign "Apple Development: XXXXX (XXXXX)" "YOUR_BINARY_PATH"