Diferença entre a versão do Xcode (CFBundleShortVersionString) e a compilação (CFBundleVersion)

94

Resumo de destino do aplicativo

No Xcode 4, vejo isso para meu resumo de destino:

A entrada "Versão" corresponde a CFBundleShortVersionStringno arquivo info.plist e a entrada "Construir" corresponde a CFBundleVersion.

Qual é a diferença entre esses dois? Eu vejo muita gente na internet querendo colocar o mesmo valor em ambos, e minha suspeita é que seja por compatibilidade reversa.

Eu tenho duas perguntas:

1) Se eu estivesse começando do zero, qual seria a prática recomendada para o controle de versão do seu aplicativo?

2) Em todas as versões anteriores do meu aplicativo, eu só usei CFBundleVersion. Para não atrapalhar o processo de atualização, devo continuar a incrementar CFBundleVersionda mesma forma que tenho feito ou é possível mudar para o "jeito certo", supondo que exista um?

Philip Walton
fonte
3
Esta é uma duplicata de stackoverflow.com/questions/6851660/version-vs-build-in-xcode-4, mas talvez esta versão seja melhor declarada (e tem uma captura de tela).
Daniel Dickison
Há algo que você precisa fazer para mostrar o campo Build em seu Resumo? Vejo apenas uma versão, mas nenhum campo Compilar.
Kenny Wyland,

Respostas:

68

O documento da Apple "Referência de chave da lista de propriedades de informações" diz que CFBundleShortVersionStringrepresenta uma versão de lançamento, enquanto CFBundleVersionrepresenta qualquer compilação, lançada ou não. Além disso, CFBundleShortVersionStringpode ser localizado, embora eu não saiba por que você deseja, uma vez que dizem que é suposto ser "uma string composta de três inteiros separados por período". Para uma compilação de lançamento, seria razoável tornar os dois números iguais. Para uma construção de desenvolvimento, você pode adicionar algo mais ao CFBundleVersion, talvez outro ponto e inteiro.

JWWalker
fonte
Mas se eu estiver usando 1.3.1 como meu CFBundleVersione nada como meu CFBundleShortVersionString, e quiser passar a usar CFBundleVersionpara representar compilações internas, preciso pelo menos começar com um número inteiro maior que 1.3.1, certo? Ou fazer essa troca está apenas procurando problemas?
Philip Walton
A versão ( CFBundleShortVersionString) é a única coisa que importa para enviar à Apple. O Build ( CFBundleVersion) é para ser usado da maneira que você quiser no desenvolvimento ou para mostrar no seu aplicativo. Use octal (base 8) e itere ao contrário por 12, se desejar.
nekno
16
nekno: Na verdade, o CFBundleVersion é o que importa para a Apple. Verifique esta mensagem de erro que a Apple fornece ao enviar um aplicativo: "O binário que você carregou é inválido. A chave CFBundleVersion no arquivo Info.plist deve conter uma versão superior à da versão carregada anteriormente."
malhal
10
Alguns países usam numerais diferentes do árabe moderno usado no mundo ocidental, como o árabe oriental (٠, ١, ٢, ٣, ٤, ٥, ٦, ٧, ٨, ٩) ou hebraico (א, ב, ג, ד, ה, ו, ז, ח, ט) - e esses dois também são escritos da direita para a esquerda. Existem muitos outros sistemas numéricos por aí (veja en.wikipedia.org/wiki/Category:Numerals ) Então, meu palpite é que é isso que a Apple quer dizer com número de versão "localizável".
Ruslan Ulanov
A propósito, os três dígitos com pontuação não são necessários. Tenho usado, em vez disso, um valor de data e hora, como 201606070620para ambos os valores em um aplicativo iOS 7-8-9 de remessa.
Basil Bourque
3

Para a pergunta de JWWalker sobre por que você deseja localizar CFBundleShortVersionString, esse seria o separador decimal. Por exemplo, em locais onde o separador decimal é na verdade uma vírgula, a versão "1.5" seria "1,5".

Arjun
fonte
30
IMO, você não precisa localizar os números de versão. Eu moro em uma região onde o separador decimal é uma vírgula (Alemanha) e estou acostumado a números de versão separados por um ponto. Na verdade, não me lembro de ter visto um número de versão com uma vírgula.
Christian Specht,
2
Eu também moro em uma região que usa a vírgula como separador decimal, embora 1,3,1 seja um valor bastante estranho, 1.3.1 parece muito melhor.
Lucien
1
Acho que isso significa que você pode ter diferentes versões do aplicativo para diferentes regiões. 1.2.1> en.lproj 1.2.2> fr.lproj Embora todo o plist seja copiado quando você localiza o arquivo, para que ambos os números de versão sejam copiados para que ambos 'possam ser localizados'
brian.clear
1

Conserto rápido:

Basta adicionar o CFBundleShortVersionStringao arquivo plist e editar sua versão.

  1. Revele o seu InfoPlist.strings
  2. Destaque-o e cole o código abaixo em (assumindo que esteja no modo de código-fonte)

{"CFBundleShortVersionString" = "1.1";}

  1. Altere 1.1 para qualquer que seja sua nova construção.
  2. Crie e envie sem mais erros!

insira a descrição da imagem aqui

Louie
fonte
1

Consulte a documentação da Apple sobre o upload de binários.

Numerando versões e compilações: o iTunes Connect extrai o número da versão de pré-lançamento e o número da compilação do binário. O número da versão de pré-lançamento é o número da versão do Xcode ou a chave "Bundle version string, short" no Info.plist. O número da compilação é o número da compilação do Xcode ou a chave "Versão do pacote" no Info.plist. O número da versão de pré-lançamento e o número da compilação serão mostrados na guia Pré-lançamento, conforme descrito em Visualizando Compilações.

Upload de um binário para um aplicativo

GilesDMiddleton
fonte