简要总结
macOS Signing
这页说明书在教我们怎么给一个叫 OpenClaw 的苹果电脑(macOS)软件“签名”。签名就像给软件贴上一个特别的、独一无二的贴纸。有了这个贴纸,电脑才能记住你允许这个软件做什么,比如用麦克风或者录屏幕。这页特别适合你在自己电脑上测试软件,想让电脑记住你的选择时看。
五岁小孩版解释
这页讲的是怎么给一个在苹果电脑上测试用的软件“签名”。签名就像给软件一个特别的身份证,告诉电脑:“这个软件是我做的,每次都是同一个哦!”这样,电脑就不会忘记你允许这个软件做什么事情了。
有一个叫 package-mac-app.sh 的脚本(脚本就像一张做事情的清单)会帮我们打包和签名软件。它会做下面这几件重要的事:
- 给软件一个固定的名字。它会用一个固定的“包裹标识符”,叫
ai.openclaw.mac.debug。你可以把它想成软件在电脑里的家庭地址,每次都不变。 - 给软件签名。它会叫另一个叫
codesign-mac-app.sh的脚本来给软件签名。这样,每次你重新做这个软件,电脑都认为它是同一个,就不会丢掉你之前同意的权限(比如通知、录屏、用麦克风)。要小心哦,如果只是随便签个名(叫“临时签名”),权限可能还是记不住。 - 加上时间戳。默认会给签名加上一个可信的时间戳,这就像在签名上盖个日期章。如果你在没联网的时候做软件,可以设置
CODESIGN_TIMESTAMP=off来跳过这一步。 - 写上软件的信息。它会把软件是什么时候做的、用的是哪一份代码,写进软件自己的信息文件里。这样你在软件的“关于”页面就能看到这些信息了。
- 检查签名的人是不是同一个。签完名后,它会检查软件里面所有部分是不是同一个人(或团队)签的。如果不是,它会报错。如果你确定没问题,可以设置
SKIP_TEAM_ID_CHECK=1来跳过检查。
做这件事需要什么? 你需要先安装 Node.js,并且版本是 22 或更高。因为脚本需要用它来构建软件。
怎么告诉脚本用谁的签名?
脚本会从电脑的环境里找一个叫 SIGN_IDENTITY 的东西,这就是“签名身份”,就像你的签名印章。你最好提前设置好它。比如,在你的电脑设置里加上一行:export SIGN_IDENTITY="Apple Development: 你的名字 (TEAMID)"。如果你想用“临时签名”(不推荐,因为权限记不住),需要明确告诉脚本 ALLOW_ADHOC_SIGNING=1 或者 SIGN_IDENTITY="-"。
具体怎么用呢? 打开终端,进到软件代码的根目录,然后可以输入下面的命令。记住,不同的命令效果不一样:
- 直接运行
scripts/package-mac-app.sh。脚本会自己找签名身份,如果找不到就会出错。 - 运行
SIGN_IDENTITY="Developer ID Application: Your Name" scripts/package-mac-app.sh。这是用你真正的开发者证书签名,最好用这个。 - 运行
ALLOW_ADHOC_SIGNING=1 scripts/package-mac-app.sh或SIGN_IDENTITY="-" scripts/package-mac-app.sh。这是用“临时签名”,电脑可能记不住你给的权限。 - 运行
DISABLE_LIBRARY_VALIDATION=1 scripts/package-mac-app.sh。这个命令是给开发者的,用来解决一个叫 Sparkle 的更新工具可能带来的签名冲突问题,平时不太用。
关于“临时签名”要特别注意
当你用 SIGN_IDENTITY="-" 做临时签名时,脚本会自动关掉一个叫“强化运行时”的安全功能。这是为了防止软件崩溃。但临时签名还是会让电脑记不住权限。如果权限丢了,你需要去另一页叫“macOS permissions”的说明书里找恢复步骤。
为什么要做签名? 因为苹果电脑会把权限(比如允许软件使用麦克风)和软件的名字(包裹标识符)以及签名牢牢绑在一起。以前测试时软件没签名,每次名字还变,导致电脑每次都要重新问你要不要授权。现在固定名字并签名,就能让电脑记住你的选择了。