如何为沙箱化的Mac应用程序 Codesign Growl.framework?

4

我想将一款Mac应用程序提交到App Store进行审核,但与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

我已经尝试重新下载这个框架,但没有成功。有人看出我哪里做错了吗?

4个回答

3

非常奇怪,我已经成功地重新设计了这个框架:

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)

我通过导出我的证书并在同事的电脑上运行codesign来解决了这个问题。这一定是我的钥匙串出了问题。 - Ash Furrow

2
我刚刚花了一整天的时间解决“捆绑格式无法识别、无效或不适用”的错误,这是在对框架进行代码签名时出现的。在我的情况下,我使用的是XCode 4.6.1,并且尝试对Qt框架进行代码签名。
首先需要注意的是,苹果文档(TN2206)明确指出,你需要对有版本号的框架目录进行代码签名,而不是库可执行文件。
这里进一步讨论了这个问题:如何为Mac应用商店对框架捆绑进行代码签名? 因此,基于这点,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,则无法签署版本化的框架目录。您可以阅读更多关于框架正确结构的信息herehere,或者只需查看一些系统框架以了解它们应该如何构造。

  • 进一步说,确保框架束中的符号链接结构正确(当前链接到编号版本,顶级链接到当前),如Apple文档所示。这不会影响代码签名,但如果没有正确设置,您的应用将被拒绝。

  • 确保在您的框架的Info.plist中将CFBundleExecutable设置为正确的名称(可执行文件名称)


1

如果我们将 SDK 发布为未签名的,会更好吗?这是一个简单的更改,但由于已经这样运行一段时间了,我有些犹豫。


0

看起来错误可能是尝试签名已经被签名的包;我通过下载Growl框架源代码并使用自己的签名编译来解决了这个问题。

如果我找到更好的答案适用于您无法编译的框架,我会在这里发布。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接