12

私のアプリケーションは、Cocoa Framework Sparkle を使用して更新をデプロイします。私は通常、自分のソフトウェアのベータ版を展開しませんが、次の更新では必要だと感じています。私の質問は、Sparkle を使用してベータ版を展開するための最良の番号付け戦略は何かということです。私のベータ版をテストする人にとっては、次の公式バージョンをリリースするときに更新がシームレスであることを望みますが、他のユーザーにとっては、システム全体が完全に見えないようにしたいと思います. 私は現在、更新に 1.2.3 のような番号付けシステムを使用しています。

4

3 に答える 3

9

私も最近これを行うことを検討しました。私のアプリの開発セットアップは(明らかに)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}"

したがって、ベータリリースの場合、チェンジセットに「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が含まれていることを確認することです。サーバーでは、これを解釈してベータリリースのアプリキャストを提供するか、通常のリリースに存在しない場合は提供できます。php、.htaccessを使用して、それをどのように行うことができるかについては説明しません。

于 2010-03-26T15:58:23.650 に答える
8

おそらく最良の方法は、CFBundleVersion (. と数字のみを含む必要があり、Sparkle のバージョン比較と OS で使用される) と CFBundleShortVersionString (何でも可能で、ユーザーが見るもの) を完全に切断することです。

次に、CFBundleVersion が常に時間の経過とともに増加することを確認する必要がありますが、それ以外の場合は何でも[*]、ベータ版と最終リリースの CFBundleStortVersionString としてそれぞれ 1.2.4b と 1.2.4 を使用します。ベータ版の CFBundleVersion が現在の CFBundleVersion よりも高く、最終的な非ベータ リリースの CFBundleVersion がベータ版よりも高い限り、すべてが思いどおりに機能します。

[*] Apple のドキュメントでは言及されていませんが、9999.99.99 は LaunchServices が認識する最も高いバージョンであり、3 番目を超える番号ブロックは無視されることに注意してください。それよりも高くなります。Sparkle の更新は引き続き機能しますが、OS はどのコピーが最新バージョンであるかについて混乱します。

于 2009-07-18T15:14:12.830 に答える
7

Xcode に含まれている Apple のバージョン管理ツールを使用するのが好きです。これは、マーケティング バージョン番号 (1.2.3) とは異なる並行ビルド番号 (12345 など) を保持します。コマンド ライン ツールを使用して呼び出しますagvtool

さらに、バージョン管理システムとして Subversion または CVS を使用している場合、このツールにはサポートが組み込まれています。たとえば、ビルド番号を増やしたい場合は、ターミナルに次のように入力します。

agvtool -usesvn bump -all

これにより、アプリケーション内のすべてのターゲットのビルド番号がインクリメントされ、Info.plistファイルが更新され、すべてが SVN に自動的にコミットされます。プロジェクトのすべてのターゲットnew-marketing-versionを設定するために使用できる動詞もあります。CFBundleShortVersionString詳細については、man ページagvtool(man agvtoolターミナルで入力) を参照してください。

では、これはスパークルと何の関係があるのでしょうか? ビルド番号を自分の番号として使用しますsparkle:version。ビルド番号を使用すると、Sparkle が現在のバージョンであるかどうかを簡単に判断できます。ユーザーの利益のために、私はビルド番号をマーケティング バージョン番号に正しく入れたいと思っています。したがって、私のベータ バージョン番号は次のようになります1.2.3 (456)。Apple は Safari で非常に似たようなことをしています。現在、Safari > About Safari に移動すると、バージョン 4.0.2 (5530.19) が表示されます。

于 2009-07-18T16:57:45.180 に答える