Xcode 5 + Sparkle + 代码签名

Posted

技术标签:

【中文标题】Xcode 5 + Sparkle + 代码签名【英文标题】:Xcode 5 + Sparkle + Code Signing 【发布时间】:2013-11-13 18:03:39 【问题描述】:

我在我的应用程序中使用 Sparkle,并通过运行 shell 脚本构建阶段对框架进行签名,它工作正常,没有构建错误。问题是,通过 Sparkle 工作没有更新,更新者说:

解压存档时出错

错误的代码签名是否可能导致此错误?我很确定这不是 Sparkle 错误,RSS xml 文件是 100% 正确的。更新旧版本也可以。

这是一个非 MAS 应用程序,我使用我的 Developer ID 应用程序证书对所有内容进行签名。我可以在启用 Gatekeeper 的情况下运行该应用程序(spctl -a -v 说:已接受),我可以手动解压缩并启动它,然后出现正确的消息,所以没有问题。

与旧版本的不同之处在于,这是我在新 Mac 上构建的第一个应用程序版本,我在 Xcode 中添加了我的开发者 ID,并获得了我需要的所有证书。我认为 Xcode 创建了新的,但这不应该是一个问题,我只是使用新的。我不知道这是否也会导致错误。有人知道更多吗?谢谢。

顺便说一句:当我选择“开发人员 ID”进行代码签名然后设置代码签名时 在我的 Dev ID 的构建设置视图中,常规视图中的单选按钮也会跳回“无”。

编辑:脚本

LOCATION="$BUILT_PRODUCTS_DIR"/"$FRAMEWORKS_FOLDER_PATH"
IDENTITY="Developer ID Application: Name"
codesign --verbose --force --sign "$IDENTITY" "$LOCATION/Sparkle.framework/Versions/A"
codesign --verbose --force --sign "$IDENTITY" "$LOCATION/ShortcutRecorder.framework/Versions/A"

所以没有 XPC 服务的线路,我需要它吗?我想我的应用中没有使用 xpc 服务。

【问题讨论】:

【参考方案1】:

这是您在 Mavericks 下构建的第一个版本吗? 如果是,则可能是因为 Mavericks 要求对应用程序的所有嵌入式捆绑包进行签名。 我遇到了这个问题并找到了解决方案:OS X app update issue with Sparkle under Mavericks and XCode 5

你的 shell 脚本是什么样的?你说你签署了 Sparkle 框架,你也签署了 XPC 服务吗?

【讨论】:

添加了脚本。我需要 xpc 服务吗?【参考方案2】:

使用相同的“新”证书/代码签名设置进行新更新后,问题就消失了。我建议不要像我那样经常更改证书,也许当我创建新证书时出了点问题,Sparkle 不喜欢那样。

我不使用 XPC 服务,只使用您在上面看到的脚本。我没有更改脚本或应用程序转换 url/feed 等,所以我不知道到底是什么问题,但现在一切似乎都很好。

【讨论】:

以上是关于Xcode 5 + Sparkle + 代码签名的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 5 中的代码签名问题

Xcode 5“无效的代码签名权利”错误

xcode 5:代码签名身份列表不完整

Xcode-5 验证错误。无效的代码签名权利

XCode 4.5 中的代码签名身份

Cordova 应用程序的代码签名失败(使用 XCode 5.1.1 和 Cordova 3.4.1-0.1.0)