Różnica między wersją Xcode (CFBundleShortVersionString) a kompilacją (CFBundleVersion)

94

Podsumowanie celu aplikacji

W Xcode 4 widzę to jako podsumowanie celu:

Wejście „Wersja” odpowiada CFBundleShortVersionStringw pliku info.plist, a wejście „Kompilacja” odpowiada CFBundleVersion.

Jaka jest różnica między tymi dwoma? Widzę wiele osób w Internecie, które chcą przypisać tę samą wartość do obu i podejrzewam, że jest to kompatybilność wsteczna.

Mam dwa pytania:

1) Gdybym zaczynał od zera, jaka byłaby najlepsza praktyka w zakresie wersjonowania Twojej aplikacji?

2) We wszystkich poprzednich wersjach mojej aplikacji używałem tylko CFBundleVersion. Aby nie zepsuć procesu aktualizacji, czy powinienem kontynuować przyrosty w CFBundleVersionten sam sposób, czy jest możliwe przejście na „właściwą drogę”, zakładając, że taka istnieje?

Philip Walton
źródło
3
To jest duplikat stackoverflow.com/questions/6851660/version-vs-build-in-xcode-4, ale być może ta wersja jest lepiej opisana (i ma zrzut ekranu).
Daniel Dickison
Czy jest coś, co musiałeś zrobić, aby wyświetlić pole Kompilacja w podsumowaniu? Widzę tylko wersję, ale nie widzę pola kompilacji.
Kenny Wyland

Odpowiedzi:

68

Dokument Apple „Information Property List Key Reference” mówi, że CFBundleShortVersionStringreprezentuje wersję wydania, a CFBundleVersionreprezentuje dowolną kompilację, wydaną lub nie. Ponadto, CFBundleShortVersionStringmogą być zlokalizowane, choć nie wiem dlaczego chcesz chcą, bo mówią, że to ma być „łańcuch składa się z trzech liczb całkowitych oddzielonych epoki”. W przypadku wydania wydania rozsądne byłoby uczynienie tych dwóch takich samych liczb. W przypadku kompilacji deweloperskiej możesz dołączyć do niej coś innego CFBundleVersion, może inną kropkę i liczbę całkowitą.

JWWalker
źródło
Ale jeśli mam obecnie używa 1.3.1 jak mój CFBundleVersioni nic jak mój CFBundleShortVersionString, a ja chcę, aby przełączyć się używając CFBundleVersiondo reprezentowania wewnętrzny buduje, to trzeba przynajmniej początek z liczbą całkowitą większa niż 1.3.1, prawda? A może dokonanie tej zmiany tylko prosi o kłopoty?
Philip Walton
Wersja ( CFBundleShortVersionString) jest jedyną rzeczą, która ma znaczenie przy przesyłaniu do Apple. Build ( CFBundleVersion) jest przeznaczony do użytku w programowaniu lub do wyświetlania w aplikacji. Użyj liczby ósemkowej (podstawa-8) i iteruj w odwrotnej kolejności o 12, jeśli chcesz.
nekno
16
nekno: Właściwie to CFBundleVersion ma znaczenie dla Apple. Sprawdź ten komunikat o błędzie, który Apple podaje podczas przesyłania aplikacji: „Przesłany plik binarny był nieprawidłowy. Klucz CFBundleVersion w pliku Info.plist musi zawierać wyższą wersję niż wersja przesłana wcześniej”.
malhal
10
Niektóre kraje używają cyfr innych niż współczesny arabski używany w świecie zachodnim, na przykład arabski wschodni (٠, ١, ٢, ٣, ٤, ٥, ٦, ٧, ٨, ٩) lub hebrajski (א, ב, ג, ד, ה, ו, ז, ח, ט) - i te dwa są również zapisane od prawej do lewej. Istnieje wiele innych systemów liczbowych (patrz en.wikipedia.org/wiki/Category:Numerals ). Domyślam się, że to właśnie Apple rozumie przez „lokalizowalny” numer wersji.
Ruslan Ulanov
Nawiasem mówiąc, trzy cyfry ze znakami interpunkcyjnymi nie są wymagane. Zamiast tego używam wartości daty i godziny, takiej jak 201606070620dla obu wartości w dostarczanej aplikacji na iOS 7-8-9.
Basil Bourque
3

Na pytanie JWWalkera, dlaczego chcesz zlokalizować CFBundleShortVersionString, byłby to separator dziesiętny. Na przykład w lokalizacjach, w których separatorem dziesiętnym jest przecinek, wersja „1.5” będzie miała wartość „1,5”.

Arjun
źródło
30
IMO nie musisz lokalizować numerów wersji. Mieszkam w regionie, w którym separatorem dziesiętnym jest przecinek (Niemcy) i jestem przyzwyczajony do numerów wersji oddzielonych kropką. Właściwie nie pamiętam, żeby kiedykolwiek widziałem numer wersji z przecinkiem.
Christian Specht,
2
Mieszkam też w regionie używającym przecinka jako separatora dziesiętnego, chociaż 1,3,1 to dość dziwna wartość, 1.3.1 wydaje się znacznie lepsza.
Lucien
1
Myślę, że oznacza to, że możesz mieć różne wersje aplikacji dla różnych regionów. 1.2.1> en.lproj 1.2.2> fr.lproj Chociaż cały plik plist jest kopiowany podczas lokalizowania pliku, więc oba numery wersji są kopiowane, aby obie wersje mogły zostać zlokalizowane
brian.clear
1

Szybka naprawa:

Po prostu dodaj CFBundleShortVersionStringdo pliku plist i edytuj swoją wersję.

  1. Odkryj swoje InfoPlist.strings
  2. Podświetl go i wklej poniższy kod w (zakładając, że jest w trybie kodu źródłowego)

{"CFBundleShortVersionString" = "1.1";}

  1. Zmień wersję 1.1 na jakąkolwiek nową wersję.
  2. Twórz i przesyłaj bez więcej błędów!

wprowadź opis obrazu tutaj

Louie
źródło
1

Zobacz dokumentację Apple dotyczącą przesyłania plików binarnych.

Numerowanie wersji i kompilacji: iTunes Connect wyodrębnia numer wersji wstępnej i numer kompilacji z pliku binarnego. Numer wersji wstępnej to numer wersji Xcode lub klucz „Wersja pakietu, krótki” w Info.plist. Numer kompilacji to numer kompilacji Xcode lub klucz „Wersja pakietu” w Info.plist. Numer wersji wstępnej i numer kompilacji zostaną wyświetlone na karcie Wersja wstępna, zgodnie z opisem w sekcji Wyświetlanie kompilacji.

Przesyłanie pliku binarnego dla aplikacji

GilesDMiddleton
źródło