如何为沙盒 Mac 应用程序设计 Growl.framework
Posted
技术标签:
【中文标题】如何为沙盒 Mac 应用程序设计 Growl.framework【英文标题】:How to Codesign Growl.framework for Sandboxed Mac App 【发布时间】:2012-02-28 04:35:38 【问题描述】:我正在尝试在 App Store 中提交 Mac 应用程序以供审批,但与 Growl 链接会导致验证错误。我正在尝试从命令行重新进行代码设计,但出现以下错误:
Ashs-MacBook-Pro:500px Uploader ash$ codesign -f -v -s "3rd Party Mac Developer Application: 500px Inc." ./Growl.framework/Versions/A
./Growl.framework/Versions/A: replacing existing signature
./Growl.framework/Versions/A: object file format unrecognized, invalid, or unsuitable
我尝试重新下载框架,但没有成功。有人看到我做错了吗?
【问题讨论】:
【参考方案1】:真的很奇怪,我已经设法像这样辞职了:
codesign -fs "3rd Party Mac Developer Application: Future Simple" Growl.framework/Versions/A/Growl
Growl.framework/Versions/A/Growl: replacing existing signature
(顺便说一句:我正在使用 Xcode 4.3.1 和 Growl 1.3.1)
【讨论】:
我设法通过导出我的证书并在同事的计算机上运行代码设计解决了这个问题。一定是我的钥匙串有问题。【参考方案2】:在对框架进行代码设计时,我刚刚度过了“无法识别、无效或不合适的捆绑格式”错误。就我而言,我使用的是 XCode 4.6.1,并且我正在尝试对 Qt 框架进行代码签名。
首先请注意,Apple 文档 (TN2206) 明确指出您需要对版本化框架目录进行代码签名,而不是库可执行文件。
这将在此处进一步讨论: How do you codesign framework bundles for the Mac App Store?
因此,基于此,Ash 原始问题中的命令行是正确的。但是我遇到了同样的错误。
我确实让它与该命令行一起工作。以下是我必须做的事情:
确保您使用的是正确版本的 CODESIGN_ALLOCATE。这在此处的许多答案中都有讨论:iPhone Codesign object file format invalid or unsuitable 如果您可以让 XCode 对应用程序进行签名,那么您可以在构建日志中找到 CODESIGN_ALLOCATE 路径。
确保版本化目录(上述问题中的 ./Growl.framework/Versions/A)包含 Resources/Info.plist 并且有来自 Versions/Current -> Versions/A 的链接,并且在框架包的顶层有一个链接 Resources -> Versions/Current/Resources。我发现如果没有 Versions/A/Resources/Info.plist,我无法对版本化框架目录进行签名。您可以阅读更多关于框架 here 和 here 的正确结构的信息,或者只是查看一些系统框架以了解它们的结构。
在上一点的基础上,确保框架包中的符号链接结构正确(当前链接到编号版本,***链接到当前),如 in the Apple docs 所示。这不会影响代码签名,但如果您不正确,您的应用将被拒绝。
确保在框架的 Info.plist 中将 CFBundleExecutable 设置为正确的名称(可执行文件名称)
【讨论】:
【参考方案3】:如果我们发送未签名的 sdk 会更好吗?这将是一个简单的更改,我现在犹豫是否这样做,因为它已经有一段时间了。
【讨论】:
【参考方案4】:看起来错误可能是在尝试对已签名的捆绑包进行签名;我通过下载 Growl 框架源代码并用我自己的签名编译它来解决这个问题。
如果我找到更好的答案,适用于您无法编译的框架,我会在此处发布。
【讨论】:
以上是关于如何为沙盒 Mac 应用程序设计 Growl.framework的主要内容,如果未能解决你的问题,请参考以下文章