我的应用程序使用Cocoa Framework Sparkle来部署更新。我通常不会部署我的软件的测试版,但为了我的下一次更新,我觉得我需要这样做。我的问题是,使用Sparkle部署测试版的最佳编号策略是什么。对于任何测试我的测试版的人,我希望当我发布下一个正式版本时,更新是无缝的,但对于其他用户,我希望整个系统是完全不可见的。我目前使用像1.2.3这样的编号系统来更新。
发布于 2009-07-18 15:14:13
最好的方法可能是完全断开你的CFBundleVersion (它必须只包含。和数字,并用于Sparkle的版本比较和操作系统),和CFBundleShortVersionString (它可以是任何东西,并且是用户看到的)。
然后,当你使用1.2.4b和1.2.4分别作为测试版和最终版的CFBundleStortVersionString时,你只需要确保你的CFBundleVersion总是随着时间的推移而增加,否则可以是任何东西*。只要测试版的CFBundleVersion高于您当前的CFBundleVersion,并且最终非测试版的CFBundleVersion高于测试版,一切都会按照您想要的方式进行。
*请记住,尽管苹果的文档没有提到它,9999.99.99几乎是LaunchServices能够识别的最高版本,并且它将忽略超过第三个的任何数字块,所以计划使用一个甚至不会比这个更高的方案;Sparkle更新仍然可以工作,但是操作系统会搞不清哪个副本是最新版本。
发布于 2010-03-26 23:58:24
我最近也在考虑这样做。我的应用程序的开发设置是使用Sparkle的Xcode (显然),我在Mercurial存储库中维护我的代码。作为构建过程的一部分,我使用"hg“查询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}"因此,对于测试版,我可以将我的变更集标记为"0.29b“或其他任何值。为了让想要获得测试版的用户实现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是由用户在我的首选项窗口中设置的常量。这样做是为了确保对提要url的GET请求包含beta=1,在服务器上,你可以解释这一点,并提供测试版的appcast,或者如果普通版本不存在的话。我不会解释你是如何做到这一点的,无论是用php,.htaccess还是别的什么。
发布于 2009-07-18 16:57:45
我喜欢使用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 > About Safari,我会看到版本4.0.2 (5530.19)。
https://stackoverflow.com/questions/1146954
复制相似问题