programing

빌드 번호를 늘리는 더 좋은 방법은 무엇입니까?

goodsources 2023. 5. 6. 14:56
반응형

빌드 번호를 늘리는 더 좋은 방법은 무엇입니까?

나는 플리스트 파일 내의 빌드 번호를 늘리기 위해 Xcode 빌드 프로세스의 일부로 셸 스크립트를 사용해 왔지만, 그것은 Xcode 4.2.1을 자주 충돌시키고 있습니다(프로젝트에 속하지 않는 대상에 대한 오류; 플리스트 파일의 변경이 어떤 식으로든 Xcode를 혼란스럽게 하고 있는 것 같습니다).

가 셸스립빌번다호같음증이이록작수다니행습했업을도가하과크드는트만 하도록 이 작업을 했습니다.agvtool파일이 plist 파일보다 최신인 경우(따라서 빌드만으로 값이 증가하지 않음):

if [ -n \"`find ProjDir -newer ProjDir/Project-Info.plist`\" ]; then agvtool -noscm next-version -all; else echo \"Version not incremented\"; fi

Xcode가 깨지지 않는 빌드 번호(plist 파일 또는 다른 곳에서)를 증가시킬 수 있는 방법이 있습니까?

최종 편집: 저는 이제 방금 github에 공개한 파이썬 스크립트를 사용하여 이러한 작업을 수행합니다.문서화는 잘 되어 있지 않지만 해결하는 것은 어렵지 않을 것입니다.또한 이 보고서에는 타사 라이브러리를 앱 번들에 자동으로 번들할 수 있는 유용한 스크립트가 포함되어 있습니다.

저는 이 질문에 대한 많은 답들을 가지고 장난을 쳤지만, 그 중 어느 것도 저를 만족시키지 못했습니다.하지만, 저는 마침내 제가 정말 좋아하는 혼합물을 생각해냈습니다!

빌드된 제품의 버전 번호를 Git 커밋 수로 설정하기만 하면 됩니다.스크립트는 빌드된 제품만 변형하므로 소스 제어를 방해하지 않습니다.

빌드 단계의 끝에 이 "스크립트 실행" 빌드 단계를 추가합니다.

if [ "${CONFIGURATION}" = "Release" ]; then
    buildNumber=$(git rev-list --count head)
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
fi

프로젝트의 Info.plist 버전을 원하는 대로 설정하면 릴리스 빌드를 빌드할 때 사용되지 않습니다.으로 설정합니다.AUTOMATED또는DEVELOPMENT개발 빌드를 실행할 때 명확합니다.

바로 그거야!빌드된 앱은 빌드 번호가 계속 증가합니다.(항상 동일한 분기에서 빌드를 수행하는 경우)

내가 이 방법을 좋아하는 이유:

  • 만만하다
  • Git 버전 역사를 오염시키지 않습니다.
  • CFBundleVersion은 완전히 자동입니다.
  • 예쁜 버전 번호는 내가 원할 때 언제든지 수정할 수 있습니다.

기타 참고 사항:

  • 프로젝트에 앱 확장이 있는 경우 해당 대상에도 동일한 빌드 스크립트를 설정하면 됩니다.이렇게 하면 모든 버전 번호가 자동화되고 동기화됩니다.앱 스토어에는 기본 앱과 일치하는 확장 버전이 필요합니다.

나는 이 광택제를 사용해 본 적이 광택제를 사용했습니다.예상대로 작동합니다.https://gist.github.com/sekati/3172554 (모든 크레딧은 원저자에게 돌아갑니다)

시간이 지남에 따라 수정한 스크립트.

xcode-versionString-generator.sh ,

xcode-build-number-module입니다.

이러한 요지들이 개발 커뮤니티에 도움이 되고 있기 때문에, 저는 그것으로 깃허브 프로젝트를 만들었습니다.그러니까 잘 개발해나가자꾸나.GitHub 프로젝트는 다음과 같습니다. https://github.com/alokc83/Xcode-build-and-version-generator

두 스크립트 모두 코드를 약간 개선하여 업데이트했습니다.아래를 사용하는 대신 GitHub의 최신 정보를 가져옵니다.

버전:

# xcode-version-bump.sh
# @desc Auto-increment the version number (only) when a project is archived for export. 
# @usage
# 1. Select: your Target in Xcode
# 2. Select: Build Phases Tab
# 3. Select: Add Build Phase -> Add Run Script
# 4. Paste code below in to new "Run Script" section
# 5. Check the checkbox "Run script only when installing"
# 6. Drag the "Run Script" below "Link Binaries With Libraries"
# 7. Insure your starting version number is in SemVer format (e.g. 1.0.0)

# This splits a two-decimal version string, such as "0.45.123", allowing us to increment the third position.
VERSIONNUM=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "${PROJECT_DIR}/${INFOPLIST_FILE}")
NEWSUBVERSION=`echo $VERSIONNUM | awk -F "." '{print $3}'`
NEWSUBVERSION=$(($NEWSUBVERSION + 1))
NEWVERSIONSTRING=`echo $VERSIONNUM | awk -F "." '{print $1 "." $2 ".'$NEWSUBVERSION'" }'`
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $NEWVERSIONSTRING" "${PROJECT_DIR}/${INFOPLIST_FILE}"

빌드용:

# xcode-build-bump.sh
# @desc Auto-increment the build number every time the project is run. 
# @usage
# 1. Select: your Target in Xcode
# 2. Select: Build Phases Tab
# 3. Select: Add Build Phase -> Add Run Script
# 4. Paste code below into new "Run Script" section
# 5. Drag the "Run Script" below "Link Binaries With Libraries"
# 6. Ensure that your starting build number is set to a whole integer and not a float (e.g. 1, not 1.0)

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"

만약 내가 당신의 질문을 올바르게 이해했다면, 당신은 수정하기를 원합니다.Project-Info.plistXcode의 표준 프로젝트 템플릿의 일부인 파일은 무엇입니까?

제가 이것을 묻는 이유는Project-Info.plist일반적으로 버전 제어 하에 있으며, 이를 수정하면 수정된 것으로 표시됩니다.

문제가 없다면 다음 스니펫이 빌드 번호를 업데이트하고 프로세스에서 파일을 수정된 것으로 표시합니다.get_build_number사용할 빌드 번호를 가져오기 위한 스크립트(예: 이 예제의 자리 표시자)입니다.

#!/bin/sh

# get_build_number is a placeholder for your script to get the latest build number
build_number = `get_build_number`

/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${build_number}" ProjDir/Project-Info.plist

PlistBuddy를 사용하면 버전 번호뿐만 아니라 plist 파일의 모든 키를 설정할 수 있습니다.원하는 모든 목록 파일을 생성하고 필요한 경우 리소스에 포함할 수 있습니다.그런 다음 번들에서 읽을 수 있습니다.

창에는 설정을 .CFBundleGetInfoString그리고.CFBundleShortVersionString.

이 전체 항목은 매우 도움이 되었습니다.이 트릭을 사용했지만 GIT에서 스크립트를 커밋 후 후크로 설정했기 때문에 커밋이 성공할 때마다 CFBundleVersion이 증가합니다.후크 스크립트는 .git/hooks로 들어갑니다.로그는 프로젝트 디렉터리에 남아 있습니다.

이것은 저의 가장 기본적인 기준에 부합합니다.GIT에서 버전을 가져와서 이전과 동일한 빌드를 재구축할 수 있기를 원합니다.빌드 프로세스 중에 수행된 증분은 이 작업을 수행하지 않습니다.

내 대본은 다음과 같습니다.

#!/bin/sh
#
# post-commit
#
# This script increments the CFBundleVersion for each successful commit
#

plist="./XYZZY/XYZZY-Info.plist"
buildnum=$(/usr/libexec/Plistbuddy -c "Print CFBundleVersion" "$plist")
if [ -z "$buildnum" ]; then
    exit 1
fi
buildnumplus=$(expr $buildnum + 1)
/usr/libexec/Plistbuddy -c "Set CFBundleVersion $buildnumplus" "$plist"

echo $(date) "- Incremented CFBundleVersion to" $buildnumplus >> hookLog.txt

어떤 방법이 최선인지는 모르겠지만 혹시 검색하시는 분이 계실까봐 애플 답변을 올리겠습니다...

이 Apple의 Q&A 게시물에 따르면:

agvtool을 사용하여 버전 및 빌드 번호 자동화

버전 및 빌드 번호 키는 각각 응용 프로그램의 마케팅 및 내부 버전을 지정합니다. agvtool은 이러한 번호를 자동으로 다음으로 높은 번호 또는 특정 번호로 늘릴 수 있는 명령줄 도구입니다.

빌드 번호는 응용 프로그램의 릴리스되지 않았거나 릴리스된 버전을 식별합니다.에 "Info.plist"라는 으로 저장됩니다.CFBundleVersion(번들 버전).

Xcode 프로젝트에서 다음 단계를 완료해야 합니다.

  1. agvtool 사용

대상의 빌드 설정 창으로 이동한 다음 모든 빌드 구성에 대해 다음과 같이 업데이트합니다.

  • 현재 프로젝트 버전을 원하는 값으로 설정합니다.

인 projectXcode 파일인 project.pbxproj 파일이 포함되어 .CURRENT_PROJECT_VERSION Project Version) 설정 - .pbxproj for (프로젝트의 현재 버전) - agvtool 프로젝트.pbxproj.CURRENT_PROJECT_VERSION다음과 같은 경우 계속 실행됩니다.CURRENT_PROJECT_VERSION존재하고 실행을 중지합니다. 그렇지 않으면 실행을 중지합니다.이 값은 빌드 번호를 업데이트하는 데 사용됩니다.

  • 버전 관리 시스템을 Apple Generic으로 설정합니다.

기본적으로 Xcode는 버전 관리 시스템을 사용하지 않습니다.Versioning System을 Apple Generic으로 설정하면 Xcode에 agvtool에서 생성된 모든 버전 정보가 프로젝트에 포함됩니다.

버전 관리 시스템을 Apple Generic으로 설정

  1. 버전 및 빌드 번호 설정

은 응용 에서 버전 및합니다.agvtool은 Info.plist를 검색합니다.존재하고 아무것도 하지 않는 경우 업데이트합니다.다음을 확인합니다.CFBundleVersion및 (번들판) »CFBundleShortVersionString( string,는 아래 (Bundle version string, short) 파일 이름은 Info.plist입니다.

버전 및 빌드 번호 설정

Xcode를 종료한 다음 다음 명령을 실행하기 전에 터미널 응용 프로그램에서 .xcodeproj 프로젝트 파일이 들어 있는 디렉토리로 이동합니다..xcodeproj 프로젝트 파일에는 gvtool에서 사용하는 project.pbxproj가 포함되어 있습니다.(명령줄 대신 스크립트에서 실행할 수 있는 부분입니다.)

버전 번호 업데이트

버전 번호를 특정 버전으로 업데이트하려면 다음을 실행합니다.

xcrun agvtool new-marketing-version <your_specific_version>

예: 버전 번호를 2.0으로 업데이트합니다.

xcrun agvtool new-marketing-version 2.0

빌드 번호 업데이트

빌드 번호를 자동으로 늘리려면 다음을 실행합니다.

xcrun agvtool next-version -all

응용 프로그램의 빌드 번호를 특정 버전으로 설정하려면 다음을 실행합니다.

xcrun agvtool new-version -all <your_specific_version>

예: 빌드 번호를 2.6.9로 설정합니다.

xcrun agvtool new-version -all 2.6.9

보너스:

현재 버전 번호를 보려면 다음을 실행합니다.

xcrun agvtool what-marketing-version

현재 빌드 번호를 보려면 다음을 실행합니다.

xcrun agvtool what-version

FWIW - 현재는 릴리스 빌드(아카이브 포함)에 대해서만 빌드 수를 늘리기 위해 사용하고 있습니다.Xcode 5.1에서 정상적으로 작동합니다.

스니펫을 Xcode로 직접 스크립트 빌드 실행 단계에 복사/붙여넣기만 하면 됩니다.

buildnum=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$PRODUCT_SETTINGS_PATH")

if [ "$CONFIGURATION" = "Release" ]; then
buildnum=$((buildnum + 1))
echo "Build number updated to $buildnum"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildnum" "$PRODUCT_SETTINGS_PATH"
fi;

대본 감사합니다.잘 작동합니다.

MyInfo.plist가 공백이 포함된 이름의 하위 디렉터리에 있으므로 plist 경로 주위에 따옴표를 사용하여 스크립트 실행을 수정해야 했습니다.

${PROJECT_DIR}/tools/bump_build_number.sh "${PROJECT_DIR}/${INFOPLIST_FILE}"

모든 경로에 따옴표가 있는 동일한 방법으로 셸 스크립트를 사용할 수 있습니다.

#!/bin/sh

if [ $# -ne 1 ]; then
    echo usage: $0 plist-file
    exit 1
fi

plist=$1
dir=$(dirname "$plist")

# Only increment the build number if source files have changed
if [ -n "$(find "$dir" \! -path "*xcuserdata*" \! -path "*.git" -newer "$plist")" ]; then
    buildnum=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$plist")
    if [ -z "$buildnum" ]; then
        echo "No build number in $plist"
        exit 2
    fi
    buildnum=$(expr $buildnum + 1)
    /usr/libexec/Plistbuddy -c "Set CFBundleVersion $buildnum" "$plist"
    echo "Incremented build number to $buildnum"
else
    echo "Not incrementing build number as source files have not changed"
fi

제가 현재 사용하고 있는 스크립트는 위의 Alix를 기반으로 합니다.아래의 적응은 릴리스/아카이브 빌드에서만 자동 증분을 수행하는 검사를 추가합니다.

이러한 변경 없이는 각 개발자가 자체 속도로 빌드 번호를 증가시키기 때문에 버전 제어 충돌이 발생합니다.그리고 git 이력이 불필요하게 오염될 것이라는 사실은 빌드 번호가 항상 바뀌었습니다.

# xcode-build-bump.sh
# @desc Auto-increment Xcode target build number every time the project is archived
# @src stackoverflow.com/a/15483906
# @usage
# 1. Select: your Target in Xcode
# 2. Select: Build Phases Tab
# 3. Select: Add Build Phase -> Add Run Script
# 4. Paste code below in to new "Run Script" section
# 5. Drag the "Run Script" below "Link Binaries With Libraries"
# 6. Insure that your starting build number is set to a whole integer and not a float (e.g. 1, not 1.0)

if [ "Release" != "${CONFIGURATION}" ]
then
    exit 0
fi

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"

GitHubist로 복사 및 붙여넣기가 조금 더 쉬운 형식으로 사용할 수도 있습니다.

자동 수정 사용을 권장합니다.

Xcode를 사용하면 헤더 파일(vcs 자체가 아닌 빌드 시 자동 생성 가능)이 빌드 시 info.plist에서 확장되는 값을 제공할 수 있습니다. 설정에 대한 자세한 내용은 자동 수정 웹 사이트에서 확인할 수 있습니다.

자동 수정기에는 이러한 상황에서 정확하게 도움이 되도록 이러한 유형의 헤더 파일에 맞게 조정된 출력 유형이 있습니다.

이러한 솔루션 중 일부와 관련된 한 가지 문제는 Launch Services가 인식만 한다는 입니다. 번들 버전의 주요 숫자 5개.빌드 번호가 수천 개인 프로젝트가 있습니다. 그래서 덜 중요한 숫자를 사용하고 싶었습니다.

이 Perl 스크립트는 현재 대상뿐만 아니라 프로젝트의 모든 Info.plist를 증분하므로 빌드 번호가 모두 고정 상태로 유지됩니다.또한 패치 디짓 1개와 마이너 디짓 2개를 사용하므로 빌드 1234는 버전 1.23.4가 제공됩니다. 빌드 전 동작으로 사용하므로 빌드하는 모든 프로젝트에 적용됩니다.

그 대본은 꽤 잔인하지만, 저한테는 효과가 있어요.

#!/usr/bin/perl

use strict;
use warnings;
use v5.12.0;

use Dir::Iterate;

for my $plist_file(grepdir { /-Info.plist$/ } '.') {
    my $build = `/usr/libexec/PlistBuddy -c "Print CFBundleVersion" '$plist_file'`;
    chomp $build;

    next unless $build;

    # Strip dots
    $build =~ s/\.//g;
    $build =~ s/^0//g;

    # Increment
    $build++;

    # Re-insert dots
    $build =~ s/^(\d{0,4}?) (\d{0,2}?) (\d{0,1}?)$/$1.$2.$3/x;

    # Insert zeroes
    $build =~ s{(^|\.)\.}{${1}0.}g;

    system qq(/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $build" '$plist_file');
}

당신은 애플의 일반 버전을 사용할 수 있습니다.기본적으로 당신이 해야 할 일은 전화하는 것뿐입니다.agvtool next-version -all파일을 에서 .xcproj 파일을 호스트하는 디렉터리 내에서.자세한 내용은 위의 URL을 참조하십시오.

Wil Gieseler의 솔루션을 기반으로, 저는 단지 한 가지 변경을 하고 싶었습니다.이 솔루션은 Git 커밋 수를 빌드 번호에 입력합니다.유용하지만, 그 빌드를 만든 실제 커밋을 찾는 것은 여전히 어렵습니다.빌드 번호가 단조롭게 증가하는지 여부는 크게 신경 쓰지 않았기 때문에 주어진 이진수를 생성하는 커밋에 더 쉽게 액세스할 수 있도록 해당 요구 사항을 삭제했습니다.

이를 위해 그의 첫 번째 스크립트를 다음과 같이 수정했습니다.

# Set the build number to the decimal conversion of the short version of the current git SHA

# Get the short version of the current git SHA in hexadecimal
SHA=$(git rev-parse --short @)
# Uppercase any alphabetic chars in SHA (bc doesn't like lowercase hex numbers)
UPPERCASE_SHA=$(tr '[:lower:]' '[:upper:]' <<< "$SHA")
# Use bc to convert the uppercase SHA from hex to decimal
BUILD_NUM=$(bc <<< "ibase=16;obase=A;$UPPERCASE_SHA")
# Set our build number to that
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUM" "${PROJECT_DIR}/${INFOPLIST_FILE}"

# To convert a build number back to a usable git SHA, run the following, substituting the build number for <build number>
# bc <<< "ibase=10;obase=16;<build number>"

이렇게 하면 현재 Git SHA의 짧은 버전이 10진수로 변환됩니다.16진수 문자가 Apple의 빌드 번호 요구 사항과 잘 맞지 않아 이 작업을 수행해야 했습니다.다시 변환하려면 다음과 같은 작업을 실행하면 됩니다.

SHA=$(bc <<< "ibase=10;obase=16;<build number>")

bash, 디서어.<build number>이진에서 얻은 빌드 번호입니다.그냥 그럼, 그뛰어요를 실행하세요.git checkout $SHA 있습니다여기 있어.

이것은 위에서 언급한 바와 같이 Wil Gieseler의 솔루션을 적용한 것이기 때문에 다음 빌드 후 스크립트도 필요합니다.

# Set the build number to "DEVELOPMENT"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion DEVELOPMENT" "${PROJECT_DIR}/${INFOPLIST_FILE}"

당신의 기트 이력을 깨끗하게 유지해주는 것.

수정된 절차를 시도했지만 작동하지 않았습니다. 이유는 다음과 같습니다.

  1. Xcode 4.2.1은 .xcodeproj의 xcuser 데이터 하위 디렉터리를 변경합니다.

  2. git는 Project-Info.plist의 이전 변경 사항을 기록합니다.

다음과 같은 수정으로 인해 이러한 변경 사항은 무시되고 실제 변경 사항만 플래그 지정됩니다.

if [ -n "$(find $dir \! -path "*xcuserdata*" \! -path "*.git" -newer $plist)" ]; then

아카이브(예: TF에 업로드) 때만 이 작업을 수행할 수 있습니다.그렇지 않으면 버전 번호가 정말 빨리 올라갈 수도 있습니다.

구성표(Product / Edit Scheme / Archive / Pre-Actions)에서 보관할 때만 실행되는 스크립트를 추가할 수 있습니다.

또한 앱 버전을 늘릴 때마다 빌드 번호를 재설정할 수도 있습니다.

마지막으로 보관을 대신 사용하면 다음을 안전하게 비활성화할 수 있습니다.

# if [ -n "$(find "$dir" \! -path "*xcuserdata*" \! -path "*.git" -newer "$plist")" ]; then
...
# else
    # echo "Not incrementing build number as source files have not changed"
# fi

보관할 때만 빌드 번호가 증가하므로...

편집: 앞서 말한 내용을 수정합니다. 아카이브의 사전 작업은 빌드 후(아카이브 전)에 수행되므로 다음 아카이브에 대해 빌드 번호가 증분됩니다.그러나 새 구성표를 만들고 이 새 구성표의 빌드(사전 작업) 섹션에서 이 작업을 추가할 수 있습니다.새 빌드를 만들 때 이 구성표를 사용합니다.

빌드 번호는 마지막 SVN 리비전을 사용합니다.빌드 디렉토리에서 Info.plist를 변경해도 소스 Info.plist에는 영향을 주지 않습니다.

# use the last SVN revision as the build number:
Info_plist="$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Info.plist"
defaults write "${Info_plist}" CFBundleVersion `svn stat -u | awk '/'"Status against revision:"'/ {print $4}'`

여기 업데이트된 버전이 있습니다.이것은 Xcode 9.3.1, iOS 11에서 작동합니다.

응용 프로그램 대상에서 '빌드 단계'를 클릭하고 + 아이콘을 클릭하여 새 실행 스크립트를 추가한 다음 상자에 이 코드를 붙여넣습니다.

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"

Info.plist 파일로 이동하여 'Bundle version'을 1로 설정하고 'Bundle version string, short'를 1로 설정합니다.

Info.plist 보기를 사용하여 프로젝트를 빌드하면 번들 버전(빌드 번호)이 변경됩니다.

  • Xcode 9.3.1 이후에는 일반 탭에서 이러한 변경 사항을 볼 수 없지만 빌드를 보관할 때 Info.plist에서 변경 사항을 볼 수 있습니다.

내 부족을 찾은 것 같아요.Tribe, Version X가 재미있길 바랍니다.

10년 전 25개 이상의 Xcode 프로젝트가 포함된 작업 공간에서 작업하는 동안 저는 버전을 자동화하고 가끔 업데이트되는 프로젝트를 한두 개만 유지한다면 터무니없이 보일 수 있는 정도로 문자열 업데이트를 구축할 기회를 가졌습니다.

버전 X:

  • 빌드 유형(릴리스/디버깅)을 인식합니다.
  • 빌드 시 저장소에서 정보를 수집합니다(git 지원이 포함되어 있지만 hg, svn 또는 사용자가 사용하는 모든 항목에 대해 사용자 지정할 수 있음).
  • 쉽게 사용자 지정할 수 있는 고급 마케팅 버전 문자열(앱스토어가 규약을 적용하기 전에 훨씬 더 많은 변화가 있었다)을 위해 제공되므로 예를 들어 깃 태그 규칙을 사용하여 "베타"에 대한 기호를 포함하는 문자열을 자동으로 증가시킬 수 있습니다.
  • 버전 및 커밋 정보를 포함하는 인스턴스 변수로 채워진 클래스를 포함합니다.정보 패널을 채우고 미리 입력된 정보로 로깅 문자열, 충돌 보고서 또는 사용자 전자 메일 버그 보고서를 구성하는 데 유용합니다.

만드는 게 재미있었어요.저는 Xcode 빌드 시스템에 대한 보트 로드를 배웠습니다.

다음은 버전 X가 자동으로 생성할 수 있는 고급 버전 및 빌드 문자열 유형의 예입니다.

버전 X 1.0.1 β7(c5959a3 "클린")

마케팅 버전:버전 X 1.0.1 β7 "1.0.1"은 커밋용 태그에서 파생된 반면 "베타 7"은 커밋 카운트 또는 빌드 카운트(예:)에 의해 자동으로 생성됩니다.

빌드 버전: (c5959a3 "정리") 짧은 커밋 해시를 표시하고 빌드 디렉터리에 커밋되지 않은 변경 사항이 없음을 알려줍니다.

VersionX(GitHub 소스) - Xcode 프로젝트에서 버전 및 빌드 문자열을 자동으로 증가시키는 바로크 시스템.

버전 X 설명서.

제가 개발하고 있는 Xcodebump라는 새로운 툴을 확인해 보는 것이 좋을 것입니다.CFBundleShortVersionString 및 CFBundleVersion 업데이트를 모두 처리할 수 있습니다.또한 마지막 단계로 이러한 CFBundle 값과 일치하도록 커밋을 확인하고 태그를 지정합니다.

Xcodebump 프로젝트는 다음 위치에 있습니다.

https://github.com/markeissler/Xcodebump

업데이트합니다.build number다음과 같은 방법으로

$INFO_FILE파일의 입니다.plist 파일의 경로입니다.그리고.$build_number이 건물의 새 빌드 번호입니다.

/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $build_number" "${INFO_FILE}"

저의 일적으나의로.$build_number은 에의구됨성해.major그리고.minor. 파트. 파트. 파트.minor프로젝트 정보에서 가져온 것입니다.그래서 나는 어떻게 생성하는지 설명합니다.major

## Composed by `major` and `minor`. 
## `minor` is parsed from project information. It's another story.
## Examples: `21.1`, or `21.1.3`
build_number="${major_number}.${minor_number}"

▁the▁strategies▁to다있▁decide니 두 가지 전략이 있습니다.$build_number.

첫 번째 전략

은 이전은사용다니합다음을 합니다.git tag결정할 때까지 세다majorbuild number에 다면이 ,53프젝트태그, 니다됩반의를 합니다.53셸 스크립트를 따름.

일반적으로 증가하고 있습니다.그리고 그것은 개발자가 게시하기 전에 깃 태그를 붙이도록 강요할 것입니다.

major_number=$(git tag -l | wc -l | grep -oE "\d+")

두 번째 전략

Jenkins CI 시스템이 다음을 결정하도록 합니다.majorpart. 파트가 . 환경 변수가 있습니다.BUILD_NUMBERCI 시스템을 구축할 때 자동으로 증가합니다.이 정보는 CI 시스템에서 프로젝트 기록을 추적하는 데 유용합니다.

major_number=${BUILD_NUMBER}

제 해결책은 이렇습니다.만약 여러분이 저와 같다면, 터미널 프렌들리, 루비, 시맨틱 버전 관리와 같은 것을 시도해 보세요.

라는 이름의 파일을 .Rakefile다음을 포함합니다.

require "xcodeproj"
require "versionomy"

XCODEPROJECT = "MyProject.xcodeproj"
INFOPLISTFILE = "MyProject/MyProject-Info.plist"

$UPDATES = [:major,:minor,:tiny]
$UPDATES.each { |part|
  desc "increment #{part} part of version"
  task "increment:#{part}" do |task|
    version=`/usr/libexec/Plistbuddy -c "Print CFBundleVersion" #{INFOPLISTFILE}`.chomp
    version=Versionomy.parse(version)
    version=version.bump(part)

    # I use the same string for CFBundleVersion and CFBundleShortVersionString for now
    `/usr/libexec/PlistBuddy -c "Set :CFBundleVersion #{version}" #{INFOPLISTFILE}`
    `/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString #{version}" #{INFOPLISTFILE}`
    print "version upgraded to #{version}\n"
  end
}

준비:gem install xcodeproj versionomy

실행:rake increment:major또는rake increment:minor또는rake increment:tiny당신이 원할 때 언제든지.

는 agvtool을 사용하여 버전 빌드 번호 자동화를 사용하는 것이 가장 편리하다고 생각합니다.

사용해 보십시오.

  1. 위에 링크된 Apple 설명서에 설명된 대로 구성합니다.
  2. 프로젝트에 사전 작업으로 스크립트 추가 -> 구성표 편집...-> 보관(또는 원하는 경우 기타)
  3. : 빌드설제에서 빌드 합니다.<your_app_target>

스크립트(첫 번째 줄은 선택 사항):

exec > ${PROJECT_DIR}/prebuild.log 2>&1
cd ${PROJECT_DIR}
xcrun agvtool next-version -all
cd -

애플만의 방식으로 해보죠.빌드가 성공할 때마다 빌드 번호가 증가합니다.

제가 5개의 이미지를 안내해 드릴 테니 한번 훑어보세요.

  1. Stop_build_버튼 오른쪽에 있는 프로젝트 이름을 선택하면 드롭다운에서 'Edit Scheme...'을 선택합니다.첫 번째 단계 확인

  2. 좌측 메뉴에서 'Build(구축)' 옵션을 확장하고 'Post-actions(후 조치)'를 선택하여 두 번째 단계를 확인

  3. 여기서 프로그램을 성공적으로 빌드한 후 실행할 코드(스크립트)를 추가할 수 있습니다.이곳은 우리의 자동화가 완벽하게 작동하기 위해 코드를 조금 더 추가해야 하는 곳입니다.>> 1. 왼쪽 코너에서 '추가(+)' 버튼을 선택하여 새 스크립트 파일 >> 2.이제 드롭다운에서 '새 스크립트 실행 작업'을 선택합니다. 세 번째 단계를 확인하십시오.

  4. 3개의 필드가 있습니다 >> 1. 셸은 이미 사용자에게 할당되었습니다 >> 2. 이제 'Project Name(프로젝트 이름)을 선택하십시오.>> 3. 스크립트를 추가할 수 있는 큰 필드가 있습니다. 이 코드를 복사하여 거기에 붙여넣기만 하면 됩니다: 4단계 확인

    PLIST="${PROJECT_DIR}/${INFOPLIST_FILE}" PLB=/usr/libexec/PlistBuddy LAST_NUMBER=$($PLB - c "Print CFBundleVersion" "" "$PLIST") NEW_VERSION=$(($LAST_NUMBER + 1)$PLB - "set : CFBUNDLEVersion" $PLIST"

  5. 4단계를 완료한 후 '닫기'를 선택하여 창을 닫으면 마지막 단계를 수행해야 합니다. 프로젝트 파일 메뉴의 'plist.info ' 파일로 이동하여 '키' 섹션의 '번들 버전' 키에 숫자 값 확인 5단계가 가장 많이 포함되어 있는지 확인하십시오.

언급URL : https://stackoverflow.com/questions/9258344/better-way-of-incrementing-build-number

반응형