Qual é a diferença entre “número da versão” no iTunes Connect, “versão do pacote”, “string da versão do pacote” no Xcode?

94

O documento da Apple poderia ter sido mais claro sobre como enviar uma versão de atualização.

Conforme perguntado no título, qual é a diferença entre

  1. número da versão no iTunes Connect (que você deve fornecer ao enviar uma atualização)
  2. versão do pacote em xcode
  3. string de versões do pacote, curto

Eles estão relacionados de alguma forma?

Eugene
fonte
12
Apple e seus termos / campos confusos ...: /
BoltClock
Por favor, veja minha resposta anterior: stackoverflow.com/a/31921249/936957
Yunus Nedim Mehel

Respostas:

142

Sim, eles estão relacionados. Todos eles se referem à versão do seu aplicativo.

  • iTunes Connect
    Este é o número da versão mostrado na App Store; Deve ser um número de versão puro, como1.2.3

  • Versão do pacote (CFBundleVersion)
    Não precisa ser um número de versão puro. Isso pode ser algo como 12345ou 1.2.3 (Build 12345AB). Isso é mostrado na janela Sobre para aplicativos Mac OS X, por exemplo, e geralmente é mais um "Número da versão" do que um "Número da versão".

  • String da versão do pacote (CFBundleShortVersionString) Este valor é usado como o número da versão "real". Esta deve ser a mesma seqüência como usado para a versão no iTunes Connect .

Atualização:
Como apontado por @snlehton, o CFBundleVersion deve ser um número de versão puro, como 1.2.3quando você deseja fazer upload de seu aplicativo para a App Store (iOS).

Fabian Kreiser
fonte
3
Para teste, você define a string da versão do pacote para o número da versão final como 1.2.3e, em seguida, incrementa a versão do pacote para cada construção.
Fabian Kreiser,
19
ISTO É ERRADO O CFBundleVersion precisa estar disponível para xyz, caso contrário, o upload de uma versão falhará! link
snlehton
2
Recentemente, enviei uma compilação com CFBundleVersion com "1.0.2 RC3" e ela retornou com a mensagem de erro: "O pacote é inválido. A chave CFBundleVersion no arquivo Info.plist deve ser uma lista separada por pontos de inteiros não negativos." Acho que o nn.n.nxnnn é o formato correto a ser usado, mas ainda não tentei.
snlehton
3
CFBundleVersion de 1235 aqui, sem problemas
Piotr Tomasik
4
A confusão aqui é porque CFBundleShortVersionString é opcional e, quando definido, altera a finalidade de CFBundleVersion. Se incluir apenas CFBundleVersion, deve ser o número da versão pública, por exemplo, 1.0. No entanto, se CFBundleVersion e CFBundleShortVersionString estiverem definidos, o CFBundleShortVersionString deve agora ser o número da versão pública, por exemplo, 1.0. E agora o CFBundleVersion muda para o número da compilação, que normalmente é um único inteiro, por exemplo, 374629. Esperançosamente, isso esclarece tudo.
malhal
27

Sim, eles estão relacionados, mas sua definição depende de como eles são usados.

  • Versão iTunes Connect

    Sempre deve ser um número de versão, por exemplo, 1.0

Modo de uso 1 - Apenas CFBundleVersion é definido

  • Versão do pacote (CFBundleVersion)

    Deve ser um número de versão, por exemplo, 1.0. Deve corresponder à versão do iTunes Connect.

Modo de uso 2 - CFBundleVersion e CFBundleShortVersionString estão definidos

  • Versão do pacote (CFBundleVersion)

    Deve ser um número de construção, por exemplo, um único inteiro como 435163.

  • String de versão curta do pacote (CFBundleShortVersionString)

    Deve ser um número de versão, por exemplo, 1.0. Deve corresponder à versão do iTunes Connect.

O modo de uso 2 é a melhor opção. Aqui estão alguns números de exemplo para o caminho de atualização de um aplicativo:

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

Uma observação extra sobre os números de versão: Se você enviar uma pequena atualização (por exemplo, correção de bug) para seu aplicativo, você nunca deve perder períodos no número da versão, por exemplo, sempre use 1.0.1 e NUNCA 1.01 ou você corre o risco de não ser capaz de usar certos números de versão no futuro porque não será possível incrementá-los.

Malhal
fonte
2
Essa tabela sozinha faz o melhor trabalho em explicar como esses dois números estão relacionados e são usados ​​na prática. Obrigado.
Joshua Pinter
Deve corresponder à versão do iTunes Connect. Este não é um requisito difícil (mesmo que deva ser OBRIGATÓRIO)
Marco Pappalardo
13

Sim, todos eles estão relacionados.

O número da versão no itunesconnect é o número da versão que você precisa fornecer. Por exemplo, 2.1.1 ou 3.1.2 etc. Isso também deve ser igual a CFBundleShortVersionString .

A versão do pacote no Xcode ( CFBundleVersion ) representa apenas o número da compilação que identifica uma iteração (liberada ou não) do aplicativo.

Sequência de versões de pacote, curta ( CFBundleShortVersionString ) é um número composto por três inteiros separados por pontos. O primeiro representa quaisquer atualizações importantes do aplicativo, como atualizações que implementam novos recursos ou mudanças importantes. O segundo inteiro denota revisões que implementam recursos menos proeminentes. O terceiro inteiro representa versões de manutenção.

mayuur
fonte
3
Na verdade, "String de versões de pacote, curta" não precisa ter TRÊS números separados por pontos. Acho que "1" e "1.1" também são válidos.
Nicolas Miari de
na verdade, do meu teste de número de versão no itunesconnect é completamente independente de CFBundleVersion e ShortVersion. Então você pode até tê-los diferentes
Marco Pappalardo
11

Tenha cuidado com CFBundleVersion . Não é apenas um número de construção de produção. Este valor é verificado pela Apple durante o processo de upload binário e pode falhar.

Certifique-se de definir CFBundleVersion com o valor de CFBundleShortVersionString ao construir sua liberação para envio.

Veja esta postagem sobre isso

aponaute
fonte
3
Esta é a informação correta, a resposta aceita, na verdade, está errada.
snlehton de
9
Isso não está correto, CFBundleVersionnão precisa ser igual CFBundleShortVersionString. Por exemplo, se você olhar o arquivo .ipa atual do Chrome (na app store agora), eles têm "34.0.1847.18" para CFBundleVersione "34.1847.18" para CFBundleShortVersionString.
progrmr de
6
Não há documentação dizendo que CFBundleVersion e CFBundleShortVersionString devem ser iguais.
Toydor
8

A resposta aceita é o caminho a percorrer - apenas adicionando isso como um exemplo.

Para nosso último lançamento, o "Bundle Version String, short" foi necessário, e fui em frente e combinei com o número da versão do Bundle (1.2.8 para nosso aplicativo).

Em seguida, habilitei o Testflight e disponibilizei a versão pendente da revisão da Apple (1.2.8) para nossos testadores internos. No entanto, um testador encontrou um problema que precisava ser corrigido e excluímos o binário no local. Ao fazer upload de uma nova compilação, recebemos um erro indicando que a versão da compilação já foi enviada.

Depois de ler alguns links do SO e documentos da Apple, meu entendimento foi fazer a versão do pacote: 1.2.8.001, mantendo a versão do pacote curta do jeito que estava. Se uma nova compilação for necessária, incrementamos a versão do pacote para 1.2.8.002.

Observação: o upload foi aceito e a compilação aparece como "1.2.8.001" no pré-lançamento. O número da versão permanece 1.2.8.

ahash
fonte
3

A resposta aceita neste link contém bons detalhes: Quais versões / números de compilação do aplicativo iOS DEVEM ser incrementados após o lançamento da App Store?

Da apple docs

CFBundleVersion (versão Bundle)

CFBundleVersion (String - iOS, OS X) especifica o número da versão da compilação do pacote, que identifica uma iteração (lançada ou não) do pacote. O número da versão do build deve ser uma string composta por três inteiros não negativos separados por ponto, sendo o primeiro inteiro maior que zero. A string deve conter apenas caracteres numéricos (0-9) e ponto (.). Os zeros à esquerda são truncados de cada número inteiro e serão ignorados (ou seja, 1.02.3 é equivalente a 1.2.3). Esta chave não é localizável.

CFBundleShortVersionString (string de versões do pacote, curta)

CFBundleShortVersionString (String - iOS, OS X) especifica o número da versão de lançamento do pacote, que identifica uma iteração lançada do aplicativo. O número da versão de lançamento é uma string composta por três inteiros separados por pontos. O primeiro inteiro representa as principais revisões do aplicativo, como revisões que implementam novos recursos ou mudanças importantes. O segundo inteiro denota revisões que implementam recursos menos proeminentes. O terceiro inteiro representa versões de manutenção.

O valor dessa chave difere do valor de CFBundleVersion, que identifica uma iteração (lançada ou não) do aplicativo. Essa chave pode ser localizada incluindo-a em seus arquivos InfoPlist.strings.

muzz
fonte