我使用Sparkle框架来处理我的应用程序更新.直到最近,当我升级到OS X 10.9 Mavericks和XCode 5.0.2时,一切正常.
当我在OS X 10.8.4和XCode 4.6.3下编译我的应用程序时,它可以更新,没有问题.但是当我编译完全相同的代码,使用相同的XCode项目和Mavericks和XCode 5.0.2下的相同代码签名时,生成的包无法更新,Sparkle在更新过程中崩溃,并出现以下错误:
由于未捕获的异常'NSDestinationInvalidException'而终止应用程序,原因:' * + [SUPlainInstaller performSelector:onThread:withObject:waitUntilDone:modes:]:在等待执行时终止目标线程'以NSException类型的未捕获异常终止
有什么想法可以来自哪里?这是签名问题吗?编译问题?
我终于通过这篇文章找到了解决方案.
问题来自于Mavericks改变了应用程序签名的方式.嵌入在应用程序中的每个框架现在都应该签名.
为此,我刚刚在这些行中添加了"运行脚本"构建阶段:
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"