如何强制 Flutter 更新我的版本和内部版本号?

Posted

技术标签:

【中文标题】如何强制 Flutter 更新我的版本和内部版本号?【英文标题】:How to force Flutter to update my version and build number? 【发布时间】:2020-09-07 09:29:39 【问题描述】:
    我已将 pubspec.yaml 中的版本更改为 1.0.1+1(从 1.0.0+3) flutter clean flutter build ios 当我打开 [project]/ios/Runner.xcworkspace 时,它​​仍然显示 1.0.0 版本。

我做错了什么?如何强制 Xcode 从 CLI 或 pubspec.yaml 更新我的版本?

这就是我的 Info.plist 的样子:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>$(DEVELOPMENT_LANGUAGE)</string>
    <key>CFBundleDisplayName</key>
    <string>Name</string>
    <key>CFBundleExecutable</key>
    <string>$(EXECUTABLE_NAME)</string>
    <key>CFBundleIdentifier</key>
    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>Sundee</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>$(MARKETING_VERSION)</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleVersion</key>
    <string>$(CURRENT_PROJECT_VERSION)</string>
    <key>LSRequiresIPhoneOS</key>
    <true/>
    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>Your location will be used to determine sun angle.</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>Your location will be used to determine sun angle.</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>Your location will be used to determine sun angle.</string>
    <key>UILaunchStoryboardName</key>
    <string>LaunchScreen</string>
    <key>UIMainStoryboardFile</key>
    <string>Main</string>
    <key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
    <key>UISupportedInterfaceOrientations~ipad</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationPortraitUpsideDown</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
    <key>UIViewControllerBasedStatusBarAppearance</key>
    <false/>
</dict>
</plist>

【问题讨论】:

【参考方案1】:

我明白了。这是因为我在 Info.plist 中的行看起来不像这样:

    <key>CFBundleShortVersionString</key
    <string>$(FLUTTER_BUILD_NAME)</string> 
    <key>CFBundleVersion</key> 
    <string>$(FLUTTER_BUILD_NUMBER)</string>

有人知道为什么我有$(MARKETING_VERSION)$(CURRENT_PROJECT_VERSION)吗?

【讨论】:

谢谢,我也想知道。我使用颤振创建项目,但一开始我使用的是旧版本的颤振 cli。这可能是问题所在。但是,还有另一个问题是,当我更新 pubspec.yml 并运行包获取时,它不会增加构建版本。有什么想法吗? 不知道。我知道 Xcode 可以自动增加内部版本号,但不知道 Flutter 也能做到这一点。 实际上他们似乎不打算允许内部版本号的自动增加:github.com/flutter/flutter/issues/41955【参考方案2】:

同样的事情发生在我身上。

我认为当我使用xcode接口时他更改了文件ios/Runner.xcodeproj/project.pbxproj并且他没有自动获取值

我是这样解决的。

改变这个:

CURRENT_PROJECT_VERSION = your buildnumber MARKETING_VERSION = your version

到:

CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";MARKETING_VERSION = "$(FLUTTER_BUILD_NAME)";

这出现了 3 次

【讨论】:

【参考方案3】:

你还需要获取包。

CFBundleShortVersionString 是版本的公共“名称”(例如:“2.5”或“3.8.1”)。您必须在每次发布时增加它。

CFBundleVersion 是私有内部版本号。在 AppStore 上看不到它。您必须在每次上传时增加它。这意味着如果你在一个二进制文件上线之前拒绝它,并且你想上传一个新的二进制文件,它将具有相同的

CFBundleShortVersionString 但必须有更高的 CFBundleVersion(例如:public “2.5”、private “2.5”,然后二进制拒绝,然后重新上传 private “2.5.1”)

【讨论】:

以上是关于如何强制 Flutter 更新我的版本和内部版本号?的主要内容,如果未能解决你的问题,请参考以下文章

为 Flutter 应用程序维护不同的版本和内部版本号

如何使用 in_app_update 强制用户从 Flutter 中的 Play 商店更新应用

Swift 5 中未更新应用程序版本和内部版本号

apk如何去除强制更新

iTunes Connect 内部版本号重置

强制 Azure Fabric 使用更新的版本号更新服务