Jaka jest różnica między „numerem wersji” w iTunes Connect, „wersją pakietu”, „ciągiem wersji pakietu” w Xcode?

94

Dokument Apple mógł być bardziej jasny, jak przesłać wersję aktualizacji.

Jak zapytano w tytule, jaka jest różnica między

  1. numer wersji w itunes connect (który należy podać podczas przesyłania aktualizacji)
  2. wersja pakietu w xcode
  3. pakiet wersji ciąg znaków, krótki

Czy są w jakikolwiek sposób spokrewnieni?

eugene
źródło
12
Apple i ich mylące terminy / pola ...: /
BoltClock
Proszę zobaczyć moją poprzednią odpowiedź: stackoverflow.com/a/31921249/936957
Yunus Nedim Mehel

Odpowiedzi:

144

Tak, są spokrewnieni. Wszystkie odnoszą się do wersji Twojej aplikacji.

  • Połączenie iTunes
    Jest to numer wersji wyświetlany w App Store; To musi być czysty numer wersji, na przykład1.2.3

  • Wersja pakietu (CFBundleVersion)
    Nie musi to być czysty numer wersji. Może to być coś takiego jak 12345lub 1.2.3 (Build 12345AB). Jest to pokazane na przykład w oknie Informacje dla aplikacji Mac OS X i często jest bardziej „numerem kompilacji” niż „numerem wersji”.

  • Ciąg wersji pakietu (CFBundleShortVersionString) Ta wartość jest używana jako „rzeczywisty” numer wersji. To musi być taka sama, jak ciąg używany do wersji iTunes Connect .

Aktualizacja:
jak wskazał @snlehton, CFBundleVersion musi być czystym numerem wersji, tak jak w 1.2.3przypadku, gdy chcesz przesłać swoją aplikację do (iOS) App Store.

Fabian Kreiser
źródło
3
Na potrzeby testowania ustawiasz ciąg wersji pakunku na ostateczny numer wersji, na przykład, 1.2.3a następnie zwiększasz wersję pakunku dla każdej kompilacji.
Fabian Kreiser
19
TO NIEPRAWIDŁOWE CFBundleVersion musi być w wersji dla xyz, w przeciwnym razie załadowanie kompilacji zakończy się niepowodzeniem! link
snlehton
2
Niedawno przesłałem kompilację z CFBundleVersion z „1.0.2 RC3” i otrzymała komunikat o błędzie: „Pakiet jest nieprawidłowy. Klucz CFBundleVersion w pliku Info.plist musi być listą nieujemnych liczb całkowitych oddzielonych kropkami”. Myślę, że nn.n.nxnnn jest właściwym formatem do użycia, ale jeszcze go nie wypróbowałem.
snlehton,
3
CFBundle Wersja 1235 tutaj, żadnych problemów
Piotr Tomasik
4
Zamieszanie polega na tym, że CFBundleShortVersionString jest opcjonalna, a gdy jest ustawiona, zmienia to, do czego służy CFBundleVersion. Jeśli zawiera tylko CFBundleVersion, musi to być publiczny numer wersji, np. 1.0. Jeśli jednak zarówno CFBundleVersion, jak i CFBundleShortVersionString są ustawione, to CFBundleShortVersionString musi teraz uzyskać publiczny numer wersji, np. 1.0. A teraz CFBundleVersion zmienia się na numer kompilacji, który zwykle jest pojedynczą liczbą całkowitą, np. 374629. Miejmy nadzieję, że to wszystko wyjaśni.
malhal
27

Tak, są powiązane, ale ich definicja zależy od tego, jak są używane.

  • Wersja iTunes Connect

    Zawsze musi to być numer wersji, np. 1.0

Tryb użycia 1 - ustawiono tylko CFBundleVersion

  • Wersja pakietu (CFBundleVersion)

    Musi być numerem wersji, np. 1.0. Musi pasować do wersji iTunes Connect.

Tryb użycia 2 - ustawiane są zarówno wartości CFBundleVersion, jak i CFBundleShortVersionString

  • Wersja pakietu (CFBundleVersion)

    Musi być numerem kompilacji, np. Pojedynczą liczbą całkowitą, np. 435163.

  • Krótki ciąg wersji pakietu (CFBundleShortVersionString)

    Musi być numerem wersji, np. 1.0. Musi pasować do wersji iTunes Connect.

Tryb użytkowania 2 to najlepszy sposób. Oto kilka przykładowych liczb ścieżki uaktualnienia aplikacji:

CFBundleShortVersionString CFBundleVersion 
1.0                        1
1.0.1                      2
1.0.2                      3
1.2                        5  (build 4 was a beta and never released publicly)
1.2.1                      6

Dodatkowa uwaga na temat numerów wersji: jeśli prześlesz niewielką aktualizację (np. Poprawkę błędu) do swojej aplikacji, nigdy nie możesz przegapić okresów w numerze wersji, np. Zawsze używaj 1.0.1 i NIGDY 1.01, w przeciwnym razie ryzykujesz, że nie będziesz mógł używać pewne numery wersji w przyszłości, ponieważ nie będzie można ich zwiększyć.

malhal
źródło
2
Sama ta tabela najlepiej wyjaśnia, w jaki sposób te dwie liczby są powiązane i stosowane w praktyce. Dzięki.
Joshua Pinter
Musi pasować do wersji iTunes Connect. To nie jest trudny wymóg (nawet jeśli powinien być MUSI)
Marco Pappalardo
13

Tak, wszystkie są powiązane.

Numer wersji w itunesconnect to numer wersji, który musisz podać. Na przykład 2.1.1 lub 3.1.2 itd. To również powinno być równe CFBundleShortVersionString .

Wersja pakietu W Xcode ( CFBundleVersion ) reprezentuje tylko numer kompilacji, który identyfikuje iterację (wydaną lub niewydaną) aplikacji.

Łańcuch wersji pakietu, krótki ( CFBundleShortVersionString ) to liczba składająca się z trzech liczb całkowitych oddzielonych kropkami. Pierwsza reprezentuje wszystkie większe aktualizacje aplikacji, takie jak aktualizacje, które wprowadzają nowe funkcje lub duże zmiany. Druga liczba całkowita oznacza wersje, które zawierają mniej widoczne funkcje. Trzecia liczba całkowita reprezentuje wydania konserwacyjne.

mayuur
źródło
3
W rzeczywistości „Ciąg wersji pakietu, krótki” nie musi składać się z TRZECH liczb oddzielonych kropkami. Myślę, że "1" i "1.1" też są poprawne.
Nicolas Miari
właściwie z mojego testowego numeru wersji w itunesconnect jest całkowicie niezależny od CFBundleVersion i ShortVersion. Więc możesz je mieć nawet inaczej
Marco Pappalardo
11

Uważaj na CFBundleVersion . To nie tylko numer wersji produkcyjnej. Ta wartość jest sprawdzana przez Apple podczas procesu przesyłania plików binarnych i może się nie powieść.

Pamiętaj, aby ustawić CFBundleVersion z wartością CFBundleShortVersionString podczas tworzenia wersji do przesłania.

Zobacz ten post o tym

aponauta
źródło
3
To jest poprawna informacja, zaakceptowana odpowiedź faktycznie zawiera błąd.
snlehton,
9
To nie jest poprawne, CFBundleVersionnie musi pasować CFBundleShortVersionString. Na przykład, jeśli spojrzysz na bieżący plik .ipa dla przeglądarki Chrome (w sklepie z aplikacjami), ma on „34.0.1847.18” dla CFBundleVersioni „34.1847.18” dla CFBundleShortVersionString.
progrmr
6
Nie ma dokumentacji mówiącej, że CFBundleVersion i CFBundleShortVersionString powinny być takie same.
Toydor
8

Zaakceptowana odpowiedź jest drogą do zrobienia - wystarczy dodać to jako przykład.

W przypadku naszego ostatniego wydania wymagany był „Ciąg wersji pakietu, krótki”. Poszedłem więc dalej i dopasowałem go do numeru wersji pakietu (1.2.8 dla naszej aplikacji).

Następnie włączyłem Testflight i udostępniłem wersję oczekującą na recenzję Apple (1.2.8) naszym wewnętrznym testerom. Jednak tester znalazł problem, który wymagał naprawy, i usunęliśmy plik binarny. Podczas przesyłania nowej kompilacji wystąpił błąd wskazujący, że wersja kompilacji została już przesłana.

Po przeczytaniu kilku linków SO i dokumentacji Apple zrozumiałem, że stworzyłem wersję pakietu: 1.2.8.001, zachowując jednocześnie krótką wersję pakietu. Jeśli wymagana jest nowa kompilacja, zwiększamy wersję pakietu do 1.2.8.002.

Uwaga: przesyłanie zostało zaakceptowane, a kompilacja jest wyświetlana jako „1.2.8.001” w wersji wstępnej. Numer wersji to nadal 1.2.8.

ahash
źródło
3

Zaakceptowana odpowiedź tego linku zawiera dobre szczegóły: Która wersja / numery kompilacji aplikacji na iOS MUSZĄ zostać zwiększone po wydaniu App Store?

Z dokumentów Apple

CFBundleVersion (wersja pakietu)

CFBundleVersion (String - iOS, OS X) określa numer wersji kompilacji pakietu, który identyfikuje iterację (wydaną lub niewydaną) pakietu. Numer wersji kompilacji powinien być ciągiem składającym się z trzech nieujemnych liczb całkowitych oddzielonych kropkami, przy czym pierwsza liczba całkowita jest większa od zera. Ciąg powinien zawierać tylko cyfry (0-9) i kropki (.). Zera wiodące są obcinane z każdej liczby całkowitej i zostaną zignorowane (to znaczy 1.02.3 jest równoważne 1.2.3). Tego klucza nie można zlokalizować.

CFBundleShortVersionString (ciąg wersji pakietu, krótki)

CFBundleShortVersionString (String - iOS, OS X) określa numer wersji pakietu, który identyfikuje wydaną iterację aplikacji. Numer wersji wydania to ciąg składający się z trzech liczb całkowitych oddzielonych kropkami. Pierwsza liczba całkowita reprezentuje główne wersje aplikacji, takie jak wersje, które wprowadzają nowe funkcje lub duże zmiany. Druga liczba całkowita oznacza wersje, które zawierają mniej widoczne funkcje. Trzecia liczba całkowita reprezentuje wydania konserwacyjne.

Wartość tego klucza różni się od wartości CFBundleVersion, która identyfikuje iterację (zwolnioną lub niewydaną) aplikacji. Ten klucz można zlokalizować, dołączając go do plików InfoPlist.strings.

muzz
źródło