在Mavericks和XCode 5下,Sparkle的OS X应用程序更新问题

4

我使用Sparkle框架来处理我的应用程序更新。 一直到最近,当我升级到OS X 10.9 Mavericks和XCode 5.0.2时,一切都很正常。

在OS X 10.8.4和XCode 4.6.3下编译我的应用程序后,可以无问题地进行更新。 但是,在Mavericks和XCode 5.0.2下使用相同的XCode项目和相同的代码签名编译完全相同的代码后,生成的包无法进行更新。在更新过程中,Sparkle崩溃并显示以下错误:

Terminating app due to uncaught exception 'NSDestinationInvalidException', reason: '* +[SUPlainInstaller performSelector:onThread:withObject:waitUntilDone:modes:]: target thread exited while waiting for the perform' terminating with uncaught exception of type NSException

这可能来自哪里呢? 是签名问题吗?还是编译问题?

1个回答

10

多亏了这篇文章,我终于找到了解决方法。

问题在于Mavericks更改了应用程序签名的方式。现在,嵌入应用程序中的每个框架都必须进行签名。

为了解决这个问题,我只需添加一个“Run Script”构建阶段,并添加以下行:

LOCATION="${BUILT_PRODUCTS_DIR}"/"${FRAMEWORKS_FOLDER_PATH}"
IDENTITY="Developer ID"
codesign --verbose --force --sign "$IDENTITY" "$LOCATION/Sparkle.framework"
codesign --verbose --force --sign "$IDENTITY" "$LOCATION/../XPCServices/com.andymatuschak.Sparkle.SandboxService.xpc"

出现错误:没有名为'/Users/SS/Desktop/Sparkle/macosx10.7'的SDK或路径。 - Gajendra Rawat
谢谢分享这个!你为我节省了无数的时间! - Jorge Leandro Perez
1
对我没用 :( 检查这些文件的codesign显示正确签名,但仍然出现此错误。 - Renan Protector
好的!搞定了。我在主目标上使用了--deep标志,它重复了代码签名。 - Renan Protector

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