如何为Sandboxed Mac App设计Growl.framework

时间:2012-02-28 04:35:38

标签: objective-c macos growl appstore-sandbox

我正在尝试在App Store中提交Mac App for Approval,但是与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 个答案:

答案 0 :(得分: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)

答案 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 - >的链接。版本/ A并且有一个链接资源 - >框架包顶级的版本/当前/资源。我发现如果不存在Versions / A / Resources / Info.plist,我无法签署版本化的框架目录。您可以阅读有关框架herehere的正确结构的更多信息,或者只是查看一些系统框架,以了解它们应该如何构建。

  • 继续前一点,确保框架包中的符号链接结构正确(当前链接到编号版本,顶级链接指向Current),如图in the Apple docs所示。这不会影响代码签名,但如果您没有做到这一点,您的应用将被拒绝。

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

答案 2 :(得分:1)

如果我们发送未签名的sdk会更好吗?这是一个简单的改变,我现在犹豫不决,因为它已经有一段时间了。

答案 3 :(得分:0)

看起来错误可能是在尝试签署已签名的捆绑包;我通过下载Growl框架源并使用我自己的签名编译它来修复该问题。

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