Eu gostaria de incluir a versão do aplicativo e a revisão interna, algo como 1.0.1 (r1243), no pacote de configurações do meu aplicativo.
O arquivo Root.plist contém um fragmento como este ...
<dict>
<key>Type</key>
<string>PSTitleValueSpecifier</string>
<key>Title</key>
<string>Version</string>
<key>Key</key>
<string>version_preference</string>
<key>DefaultValue</key>
<string>VersionValue</string>
<key>Values</key>
<array>
<string>VersionValue</string>
</array>
<key>Titles</key>
<array>
<string>VersionValue</string>
</array>
</dict>
e eu gostaria de substituir a string "VersionValue" no momento da criação.
Eu tenho um script que pode extrair o número da versão do meu repositório, o que eu preciso é uma maneira de processar (pré-processar) o arquivo Root.plist, em tempo de construção, e substituir o número da revisão sem afetar o arquivo fonte.
fonte
/usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:0:DefaultValue ${newVersion}" "${TARGET_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/Settings.bundle/Root.plist"
A solução do meu preguiçoso foi atualizar o número da versão do código do meu aplicativo. Você pode ter um valor padrão (ou em branco) em Root.plist e, em seguida, em algum lugar em seu código de inicialização:
O único problema é que seu aplicativo teria que ser executado pelo menos uma vez para que a versão atualizada apareça no painel de configurações.
Você pode levar a ideia adiante e atualizar, por exemplo, um contador de quantas vezes seu aplicativo foi iniciado ou outras informações interessantes.
fonte
CFBundleShortVersionString
eCFBundleVersion
com o mesmo valor,CFBundleShortVersionString
é realmente o que a Apple quer que você considere sua versão lançada , que seria o que você mostraria aos usuários.CFBundleVersion
pode ser potencialmente um número de versão interno, que você provavelmente não deve mostrar aos usuários (se for diferente).Com base na resposta de @Quinn, aqui está o processo completo e o código de trabalho que uso para fazer isso.
Substitua o conteúdo por:
Crie uma fase de construção Run Script , para depois da fase Copy Bundle Resources . Adicione este código:
Substitua MyAppName pelo nome real do seu aplicativo e o 1 após PreferenceSpecifiers para ser o índice da sua entrada de versão nas configurações. O exemplo Root.plist acima está no índice 1.
fonte
buildVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "${PROJECT_DIR}/${INFOPLIST_FILE}")
/usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:3:DefaultValue $buildVersion" "${SRCROOT}/Settings.bundle/Root.plist"
${INFOPLIST_PATH}
para o caminho de plist de informaçõesUsando o plist de Ben Clayton https://stackoverflow.com/a/12842530/338986
Adicione
Run script
com o seguinte trecho depoisCopy Bundle Resources
.Anexando
CFBundleVersion
além deCFBundleShortVersionString
. Ele emite uma versão como esta:Ao escrever para em
$CODESIGNING_FOLDER_PATH/Settings.bundle/Root.plist
vez de$SRCROOT
ter alguns benefícios.Settings.bundle
dentro$SRCROOT
. O caminho pode variar.Testando no Xcode 7.3.1
fonte
Com base no exemplo aqui , aqui está o script que estou usando para atualizar automaticamente o número da versão do pacote de configurações:
Aqui está o Root.plist que tenho em Settings.bundle:
fonte
NSDictionary
(e também não sabia que isso proporcionava um acesso tão fácil aos arquivos plist)gitHash = subprocess.check_output(["git", "rev-parse", "--short", "HEAD"]).rstrip()
As outras respostas não funcionam corretamente por um motivo: a fase de construção do script de execução não é executada até APÓS o pacote de configurações ter sido empacotado. Portanto, se sua versão do Info.plist for 2.0.11 e você atualizá-lo para 2.0.12 e, em seguida, construir / arquivar seu projeto, o pacote Configurações ainda exibirá 2.0.11. Se você abrir o pacote Root.plist de configurações, poderá ver que o número da versão não é atualizado até o FIM do processo de construção. Você pode construir o projeto NOVAMENTE para que o pacote de configurações seja atualizado corretamente ou pode adicionar o script a uma fase de pré-construção ...
Adicione seu script à área de texto. O seguinte script funcionou para mim. Pode ser necessário modificar os caminhos para corresponder à configuração do projeto:
versionString = $ (/ usr / libexec / PlistBuddy -c "Imprimir CFBundleVersion" "$ {PROJECT_DIR} / $ {INFOPLIST_FILE}")
/ usr / libexec / PlistBuddy "$ SRCROOT / Settings.bundle / Root.plist" -c "set PreferenceSpecifiers: 0: DefaultValue $ versionString"
Isso executará corretamente o script ANTES do pacote de configurações ser empacotado durante o processo de construção / arquivamento. Se você abrir o pacote Root.plist de configurações e construir / arquivar seu projeto, verá que o número da versão é atualizado no início do processo de construção e o pacote de configurações exibirá a versão correta.
fonte
Com o Xcode 11.4, você pode usar as etapas a seguir para exibir a versão do aplicativo no pacote de configurações do seu aplicativo.
Conjunto
$(MARKETING_VERSION)
e$(CURRENT_PROJECT_VERSION)
variáveisObservação: se as variáveis
$(MARKETING_VERSION)
e$(CURRENT_PROJECT_VERSION)
aparecem para as chavesBundle version string (short)
eBundle version
em Info.plist , você pode pular as etapas a seguir e pular para a próxima seção.0.1.0
) e altere o conteúdo do campo Build para algum novo valor (por exemplo12
). Estes 2 mudanças vão criar$(MARKETING_VERSION)
e$(CURRENT_PROJECT_VERSION)
variáveis em Info.plist arquivo.Criar e configurar o pacote de configurações
Adicionar um script de execução
Lançamento do Aplicativo
Fontes
fonte
Set: Entry, "PreferenceSpecifiers:0:DefaultValue", Does Not Exist
/usr/libexec/PlistBuddy "$SRCROOT/AppName/Settings.bundle/Root.plist" -c "set PreferenceSpecifiers:0:DefaultValue $version"
($build)
Consegui fazer o que queria usando o objeto de código aberto pListcompiler ( http://sourceforge.net/projects/plistcompiler ).
Usando este compilador, você pode gravar o arquivo de propriedades em um arquivo .plc usando o seguinte formato:
Tive uma fase de construção de script de execução personalizada que estava extraindo minha revisão de repositório para o arquivo .h, conforme descrito por brad-larson aqui .
O arquivo plc pode conter diretivas de pré-processador, como #define, #message, #if, #elif, #include, #warning, #ifdef, #else, #pragma, #error, #ifndef, #endif, variáveis de ambiente xcode. Pude fazer referência à variável kRevisionNumber adicionando a seguinte diretiva
Eu também adicionei uma fase de construção de script personalizado ao meu destino xcode para executar o plcompiler toda vez que o projeto estiver sendo construído
E foi isso!
fonte
Meu exemplo de trabalho baseado na resposta de @Ben Clayton e nos comentários de @Luis Ascorbe e @Vahid Amiri:
Adicione um pacote de configurações à raiz do projeto. Não mude o nome
Abra Settings.bundle / Root.plist como SourceCode
Substitua o conteúdo por:
Adicione o seguinte script à seção Construir, Pré-ações do esquema do projeto (destino)
Construir e executar o esquema atual
fonte
As respostas acima não funcionaram para mim, portanto, criei meu script personalizado.
Isso atualiza dinamicamente a entrada de Root.plist
Use o script de execução abaixo. Irá funcionar com certeza verificado no xcode 10.3.
"var buildVersion" é a versão a ser exibida no título.
E o nome do identificador é "var version" abaixo para o título em settings.bundle Root.plist
Exemplo de entrada em Root.plist
fonte
Acredito que você possa fazer isso de uma forma semelhante à que descrevo nesta resposta (com base nesta postagem ).
Primeiro, você pode tornar VersionValue uma variável dentro do Xcode renomeando-o para $ {VERSIONVALUE}. Crie um arquivo chamado versionvalue.xcconfig e adicione-o ao seu projeto. Vá para o destino do seu aplicativo e vá para as configurações de Build para esse destino. Eu acredito que você precisa adicionar VERSIONVALUE como uma configuração de compilação definida pelo usuário. No canto inferior direito da janela, altere o valor Baseado em para "versionvalue".
Por fim, vá para o seu destino e crie uma fase de construção Executar Script. Inspecione essa fase Run Script e cole no seu script dentro do campo de texto Script. Por exemplo, meu script para marcar minha configuração BUILD_NUMBER com a compilação atual do Subversion é o seguinte:
Isso deve fazer o truque de substituir a variável quando esses valores mudam em seu projeto.
fonte
Para mim, esta foi a solução mais fácil:
Adicione uma nova fase de construção de script antes da etapa Copiar recursos de pacote
Concha:
/usr/bin/env python
Conteúdo:
fonte