You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xcode 15.3 Mac应用归档分发公证失败:签名无效/未密封内容如何解决?

问题分析与解决办法

核心原因

Xcode 15.3 收紧了代码签名的验证规则,尤其是对嵌入式框架的目录结构要求更严格——框架根目录不允许存在未被签名密封的额外文件。你通过 gomobile bind 构建的 XCFramework,大概率在根目录遗留了 gomobile 生成的辅助文件(比如 go.mod、go.sum 这类),Xcode 15.2 版本未对这类文件做严格校验,但 15.3 版本的签名工具会直接将其判定为「未密封内容」,进而触发公证时的签名无效错误。

哪怕你单独给 XCFramework 签过名,当它被嵌入主应用后,Xcode 的重新签名流程可能未正确处理这些额外文件,或者 gomobile 生成的框架本身的签名结构不符合 15.3 的新规范。

具体解决步骤

  • 清理 XCFramework 冗余文件:找到 gomobile 生成的 XCFramework 包,打开其内部的 macOS 架构框架目录(比如 YourFramework.xcframework/macos-arm64_x86_64/YourFramework.framework),删除根目录下所有非标准框架文件(如 gomobile 遗留的 go.mod、go.sum 等)。
  • 重新签名 XCFramework:清理完成后,使用你的 Developer ID 证书重新签名该框架:
    codesign -s "Developer ID Application: 你的团队ID" --deep --force --verbose YourFramework.xcframework
    
  • 调整主应用签名配置:在 Xcode 中确保主应用开启「Hardened Runtime」,然后进入 Build Settings 检查:
    • 将 CODE_SIGN_STYLE 设置为 Manual
    • 确认 DEVELOPMENT_TEAM 填写了正确的团队 ID
    • 若清理文件后仍有问题,可给 OTHER_CODE_SIGN_FLAGS 添加 --no-strict 临时放宽校验规则
  • 重新打包并公证:重新执行 Archive → Export App 流程,导出时选择「Developer ID」签名,之后再用 notarytool 提交公证。

本地验证方法

打包完成后,先在本地验证签名是否正常,再提交公证:

codesign --verify --deep --strict --verbose=2 YourApp.app

如果返回 valid on disk 和 satisfies its Designated Requirement,则说明签名符合规范。

内容的提问来源于stack exchange,提问作者Ian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 12:50:55