From 3810876395e0c0149267887a4d771e0baed82db1 Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Tue, 7 Jul 2026 14:04:49 +0800 Subject: [PATCH] =?UTF-8?q?ci:=20iOS=20=E6=9E=84=E5=BB=BA=E6=9C=9F?= =?UTF-8?q?=E4=B8=B4=E6=97=B6=E9=92=A5=E5=8C=99=E4=B8=B2=E7=8B=AC=E5=8D=A0?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E5=88=97=E8=A1=A8=E2=80=94=E2=80=94=E9=9A=94?= =?UTF-8?q?=E7=A6=BB=E6=9C=AC=E6=9C=BA=E5=85=B6=E4=BB=96=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E7=9A=84=E5=90=8C=E5=90=8D=E5=88=86=E5=8F=91=E8=AF=81=E4=B9=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:mac runner 即本机,login 钥匙串出现第二张「Apple Distribution」证书 (另一项目 2026-07-07 新建)后,xcodebuild 优先选中新证书,与 Jiu App Store profile(嵌 6/16 正牌证书)不配对 → archive 失败。 修复:构建期 list-keychains 只留临时 keychain(fastlane 同款),trap 恢复 login。 Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o --- scripts/ci/compile-ios.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/scripts/ci/compile-ios.sh b/scripts/ci/compile-ios.sh index bb18f27..d7ecaaa 100755 --- a/scripts/ci/compile-ios.sh +++ b/scripts/ci/compile-ios.sh @@ -37,6 +37,8 @@ fi WORK="$(mktemp -d)" cleanup() { + # 恢复默认搜索列表(构建期临时独占,见下)——失败路径也必须恢复 + security list-keychains -d user -s login.keychain-db 2>/dev/null || true security delete-keychain "$KEYCHAIN" 2>/dev/null || true rm -rf "$WORK" rm -f "$HOME/Library/MobileDevice/Provisioning Profiles/jiu-ci.mobileprovision" 2>/dev/null || true @@ -55,8 +57,11 @@ security import "$WORK/dist.p12" -k "$KEYCHAIN" \ -P "${IOS_DIST_CERT_PASSWORD:-}" -T /usr/bin/codesign -T /usr/bin/security # 允许 codesign 非交互访问私钥 security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PWD" "$KEYCHAIN" >/dev/null -# 把临时 keychain 加入搜索列表(保留默认 login keychain) -security list-keychains -d user -s "$KEYCHAIN" login.keychain-db +# 构建期独占搜索列表(fastlane 同款):只见临时 keychain,隔离本机其他项目的 +# 同名「Apple Distribution」证书(2026-07-07 事故:login 里另一项目的新证书被 +# xcodebuild 优先选中,与 Jiu App Store profile 不配对 → archive 失败)。 +# trap cleanup 恢复 login,失败路径也不遗留。 +security list-keychains -d user -s "$KEYCHAIN" # --- 2. 安装 provisioning profile --- PROFILES_DIR="$HOME/Library/MobileDevice/Provisioning Profiles"