iphone overview Como exibir programaticamente o número da versão/compilação do destino no aplicativo iOS?




ios minimum button size (4)

Aqui mesmo código para Swift 3 :

let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String

Como posso obter programaticamente o valor da target version , como na imagem abaixo?

Como visto na janela Propriedades do destino do meu projeto Xcode. Desejo exibir isso na tela inicial do meu aplicativo para saber qual versão as pessoas estão usando no momento?


Existem 2 números!

O número da versão de marketing é para os clientes, chamado número da versão . Ele começa com 1.0 e sobe para grandes atualizações para 2.0 , 3.0 , para pequenas atualizações para 1.1 , 1.2 e para correções de bugs para 1.0.1 , 1.0.2 . Esse número é orientado sobre lançamentos e novos recursos. Não precisa parar às 9, 1.11.23 é um número de versão razoável.

O número de compilação é principalmente o número interno de compilações que foram feitas até então. Mas alguns usam outros números como o número da filial do repositório ou seu número de confirmação. Esse número deve ser exclusivo para distinguir as construções diferentes, que possuem apenas pequenas alterações incrementais.

Para obter o número da versão :

Objetivo-C:

NSString * appVersionString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];

Swift <3.0:

let appVersionString: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String

Swift 3.0+ (testado com 5.0):

let appVersionString: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String

Para obter o número da compilação :

Objetivo-C:

NSString * appBuildString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];

Swift <3.0:

let buildNumber: String = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String

Swift 3.0+ (testado até 5.0):

let buildNumber: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String   

Se você quer os dois em um:

Primeiro use as linhas acima e depois a seguinte.

Objetivo-C:

NSString * versionBuildString = [NSString stringWithFormat:@"Version: %@ (%@)", appVersionString, appBuildString];

Swift (testado até 5.0):

let versionAndBuildNumber: String = "\(versionNumber) (\(buildNumber))"

Notas:

Os valores no pacote principal nem sempre estão presentes, por exemplo, em um aplicativo de linha de comando não há CFBundleShortVersionString ou CFBundleVersion , portanto os métodos retornarão nil e ele CFBundleVersion porque no código ele faz um downcast incorreto. Mas, nos aplicativos Cocoa iOS e Mac normais, esses valores são definidos e não serão excluídos.

Isso é testado com o Xcode versão 7.3 (7D175) . O número da compilação é geralmente escrito entre parênteses / chaves. O número da compilação está em hexadecimal ou decimal.

No Xcode, você pode incrementar automaticamente o número da compilação como um número decimal , colocando o seguinte na fase de compilação Run script nas configurações do projeto.

#!/bin/bash    
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"

Para o número de compilação hexadecimal, use este script

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$((0x$buildNumber)) 
buildNumber=$(($buildNumber + 1)) 
buildNumber=$(printf "%X" $buildNumber)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"

Para o Xcode faça o seguinte:

Passo 1

Passo 2

etapa 3


Você não precisa alterar nada no seu projeto ou no Xcode. Aqui está a versão Swift para ambos separadamente:

let versionNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String
let buildNumber = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleVersion") as! String

Está incluído neste repo, confira:

https://github.com/goktugyil/EZSwiftExtensions


Programaticamente exibir versão e número de compilação - Swift 4.0

let versionNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "1.0"

let buildNumber = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "1.0"            

let versionAndBuildNumber = "Ver #\(versionNumber) ( Build #\(buildNumber) )"




ios-simulator