CFBundleVersion w błędzie przesyłania Info.plist


108

„Przesłany plik binarny był nieprawidłowy. Klucz CFBundleVersion w pliku Info.plist musi zawierać wyższą wersję niż wersja przesłana wcześniej”.

Otrzymuję ten błąd, kiedy przychodzę, aby przesłać moją aplikację.

Ustawiłem zaktualizowaną wersję na 1.2 w iTunes Connect, a także zaktualizowałem .plistplik do 1.2.

Nie rozumiem, dlaczego otrzymuję ten błąd. Każda pomoc będzie mile widziana. Dzięki.


Dlaczego nie spróbować ustawić go na, powiedzmy, 1.2.1?
Nikita Rybak

Próbowałem wielu kombinacji. Żadna praca. Ten błąd się powtarza.
Adam H

1
A jaka jest poprzednio przesłana wersja (jak można znaleźć na Info.plist aktualnie wysyłanej aplikacji)?
Costique

Czy problem został rozwiązany? Nagle przytrafił mi się ten sam problem. To jest frustrujące.
Wayne Lo,

Właśnie dostałem e-mail z tym błędem i okazało się, że jedna z moich starych kompilacji, która utknęła w ITC jako „przetwarzanie” przez ostatni tydzień, została w końcu przetworzona. Kiedy po raz pierwszy utknęło, ponownie przesłałem kolejną kompilację ze zwiększonym numerem kompilacji, więc gdy starsza została w końcu przetworzona, wywołała błąd.
blwinters

Odpowiedzi:


210

Na serwerze przesyłania Apple jest co najmniej 1 znany błąd, którego nie naprawili od ponad 12 miesięcy. Rzeczy, na które należy uważać:

  1. Apple usuwa wszystkie wiodące zera w numerze wersji; tzn. „cały ciąg” NIE jest traktowany jako liczba, zamiast tego bity między kropkami są traktowane jako ODDZIELNE liczby. np. „1.02” jest traktowane przez Apple jako „1.2”. Tak więc dla Apple 1.02 to WIĘKSZA NIŻ 1.1
  2. Apple czasami jest „zdezorientowany” i wydaje się porównywać przesłaną przez Ciebie aplikację z wersją INNEJ aplikacji, którą przesłałeś wcześniej. Przydarzyło się to wielu osobom i sam to widziałem kilka razy
  3. Apple powinien porównywać „CFBundleVersion” (tj. „Wersja pakietu”, a nie „Ciąg wersji pakietu, krótki”); nie mieszaj się.
  4. Często jedynym realnym rozwiązaniem jest podbicie przedniej liczby (np. „2” w „2,4” - zwiększ ją do „3”)
  5. Numer wersji, którą przesyłasz, nie jest powiązany z numerem wersji, który pojawia się w iTunes - możesz tam umieścić wszystko, co chcesz, i tak zobaczą Twoi użytkownicy
  6. ... z wyjątkiem tego, że jeśli zgłosisz również „faktyczny” numer wersji w swojej aplikacji, użytkownik zobaczy CFBundleVersion (zwykle zależy to od tego, jak ją zakodujesz), a nie wersję iTunes (do której - myślę - nie można uzyskać dostępu z wewnątrz aplikacji)

1
CFBundleVersion jest tym, co w xcode 4.5 jest oznaczone jako „Kompilacja”, a NIE „Wersja”! Wersja kończy się oznaczeniem „CFBundleShortVersionString” w pliku Info.plist. Więc rzeczywiście musisz podać wyższą wartość dla budowania niż poprzednio.
RickJansen

+1 Pomocny. Użyłem 1.02w mojej poprzedniej wersji. I napraw to, używając tej odpowiedzi. Dziękuję Ci.
Praveenkumar

Tę odpowiedź należy dodać w FAQsekcji dotyczącej przesyłania aplikacji do sklepu z aplikacjami. :))
danypata

@Adam: Jak przeczytałem, CFBundleShortVersionStringnumer wersji, który podałeś w iTunes Connect, powinien być zgodny. Oznacza to, że jeśli pokażesz numer wersji w używanej aplikacji CFBundleShortVersionString. CFBundleVersionPowinien być podwyższony również i to, że ktoś używa Apple ustalić, czy złożenie zaktualizowaną wersję swojej aplikacji.
testowanie

Firma Apple niedawno przedefiniowała znaczenie wszystkich ich ciągów w sposób NIEZGODNY z poprzednimi wersjami.
Adam

28

Zaktualizuj numer kompilacji. Numer wersji jest ważny, ale numer kompilacji ma znaczenie. Na przykład miałem moją początkową wersję aplikacji jako:

version #: 1.0
build #:   1.0

Jednak gdy próbowałem wgrać następną wersję tj

version #: 1.1
build #:   1.0

Nie zaakceptowałoby przesyłania. Po prostu zwiększając numer kompilacji do 1.1, przesyłanie zostało zaakceptowane.


Idealnie ... zmiana kompilacji # zrobiła to za mnie, co jest świetne, ponieważ naprawdę chciałem zsynchronizować moją wersję pakietu i wersję iTunes.
Aaron Hayman

9

Xcode 4 pomyśli, że chcesz ponownie przesłać tę samą wersję, jeśli nie zarchiwizujesz ponownie aplikacji. Nawet jeśli zmienisz wersję pakietu i przebudujesz, przesyłanie się nie powiedzie. Pamiętaj, aby zrobić „ Archiwum ” w menu Produkt!


7

Wiele odpowiedzi pomogło mi ostatecznie, ale dopiero wtedy, gdy zobaczyłem dokładny numer „wersji”, porównywał Apple.

  1. Przejdź do iTunes Connect -> Zarządzaj swoimi aplikacjami
  2. Wybierz aplikację, dla której chcesz sprawdzić poprzednią wersję
  3. Kliknij niebieski przycisk oznaczony Wyświetl szczegóły
  4. Kliknij łącze oznaczone jako Szczegóły binarne
  5. Znajdź wartość podaną dla wersji pakietu

Chociaż wydawało mi się, że podałem numer wersji 1.0.1, rzeczywista liczba przechowywana przez Apple wynosiła 101. Niektóre z powyższych komentarzy sugerowały, że muszę zmienić moją wersję na 2.0 (20) lub 1.5 (15) lub 1.2 (12 ) - jak widać, wszystkie są mniejsze niż 101. Zaktualizowanie numeru wersji 102 (bez kropek) rozwiązało problem.


6

W tym artykule wskazano, że numer wersji widoczny w sklepie z aplikacjami niekoniecznie jest taki sam, jak numer wersji pakietu. Gdy przeglądasz szczegóły swojej aplikacji w iTunes, znajduje się tam link o nazwie „Szczegóły binarne”. Ta strona pokazuje wersję pakietu. Jedna z aplikacji, nad którą pracowałem, była w wersji 1.0, ale jej pakietowa wersja to 2.0. Przesyłanie pakietu z wersją 1.1 nie powiodło się, ale 2.1 zadziałało.

Tak więc istnieje wersja aplikacji i wersja pakietu. Ten problem jest związany z wersją pakietu.


5

Wygląda na to, że zamieszanie jest spowodowane formatem liczb. Wersja pakietu nie jest ułamkiem dziesiętnym. Jest to wersja (a może kompilacja), więc 1.11 to właściwie „jeden punkt jedenasty”. Stąd 1,11 jest większe niż 1,2. W tym przypadku udało mi się zastosować 1.20.


4

Zwykle może to być spowodowane brakiem numeru wersji. Dlatego dodaj numer wersji w sekcji Identity, a także sprawdź numer kompilacji.

wprowadź opis obrazu tutaj

Zachowaj kodowanie ......... :)


3

Dla mnie (Xcode 4.5) zmiana numeru kompilacji rozwiązała problem. ustaw wersje na 1.0.2 ... 2.0.2 itd., a następnie zwiększ build # (Adam 3 punkty daj mi idię, gdzie mam szukać).


2

Powinieneś być w stanie zalogować się do iTunes Connect i zobaczyć aktualną wersję aplikacji (w tym tę, którą przesłałeś, ale nie jest aktywna). Sprawdź, czy wcześniej nie przesłałeś wersji z wyższym (lub tym samym) numerem wersji.


To jest mylące; Apple NIE porównuje po prostu z wersją iTunesConnect. por. odpowiedź Pietera poniżej, aby uzyskać dokładniejszą odpowiedź.
Adam

@Adam Od teraz (2014-05) firma Apple rzeczywiście porównuje wewnętrzne numery wersji aplikacji na iOS z numerem wersji iTunesConnect. W przypadku niezgodności Version Mismatch - Neither CFBundleVersion ['201405030503'] nor CFBundleShortVersionString ['201405030503'] in the Info.plist match the version of the app set in iTunes Connect ['1.0.0'].pojawia się następujący komunikat ostrzegawczy (nie jest to błąd): Ale to porównanie iTunesConnect nie jest przyczyną problemu w tym pytaniu. Porównanie iTunesConnect jest zwykłym ostrzeżeniem, a nie zatrzymującym program błędem.
Basil Bourque

2

Spędziłem kilka godzin próbując rozwiązać ten problem. Ze wszystkich sił sprawdziłem, czy CFBundleVersion jest rzeczywiście wyższa niż starsza wersja, otwierając info.plist w edytorze tekstu, uzyskując informacje o celu i czytając wersję dotyczącą właściwości, poprosiłem żonę o przeczytanie wersji w iTunes, aby potwierdzić, że nie uderzył mnie nieoczekiwany wcześniejszy Alzheimer.

W końcu to jakoś załatwiło sprawę. Moja starsza wersja to 1.0.4. Próbowałem 1.3.5, 1.4.5 itd .; żaden nie działał. Ale co jest dość zaskakujące, kiedy wszedłem do wersji 2.0.0, program ładujący aplikację podoba się temu, co zobaczył i przesłał go. Czy jest to spowodowane błędem w module ładującym aplikacje?


2

W podsumowaniu celów obok numeru wersji w xcode4 jest kompilacja, zacząłem od 1, zwiększam za każdym razem, gdy wykonuję przesyłanie binarne, to rozwiązało problem za mnie


To też był mój problem, komunikat o błędzie jest bardzo mylący!
mj662

Ja też miałem ten problem. To niesamowicie frustrujące, że wiadomość jest tak myląca. Zmarnowałem większą część mojego popołudnia. Dziękuję za pomocną odpowiedź.
Joel Anair

2

Jeśli zgłoszony błąd to CFBundleVersion, naprawa jest zwykle dość łatwa. Sprawdź / wypróbuj to:

  1. Przejdź do elementu projektu najwyższego poziomu w Nawigatorze projektu i kliknij go.
  2. W panelu kliknij prawym przyciskiem myszy cel aplikacji.
  3. Kliknij kartę podsumowania.

Na karcie podsumowania zobaczysz, że istnieją dwie różne „wersje”, które można dostosować. Pierwszym z nich jest pole „Wersja”, które jest używane na domyślnym ekranie „Informacje” w aplikacjach na komputery Mac. Ta po prawej to „Wersja kompilacji”. To jest ten, który naprawdę ma znaczenie w przypadku zgłoszeń do App Store!


2

Wiem, że to stare pytanie, ale właśnie napotkałem ten problem. Rozwiązałem to, usuwając projekt z archiwum, a następnie ponownie go archiwizując. Najwyraźniej znajdowała się tam poprzednia wersja aplikacji i powodowała zamieszanie.


2

Zwróć uwagę na komunikat o błędzie.

Komunikat o błędzie zawiera poprzedni numer paczki w nawiasach kwadratowych (np. [9]).

Dlatego musisz zwiększyć ten numer pakietu (np. 9.1), chociaż twój nowy numer wersji to 1.2

Więc kiedy aktualizujesz wersję z 1.1 do 1.2 w iTunes Connect, musisz ustawić te wartości w swoim projekcie

Version number = 1.2
Bundle number = [previous bundle number]++

2
UWAGA: jeśli nie jesteś pewien, jaki był numer pakietu dla ostatniej przesłanej wersji, kliknij starszą wersję i poszukaj szczegółów binarnych (w sekcji Łącza). Powinieneś zobaczyć „Wersja pakietu: #”
Nathaniel Blumer

1

Mam w swoim projekcie wersję na iPhone'a i iPada, lista informacyjna dla iPada z jakiegoś powodu nie była powiązana z produktem iPad, sprawdzenie członkostwa docelowego i skojarzenie go z właściwym produktem rozwiązało ten problem.



1

Popełniłem błąd, zamieniając „Wersja” i „Wersja” nr.

Zamiast umieszczać 2.3 w polu Wersja, umieściłem go w kompilacji nr.


1

Oto, jak rozwiązałem problem (i domyślam się, że jest to problem wielu osób):

1) Kliknij kartę ogólną ustawień projektów (do której można uzyskać dostęp, klikając nazwę projektu, która znajduje się na górze wszystkich plików kodu).

2) Upewnij się, że pole kompilacji jest zgodne z tym, co umieściłeś w pliku plist dla klucza „Wersja pakietu”.

To był problem dla mnie, z jakiegoś powodu nie byli zsynchronizowani. Myślę, że kiedy zmienisz klucz wersji Bundler, powinien on się zsynchronizować (i odwrotnie). Ale to się nie stało z jakiegokolwiek powodu - może to być błąd.


1

Miałem ten sam problem i stało się tak, ponieważ nie zarchiwizowałem i korzystałem z pierwszego archiwum, którego użyłem w wersji 1.0, ale z wersją 1.0.1. Więc wybrałem urządzenie iOS, zarchiwizowałem, a następnie zweryfikowałem. Ta-daaa, zadziałało!


powinien być raczej komentarzem niż odpowiedzią.
Hello World,

0

Miałem ten sam problem. Zasadniczo moja poprzednia wersja to 1.12. Chciałem ją zmienić na 1.2, ale miałem wspomniany błąd. Spróbowałem 1.20 i wyszło idealnie


Druga liczba musi mieścić się w przedziale od 0 do 9, więc 12 to „za duża”
JOM

1
„Druga liczba” (nazwijmy ją podrzędnym numerem wersji, dla zabawy) może być dowolną liczbą całkowitą, nie ma dla niej ograniczeń; więc 12lub 20jest idealnym numerem wersji pomocniczej .
holex

0

Żaden zestaw stale rosnących numerów wersji nie działał tak długo, jak długo korzystałem z modułu ładującego aplikacje firmy Apple do przesyłania mojego pliku ipa, ale jeśli użyłem „Organizatora” XCode (znajdującego się w menu rozwijanym „Okno” w wersji 3.2.5) , kliknął przycisk „Zatwierdź ...”, zaczekał na zatwierdzenie mnie, a następnie kliknij przycisk „Prześlij…”, wszystko poszło zgodnie z oczekiwaniami z rozsądnym numerem wersji (takim, który jest o jeden przyrost wyższy niż obecnie dostępny w App Store).


0

w xcode 4.2 wydaje się, że nie rejestruje wersji pakietu, jeśli modyfikujesz z pliku info.plist. Ustawiłem nową wersję pakietu bezpośrednio w "info" panelu xcode i teraz działa!


0

Znalazłem inne rozwiązanie.

Jeśli wybierzesz cel >> info >> zaktualizuj identyfikator pakietu.


0

Miałem ten sam problem. Pierwsza przesłana wersja to 1.5.20 i chciała zaktualizować do 1.7.30.

Po bezskutecznym wypróbowaniu wersji 1.8, 2.0 i 3.0 zaktualizowałem CFBundleVersion do 10.0 i nagle zadziałało.

Nie jestem pewien, jaka jest logika tego zachowania, ale spowodowało to, że straciłem około 2 dni czasu pracy.


0

Sprawdź swoją wersję pakietu z poprzednio przesłaną wersją, powinieneś podać wyższą wersję pakietu w porównaniu z wersją pakietu już przesłanej wersji.Już załadowaną wersję można wyświetlić w itunesconnect / application / view details / binary details.


0

Spędziłem dwie noce nad podobnym problemem. Moja poprzednia wersja to 1.02 i próbowałem walidować za pomocą 1.2, 1.20, 1.1 i zawsze otrzymywałem nieprawidłowy komunikat binarny.

Rozwiązałem to, wpisując 2.0 jako numer wersji i zadziałało . Podejrzewam, że to również błąd. Nie dostałem tej wiadomości podczas ostatniej aktualizacji mojej gry z 1.0 do 1.1, ale było to z xcode 3. Dzięki za wskazówkę!


0

Miałem podobny problem i po spędzeniu pół godziny zauważyłem, że zwiększam niewłaściwą liczbę. Zamiast zwiększać Bundle version, zwiększałem Bundleversions, string, shortw Info.plist. Wyszukaj „CFBundleVersion” w swoim projekcie za pomocą CMD + Shift + F. Zobaczysz, że musisz zwiększyć numer CFBundleVersion.


0

Spróbuj zmienić wersję = „1.1.1.0” na wersję = „1.1.1”


0

Stan na koniec października Apple wymaga, aby numery wersji były mniejsze niż 4 cyfry (1.2.3 lub 1.23 w przeciwieństwie do 1.2.3.4 lub 1.234). Dotyczy to również bibliotek!

Szybkie sprawdzenie numeru wersji powodującej problem w katalogu projektu powinno spowodować włączenie biblioteki:

grep -r "1.2.3.4" .


0

Miałem aktywną wersję beta TestFlight. Kompilacja 2020 , wersja 407

Przesłałem aplikację do oficjalnego przeglądu w App Store. Build 2020 , wersja 435 i została zatwierdzona. Po prostu tam siedzi i czeka, aż wprowadzę go na żywo do App Store.

Nie dodając skomplikowanej historii pobocznej, chciałem dać moim użytkownikom TestFlight beta zaktualizowaną wersję, aby przez kilka dni przejrzeć oficjalną wersję App Store przed udostępnieniem wersji App Store. Dlaczego pytasz? Ponieważ otrzymywali darmowe funkcje, wkrótce będzie to kosztować pieniądze, gdy aplikacja zostanie uruchomiona.

Tak więc przesłałem Build 2020 , wersję 436, do TestFlight i został on odrzucony.

Został odrzucony, ponieważ mam zatwierdzonego oficjalnego kandydata do App-Store z tym samym numerem kompilacji

Rozwiązanie: zmień numer kompilacji wersji TestFlight. Poddałem Zbuduj 20200 (dodałem dodatkowy zero) w wersji 436 do TestFlight i został zatwierdzony. Nie martw się, nadal możesz przesłać tę kompilację do tej samej grupy beta TestFlight, o ile nadal używasz tego samego BundleID.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.