Mam aplikację, którą opracowałem przy pomocy Xcode 3, a ostatnio rozpocząłem edycję przy pomocy Xcode 4. W podsumowaniu celu mam formularz docelowy aplikacji na iOS z polami: identyfikator, wersja, kompilacja, urządzenia i cel wdrożenia. Pole wersji jest puste, a pole kompilacji to 3.4.0 (co odpowiada wersji aplikacji od czasu, gdy wciąż edytowałem za pomocą Xcode 3).
Moje pytania to:
Jaka jest różnica między polami wersji i kompilacji?
Dlaczego pole wersji było puste po aktualizacji do Xcode 4?
Odpowiedzi:
Apple trochę zmieniło / zmieniło przeznaczenie pól.
Idąc dalej, jeśli spojrzysz na zakładkę Informacje o celu aplikacji, powinieneś użyć „Ciągu wersji pakietu, krótkiego” jako swojej wersji (np. 3.4.0) i „Wersji pakietu” jako swojej wersji (np. 500 lub 1A500 ). Jeśli nie widzisz ich obu, możesz je dodać. Będą one mapowane do odpowiednich wersji i budują pola tekstowe na karcie Podsumowanie; są to te same wartości.
Przeglądając kartę Informacje, kliknięcie prawym przyciskiem myszy i wybranie opcji Pokaż surowe klucze / wartości spowoduje wyświetlenie rzeczywistych nazw
CFBundleShortVersionString
(Wersja) iCFBundleVersion
(Kompilacja).Wersja jest zwykle używana tak, jak wyglądasz na Xcode 3. Nie jestem pewien, na jakim poziomie pytasz o różnicę Wersja / Kompilacja, więc odpowiem na nią filozoficznie.
Istnieje wiele rodzajów schematów, ale popularny jest:
{MajorVersion}. {MinorVersion}. {Revision}
Następnie kompilacja jest używana osobno, aby wskazać całkowitą liczbę kompilacji dla wydania lub przez cały okres użytkowania produktu.
Wielu programistów rozpoczyna numer kompilacji od 0 i za każdym razem, gdy budują, zwiększają liczbę o jeden, zwiększając na zawsze. W moich projektach mam skrypt, który automatycznie zwiększa liczbę kompilacji za każdym razem, gdy buduję. Zobacz instrukcje poniżej.
Inni programiści, w tym Apple, mają numer kompilacji składający się z wersji głównej + wersji podrzędnej + liczby kompilacji do wydania. Są to rzeczywiste numery wersji oprogramowania, w przeciwieństwie do wartości używanych w marketingu.
Jeśli przejdziesz do menu Xcode > Informacje o Xcode , zobaczysz numery wersji i kompilacji. Jeśli naciśniesz przycisk Więcej informacji ... zobaczysz kilka różnych wersji. Ponieważ Info Więcej ... przycisk został usunięty w Xcode 5, informacja ta jest również dostępna z Software> Deweloper sekcji System Information aplikacji dostępnych poprzez otwarcie firmy Apple menu> Ten Mac > Raport Systemu ... .
Na przykład Xcode 4.2 (4C139). Wersja marketingowa 4.2 to Kompilacja główna wersja 4, Kompilacja pomocnicza wersja C i Kompilacja numer 139. Następna wersja (prawdopodobnie 4.3) prawdopodobnie będzie Kompilacja wersja 4D, a numer Kompilacji rozpocznie się od 0 i będzie wzrastał stamtąd.
Numery wersji / kompilacji iPhone'a są takie same, jak iPhone'y, komputery Mac itp.
Aktualizacja : na żądanie, oto kroki, aby utworzyć skrypt, który będzie uruchamiany za każdym razem, gdy budujesz aplikację w Xcode, aby odczytać numer kompilacji, zwiększyć go i zapisać z powrotem do
{App}-Info.plist
pliku aplikacji . Istnieją opcjonalne dodatkowe kroki, jeśli chcesz zapisać numery wersji / kompilacji w swoichSettings.bundle/Root*.plist
plikach.Jest to rozszerzone z artykułu z poradnikiem tutaj .
W Xcode 4.2 - 5.0:
/bin/bash
.Skopiuj i wklej następujące elementy w obszarze skryptu dla liczb całkowitych kompilacji:
Jak wskazał @Bdebeez, dostępne jest również narzędzie Apple Generic Versioning Tool (
agvtool
). Jeśli wolisz go używać, musisz najpierw zmienić kilka rzeczy:Zauważ, że dzięki
agvtool
metodzie nadal możesz okresowo otrzymywać nieudane / anulowane kompilacje bez błędów. Z tego powodu nie polecam używaćagvtool
tego skryptu.Niemniej jednak w fazie uruchamiania skryptu możesz użyć następującego skryptu:
next-version
Zwiększa Argument numer kompilacji (bump
jest aliasem dla tej samej rzeczy) i-all
aktualizacjeInfo.plist
o nowym numerze kompilacji.A jeśli masz pakiet ustawień, w którym wyświetlasz wersję i kompilację, możesz dodać na końcu skryptu, aby zaktualizować wersję i kompilację. Uwaga: zmień
PreferenceSpecifiers
wartości, aby pasowały do ustawień.PreferenceSpecifiers:2
oznacza spojrzenie na pozycję o indeksie 2 podPreferenceSpecifiers
tablicą w pliku plist, więc dla indeksu opartego na 0 jest to trzecie ustawienie preferencji w tablicy.Jeśli używasz
agvtool
zamiast czytaćInfo.plist
bezpośrednio, możesz zamiast tego dodać do skryptu:A jeśli masz uniwersalną aplikację na iPada i iPhone'a, możesz również ustawić ustawienia dla pliku iPhone'a:
źródło
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") dec=$((0x$buildNumber)) buildNumber=$(($dec + 1)) hex=$(printf "%X" $buildNumber) /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $hex" "$INFOPLIST_FILE"
(Zostawiam to tutaj dla własnego odniesienia). Spowoduje to wyświetlenie wersji i kompilacji dla pól „wersja” i „kompilacja” widocznych w celu Xcode:
W Swift
źródło
alloc
/init
łańcuch, który zachowuje łańcuch, ale go nie zwalniasz. Na obiekcie, który powrócisz z metody, powinieneś na ogół użyć metody wygodnej, aby ciąg był automatycznie wydawany automatycznie lub wywoływałautorelease
. Albo:return [NSString stringWithFormat:@"%@ build %@", version, build];
ORreturn [[[NSString alloc] initWithFormat:@"%@ build %@", version, build] autorelease];
Numer kompilacji to wewnętrzny numer wskazujący bieżący stan aplikacji. Różni się od numeru wersji tym, że zwykle nie jest przeznaczony dla użytkownika i nie oznacza żadnej różnicy / funkcji / aktualizacji, jak zwykle numer wersji.
Pomyśl o tym w ten sposób:
CFBundleVersion
): numer kompilacji. Zwykle zaczynasz od 1 i zwiększasz o 1 z każdą wersją aplikacji. Szybko pozwala na porównania, które kompilacje są nowsze i oznacza poczucie postępu bazy kodowej. Mogą one być niezwykle cenne podczas pracy z kontrolą jakości i muszą mieć pewność, że błędy są rejestrowane w odpowiednich kompilacjach.CFBundleShortVersionString
): numer użytkownika, którego używasz do oznaczenia tej wersji aplikacji. Zwykle jest to zgodne ze schematem wersji Major.minor (np. MyAwesomeApp 1.2), aby poinformować użytkowników, które wersje są mniejszymi aktualizacjami konserwacyjnymi, a które nowymi.Aby skutecznie wykorzystać to w swoich projektach, Apple zapewnia doskonałe narzędzie o nazwie
agvtool
. Zdecydowanie polecam korzystanie z tego, ponieważ jest WIELE O wiele prostsze niż pisanie skryptów zmian w liście odtwarzania. Pozwala łatwo ustawić zarówno numer kompilacji, jak i wersję marketingową. Jest to szczególnie przydatne podczas tworzenia skryptów (na przykład w celu łatwej aktualizacji numeru kompilacji na każdej kompilacji lub nawet zapytania o bieżący numer kompilacji). Może nawet robić bardziej egzotyczne rzeczy, takie jak oznaczanie SVN dla Ciebie podczas aktualizacji numeru kompilacji.Aby go użyć:
agvtool new-version 1
(ustaw numer kompilacji na 1)agvtool new-marketing-version 1.0
(ustaw wersję marketingową na 1.0)Zobacz stronę podręcznika użytkownika,
agvtool
aby uzyskać mnóstwo dobrych informacjiźródło
agvtool
łatwego wersjonowania aplikacji iPhone za pomocą agvtoolSkrypt do automatycznej inkrementacji numeru kompilacji w powyższej odpowiedzi nie działał dla mnie, jeśli numer kompilacji jest wartością zmiennoprzecinkową, więc trochę go zmodyfikowałem:
źródło
Numer wydania marketingowego przeznaczony jest dla klientów i nazywa się numerem wersji . Zaczyna się od 1.0 i idzie do głównych aktualizacji 2.0 , 3.0 , drobnych aktualizacji 1.1 , 1.2 i poprawek błędów do 1.0.1 , 1.0.2 . Liczba ta dotyczy wydań i nowych funkcji.
Numer kompilacji jest głównie wewnętrzny numer buduje , które zostały wykonane do tej pory. Ale niektórzy używają innych liczb, takich jak numer oddziału repozytorium. Ta liczba powinna być unikalna, aby rozróżnić różne prawie te same kompilacje.
Jak widać, numer kompilacji nie jest konieczny i od Ciebie zależy, jakiego numeru kompilacji chcesz użyć. Jeśli więc zaktualizujesz swoją
Xcode
wersję główną, pole kompilacji będzie puste. Pole wersji może nie być puste!Aby uzyskać numer kompilacji jako
NSString
zmienną:Aby uzyskać numer wersji jako
NSString
zmienną:Jeśli chcesz oba w jednym
NSString
:Jest to testowane z Xcode w wersji 4.6.3 (4H1503) . Numer kompilacji jest często zapisywany w nawiasach / nawiasach klamrowych. Numer kompilacji jest zapisany w systemie szesnastkowym lub dziesiętnym.
W Xcode możesz automatycznie zwiększać numer kompilacji jako dziesiętną , umieszczając następujące elementy w
Run script
fazie kompilacji w ustawieniach projektuW przypadku szesnastkowej liczby kompilacji użyj tego skryptu
źródło
Dzięki @nekno i @ ale84 za świetne odpowiedzi.
Jednak zmodyfikowałem skrypt @ ale84, aby nieznacznie zwiększać liczby kompilacji dla liczb zmiennoprzecinkowych.
wartość parametru inc można zmienić zgodnie z wymaganiami dotyczącymi formatu zmiennoprzecinkowego. Na przykład: jeśli włączone = .01, format wyjściowy to ... 1,19, 1,20, 1,21 ...
źródło
Innym sposobem jest ustawienie numeru wersji w
appDelegate
didFinishLaunchingWithOptions
:źródło