簡體   English   中英

使用 CodeMagic 部署時如何增加 Flutter IOS 應用程序的內部版本號

[英]How to increment build number of Flutter IOS app when deploying with CodeMagic

當我使用 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 時,它都不應該增加。

這現在有效,我寫信給 Codemagic.io。 這是回應:

我們提供 $BUILD_NUMBER 變量以將其用於版本控制。 例如,您可以使用構建參數,如--build-name="1.0.$(($BUILD_NUMBER + 100))" --build-number=$(($BUILD_NUMBER + 100))

從 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 中的構建數量是針對每個工作流程單獨計算的。

有更多選項可以使用 $BUILD_NUMBER 變量進行構建版本控制。 您可以在 Codemagic 文檔中找到一些示例: https ://docs.codemagic.io/building/build-versioning/

就我而言,添加:

--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文件夾中運行agvtoolagvtool ,以使用 Codemagic 提供的版本號更新內部版本號(在我的情況下為 +100!)。

我的解決方案是在預構建腳本中設置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 中正在處理的版本相同。

我遇到了 Codemagic 的下一個問題:在 Info.plist 的開頭是 ${CURRENT_PROJECT_VERSION} 表示捆綁版本和 ${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} 之后,Codemagic 上面的行開始發揮作用,它們開始工作。

與那些希望從 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 build arguments。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM