如何在使用CodeMagic部署Flutter IOS应用时自动增加构建版本号

11

当我使用由Nevercode拥有的CodeMagic(https://codemagic.io/)部署我的Flutter应用程序时,我无法自动递增版本号。

我遵循了此页面上描述的步骤:https://developer.nevercode.io/docs/incrementing-ios-app-version

他们建议使用的脚本是:

DSYM_INFO_PLIST="${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist"
buildNumber=$NEVERCODE_BUILD_NUMBER
stringLength=${#buildNumber}

if [ $stringLength -ne 0 ]; then
    echo "Updating build number to $buildNumber"
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
    if [ -f "$DSYM_INFO_PLIST" ]; then
        /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUMBER" "$DSYM_INFO_PLIST"
    fi
else
    echo "Missing build number, skip updating"
fi

在我将这个脚本添加到Xcode后,我得到了这个错误:

Running pod install...                                             34.3s
Running Xcode build...
 ├─Assembling Flutter resources...                           6.1s
 └─Compiling, linking and signing...                         6.9s
Xcode build done.                                           30.3s
Failed to build iOS app
Error output from Xcode build:
↳
    ** BUILD FAILED **


Xcode's output:
↳
    === BUILD TARGET Runner OF PROJECT Runner WITH CONFIGURATION Debug ===
    /Users/macbook/Library/Developer/Xcode/DerivedData/Runner-hdgyskbygbvchfagqudvhwidlraa/Build/Intermediates.noindex/Runner.build/Debug-iphoneos/Runner.build/Script-3590602C2
    2484D000061C91A.sh: line 15: syntax error: unexpected end of file
    Command /bin/sh failed with exit code 2

Could not build the precompiled application for the device.

有人能够解释一下如何在使用Codemagic部署IOS应用程序时正确增加版本号吗?它应该是在Xcode的构建阶段运行的脚本还是在Codemagic工作流的构建步骤中添加的命令?

理想情况下,当我使用flutter run运行应用程序时,它不应该增加版本号,但是当我将其部署到App Store Connect时应该增加。

7个回答

8

从Codemagic的文档中,他们展示了几个选项:

Here are some examples of the build arguments you can use to increment the app version. You can enter the build arguments in App settings > Build > Build arguments.

--build-name=2.0.$BUILD_NUMBER --build-number=$(($BUILD_NUMBER + 100))

--build-name=1.0.0 --build-number=$BUILD_NUMBER

--build-number=$(git rev-list HEAD --count)

在此添加:

enter image description here

请注意,BUILD_NUMBER中的构建数对于每个工作流程是单独计算的。


4

现在这个已经可行了,我向Codemagic.io写了信。他们的回复如下:

我们提供$BUILD_NUMBER变量来用于版本控制。例如,您可以使用构建参数,如 --build-name="1.0.$(($BUILD_NUMBER + 100))" --build-number=$(($BUILD_NUMBER + 100))


3

2
我在使用Codemagic时遇到了问题:起初,在Info.plist中Bundle Version为${CURRENT_PROJECT_VERSION},Bundle Version string (short)为${MARKETING_VERSION},但是这些行不起作用。 在Codemagic中放置这些行的位置
--build-name=2.0.$BUILD_NUMBER --build-number=$BUILD_NUMBER
--build-name=2.0.$PROJECT_BUILD_NUMBER --build-number=$PROJECT_BUILD_NUMBER

但是当我将${FLUTTER_BUILD_NUMBER}和${FLUTTER_BUILD_NAME}更改为Bundle Version和Bundle Version string(short)时,上述Codemagic中的行开始发挥作用。


更改为 ${FLUTTER_BUILD_NUMBER} 和 ${FLUTTER_BUILD_NAME} 作为 Bundle 版本和 Bundle 版本字符串 - 这个更改是在哪里进行的?info.plist 文件中吗? - BeniaminoBaggins
是的,info.plist。然而,对于我的FLUTTER_BUILD_NUMBER/NAME,我得到了未定义的结果。修复方法是检查项目>信息>配置文件中所有构建类型的配置文件,确保文件顶部有#include "Generated.xcconfig"。我的是自动生成的podsrunner.release-flavor文件,我找不到并检查它们,所以我为每个flavor创建了新的文件,然后添加了``#include "Generated.xcconfig",然后添加自动生成的文件(#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release-qa.xcconfig"`),最后添加我的特定flavor的环境变量。 - BeniaminoBaggins

1
在我的情况下,添加以下内容:

--build-name=1.0.0 --build-number=$(($BUILD_NUMBER + 100))

尽管在Android上有效,但这并没有影响我的iOS构建版本号。
对于iOS构建,它仍然使用我的xCode项目中的构建编号。
有效的方法是添加一个预构建脚本,在Codemagic的VM上增加构建版本号:
#!/bin/sh
cd ios
agvtool new-version -all $(($BUILD_NUMBER + 100))

基本上,您需要在ios文件夹中运行xCode的agvtool,使用Codemagic提供的版本号更新构建号码(我的情况是+100!)。

0
分享给那些想要从Git中获取标签名称并检查以获取主/次/补丁版本号的人。 预构建脚本 这将进入构建部分之前的预构建步骤。
Pre-build script
Run script before the build phase has started

#! /bin/bash
# https://jon.sprig.gs/blog/post/1175
# https://blog.codemagic.io/build-versioning-with-codemagic/

RE='[^0-9]*\([0-9]*\)[.]\([0-9]*\)[.]\([0-9]*\)\([0-9A-Za-z-]*\)'

base="$2"
if [ -z "$2" ]
then
  base=$(git tag 2>/dev/null| tail -n 1)
  if [ -z "$base" ]
  then
    base=0.0.0
  fi
fi

MAJOR=`echo $base | sed -e "s#$RE#\1#"`
MINOR=`echo $base | sed -e "s#$RE#\2#"`
PATCH=`echo $base | sed -e "s#$RE#\3#"`
BUILD_TOTAL=$(git rev-list HEAD --count)

GIT_BUILD_NUMBER=$BUILD_TOTAL
GIT_BUILD_TAG_VER="$MAJOR.$MINOR.$PATCH"
GIT_BUILD_VER_BUILD="$MAJOR.$MINOR.$PATCH+$BUILD_TOTAL"

# First Log the variables for the console. Then output them to the CM_ENV property so code magic can use
# them in the subsequent build steps.
echo "GIT_BUILD_TAG_VER=$GIT_BUILD_TAG_VER"
echo "GIT_BUILD_NUMBER=$GIT_BUILD_NUMBER"
echo "GIT_BUILD_VER_BUILD=$GIT_BUILD_VER_BUILD"

echo "input tag = $base"
echo "GIT_BUILD_TAG_VER=$GIT_BUILD_TAG_VER" >> $CM_ENV
echo "GIT_BUILD_NUMBER=$GIT_BUILD_NUMBER" >> $CM_ENV
echo "GIT_BUILD_VER_BUILD=$GIT_BUILD_VER_BUILD" >> $CM_ENV

echo "standard config is usual --build-name=1.0.\$BUILD_NUMBER --build-number=\$BUILD_NUMBER"
echo "config option A)  --build-name=\$GIT_BUILD_TAG_VER --build-number=\$GIT_BUILD_NUMBER"
echo "config option B)  --build-name=\$GIT_BUILD_VER_BUILD --build-number=\$GIT_BUILD_NUMBER"
echo "Option B may not be supported by Apple."
echo "Output in subsequent build step should look like  --build-name=$GIT_BUILD_TAG_VER --build-number=$GIT_BUILD_NUMBER"

# GIT_BUILD_TAG_VER=2.3.4
# GIT_BUILD_NUMBER=953
# GIT_BUILD_VER_BUILD=2.3.4+953
# input tag = v2.3.4-pre-release
# standard config is usual --build-name=1.0.$BUILD_NUMBER --build-number=$BUILD_NUMBER
# config option A)  --build-name=$GIT_BUILD_TAG_VER --build-number=$GIT_BUILD_NUMBER
# config option B)  --build-name=$GIT_BUILD_VER_BUILD --build-number=$GIT_BUILD_NUMBER
# Option B may not be supported by Apple.
# Output in subsequent build step should look like  --build-name=2.3.4 --build-number=953

构建步骤 然后在Android/iOS构建参数的构建部分中,您可以添加以下内容。

--flavor dev -t lib/main_dev.dart --build-name=$GIT_BUILD_TAG_VER --build-number=$GIT_BUILD_NUMBER

0

我的解决方案是在预构建脚本中手动设置 MARKETING_VERSION(版本号)和 BUILD_NUMBER_VERSION(动态生成)。

基本上,MARKETING_VERSION 代表您的 iOS 应用程序的特定版本号,例如 1.0.0,而 BUILD_NUMBER_VERSION 则代表相应 MARKETING_VERSION 版本的构建编号,如 1.0.0.20

我没有找到任何可以动态获取 App Store Connect 中实际 MARKETING_VERSION 的地方,因此我推断需要根据将要发布到 App Store 的版本手动设置版本号。

我将以下代码放入了我的预构建脚本中:

cd $FCI_BUILD_DIR/ios
agvtool new-marketing-version 1.0.0
agvtool new-version -all $(($BUILD_NUMBER))

请记住,MARKETING_VERSION 需要与 App Store Connect 中正在处理的版本相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接