我的应用程序使用Cocoa Framework Sparkle部署更新。我通常不会部署我的软件的测试版,但对于我的下一次更新,我觉得我需要。 我的问题是使用Sparkle部署测试版的最佳编号策略是什么。对于测试我的测试版的任何人,我希望在发布下一个正式版本时更新是无缝的,但对于其他用户,我希望整个系统完全不可见。我目前使用1.2.3的编号系统进行更新。部署Beta软件更新和Sparkle
回答
最好的方法可能是完全断开你的CFBundleVersion(它必须包含唯一的数字,并且被Sparkle的版本比较和操作系统使用)和CFBundleShortVersionString(它可以被任何东西和用户看到)。
然后,你只需要确保你的CFBundleVersion随着时间的推移总是增加,但可以是任何东西[*],而你分别使用1.2.4b和1.2.4作为CFBundleStortVersionString。只要该测试版的CFBundleVersion高于当前的CFBundleVersion,并且最终的非beta版发布的CFBundleVersion高于测试版,则所有内容都会按照您的想法运行。请注意,尽管Apple的文档没有提及它,但9999.99.99几乎是LaunchServices可以识别的最高版本,并且它将忽略超出第三个的任何数字块,因此计划使用一个方案甚至不会比这更高; Sparkle更新仍然有效,但操作系统会对最新版本的副本感到困惑。
我喜欢使用Xcode附带的Apple版本控制工具。它维护一个与您的营销版本号(1.2.3)不同的并行内部编号(例如12345)。您可以使用命令行工具agvtool
来调用它。
更重要的是,如果您使用Subversion或CVS作为您的版本控制系统,该工具具有内置支持。例如,我想增加我的版本号,我只是在终端输入:
agvtool -usesvn bump -all
这增加我的应用程序的每个目标的版本号,更新Info.plist
文件,然后提交整个事情自动到SVN。还有一个new-marketing-version
动词,您可以使用该动词在所有项目的目标中设置CFBundleShortVersionString
。查看agvtool
的手册页(即在终端输入man agvtool
)以获取更多详细信息。
那么这与Sparkle有什么关系呢?我使用内部编号作为我的sparkle:version
号码。使用内部版本号让Sparkle很容易判断它是否是当前版本。为了用户的利益,我喜欢在营销版本号中输入版本号。所以我的测试版本号如下所示:1.2.3 (456)
。苹果公司和Safari做了一些非常相似的事如果我现在进入Safari>关于Safari,我会看到4.0.2版本(5530.19)。
我最近也考虑过这样做。我的应用程序的开发设置是Xcode(显然)使用Sparkle,并且我将代码保存在Mercurial存储库中。作为我的构建过程的一部分,我使用“hg id”查询Mercurial来填充Info.plit。这是在我的Xcode目标的构建脚本中完成的。这是脚本:
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion `/usr/local/bin/hg id -in`" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString `/usr/local/bin/hg id -t`" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
因此,对于beta版本,我可以标记我变更为“0.29b”或什么的。为了让这个谁想要得到beta版本我实现SUUpdater委托方法的用户:
#pragma mark -
#pragma mark SUUpdate Delegate methods
- (NSArray *)feedParametersForUpdater:(SUUpdater *)updater sendingSystemProfile:(BOOL)sendingProfile {
if([[NSUserDefaults standardUserDefaults] boolForKey:BSEnableBetaUpdates]) {
return [NSArray arrayWithObjects:[NSDictionary dictionaryWithObjectsAndKeys:@"beta", @"key", [NSNumber numberWithBool:YES], @"value", @"Enable beta updates", @"displayKey", @"Yes", @"displayValue", nil], nil];
} else {
return nil;
}
}
哪里BSEnableBetaUpdates是得到通过我的喜好窗口用户设置的常数。它所做的是确保对您的供稿网址的GET请求包含beta = 1。在服务器上,您可以对此进行解释并提供Beta版本的Appcast,或者它不存在正常版本。我不会解释你如何做到这一点,无论是使用PHP,.htaccess。
- 1. Sparkle错误:更新签署不正确
- 2. ILCrashreporter打破Sparkle更新
- 3. 部署和更新网站
- 4. 部署和自动更新
- 5. Sparkle appcast签名:更新签署不正确
- 6. Bitrise的Fabric/Crashlytics beta部署
- 7. 软件包部署顺序
- 8. 自动化部署软件
- 9. 网站部署软件
- 10. 软件部署过程
- 11. 软件更新和UAC
- 12. 软件更新
- 13. 部署Jelastic部分更新
- 14. 从应用程序外部调用Sparkle更新程序
- 15. Sparkle冻结“正在安装更新...”
- 16. 部署和更新VS2010应用程序
- 17. AIR企业部署和更新
- 18. 构建和部署只更新/更改的文件 - 哈德森
- 19. 更新组件,不再部署clickonce
- 20. SSIS 2014项目部署与软件包部署
- 21. 微软构建和持续部署 - 机
- 22. 检查软件更新和更新软件,但不影响数据库
- 23. 更新一次部署
- 24. MDM模式更新部署
- 25. IntelliJ未更新Glassfish部署
- 26. 在Windows上部署软件时,更新/更新Mac OS X应用程序包中的文件
- 27. Mountain Lion上的Sparkle更新 - 开发人员ID是否与Sparkle一起工作?
- 28. 部署Windows Azure的部署问题,仅部署新的/更新的内容
- 29. CSS3 PIE和jQuery Sparkle
- 30. 部署Vosao在Capedwarf Beta 3中
我选择这样做的方式是将CFBundleVersion从1.2.5更新到1.2.5.1,并将CFBundleShortVersionString更新为1.2.6 beta。当我发布最终版本时,我会将CFBundleVersion更新到1.2.6,然后所有用户都可以使用最新版本,包括beta测试者和非beta测试者。唯一的问题是,我无法使用Sparkle更新测试版测试人员使用的版本,但对于当前的测试,我希望只需要一个测试版。 – 2009-07-25 07:08:44