9

当我使用 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 时增加。

4

6 回答 6

5

从 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)

在此处添加:

在此处输入图像描述

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

于 2019-09-11T00:40:40.593 回答
4

现在可以了,我写信给 Codemagic.io。这是回应:

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

于 2019-03-27T17:09:12.117 回答
2

有更多选项可以使用 $BUILD_NUMBER 变量进行构建版本控制。您可以在 Codemagic 文档中找到一些示例:https ://docs.codemagic.io/building/build-versioning/

于 2019-06-20T15:07:16.993 回答
1

就我而言,添加:

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

不影响我的 iOS 版本的版本号,尽管它适用于 Android。

对于 iOS 版本,它仍然使用我的 xCode 项目中的版本号。

有效的是添加一个预构建脚本,该脚本将在 Codemagic 的 VM 上提升构建版本:

#!/bin/sh
cd ios
agvtool new-version -all $(($BUILD_NUMBER + 100))

基本上,您将agvtoolios文件夹中运行 xCode's 以使用 Codemagic 提供的版本号更新内部版本号(在我的情况下为 +100!)。

于 2020-07-06T04:56:04.957 回答
0

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

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

我在任何地方都没有找到如何MARKETING_VERSION在 App Store Connect 中动态捕捉实际情况,因此我推断我需要根据正在发布到 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 中正在处理的版本相同。

于 2020-12-23T18:59:39.807 回答
0

我遇到了 Codemagic 的下一个问题:在 Info.plist 的开头是 ${CURRENT_PROJECT_VERSION} 用于 Bundle Version 和 ${MARKETING_VERSION} 用于 Bundle Version 字符串(短),上面的这些行不起作用

在 Codemagic 中放置这些行的地方

--build-name=2.0.$BUILD_NUMBER --build-number=$BUILD_NUMBER
--build-name=2.0.$PROJECT_BUILD_NUMBER --build-number=$PROJECT_BUILD_NUMBER

但是,当我在 Codemagic 上面的 Bundle Version 和 Bundle Version 字符串(短)行分别更改为 ${FLUTTER_BUILD_NUMBER} 和 ${FLUTTER_BUILD_NAME} 之后,它们开始发挥作用。

于 2021-09-01T04:26:55.593 回答