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
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ą.
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).
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.
- 1. Jakie zasady obejmuje numerowanie wersji oprogramowania?
- 2. Przerwanie oprogramowania
- 3. Porównaj wersję oprogramowania w postgresie
- 4. Qt auto wersja oprogramowania?
- 5. Czy istnieje równoważny schemat do wersji semantycznej dla oprogramowania nieinterfejsowego?
- 6. MediaRecorder - kod przestał działać po aktualizacji oprogramowania układowego
- 7. Wykrywanie oprogramowania AdBlocking?
- 8. Tryb renderowania oprogramowania - WPF
- 9. Opcje rozwoju oprogramowania komputerowego
- 10. Jak działa aktywacja oprogramowania?
- 11. Dystrybucja oprogramowania w systemie Linux?
- 12. Książki dotyczące architektury oprogramowania
- 13. Wsparcie starszego oprogramowania enquire.js
- 14. Wykrywanie szkodliwego oprogramowania sygnatur
- 15. Standardy bezpieczeństwa oprogramowania
- 16. Symulacja oprogramowania komputera kwantowego
- 17. Tymczasowe wyłączanie/ominięcie oprogramowania pośredniego
- 18. Obliczanie współczynnika kojarzenia i oprogramowania genealogicznego
- 19. Projektowanie oprogramowania i projektowanie usług internetowych
- 20. Wydawaj często/wcześnie wersję komercyjną oprogramowania?
- 21. jak używać watchdog oprogramowania linux
- 22. Obsługa obrazów podczas tworzenia oprogramowania
- 23. Dobra inżynieria oprogramowania a bezpieczeństwo
- 24. Tworzenie instalatora dla oprogramowania konsultacyjnego
- 25. Unikanie przypadkowego nadpisania oprogramowania układowego
- 26. Ochrona oprogramowania dla małych dostawców
- 27. Pokaż klawiaturę oprogramowania bez EditText
- 28. Uczenie się wbudowanego oprogramowania układowego
- 29. Wyszukiwanie umów na tworzenie oprogramowania
- 30. Testowanie oprogramowania pośredniego z Rspec
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. –