代码之家  ›  专栏  ›  技术社区  ›  Ian Turner

部署测试版软件更新和Sparkle

  •  11
  • Ian Turner  · 技术社区  · 15 年前

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

    3 回复  |  直到 14 年前
        1
  •  7
  •   smorgan    15 年前

    最好的方法可能是完全断开cfbundleversion(它必须只包含。和数字,并被Sparkle的版本比较和操作系统使用),以及cfbundleshortversionString(它可以被任何东西使用,也是用户看到的)。

    然后,您只需确保您的cfbundleversion始终随时间增加,但也可以是任何[*],而您分别使用1.2.4b和1.2.4作为测试版和最终版的cfbundlestortversionString。只要测试版的cfbundleversion比您当前的cfbundleversion高,并且最终非测试版的cfbundleversion比测试版高,所有事情都会按照您想要的方式解决。

    [*]请记住,尽管苹果的文档没有提到它,但9999.99.99几乎是LaunchServices可以识别的最高版本,它会忽略第三个以外的任何数字块,因此计划使用一个甚至不会超过该值的方案;闪烁的更新仍然有效,但是操作系统会对哪个拷贝感到困惑。最新版本。

        2
  •  9
  •   Daniel Thorpe    14 年前

    我最近也研究过这样做。我的应用程序的开发设置是xcode(很明显)和sparkle,我将代码维护在一个mercurial存储库中。作为构建过程的一部分,我使用“hg id”填充info.plit来查询mercurial。这是在我的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是用户在“我的首选项”窗口中设置的常量。这样做的目的是确保对提要URL的get请求包含beta=1。在服务器上,您可以解释这一点并提供beta版本的应用程序广播,或者如果它不存在普通版本的话。我不会解释如何使用php,.htaccess来实现这一点。

        3
  •  6
  •   Alex    15 年前

    我喜欢使用Xcode附带的Apple版本控制工具。它维护一个与您的市场营销版本号(1.2.3)不同的并行构建号(例如12345)。使用命令行工具调用它 agvtool .

    此外,如果您使用Subversion或CVS作为版本控制系统,那么这个工具有内置的支持。例如,我想增加我的内部版本号,我只需在终端中输入:

    agvtool -usesvn bump -all
    

    这将增加应用程序中每个目标的内部版本号,更新 Info.plist 文件,然后将全部内容自动提交给SVN。还有一个 new-marketing-version 可用于设置 CFBundleShortVersionString 跨越项目的所有目标。查看手册页 AGVoTooCAD (即类型) man agvtool 在终端)了解更多详细信息。

    那么这和火花有什么关系呢?我使用内部版本号作为 sparkle:version 号码。使用内部版本号可以让Sparkle很容易地确定它是否是当前版本。为了用户的利益,我喜欢把内部版本号放在市场营销版本号中。所以我的测试版本号是这样的: 1.2.3 (456) .苹果公司在Safari上的表现非常相似。如果我现在开始Safari,我会看到4.0.2版(5530.19)。