Развертывание обновлений бета-версии и Sparkle - PullRequest
11 голосов
/ 18 июля 2009

Мое приложение использует Cocoa Framework Sparkle для развертывания обновлений. Я обычно не использую бета-версию своего программного обеспечения, но для следующего обновления я чувствую, что мне нужно. Мой вопрос заключается в том, какова наилучшая стратегия нумерации для развертывания бета-версии с использованием Sparkle. Для тех, кто тестирует мою бета-версию, я хотел бы, чтобы обновление было бесшовным, когда я выпускаю следующую официальную версию, но для других пользователей я бы хотел, чтобы вся система была полностью невидимой. В настоящее время я использую систему нумерации, такую ​​как 1.2.3, для своих обновлений.

Ответы [ 3 ]

9 голосов
/ 26 марта 2010

Я недавно тоже занялся этим. Установкой разработки для моего приложения является Xcode (очевидно) с Sparkle, и я поддерживаю свой код в репозитории Mercurial. Как часть моего процесса сборки, я запрашиваю Mercurial, используя «hg id» для заполнения 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 - это константа, которую пользователь устанавливает в моем окне настроек. Для этого убедитесь, что в запросе GET к URL-адресу фида содержится бета = 1. На сервере вы можете интерпретировать это и предоставить appcast бета-версий или, если он не существует нормальных выпусков. Я не буду объяснять, как вы могли бы сделать это, используя php, .htaccess, что угодно.

7 голосов
/ 18 июля 2009

Лучшим способом, вероятно, является полное отключение вашего CFBundleVersion (который должен содержать только. И числа, и используется для сравнения версий Sparkle и ОС) и CFBundleShortVersionString (который может быть любым, и это то, что видят пользователи).

Тогда вам просто нужно убедиться, что ваш CFBundleVersion всегда увеличивается с течением времени, но в противном случае он может быть чем угодно [*], в то время как вы используете 1.2.4b и 1.2.4 в качестве CFBundleStortVersionString для бета-версии и финальных версий соответственно. Пока CFBundleVersion для бета-версии выше, чем ваш текущий CFBundleVersion, а CFBundleVersion возможной не бета-версии выше, чем бета-версия, все будет работать так, как вы хотите.

[*] Просто имейте в виду, что, несмотря на то, что документы Apple не упоминают об этом, 9999.99.99 является в значительной степени самой высокой версией, которую распознает LaunchServices, и она будет игнорировать любые числовые блоки, кроме третьего, поэтому планируйте использовать схему, которая даже не пойдет выше этого; Обновления Sparkle по-прежнему будут работать, но ОС будет смущена тем, какая копия была последней версией.

6 голосов
/ 18 июля 2009

Мне нравится использовать инструмент контроля версий Apple, включенный в Xcode. Он поддерживает номер параллельной сборки (например, 12345), отличный от номера вашей маркетинговой версии (1.2.3). Вы вызываете его с помощью инструмента командной строки 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...