Este é meu primeiro envio de aplicativo iOS e não quero meu aplicativo rejeitado.
Isto é do Apple Docs:
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 - 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 desta chave difere do valor de “CFBundleVersion,” que identifica uma iteração (liberada ou não) do aplicativo. Essa chave pode ser localizada incluindo-a em seus arquivos InfoPlist.strings.
Mas parece um pouco estranho. Minha interpretação para isso é colocar os dois valores iguais, ou seja:
CFBundleVersion: 1.0.0
CFBundleShortVersionString: 1.0.0
Alguém pode confirmar 100% que é o que devo colocar?
Respostas:
Pense da seguinte maneira: A "versão resumida" (
CFBundleShortVersionString
) é o número da versão pública. A "versão" (CFBundleVersion
) é mais um número de versão interna que pode mudar com muito mais freqüência do que a "versão resumida" pública. Pessoalmente, eu uso o mesmo para ambos, mas muitas pessoas atualizam a "versão" em cada compilação. De qualquer maneira, você normalmente atualiza a "versão curta" ao lançar para a Apple. A frequência com que você atualiza a "versão" depende de você e de suas necessidades.fonte
CFBundleShortVersionString fornece a versão do seu aplicativo. Normalmente é incrementado cada vez que você publica seu aplicativo na App Store. Esta é a versão que está visível na seção "Versão" da página da App Store de seu aplicativo.
CFBundleVersion fornece o número da compilação que é usado para desenvolvimento e teste, especificamente para fins "técnicos". O usuário final raramente está interessado no número do build, mas durante o desenvolvimento você pode precisar saber o que está sendo desenvolvido e corrigido em cada build. Normalmente, isso é incrementado em cada iteração de versão interna. E você pode usar ferramentas de integração contínua como Jenkins para incrementar automaticamente o número de compilação em cada compilação.
Os dois números não dependem um do outro, mas é uma boa ideia mantê-los paralelos para evitar confusão. Lembre-se de que, depois que seu aplicativo for aprovado na revisão da App Store, você precisará incrementar o número de compilação, como Phil e likeTheSky declararam, independentemente de publicá-lo ou não.
Caso de uso: digamos que você tenha uma construção bem testada, pronta para envio. O número da versão é 1.0.0 e o número da compilação é 1.0.0.32 . Depois de enviar seu aplicativo, você precisa atualizar a versão como 1.0.1 e o número da compilação como 1.0.1.0 .
fonte
201606070620
em um aplicativo iOS de remessa.A resposta de rmaddy está correta. Vou adicionar mais dois pensamentos.
Número da terceira versão
Esteja ciente do número da terceira versão, especificado no site iTunesConnect como parte da definição do seu aplicativo. Se esse número for diferente dos dois no Xcode, a Apple avisa. Você pode ignorar o aviso, pois não é um impedimento (não é um "erro").
Data-hora como versão
Além disso, você não precisa usar três números com pontuação. Isso pode fazer sentido para alguns aplicativos, onde tradicionalmente as mudanças no primeiro número indicavam algum tipo de mudança dramática que geralmente afetava a compatibilidade.
Para outros aplicativos, você pode querer usar simplesmente um valor de data e hora no estilo de formato padrão ISO 8601 (AAAAMMDDHHMM). Por exemplo
201606070620
,. Essa ordem de ano-mês-data-hora-minuto apresenta um número cada vez maior, sempre com o mesmo comprimento devido ao preenchimento zero, que quando classificado em ordem alfabética também é cronológico.Usei com sucesso este estilo de números de versão em um aplicativo iOS de remessa funcionando no iOS 7, 8 e 9.
Você pode até automatizar a geração desse valor. Na do seu projeto
Target
>Build Phases
>Run Script
painel:Shell
campo:/bin/sh
Show environment variables in build log
caixa de seleção.Run script only when installing
caixa de seleção.Cada vez que você faz uma construção, a data-hora atual no fuso horário UTC é capturada. O
-u
sinalizador no script usa UTC em vez do fuso horário padrão atual. Geralmente é melhor para os programadores e administradores de sistemas usarem e pensarem em UTC em vez de fusos horários locais.Ou faça um híbrido, com um convencional
1.2.3
para o número da versão e uma data e hora como o número da compilação. Para fazer o híbrido, simplesmente comente aCFBundleShortVersionString
linha com um#
na frente.fonte
O esquema mais sensato para mim é usar o número da versão (ou seja,
CFBundleShortVersionString
) para o número da versão real e, em seguida, usar o número da compilação (ou seja.CFBundleVersion
) Para representar o envio à App Store. Portanto, a menos que haja algum problema e, portanto, seja reenviado, esse número é sempre 1. Para uma nova versão, eu redefino para 1 se a anterior teve problemas no teste TestFlight ou na revisão.Da nota técnica TN2420: Números de versão e números de construção .
fonte
Eu uso CFBundleVersion para indicar construção interna para CFBundleShortVersionString . Eu uso o vôo de teste para enviar compilações para meus testadores, então a diferença entre eles tem sido extremamente útil.
Os documentos da Apple dizem que CFBundleVersion "deve ser uma string composta de 3 inteiros não negativos, separados por ponto", mas na verdade pode ter MAIS DE 3 partes (como mostra a resposta acima). Eu uso isso para indicar minha compilação de desenvolvimento, digamos que meu CFBundleShortVersionString seja 1.0.0, posso usar 1.0.0.11 para CFBundleVersion para indicar que é minha 11ª compilação para a versão 1.0.0
Cada CFBundleVersion enviada à app store deve ser maior do que antes ou você receberá ERROR ITMS-90478 : "Versão inválida. A compilação com a versão“ xxx ”não pode ser importada porque uma versão posterior foi fechada para novos envios de compilação. Escolha um número de versão diferente. "
CFBundleShortVersionString só pode ter 3 partes ou você obterá ERROR ITMS-90060: O valor da chave CFBundleShortVersionString 'xxx' no arquivo Info.plist deve ser uma lista separada por período de no máximo três inteiros não negativos. "
O terceiro número que Basil Bourque mencionou, ou seja, o número da versão exibida no iTunesConnect é onde as coisas podem ficar complicadas.
Eu uso um número iTunesConnect diferente de CFBundleShortVersionString porque, quando enviei meu aplicativo pela primeira vez à app store, já tínhamos muitas rodadas de lançamentos internos. Então, usei 1.0 para o número iTunesConnect e 5.x para CFBundleShortVersionString. Na próxima versão da app store, forneci uma função para verificar se há uma versão mais recente na app store e percebi que tive problemas agora porque só consigo obter o número do iTunesConnect (usando
http://itunes.apple.com/lookup?bundleId=
), então preciso fazer alguns cálculos antes de compará-lo com o número CFBundleShortVersionString.Tentei consertar isso usando o número iTunesConnect como meu CFBundleShortVersionString, mas recebi o erro, ERROR ITMS-90062 : "Este pacote é inválido. O valor da chave CFBundleShortVersionString [xxx] no arquivo Info.plist deve conter uma versão superior a essa da versão aprovada anteriormente [xxx]. "
Portanto, vou sugerir que sejam sempre iguais.
fonte
Algo que eu nunca vi discutido em qualquer lugar é qual é o número máximo para cada campo em um CFBundleVersion?
Definindo CFBundleVersion em um aplicativo para 1.1.1 e observando o valor hexadecimal para a versão em "lsregister -dump", determinei que o valor máximo para o primeiro campo é (2 ^ 22) -1 ou 4194303, e o máximo os valores para o segundo e terceiro campos são (2 ^ 21) -1 ou 2097151.
Os 3 campos somam 64 bits.
Isso tem implicações para aqueles de nós que usam CFBundleVersion com base na data e hora.
Eu estava definindo o primeiro campo como AAAAMMDD. Isso é sempre maior do que o máximo de versões permitidas e estava levando a resultados imprevisíveis, para dizer o mínimo, quando o Launch Services estava decidindo qual versão de um aplicativo executar quando você tinha várias versões instaladas e estava usando algo como 'open -a Appname 'na linha de comando.
Por favor, espalhe isso amplamente. Tenho certeza de que muitas pessoas estão se desentendendo com isso.
fonte
A partir de agora, a documentação da Apple para os
CFBundleVersion
estados [grifo meu]:Para
CFBundleShortVersionString
[ênfase minha]:Eu sugiro apenas incrementar automaticamente
CFBundleVersion
para cada construção (ou cada versão do TestFlight) e redefinir para 0 sempre que você mudarCFBundleShortVersionString
.Você deve planejar explicitamente, ou criar um meio consistente, para atualizar a versão visível do usuário no
CFBundleShortVersionString
.fonte