2009-07-18 18 views
9

Moja aplikacja używa programu Cocoa Framework Sparkle do wdrażania aktualizacji. Zwykle nie wdrażam wersji beta mojego oprogramowania, ale przy następnej aktualizacji czuję, że muszę. Moje pytanie brzmi: jaka jest najlepsza strategia numerowania do wdrożenia wersji beta za pomocą Sparkle. Dla każdego, kto przetestuje moją wersję beta, chciałbym, aby aktualizacja była bezproblemowa po wydaniu następnej oficjalnej wersji, ale dla innych użytkowników chciałbym, aby cały system był całkowicie niewidoczny. Obecnie używam systemu numerowania takiego jak 1.2.3 do moich aktualizacji.Wdrażanie aktualizacji oprogramowania w wersji Beta i oprogramowania Sparkle

Odpowiedz

6

Najlepszym sposobem jest prawdopodobnie całkowite rozłączenie wersji CFBundleVersion (która może zawierać tylko. I liczby i jest używana przez porównanie wersji Sparkle i system operacyjny) oraz CFBundleShortVersionString (która może być dowolna i jest widoczna dla użytkowników).

Wtedy po prostu trzeba upewnić się, że CFBundleVersion zawsze wzrasta w miarę upływu czasu, ale może inaczej być cokolwiek [*], podczas korzystania 1.2.4b i 1.2.4 jako CFBundleStortVersionString do wydań beta i końcowych odpowiednio. Tak długo, jak wersja CFBundleVersion dla wersji beta jest wyższa niż obecna wersja CFBundleVersion, a wersja CFBundleVersion ostatecznego wydania innego niż beta jest wyższa niż wersja beta, wszystko będzie działać tak, jak chcesz.

[*] Należy pamiętać, że pomimo tego, że dokumentacja firmy Apple nie wspomina o tym, 9999.99.99 jest prawie najwyższą wersją, którą LaunchServices rozpozna i zignoruje wszystkie bloki numerów poza trzecią, więc planuje użyć schematu to nawet nie pójdzie wyżej; Aktualizacje Sparkle nadal będą działały, ale system operacyjny nie będzie wiedział, która kopia była najnowszą wersją.

+1

Sposób, w jaki zdecydowałem się to zrobić, to zaktualizować wersję CFBundleVersion z wersji 1.2.5 na wersję 1.2.5.1 i wersję CFBundleShortVersionString do wersji 1.2.6. Po wydaniu ostatecznej wersji zaktualizuję wersję CFBundleVersion do wersji 1.2.6, a najnowsza wersja będzie dostępna dla wszystkich użytkowników, zarówno testerów wersji beta, jak i testerów innych wersji beta. Jedyny problem polega na tym, że nie będę mógł zaktualizować wersji używanej przez beta testerów używających Sparkle, ale do obecnego testu będę potrzebował tylko jednej wersji beta. –

6

Lubię korzystać z narzędzia Apple do wersji dołączonego do Xcode. Utrzymuje równoległy numer kompilacji (na przykład 12345), który różni się od numeru wersji marketingowej (1.2.3). Możesz go wywołać za pomocą narzędzia wiersza poleceń agvtool.

Co więcej, jeśli używasz Subversion lub CVS jako systemu wersjonowania, to narzędzie ma wbudowaną obsługę. Na przykład, co chcę, aby zwiększyć mój numer kompilacji, po prostu wprowadzić to w terminalu:

agvtool -usesvn bump -all 

To zwiększa numer kompilacji każdy cel w mojej aplikacji aktualizuje Info.plist pliki, a następnie popełnia całość do SVN automatycznie. Istnieje również czasownik new-marketing-version, którego można użyć do ustawienia wartości CFBundleShortVersionString we wszystkich obiektach docelowych projektu. Zajrzyj na stronę podręcznika dla agvtool (tj. Wpisz man agvtool na terminalu), aby uzyskać więcej informacji.

Co to ma wspólnego ze Sparkle? Używam numeru kompilacji jako numeru sparkle:version. Używanie numeru kompilacji sprawia, że ​​Sparkle nie ma problemów z ustaleniem, czy jest to aktualna wersja, czy nie. Dla dobra użytkowników chciałbym umieścić numer kompilacji dokładnie w numerze wersji marketingowej. Tak więc moje numery wersji beta wyglądają mniej więcej tak: 1.2.3 (456). Apple robi coś bardzo podobnego w Safari. Jeśli przejdę teraz do Safari> O Safari, widzę wersję 4.0.2 (5530.19).

8

Ostatnio zajmowałem się również robieniem tego. Konfiguracja programistyczna dla mojej aplikacji to Xcode (oczywiście) ze Sparkle i utrzymuję mój kod w repozytorium Mercurial. W ramach mojego procesu budowania, pytam o Mercurial używając "hg id" do zapełnienia Info.plit. Odbywa się to w skrypcie kompilacji dla mojego celu Xcode. Jest to scenariusz:

/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}" 

Tak, dla wersji beta, mogę tylko otagować changeset jako „0.29b” lub cokolwiek innego.Żeby było tak, że użytkownicy, którzy chcą, aby uzyskać wersji beta zaimplementować metodę SUUpdater Delegat:

#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; 
    } 
} 

Gdzie BSEnableBetaUpdates jest stałą się ustawiony przez użytkownika w moim oknie preferencji. Aby to zrobić, upewnij się, że żądanie GET dotyczące adresu URL kanału zawiera wersję beta = 1. Na serwerze możesz to zinterpretować i zapewnić emisję wersji beta lub jeśli nie ma normalnych wydań. Nie wyjaśniam, jak możesz to zrobić, używając php, .htaccess cokolwiek.

Powiązane problemy