podpisywanie mac (debug buildy)¶
Ta aplikacja jest zwykle budowana z użyciem skryptu scripts/package-mac-app.sh, który obecnie:
- ustawia stabilny identyfikator pakietu dla debugów:
ai.openclaw.mac.debug - zapisuje Info.plist z tym identyfikatorem pakietu (nadpisanie przez
BUNDLE_ID=...) - wywołuje
scripts/codesign-mac-app.sh, aby podpisać główny plik binarny i pakiet aplikacji, tak aby macOS traktował każdą przebudowę jako ten sam podpisany pakiet i zachowywał uprawnienia TCC (powiadomienia, dostępność, nagrywanie ekranu, mikrofon, mowa). Dla stabilnych uprawnień użyj rzeczywistej tożsamości podpisu; podpis ad-hoc jest opcjonalny i kruchy (zob. uprawnienia macOS). - domyślnie używa
CODESIGN_TIMESTAMP=auto; włącza to zaufane znaczniki czasu dla podpisów Developer ID. UstawCODESIGN_TIMESTAMP=off, aby pominąć stemplowanie czasem (offline debug buildy). - wstrzykuje metadane buildu do Info.plist:
OpenClawBuildTimestamp(UTC) orazOpenClawGitCommit(krótki hash), aby panel „About” mógł pokazywać informacje o buildzie, git oraz kanale debug/release. - Pakowanie wymaga Node 22+: skrypt uruchamia buildy TS oraz build interfejsu Control UI.
- odczytuje
SIGN_IDENTITYze środowiska. Dodajexport SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"(lub swój certyfikat Developer ID Application) do rc swojej powłoki, aby zawsze podpisywać swoim certyfikatem. Podpis ad-hoc wymaga jawnego włączenia przezALLOW_ADHOC_SIGNING=1lubSIGN_IDENTITY="-"(niezalecane do testowania uprawnień). - po podpisaniu wykonuje audyt Team ID i kończy się niepowodzeniem, jeśli jakikolwiek Mach-O wewnątrz pakietu aplikacji jest podpisany innym Team ID. Ustaw
SKIP_TEAM_ID_CHECK=1, aby pominąć.
Użycie¶
# from repo root
scripts/package-mac-app.sh # auto-selects identity; errors if none found
SIGN_IDENTITY="Developer ID Application: Your Name" scripts/package-mac-app.sh # real cert
ALLOW_ADHOC_SIGNING=1 scripts/package-mac-app.sh # ad-hoc (permissions will not stick)
SIGN_IDENTITY="-" scripts/package-mac-app.sh # explicit ad-hoc (same caveat)
DISABLE_LIBRARY_VALIDATION=1 scripts/package-mac-app.sh # dev-only Sparkle Team ID mismatch workaround
Uwaga dotycząca podpisywania ad-hoc¶
Podczas podpisywania za pomocą SIGN_IDENTITY="-" (ad-hoc) skrypt automatycznie wyłącza Hardened Runtime (--options runtime). Jest to konieczne, aby zapobiec awariom, gdy aplikacja próbuje załadować osadzone frameworki (takie jak Sparkle), które nie współdzielą tego samego Team ID. Podpisy ad-hoc również przerywają trwałość uprawnień TCC; zob. uprawnienia macOS w celu uzyskania kroków odzyskiwania.
Metadane buildu dla „About”¶
package-mac-app.sh stempluje pakiet następującymi danymi:
OpenClawBuildTimestamp: ISO8601 UTC w momencie pakowaniaOpenClawGitCommit: krótki hash gita (lubunknown, jeśli niedostępny)
Zakładka „About” odczytuje te klucze, aby wyświetlić wersję, datę buildu, commit gita oraz informację, czy jest to build debug (przez #if DEBUG). Uruchom pakowacz, aby odświeżyć te wartości po zmianach w kodzie.
Dlaczego¶
Uprawnienia TCC są powiązane z identyfikatorem pakietu oraz podpisem kodu. Niezabezpieczone debug buildy ze zmieniającymi się UUID powodowały, że macOS zapominał przyznane zgody po każdej przebudowie. Podpisywanie plików binarnych (domyślnie ad-hoc) i utrzymywanie stałego identyfikatora pakietu/ścieżki (dist/OpenClaw.app) zachowuje zgody pomiędzy buildami, zgodnie z podejściem VibeTunnel.