Eu tenho usado um shell script como parte do meu processo de compilação do Xcode para aumentar o número da compilação no arquivo plist , no entanto, ele está causando o travamento do Xcode 4.2.1 com frequência (com um erro sobre o destino que não pertence a um projeto; a alteração do arquivo plist está confundindo o Xcode de alguma forma).
O script do shell fez isso para que o número da compilação seja incrementado apenas agvtool
quando um arquivo for mais novo que o arquivo plist (portanto, apenas a construção não incrementou o valor):
if [ -n \"`find ProjDir -newer ProjDir/Project-Info.plist`\" ]; then agvtool -noscm next-version -all; else echo \"Version not incremented\"; fi
Existe uma maneira de incrementar o número da compilação (no arquivo plist ou em qualquer outro lugar) que não quebre o Xcode?
Edição final : Agora faço esse tipo de coisa usando um script python que acabei de tornar público no github . Não está bem documentado, mas não deve ser difícil de resolver. Como bônus, este repositório também contém um script útil para agrupar automaticamente a biblioteca de terceiros em um pacote de aplicativos.
Respostas:
Se entendi sua pergunta corretamente, você deseja modificar o
Project-Info.plist
arquivo, que faz parte do modelo de projeto padrão do Xcode?A razão pela qual pergunto isso é que
Project-Info.plist
normalmente está sob controle de versão e modificá-lo significa que ele será marcado como modificado.Se estiver tudo bem com você, o trecho a seguir atualizará o número da compilação e marcará o arquivo como modificado no processo, onde
get_build_number
está algum script (por exemplo, um espaço reservado neste exemplo) para obter o número da compilação (possivelmente incrementado) que você quer usar:O PlistBuddy permite que você defina qualquer chave em um arquivo plist, não apenas o número da versão. Você pode criar todos os arquivos plist desejados e incluí-los nos recursos, se necessário. Eles podem ser lidos no pacote.
Quanto à sua necessidade de mostrar a versão no painel sobre e em outros lugares, você também pode verificar a configuração
CFBundleGetInfoString
eCFBundleShortVersionString
.fonte
agvtool
), no entanto, o ato de modificar o plist durante a construção quebra o Xcode frequentemente (desde que ele remove o script que ele não possui ' (trava uma vez, quando trava a cada três compilações). É possível colocar as informações da versão em outro arquivo plist e incluí- las no pacote e acessíveis a partir do aplicativo?get_build_number
é apenas um espaço reservado - atualizou a resposta para esclarecer.Eu brinquei com muitas respostas sobre esta questão, e nenhuma delas me satisfez. No entanto, finalmente criei uma mistura que realmente gosto!
Há duas etapas, uma no início e outra no final das fases de construção.
No inicio:
No fim:
Olhando para o Info.plist no Xcode, você verá que o número da versão é "DESENVOLVIMENTO", mas o aplicativo criado terá um número de build constantemente crescente. (Contanto que você sempre faça suas compilações no mesmo ramo.)
Definir o número da versão de volta para uma cadeia constante no final impede que o arquivo Info.plist seja alterado criando o aplicativo.
Por que eu gosto desse método:
fonte
git rev-list --count HEAD
vez degit rev-list HEAD | wc -l | tr -d ' '
.fastlane
upload de compilações automáticas dessa maneira, obtém: ERRO ITMS-90058: "Este pacote é inválido. O valor da chave CFBundleVersion [DEVELOPMENT] no arquivo Info.plist deve ser uma lista separada por período de no máximo três números inteiros não negativos ".Eu usei essa glist. Funciona como esperado. https://gist.github.com/sekati/3172554 (todo o crédito é para o autor original)
Scripts que eu modifiquei com o tempo.
xcode-versionString-generator.sh ,
xcode-build-number-generator.sh
Como essas essência estão ajudando a comunidade de desenvolvedores, eu fiz o projeto do GitHub. Então, vamos desenvolvê-lo bem. Aqui está o projeto GitHub: https://github.com/alokc83/Xcode-build-and-version-generator
Eu atualizei o código para ambos os scripts um pouco de aprimoramento. em vez de usar abaixo, pegue as últimas do GitHub
Para a versão:
Para construção:
fonte
Toda essa entrada foi extremamente útil. Usei esse truque, mas configurei meu script como um gancho pós-confirmação no GIT, para que o CFBundleVersion seja incrementado após cada confirmação bem-sucedida. O script hook entra em .git / hooks. Um log é deixado no diretório do projeto.
Isso atende ao meu critério mais básico. Quero poder obter uma versão do GIT e reconstruir a compilação exata que eu tinha anteriormente. Qualquer incremento feito durante o processo de construção não faz isso.
Aqui está o meu script:
fonte
bump_build_number.sh
script desde a criação.Não sei qual o melhor caminho, mas publicarei a resposta da Apple para o caso de alguém a procurar ...
De acordo com este post de perguntas e respostas da Apple :
Automatizando números de versão e compilação usando agvtool
As chaves de versão e número de compilação, respectivamente, especificam as versões interna e de marketing do seu aplicativo. agvtool é uma ferramenta de linha de comando que permite incrementar automaticamente esses números para o próximo número mais alto ou para um número específico.
O número da compilação identifica uma versão não lançada ou lançada do seu aplicativo. Ele é armazenado no Info.plist do seu aplicativo como
CFBundleVersion
(versão do pacote).Você deve concluir as seguintes etapas no seu projeto do Xcode:
Navegue até o painel Configurações de compilação do seu destino e atualize-o para todas as suas configurações de compilação, da seguinte maneira:
O arquivo de dados do projeto Xcode, project.pbxproj, inclui uma
CURRENT_PROJECT_VERSION
configuração de construção (Versão Atual do Projeto), que especifica a versão atual do seu projeto. O agvtool procura em project.pbxprojCURRENT_PROJECT_VERSION
. Ele continua executando, seCURRENT_PROJECT_VERSION
existir, e para de executar, caso contrário. Seu valor é usado para atualizar o número da compilação.Por padrão, o Xcode não usa nenhum sistema de controle de versão. A configuração do sistema de versão como Apple Generic garante que o Xcode inclua todas as informações de versão geradas pelo agvtool em seu projeto.
O agvtool pesquisa o Info.plist do seu aplicativo pela sua versão e compila números. Ele os atualiza se eles existirem e não fizer nada, caso contrário. Verifique se as teclas
CFBundleVersion
(versão do pacote) eCFBundleShortVersionString
(sequência de versões do pacote, curta) existem no seu Info.plist, como mostra a imagem abaixo:Saia do Xcode e navegue até o diretório que contém o arquivo de projeto .xcodeproj no aplicativo Terminal antes de executar qualquer um dos seguintes comandos. O arquivo de projeto .xcodeproj contém project.pbxproj, que é usado pelo agvtool. (Esta é a parte que você pode executar em um script em vez da linha de comando.)
Atualizando o número da versão
Para atualizar o número da versão para uma versão específica, execute
Ex: atualize o número da versão para 2.0
Atualizando o número da compilação
Para incrementar automaticamente seu número de compilação, execute
Para definir o número da compilação do seu aplicativo para uma versão específica, execute
Ex: Defina o número da compilação como 2.6.9
Bônus:
Para visualizar o número da versão atual, execute
Para visualizar o número da compilação atual, execute
fonte
FWIW - é o que estou usando atualmente para aumentar o número da compilação apenas para compilações de versão (que inclui arquivamento). Funciona bem no Xcode 5.1.
Basta copiar / colar o snippet na fase de criação do script Run diretamente no Xcode:
fonte
Obrigado pelo script. Isso funciona muito bem.
Meu Info.plist está em um subdiretório com um nome que contém espaços, então eu tive que modificar o Run Script com aspas no caminho plist:
e o shell script da mesma maneira com aspas em todos os caminhos:
fonte
O script que estou usando atualmente é muito baseado no Alix , acima. Minha adaptação, abaixo, adiciona uma verificação para fazer apenas o incremento automático em uma versão / compilação de arquivo.
Sem essa alteração, haverá conflitos de controle de versão, pois cada desenvolvedor aumentará o número da compilação na sua própria taxa. E o fato de que o histórico do git seria desnecessariamente poluído, com o número da compilação mudando o tempo todo.
Também está disponível (em um formato um pouco mais fácil de copiar e colar) como uma essência do GitHub .
fonte
Eu recomendaria o uso de autorevisão .
O Xcode permite que um arquivo de cabeçalho (que pode ser gerado automaticamente no momento da compilação e não no próprio vcs) forneça valores que serão expandidos no info.plist no momento da compilação. Você pode encontrar uma explicação passo a passo sobre como configurar isso no site de revisão automática .
A revisão automática tem um tipo de saída voltado para esses arquivos de cabeçalho para ajudar exatamente nessas situações.
fonte
Autorevision
não parece gerar um número de compilação, conforme necessário?VCS_NUM
deve ser o que você está procurando ( vejaautorevision.h
um exemplo ).Um problema com algumas dessas soluções é que o Launch Services reconhece apenas
quatrocinco dígitos principais na versão do pacote . Eu tenho um projeto com um número de compilação que está na casa dos milhares, então eu queria usar alguns dos dígitos menos significativos.Esse script Perl incrementa todas as listas de informações do projeto, não apenas a do destino atual; portanto, todos os números de compilação permanecem na mesma etapa. Ele também usa um dígito de correção e dois dígitos menores, portanto, o build 1234 recebe a versão 1.23.4. Eu o uso como um comportamento de pré-construção, portanto se aplica a todos os projetos que eu construo.
O roteiro é bastante forte, mas funciona para mim.
fonte
Você pode usar o versionamento genérico da Apple . Basicamente, tudo o que você precisa fazer é chamar
agvtool next-version -all
de dentro do diretório que hospeda o arquivo .xcproj. Para mais detalhes, consulte o URL acima.fonte
Com base na solução de Wil Gieseler , eu tinha apenas uma alteração que queria fazer. Sua solução coloca a contagem de confirmações do git no número da compilação. Útil, mas ainda meio difícil de encontrar o commit real que criou essa compilação. Eu não me importava muito se o número da compilação estava aumentando monotonicamente e, portanto, abandonei esse requisito para que eu pudesse acessar mais facilmente a confirmação que gerava um determinado binário.
Para esse fim, modifiquei seu primeiro script para o seguinte:
Isso converte a versão curta do SHA atual do git em decimal. Caracteres hexadecimais não combinam bem com os requisitos de número de compilação da Apple, e é por isso que eu tive que fazer isso. Para convertê-lo novamente, basta executar algo como isto:
no bash, onde
<build number>
está o número de compilação que você obteve de um binário. Então, apenas corragit checkout $SHA
, e lá vai você.Como essa é uma adaptação da solução de Wil Gieseler , como mencionado acima, você também precisará do seguinte script pós-compilação:
o que mantém seu histórico do git limpo.
fonte
Info.plist
, que são rastreadas pelo git?Eu tentei o procedimento modificado e não funcionou, porque: -
O Xcode 4.2.1 altera o subdiretório xcuserdata em .xcodeproj
O git observa a alteração anterior no Project-Info.plist
A modificação a seguir faz com que eles sejam ignorados e sinaliza apenas alterações genuínas: -
fonte
Você pode fazer isso apenas quando arquivar (e fazer upload para o TF, por exemplo). Caso contrário, o número da sua versão poderá subir muito rapidamente.
No esquema (Produto / Editar esquema / Arquivar / Pré-ações), você pode adicionar um script que será executado somente quando você arquivar.
Além disso, você pode redefinir o número da compilação cada vez que incrementa a versão do aplicativo.
Última coisa: se você usar o arquivo morto, poderá desativar com segurança:
Como o número da compilação será incrementado somente quando você arquivar ...
EDIT: Corrija o que eu disse, as pré-ações no arquivo morto acontecem após a compilação (mas antes do arquivamento), para que o número da compilação seja incrementado para o próximo arquivo ... Mas você pode criar um novo esquema e adicionar essa ação na compilação (pré- ações) deste novo esquema. e use esse esquema quando desejar criar uma nova compilação
fonte
Eu uso a última revisão SVN para o número da compilação. Se você alterar o Info.plist no diretório de construção, não afetará a fonte Info.plist:
fonte
Sinto como se tivesse encontrado minha tribo. Tribo, espero que você esteja divertido com o VersionX.
Há uma década, enquanto trabalhava em um espaço de trabalho com mais de 25 projetos Xcode, aproveitei a oportunidade para automatizar a versão e criar atualizações de strings a um grau que pode parecer absurdo, se você estiver mantendo apenas um ou dois projetos com atualizações ocasionais.
VersãoX:
Foi divertido de fazer. Aprendi muito sobre o sistema de compilação do Xcode.
Aqui está um exemplo do tipo de Versão sofisticada e das seqüências de compilação que o VersionX poderia gerar automaticamente.
VersãoX 1.0.1 β7 (c5959a3 “Limpo”)
Versão de marketing: VersãoX 1.0.1 β7 O "1.0.1 é derivado da tag para confirmação, enquanto o" Beta 7 "é gerado automaticamente pela contagem de confirmação ou contagem de compilação (por exemplo).
Versão de compilação: (c5959a3 “Limpo”) Exibe o hash de confirmação curto e informa que o diretório de compilação teve zero alterações não confirmadas.
VersionX (fonte no GitHub) - um sistema barroco para incrementar automaticamente a versão e criar strings em projetos Xcode.
A documentação do VersionX.
fonte
Você pode querer verificar uma nova ferramenta que desenvolvo chamada Xcodebump. Ele pode lidar com a atualização de CFBundleShortVersionString e CFBundleVersion. Como etapa final, ele também fará check-in para git e marcará o commit para corresponder aos valores do CFBundle.
O projeto Xcodebump está localizado aqui:
https://github.com/markeissler/Xcodebump
fonte
Eu atualizo
build number
seguindo o método.$INFO_FILE
é o caminho do arquivo plist. E$build_number
é um novo número de compilação para este edifício.Geralmente, meu
$build_number
é composto pormajor
eminor
partes. Ominor
veio de informações do projeto. Então, eu descrevo como gerar amajor
peça.Eu tenho 2 estratégias para decidir o
$build_number
.Primeira estratégia
Essa estratégia usa a
git tag
contagem para decidir omajor
debuild number
. Se houver53
tags do projeto, ele retornará53
seguindo o script de shell.Geralmente, está aumentando. E forçará o desenvolvedor a colocar uma tag git antes de publicar.
Segunda estratégia
Deixe o sistema Jenkins CI decidir a
major
peça. Tem uma variável de ambienteBUILD_NUMBER
. Está aumentando automaticamente ao desenvolver o sistema de IC. Essas informações são úteis para rastrear o histórico do projeto no sistema de IC.fonte
Heres uma versão atualizada. Isso funciona a partir do Xcode 9.3.1, iOS 11.
Clique em 'Build Fhases' no destino do aplicativo, clique no ícone + para adicionar um novo script de execução e, na caixa, cole este código.
Vá para o arquivo Info.plist e defina a 'Versão do pacote' como 1 e a string 'Versões do pacote, curta' para 1, você deve estar definido.
Crie o projeto com o Info.plist em exibição e você verá a alteração da versão do pacote (número da compilação).
fonte
Aqui está a minha solução. Se você é como eu: amigável ao terminal, como ruby, como versionamento semântico, tente isso.
Crie um arquivo nomeado
Rakefile
que contenha isso:Preparar:
gem install xcodeproj versionomy
Execute:
rake increment:major
ourake increment:minor
ourake increment:tiny
quando quiser.fonte
Acho mais conveniente usar Automatizando versão e compilar números usando o agvtool .
Tente o seguinte:
<your_app_target>
O script (a primeira linha é opcional):
fonte
Vamos fazer isso da maneira da Apple. Aumentará o número da compilação após cada compilação bem-sucedida
Vou guiá-lo através de 5 imagens, basta passar por isso.
Selecione 'Editar esquema ...' na lista suspensa, quando você seleciona o nome do projeto localizado no lado direito do botão Stop_build_button. Verifique o primeiro passo
No menu leftSide, expanda a opção 'Build' e selecione 'Post-actions' Verificar segundo passo
Aqui você pode adicionar os códigos (scripts) desejados que deseja executar após a compilação bem-sucedida do seu programa. É o local em que precisamos adicionar uma pequena quantidade de código para que nossa automação funcione perfeitamente. >> 1. selecione o botão 'adicionar (+)' no canto esquerdo para adicionar um novo arquivo de script >> 2. Agora, no menu suspenso, selecione 'Nova ação de execução de script' Verifique a terceira etapa
Possui 3 campos >> 1. o shell já está atribuído a você >> 2. agora para 'Fornecer configurações de criação em' Selecione o nome do seu projeto. >> 3. Existe um grande campo para adicionar seu Script, basta copiar e colar esse código: Verifique o Quarto Passo
PLIST = "$ {PROJECT_DIR} / $ {INFOPLIST_FILE}" PLB = / usr / libexec / PlistBuddy LAST_NUMBER = $ ($ PLB -c "Imprimir CFBundleVersion" "$ PLIST") NEW_VERSION = $ (($ LAST_NUMBER + 1)) $ PLB -c "Conjunto: CFBundleVersion $ NEW_VERSION" "$ PLIST"
Depois de concluir a quarta etapa, basta selecionar 'Fechar' para fechar a janela e temos que fazer a última etapa, Vá para o arquivo 'plist.info' no menu Arquivo do projeto e verifique se a tecla 'Bundle Version' na seção 'Key' contém mais Quinto passo da verificação de valor numérico
fonte