137

我一直在使用 shell 脚本作为我的 Xcode 构建过程的一部分来增加plist文件中的构建号,但是它使 Xcode 4.2.1 经常崩溃(关于目标不属于项目的错误;我猜plist文件的更改在某种程度上使 Xcode 感到困惑)。

shell 脚本这样做是为了使内部版本号仅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上公开的 python 脚本来做这种事情。它没有很好的记录,但应该不难解决。作为奖励,这个 repo 还包含一个有用的脚本,可以自动将 3rd 方库捆绑到应用程序包中。

4

22 回答 22

77

关于这个问题,我已经搞砸了很多答案,但没有一个让我很满意。然而,我终于想出了一个我非常喜欢的混合物!

我们只需将构建产品的版本号设置为 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 是完全自动的
  • 漂亮的版本号可以随时修改

其他注意事项:

  • 如果您的项目中有应用程序扩展,只需在这些目标上设置相同的构建脚本。这将使所有版本号保持自动化和同步。App Store 要求扩展版本与您的主应用相匹配。
于 2014-07-15T05:24:45.380 回答
38

我用过这个清单。它按预期工作。 https://gist.github.com/sekati/3172554 (所有功劳归原作者所有)

我随时间修改的脚本。

xcode-versionString-generator.sh ,

xcode-build-number-generator.sh

由于这些要点正在帮助开发社区,因此我制作了 GitHub 项目。所以让我们好好开发它。这是 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}"
于 2013-03-18T18:12:16.613 回答
29

如果我正确理解你的问题,你想修改Project-Info.plist文件,它是 Xcode 标准项目模板的一部分?

我问这个的原因是它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 文件中设置任何键,而不仅仅是版本号。您可以创建所需的所有 plist 文件,并在需要时将它们包含在资源中。然后可以从包中读取它们。

至于您需要在关于窗格等地方显示版本,您也可以查看设置CFBundleGetInfoStringCFBundleShortVersionString

于 2012-02-15T14:12:35.423 回答
14

整个条目非常有帮助。我使用了这个技巧,但将我的脚本设置为 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
于 2013-02-07T17:38:57.613 回答
14

我不知道哪种方式最好,但我会发布Apple的答案以防万一有人在搜索它......

根据这篇Apple 的问答帖

使用 agvtool 自动化版本和内部版本号

版本和内部版本号键分别指定应用程序的营销和内部版本。agvtool 是一个命令行工具,可让您自动将这些数字增加到下一个最高数字或特定数字。

内部版本号标识应用程序的未发布或已发布版本。CFBundleVersion它以(Bundle 版本)的形式存储在应用程序的 Info.plist 中。

您必须在 Xcode 项目中完成以下步骤:

  1. 启用 agvtool

导航到目标的“构建设置”窗格,然后为所有构建配置更新它,如下所示:

  • 将当前项目版本设置为您选择的值。

您的 Xcode 项目数据文件 project.pbxproj 包含一个CURRENT_PROJECT_VERSION(当前项目版本)构建设置,它指定项目的当前版本。agvtool 在 project.pbxproj 中搜索CURRENT_PROJECT_VERSION. 如果CURRENT_PROJECT_VERSION存在则继续运行,否则停止运行。它的值用于更新内部版本号。

  • 将版本控制系统设置为 Apple Generic。

默认情况下,Xcode 不使用任何版本控制系统。将版本控制系统设置为 Apple Generic 可确保 Xcode 将所有 agvtool 生成的版本信息包含在您的项目中。

将版本控制系统设置为 Apple Generic

  1. 设置您的版本和内部版本号

agvtool 在您的应用程序的 Info.plist 中搜索您的版本和内部版本号。如果它们存在,它会更新它们,否则什么都不做。确保Info.plist 中存在CFBundleVersion(Bundle version) 和CFBundleShortVersionString(Bundle versions string, short) 键,如下图所示:

设置您的版本和内部版本号

退出 Xcode,然后在终端应用程序中导航到包含 .xcodeproj 项目文件的目录,然后再运行以下任何命令。.xcodeproj 项目文件包含被agvtool 使用的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
于 2016-02-25T02:35:49.500 回答
11

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;
于 2014-03-31T20:15:01.463 回答
7

谢谢你的剧本。它工作得很好。

我的 Info.plist 位于一个名称包含空格的子目录中,因此我必须修改运行脚本,并在 plist 路径周围加上引号:

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

和shell脚本以相同的方式在所有路径周围加上引号:

#!/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
于 2012-07-02T23:19:57.967 回答
6

我目前使用的脚本非常基于上面的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}"

它也可以作为GitHub gist提供(以更容易复制和粘贴的格式)。

于 2015-03-28T18:09:19.717 回答
5

我会推荐使用autorevision

Xcode 允许头文件(可以在构建时自动生成,而不是在 vcs 中自动生成)来提供将在构建时在 info.plist 中扩展的值。您可以在autorevision 网站上找到有关设置的演练。

Autorevision 有一个针对这些类型的头文件的输出类型,可以在这些情况下提供帮助。

于 2013-08-29T02:47:03.260 回答
4

其中一些解决方案的一个问题是Launch Services 只能识别捆绑版本中的四个五个主要数字。我有一个内部版本号为数千的项目,所以我想使用一些不太重要的数字。

这个 Perl 脚本会增加项目中的所有 Info.plist,而不仅仅是当前目标的那个,因此内部版本号都保持同步。它还使用一个补丁数字和两个次要数字,因此构建 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');
}
于 2013-05-16T10:19:14.293 回答
4

您可以使用Apple 的通用版本控制。基本上,您所要做的就是agvtool next-version -all从托管您的 .xcproj 文件的目录中调用。有关更多详细信息,请查看上面的网址。

于 2015-08-31T17:38:50.993 回答
3

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 的短版本转换为十进制。十六进制字符不能很好地满足 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}"

让你的 git 历史保持干净。

于 2015-03-23T22:27:40.040 回答
2

我尝试了修改后的程序,但没有成功,因为:-

  1. Xcode 4.2.1 更改了 .xcodeproj 中的 xcuserdata 子目录

  2. git 记录了 Project-Info.plist 中的先前更改

以下修改会导致这些被忽略,并且只标记真正的更改:-

if [ -n "$(find $dir \! -path "*xcuserdata*" \! -path "*.git" -newer $plist)" ]; then
于 2012-04-09T05:17:28.443 回答
2

您可能只想在存档时执行此操作(例如上传到 TF)。否则你的版本号可能会很快上升..

在方案(产品/编辑方案/存档/预操作)中,您可以添加仅在存档时执行的脚本。

此外,您可能希望在每次增加应用程序版本时重置内部版本号。

最后一件事,如果您改用存档,您可以安全地禁用:

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

由于内部版本号仅在您存档时才会增加...

编辑:更正我所说的,归档中的预操作发生在构建之后(但在归档之前),因此构建号将在下一个归档中增加......但是您可以创建一个新方案并在构建中添加此操作(预行动)这一新计划的部分。并在您要创建新版本时使用此方案

于 2012-12-18T03:23:18.497 回答
2

我使用最新的 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}'`
于 2014-09-29T17:12:07.230 回答
2

我觉得我找到了我的部落。部落,我希望你被 VersionX 逗乐了。

十年前,当我在一个包含超过 25 个 Xcode 项目的工作区工作时,我借此机会自动化版本并构建字符串更新,如果您只维护一个或两个项目并偶尔更新,这可能看起来很荒谬。

版本 X:

  • 知道构建类型(发布/调试)
  • 在构建时从存储库收集信息(包括 git 支持,但可以为 hg、svn 或您使用的任何东西定制)
  • 提供易于定制的精美营销版本字符串(在 App Store 实施约定之前有更多变化),因此您可以使用 git 标签约定自动增加包含“beta”符号的字符串。
  • 包括一个填充了包含版本和提交信息的实例变量的类。这对于填充关于面板和使用预先填充的信息构建日志字符串、崩溃报告或用户电子邮件错误报告非常有用。

做起来很有趣。我学到了很多关于 Xcode 构建系统的知识。

这是 VersionX 可以自动生成的精美版本和构建字符串类型的示例。

版本 X 1.0.1 β7(c5959a3 “清洁”)

营销版本: VersionX 1.0.1 β7 “1.0.1”派生自提交的标签,而“Beta 7”由提交计数或构建计数自动生成(例如)。

构建版本:(c5959a3 “Clean”)显示短提交哈希,并通知您构建目录有零个未提交的更改。

VersionX(来自 GitHub)——一个巴洛克式的系统,用于在 Xcode 项目中自动增加版本和构建字符串。

VersionX 文档。

于 2018-09-19T16:26:44.807 回答
1

您可能想查看我一直在开发的名为 Xcodebump 的新工具。它可以处理更新 CFBundleShortVersionString 和 CFBundleVersion。作为最后一步,它还将签入到 git 并标记提交以匹配那些 CFBundle 值。

Xcodebump项目位于此处:

https://github.com/markeissler/Xcodebump

于 2014-05-24T17:34:32.987 回答
1

build number通过以下方法更新。

$INFO_FILE是 plist 文件的路径。并且$build_number是该建筑物的新版本号。

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

通常,my$build_numbermajorminor部分组成。来自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}"

我有 2 种策略来决定$build_number.

第一战略

该策略使用计数来git tag决定majorbuild number如果项目有53标签,将53通过以下shell脚本返回。

一般来说,它在增加。并且它会强制开发者在发布之前放置一个 git 标签。

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

第二种策略

Jenkins CI 系统决定major部分。它有一个环境变量BUILD_NUMBER。在 CI 系统上构建时,它会自动增加。此信息对于跟踪 CI 系统上的项目历史非常有用。

major_number=${BUILD_NUMBER}
于 2016-08-02T07:15:55.980 回答
1

这是一个更新的版本。这适用于 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 versions string, short”设置为 1,您应该进行设置。

在视图中使用 Info.plist 构建项目,您应该会看到 Bundle 版本(内部版本号)发生了变化。

  • 请注意,从 Xcode 9.3.1 开始,您将无法从常规选项卡中看到这些更改,但会在您归档构建时以及 Info.plist 中看到这些更改
于 2018-05-19T00:11:08.647 回答
0

这是我的解决方案。如果你像我一样:终端友好,像 ruby​​,像语义版本控制,试试这个。

制作一个名为的文件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:majorrake increment:minorrake increment:tiny任何时候你想要的。

于 2014-07-28T11:12:43.957 回答
0

我发现使用 agvtool 使用自动化版本和内部版本号最方便。

试试这个:

  1. 按照上面链接的 Apple 文档中的说明进行配置。
  2. 添加脚本作为项目的预操作 -> 编辑方案... -> 存档(或其他,如果您愿意)
  3. Set:提供构建设置<your_app_target>

脚本(第一行是可选的):

exec > ${PROJECT_DIR}/prebuild.log 2>&1
cd ${PROJECT_DIR}
xcrun agvtool next-version -all
cd -
于 2019-02-24T05:50:47.553 回答
0

让我们以苹果自己的方式来做这件事。每次成功构建后都会增加构建号

我将引导您浏览 5 张图片,只需浏览一下即可。

  1. 当您选择位于 Stop_build_button 右侧的项目名称时,从下拉列表中选择“编辑方案...”。 检查第一步

  2. 从左侧菜单展开“构建”选项并选择“后操作” 检查第二步

  3. 在这里,您可以添加成功构建程序后要执行的所需代码(脚本)。这是我们必须添加少量代码以使我们的自动化完美运行的地方。>> 1. 从左侧角落选择“添加 (+)”按钮以添加新脚本文件 >> 2. 现在从下拉列表中选择“新运行脚本操作” 检查第三步

  4. 它有 3 个字段 >> 1. 已经为您分配了外壳 >> 2. 现在为“提供您的构建设置”选择您的项目名称。>> 3. 添加脚本有一个很大的字段,只需复制并粘贴此代码即可:检查第四步

    PLIST="${PROJECT_DIR}/${INFOPLIST_FILE}" PLB=/usr/libexec/PlistBuddy LAST_NUMBER=$($PLB -c "打印 CFBundleVersion" "$PLIST") NEW_VERSION=$(($LAST_NUMBER + 1)) $ PLB -c "设置:CFBundleVersion $NEW_VERSION" "$PLIST"

  5. 完成第四步后,只需选择“关闭”关闭窗口,我们必须执行最后一步,转到项目文件菜单中的“plist.info”文件,并确保“密钥”部分下的“捆绑版本”密钥最包含数值检查第五步

于 2020-04-03T03:46:14.170 回答