iOS:如何在Xcode 11中自动升级我的CFBundleVersion和CFBundleShortVersionString?(我的旧脚本不再起作用)

5
我有一个脚本,可以按0.01的版本和1的构建号进行升级。它在Xcode 11上无法正常工作。
这是我的脚本:
```html

enter image description here

```
    #!/bin/bash
    rm -rf build

    Version=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE")
    Version=$(echo "scale=2; $Version + 0.01" | bc)

    Build=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
    Build=$($Build + 1)

    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $Build" 

    "$INFOPLIST_FILE"
        if [ "${CONFIGURATION}" = "Release" ]; then
        /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $Version" "$INFOPLIST_FILE"    
fi 

当我想在Xcode中构建或归档时,我现在遇到了以下错误信息:

详情

无法安装所请求的应用程序
领域:NSPOSIXErrorDomain 代码:22
失败原因:该应用程序的Info.plist文件不包含CFBundleShortVersionString。
恢复建议:确保您的捆绑包中包含CFBundleShortVersionString。
用户信息:{
bundleURL = "file:///Users/olosta/Library/Developer/Xcode/DerivedData/Formbox-cxaxehrhmxqaqabbijmxvasgmhwn/Build/Products/Debug-iphonesimulator/Formbox_Renault_BusinessDays.app/";
}

我查看了这个帖子,但对于脚本没有帮助。

如果我进入Xcode /常规/身份,我可以看到“版本”和“构建”在Xcode中已经填好,enter image description here 但是如果我手动打开info.plist检查,这两个值都是空的。

   <key>CFBundleVersion</key>               <string></string>    
   <key>CFBundleShortVersionString</key>    <string></string>

如果我直接在plist文件中手动填写,它能够工作,但似乎来自Xcode的值不再存储在这些字段中了?你觉得呢?


为什么不管 $CONFIGURATION 如何,都不设置 CFBundleVersionCFBundleShortVersionString 呢? - trojanfoe
@trojanfoe 因为我只想要版本升级与归档,而且每次编译、构建或者归档都需要构建。这部分功能可以正常工作,没有问题。 - ΩlostA
看起来你正在生成一个无效的 Info.plist。在归档时只需增加 Version,但始终要设置它。 - trojanfoe
1
我刚刚在这里发布了这个答案,希望它能有所帮助! - andrew54068
2个回答

5
您可以尝试以下方法:
versionNumber="$MARKETING_VERSION"
buildNumber="$CURRENT_PROJECT_VERSION"

来自这里


如果你的问题是重复的,那为什么要回答它呢? - trojanfoe
@dt dino 哦,很有趣,这就是为什么会出现问题的原因,他们在 info.plist 中更改了一些内容。我试图在脚本中获取它,但无法设置新的 CURRENT_PROJECT_VERSION... - ΩlostA

2

以下是完整的脚本。我已经在旧项目和新项目中尝试过了。

 #!/bin/bash
rm -rf build

Build=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
Version=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE")

if [ "${Build}" = "" ]; then
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion 1" "$INFOPLIST_FILE"   
else
Build=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
Build=$(echo "scale=0; $Build + 1" | bc)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $Build" "$INFOPLIST_FILE"
fi
if [ "${Version}" = "" ]; then
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString 1.00" "$INFOPLIST_FILE"
else
Version=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE")
Version=$(echo "scale=2; $Version + 0.01" | bc)
if [ "${CONFIGURATION}" = "Release" ]; then
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $Version" "$INFOPLIST_FILE"
fi
fi

编辑:
为了完成解决方案,我在plist中添加了这些键。我通过以下方式更改现有的值:

<key>CFBundleShortVersionString</key>
    <string>1.00</string>
    <key>CFBundleVersion</key>
    <string>1</string>

谢谢,它可以工作了。很奇怪,因为营销版本不再改变了,但是它能够正常运行。非常奇怪。我会看看现在苹果是否有容忍度,也许以后他们不允许这样做,我可能会找到升级“营销版本”的方法…… - ΩlostA
对我来说,在我的plist文件中添加CFBundleShortVersionString是解决方案,感谢您在这个问题上的帮助。 - Eman

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