Os campos de versão / compilação para um aplicativo iOS incluem:
"Versão" 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.
"Build" CFBundleVersion (String - iOS, OS X) especifica o número da versão do build 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.
"Número da versão do iTunes Connect" : número da versão que você especifica ao criar uma nova versão do aplicativo no iTunes Connect.
Minha pergunta é:
Quais números de versão / compilação precisam ser incrementados quando uma nova versão do aplicativo é carregada no iTunes Connect e / ou lançada na App Store?
A "versão" CFBundleShortVersionString
ou a "construção" podem CFBundleVersion
permanecer iguais entre as atualizações do aplicativo?
Pontos extras para fontes da Apple ou as mensagens de erro exatas que o iTunesConnect exibe ao enviar um número de versão / compilação inválido.
Nota Android / Google Play:
A discussão que levanta esta questão é que a "versão" pública de um aplicativo Android na Google Play Store não precisa ser incrementada e não é de forma alguma validada. O android:versionName
pode permanecer o mesmo entre lançamentos, upgrade, downgrade ou ser qualquer sequência aleatória em vez de algo que pareça ser um "número de versão" válido.
android:versionName
- Um valor de string que representa a versão de lançamento do código do aplicativo, como deve ser mostrado aos usuários.O valor é uma string para que você possa descrever a versão do aplicativo como uma
<major>.<minor>.<point>
string ou como qualquer outro tipo de identificador de versão absoluta ou relativa.
Diferença entre versionName e versionNumber no Android
Considerando que o android:versionCode
é forçado a ser um número inteiro incrementado na liberação.
Documentação da Apple
Conforme observado na resposta recentemente aceita , a Apple publicou recentemente uma Nota Técnica que detalha sua versão e esquema de número de compilação:
Nota técnica da Apple TN2420 - Números de versão e números de compilação
Respostas:
Nota técnica da Apple TN2420, números de versão e números de compilação
Resumo:
Version
,Build number
) deve ser exclusivo.Version
( CFBundleShortVersionString ) deve estar em ordem sequencial crescente.Build number
( CFBundleVersion ) deve estar em ordem sequencial ascendente.Com base na lista de verificação, a seguinte
(Version, Build Number)
sequência também é válida.Caso: reutilizar
Build Number
em diferentes trens de liberação. (NOTA: NÃO app macOS)(1.0.0, 1) -> (1.0.0, 2) -> ... -> (1.0.0, 11) -> ( 1.0.1 , 1 ) -> (1.0.1, 2)
fonte
(major, minor, patch)
maneira. E eu tinha usado 4 componentes antes, mas a App store não aceita esse formato com 4 componentes.O
CFBundleShortVersionString
deve corresponder ao número da versão que você forneceu ao iTunes Connect. É também o número da versão que aparece quando o usuário olha seu aplicativo na App Store.O
CFBundleVersion
não é exibido na App Store, mas é usado pelo iTunes para determinar quando o seu aplicativo foi atualizado.Respondendo suas perguntas mais especificamente ...
Ambos. Um é exibido na App Store, o outro é usado pelo iTunes para atualizar o aplicativo.
Não. (Meta pergunta, qual seria o caso de uso aqui? Se você editou a carga útil de alguma forma, a compilação será diferente e o usuário vai querer saber sobre isso). Se você tentar, verá mensagens de erro como abaixo:
Sim. Usando o padrão semver.org .
Não.
fonte
CFBundleShortVersionString
. Isso é possível? Eu quero rejeitar meu próprio aplicativo.CFBundleShortVersionString é o "nome" público da versão (exemplo: "2.5" ou "3.8.1"). Você deve aumentá-lo a cada lançamento .
CFBundleVersion é o número da compilação privada . Não é visto na AppStore. Você deve aumentá-lo a cada upload . Isso significa que se você rejeitar um binário antes de ficar online e quiser fazer upload de um novo binário, ele terá o mesmo CFBundleShortVersionString, mas deve ter um CFBundleVersion superior (exemplo: público "2.5", privado "2.5" e, em seguida, rejeição binária e reenvio privado "2.5.1")
Editar em 16 de novembro de 2016:
/ ! \ A propriedade CFBundleVersion também é usada (junto com CFBundleName ) no
User-Agent
cabeçalho enviado por NSURLConnection em seu código.Exemplo: se CFBundleName for MyApp e CFBundleVersion for 2.21, qualquer consulta HTTP programática enviada diretamente por seu código usando NSURLConnection irá incorporar o cabeçalho:
User-Agent: MyApp/2.21 CFNetwork/... Darwin/...
(Isso não se aplica a solicitações emitidas automaticamente por UIWebView).
fonte
X.X-rc2
aX.X.2
, para o sistema de CI para gerar obuildNumber
para fazer o upload para iTunesConnect.CFBundleVersion e CFBundleShortVersionString deve ser maior que o número da última versão do aplicativo. É uma boa prática mantê-los iguais. Você deve encontrá-los em seu -info.plist.
Ao tentar validar o aplicativo no organizador, ocorrerá um erro se algum deles não tiver sido incrementado. Aconteceu comigo ontem à noite.
fonte
Ambos
CFBundleVersion
eCFBundleShortVersionString
DEVEM ser incrementados ao lançar uma nova versão na App Store.Além disso, uma das strings deve corresponder à versão especificada no iTunes Connect.
Esta questão inclui a captura de tela acima do Validador do Organizador do Xcode recusando-se a validar o aplicativo quando
CFBundleVersion
eCFBundleShortVersionString
não foram incrementados.Este pacote é inválido. O valor da chave
CFBundleVersion
[1.0] no arquivo Info.plist deve conter uma versão superior à da versão carregada anteriormente [1.134].Este pacote é inválido. O valor da chave
CFBundleShortVersionString
[1.0] no arquivo Info.plist deve conter uma versão superior à da versão carregada anteriormente [1.134].O validador também gera um erro provando que uma das strings deve corresponder à versão do aplicativo criado no iTunes Connect.
fonte
A nota técnica atual da Apple TN2420, Números de versão e números de construção diz (meu negrito):
Infelizmente, isso significa que você não pode reutilizar um número de compilação que segue o número do trem de lançamento no iOS quando você está tentando lançar a mesma compilação no Mac Catalyst.
No meu caso, por exemplo, devido a alguns problemas anteriores, acabei lançando 1.0.2 (4) como um aplicativo Mac Catalyst que correspondia a 1.0.2 (1) no iOS. Agora, ao tentar lançar 1.0.3 (1) em ambos, o aplicativo falha na verificação no MacOS por causa do número da compilação, enquanto passa na verificação no iOS.
Acho que agora que estou lançando o mesmo aplicativo no iOS e MacOS rotineiramente, vou adotar números de compilação que correspondem à data, como 20200111 e incrementar com um ponto decimal se eu precisar alterar o número de compilação em uma determinada versão.
fonte
Você precisa incrementar ambos .
Ao fazer upload de uma nova versão, você precisará criar uma nova versão no iTunes Connect, que será automaticamente superior às versões anteriores. Esta versão no iTunes Connect espera um binário com o mesmo número de versão, portanto,
CFBundleShortVersionString
precisa ser incrementado.Se você atualizar a versão, mas se esquecer de incrementar o
CFBundleVersion
, encontrará um erro durante o upload. Veja a resposta e a captura de tela de pkamb.Para obter detalhes sobre
CFBundleShortVersionString
eCFBundleVersion
, consulte: https://stackoverflow.com/a/31921249/936957fonte
Posso confirmar, depois de tentar das duas maneiras, que uma sequência de números de versão e construção como ...
... será aceito para aplicativos iOS, mas para aplicativos Mac (Catalyst) retorna este erro:
A versão do Mac e os números de compilação precisam ser assim ...
Para iOS, eu costumava inserir números de compilação como o número da versão mais um quarto dígito, como ...
... mas isso também não é permitido para aplicativos Mac. Quando tentei enviar meu primeiro aplicativo Mac (Catalyst), a Apple aceitou apenas um número de compilação com três ou menos dígitos:
Portanto, mudei para um único número que aumenta para cada compilação e continua aumentando entre os números de versão.
fonte
Estou me preparando para lançar um novo aplicativo Mac App Store. Usando a formatação CalVer de
YEAR.release (build)
.Fiz upload de vários constrói:
2020.0 (1)
,2020.0 (2)
, etc. I finalmente enviado2020.0 (8)
para a App Store Review. Passou na revisão e está no estado Pending Developer Release .Eu queria corrigir algumas coisas antes do lançamento, então eu adicionei uma nova compilação ao mesmo trem lançamento:
2020.0 (9)
.Isso resulta no erro:
o que é irritante, pois minha
2020.0
versão nunca foi lançada . A partir da resposta aceita a esta pergunta, fiquei com a impressão de que até que o aplicativo estivesse disponível na App Store você poderia continuar a lançar novos builds com a mesma versão.A solução parece ser que um "trem de lançamento" (Mesma Versão + Nova Compilação) não pode ser atualizado se o estado do aplicativo for Lançamento Pendente do Desenvolvedor . Liberte a compilação existente e aumente a versão ou cancele esta versão no App Store Connect para permitir uploads adicionais para este trem de lançamento.
fonte
AFAIK, pensando bem, você só precisa incrementar o número da compilação
CFBundleVersion
. Incrementar a string de versão curta não é necessariamente necessário, embora você provavelmente deva incrementá-la, pois ela informa ao usuário que o aplicativo é novo. A Apple diz que a numeração deve seguir as convenções tradicionais de versão de software, entretanto, e o iTunes Connect pode reclamar se você tentar reenviar uma versão já existente.Resumindo, pode funcionar, mas provavelmente não.
fonte
CFBundleShortVersionString
não for necessário incrementar, a "mesma" versão voltada para o usuário pode ser carregada na App Store várias vezes.