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
相关产品推荐
相关产品推荐

