mirror of
https://github.com/NanmiCoder/cc-haha
synced 2026-07-17 13:13:35 +08:00
fix(desktop): 移除 canonical .app 重签名,避免 Keychain ACL 失配导致 403
症状: 桌面端激活 Claude Official provider 后所有请求报 403 "Request not allowed",Tauri 原生产物(target/.../bundle/macos/) 能跑,但脚本输出的 canonical 产物(build-artifacts/macos-arm64/)报错。 根因: 脚本里的 sign_app_bundle() 用 `codesign --force --deep --sign -` 对 sidecar 和外层 .app 重签,想统一 signing identifier,但这会改变 sidecar binary 的 code signature hash。macOS Keychain ACL 按 hash 识别 caller —— 重签后的 sidecar 对 Keychain 来说是"陌生 binary", 弹"允许访问"对话框但 sidecar 无 UI 弹不出,被静默拒绝,CLI 读不到 OAuth token,SDK 构造空 Authorization,Anthropic 返回 403。 修复: 移除 sign_app_bundle 及其调用。Tauri 的 --no-sign flag 只是不做 Developer ID 签名,ad-hoc 签名 Tauri 自己已经做好了,再签一次纯属 多此一举,还破坏了 Tauri 签好的 Keychain ACL 关系。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
d0cf2544d2
commit
28b1ccf0d2
@ -148,17 +148,6 @@ if [[ -z "${LATEST_APP}" ]]; then
|
||||
LATEST_APP="$(find_latest_dir "${FALLBACK_APP_DIR}" '*.app')"
|
||||
fi
|
||||
|
||||
sign_app_bundle() {
|
||||
local app_bundle="$1"
|
||||
local sidecar_path="${app_bundle}/Contents/MacOS/claude-sidecar"
|
||||
|
||||
if [[ -f "${sidecar_path}" ]]; then
|
||||
codesign --force --sign - --identifier "${APP_BUNDLE_ID}.sidecar" --timestamp=none "${sidecar_path}"
|
||||
fi
|
||||
|
||||
codesign --force --deep --sign - --identifier "${APP_BUNDLE_ID}" --timestamp=none "${app_bundle}"
|
||||
}
|
||||
|
||||
build_canonical_dmg() {
|
||||
local app_bundle="$1"
|
||||
local dmg_output="$2"
|
||||
@ -233,8 +222,14 @@ if [[ -n "${LATEST_DMG}" ]]; then
|
||||
fi
|
||||
|
||||
if [[ -n "${LATEST_APP}" ]]; then
|
||||
# 注意: 不要再对 .app 重签名。曾经脚本在这里跑过
|
||||
# `codesign --force --deep --sign - --identifier <bundle-id>` 来统一
|
||||
# sidecar 和外层的 signing identifier,但这会改变 sidecar binary 的
|
||||
# code signature hash —— macOS Keychain ACL 按 hash 识别 caller,
|
||||
# 重签完再访问时会被 ACL 当作"陌生 binary"静默拒绝,导致 CLI 读不到
|
||||
# OAuth token,最终请求打到 Anthropic 返回 403 "Request not allowed"。
|
||||
# Tauri 的 --no-sign 其实已经做了 ad-hoc 签名,直接用即可。
|
||||
cp -R "${LATEST_APP}" "${CANONICAL_OUTPUT_DIR}/"
|
||||
sign_app_bundle "${CANONICAL_OUTPUT_DIR}/${APP_BUNDLE_NAME}"
|
||||
rm -f "${CANONICAL_OUTPUT_DIR}/"*.dmg
|
||||
build_canonical_dmg \
|
||||
"${CANONICAL_OUTPUT_DIR}/${APP_BUNDLE_NAME}" \
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user