当前位置:  开发笔记 > 编程语言 > 正文

部署Beta软件更新和Sparkle

如何解决《部署Beta软件更新和Sparkle》经验,为你挑选了3个好方法。

我的应用程序使用Cocoa Framework Sparkle来部署更新.我通常不会部署我的软件的测试版,但对于我的下一次更新,我觉得我需要.我的问题是使用Sparkle部署beta的最佳编号策略是什么.对于测试我的测试版的任何人,当我发布下一个正式版时,我希望更新是无缝的,但对于其他用户,我希望整个系统完全不可见.我目前使用像1.2.3这样的编号系统来进行更新.



1> Daniel Thorp..:

我最近也考虑过这样做.我的应用程序的开发设置是使用Sparkle的Xcode(显然),我在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"或其他任何内容.为了使想要获得测试版的用户能够实现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是用户在我的首选项窗口中设置的常量.这样做可以确保您的Feed网址的GET请求包含beta = 1.在服务器上,您可以解释此问题,并提供测试版的appcast,或者它是否不存在正常版本.我不会解释你怎么能这样做,要么使用php,.htaccess等等.



2> smorgan..:

最好的方法可能是完全断开你的CFBundleVersion(它必须只包含.和数字,并由Sparkle的版本比较和操作系统使用)和CFBundleShortVersionString(它可以是任何东西,并且是用户看到的).

然后,你必须确保你的CFBundleVersion总是随着时间的推移而增加,但是否则可以是任何[*],而你分别使用1.2.4b和1.2.4作为beta版和最终版本的CFBundleStortVersionString.只要测试版的CFBundleVersion高于您当前的CFBundleVersion,并且最终非测试版的CFBundleVersion高于测试版,一切都将以您想要的方式运行.

[*]请记住,尽管Apple的文档没有提及它,9999.99.99几乎是LaunchServices将识别的最高版本,并且它将忽略第三个以外的任何数字块,因此计划使用不会甚至高于那个; Sparkle更新仍然有效,但操作系统会对哪个副本是最新版本感到困惑.



3> Alex..:

我喜欢使用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).Apple做与Safari非常相似的事情.如果我现在去Safari>关于Safari,我会看到版本4.0.2(5530.19).

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有