Existem 2 números!
O número da liberação de marketing é para os clientes, chamado número da versão . Começa com 1.0 e sobe para as principais atualizações para 2.0 , 3.0 , para pequenas atualizações para 1.1 , 1.2 e para as correções para 1.0.1 , 1.0.2 . Esse número é orientado sobre lançamentos e novos recursos. Não precisa parar em 9, 1.11.23 é um número de versão razoável.
O número da 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 ramificação do repositório ou seu número de confirmação. Esse número deve ser exclusivo para distinguir as diferentes construções, 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 = "\(appVersionString) (\(buildNumber))"
Notas:
Os valores no pacote principal nem sempre estão presentes; por exemplo, em um aplicativo de linha de comando, não existe CFBundleShortVersionString
ou CFBundleVersion
, portanto, os métodos retornamnil
e travam porque o código causa um downcast incorreto. Porém, nos aplicativos normais para iOS e Mac da Cocoa, 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 Run script
fase de compilação 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 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 Xcode
fazer o seguinte:
Passo 1
Passo 2
etapa 3
Bundle.main.object(forInfoDictionaryKey: "...")
agora.Você não precisa alterar nada no seu projeto ou no Xcode. Aqui está a versão Swift para os dois separadamente:
Está incluído neste repositório, confira:
https://github.com/goktugyil/EZSwiftExtensions
fonte
Bundle.main.object(forInfoDictionaryKey: "...")
agora.Aqui está o mesmo código para o Swift 3 :
fonte
Bundle.main
tinha um vazioinfoDictionary
para mim; talvez porque eu esteja fazendo isso de dentro de uma estrutura, não de um executável ou aplicativo?Bundle(for: MyClass.self)
contém os valores esperados.Exibir programaticamente a versão e o número da versão - Swift 4.0
fonte
Você também pode usar como
Então você pode usar em qualquer lugar quando declarar Globalmente.
Resultado:
fonte
Fiz uma extensão para o Bundle, para que seja fácil de usar
fonte