捆绑包的 Info.plist 不包含 CFBundleVersion 键或其值不是字符串

问题描述 投票:0回答:17

Xcode 正在构建项目,当构建成功时,我收到此消息“捆绑包的 Info.plist 不包含 CFBundleVersion 键或其值不是字符串”。那什么意识。这是我的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></key>
    <string></string>
    <key>Additional_Version_String</key>
    <string>Updated on build</string>
    <key>CFBundleDevelopmentRegion</key>
    <string>en</string>
    <key>CFBundleDisplayName</key>
    <string>${PRODUCT_NAME}</string>
    <key>CFBundleExecutable</key>
    <string>${EXECUTABLE_NAME}</string>
    <key>CFBundleIcons</key>
    <dict/>
    <key>CFBundleIcons~ipad</key>
    <dict/>
    <key>CFBundleIdentifier</key>
    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>${PRODUCT_NAME}</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>
    <key>CFBundleVersion</key>
    <string>1</string>
    <key>Commit_Short_Hash</key>
    <string>Updated on build</string>
    <key>ITSAppUsesNonExemptEncryption</key>
    <false/>
    <key>LSRequiresIPhoneOS</key>
    <true/>
    <key>NSContactsUsageDescription</key>
    <string>Vialer needs access to your contacts to make calling to your contacts possible</string>
    <key>NSMicrophoneUsageDescription</key>
    <string>Vialer needs access to your microphone to make calling possible</string>
    <key>UIBackgroundModes</key>
    <array>
        <string>audio</string>
        <string>fetch</string>
        <string>remote-notification</string>
        <string>voip</string>
    </array>
    <key>UIMainStoryboardFile</key>
    <string>MainStoryboard</string>
    <key>UIRequiredDeviceCapabilities</key>
    <array>
        <string>armv7</string>
    </array>
    <key>UIRequiresPersistentWiFi</key>
    <true/>
    <key>UIStatusBarStyle</key>
    <string>UIStatusBarStyleBlackTranslucent</string>
    <key>UIStatusBarTintParameters</key>
    <dict>
        <key>UINavigationBar</key>
        <dict>
            <key>Style</key>
            <string>UIBarStyleDefault</string>
            <key>Translucent</key>
            <true/>
        </dict>
    </dict>
    <key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
    </array>
    <key>UIViewControllerBasedStatusBarAppearance</key>
    <true/>
</dict>
</plist>
ios xcode build compiler-errors
17个回答
98
投票

我对 CFBuildVersion 有同样的问题,并且我发现在我的项目 Target 中没有插入构建版本。

所以我刚刚插入了构建版本并解决了问题。


17
投票

我遵循了各地的解决方案,这些是我最终采取的对我有用的步骤:

解决方案:

  1. 打开终端并修复任何相关问题
    flutter doctor
    显示:

  1. 奔跑
    flutter clean

  1. 从 ios 项目中删除 Podfile、Podfile.lock 和 Pods 目录

  1. 在 Xcode 中打开
    Runner.xcworkspace
    项目

  1. 按照 @Hardik Vyas 提到的方式更新内部版本号

  1. 正如 @iDevOrz 提到的,从模拟器中删除所有内容和设置

  1. 在 Xcode 中清理、构建并运行应用程序

11
投票

我也有同样的问题。

我通过模拟器菜单 -> 硬件 -> 删除所有内容和设置来修复它。

也许这是一个模拟器错误。


11
投票

Xcode 12.5 - 这可能是一个与 plist 无关的错误

我有 Big Sur 和 Xcode 12.5(非测试版),并且创建了一个新的 SwiftUI 项目。 为了节省时间,我在项目导航器中拖动了一个包含一堆

json
文件的文件夹。该文件夹被命名为“资源”,但我希望这不是问题。

在拖动项目编译的文件夹之前。有了新文件夹后,它将不再编译,并会给出如下错误。我发现的最奇怪的错误。

解决方案,我将文件一一添加,然后创建封闭文件夹,然后就可以了。而且它是可重现的!我今天花了30分钟在这上面。幸运的是,它处于项目的最开始阶段,可以比较并查看何时停止编译..


11
投票

只需添加版本和内部版本号


6
投票

我的解决方法是向目标添加内部版本号。 单击您的目标,转到“常规”,然后在“身份”下方是“构建”字段。


3
投票

如果您在 Flutter 中遇到此问题,可以通过以下方式解决:

删除 Flutter 项目中的 ios 文件夹,然后运行:

flutter create .

这将再次重新生成 iOS 项目文件,然后运行。

flutter run

2
投票

我对 CFBuildVersion 有同样的问题。我注意到我的 Target 没有构建版本。

所以我填写了版本和构建,这解决了我的问题。


1
投票

您可以使用 agvtool 来修复这些错误:https://developer.apple.com/library/archive/qa/qa1827/_index.html

因此,要解决 CFBundleVersion 问题,请打开终端,转到项目根目录(iOS 项目),然后键入以下命令:

agvtool new-version -all 2.6.9

然后按回车键。


1
投票

我刚刚添加了此键

CFBundleVersion
并从上面的键复制了值,如 .plist 中所示(请参阅左侧的项目导航器):


1
投票

我只是编辑项目的“.plist”文件并添加了具有某些值的

CFBundleShortVersionString
条目。


1
投票

在您的 .plist 中,检查您是否有此密钥。 捆绑版本字符串(短)


1
投票

在我的例子中 info.plist,我已将

Bundle version string (short)
Bundle version
的值更改为一些用户定义的值。

示例如下:

Bundle version string (short) : $(APP_VERSION)
Bundle version : $(BUILD_NO)

$(APP_VERSION) 和 $(BUILD_NO) 未定义

所以我将它们更改为默认值,如下

效果很好。


0
投票

只需将构建版本插入到您的项目中


0
投票

以代码模式添加到 info.plist 对我有用

<plist version="1.0">
<string>1.0</string>
</plist>

0
投票

就我而言,我的 info.plist 通过 VSCODE 中的 xml 格式化程序进行格式化。格式化的 xml 文档是有效的 xml 文档,但不知何故,Xcode 不接受它。

例如格式化的 xml :

<key>
     CFBundleDisplayName
</key>
<string>
     MyApp
</string>

但是 Xcode 接受的 xml :

<key>CFBundleDisplayName</key>
<string>MyApp</string>

-1
投票

对我来说,它崩溃是因为缺少正确链接的 SDK,但我忘记将其嵌入到应用程序中。应用程序通常应该崩溃并显示

dyld: not loaded ...
,但相反,它显示了这个完全不相关的 Info.plist 问题。 🤯

也就是说,我想说这是苹果方面的一个错误,几乎所有阻止应用程序启动的东西都会产生这个错误。

Xcode 14.2,原生 M1 模式。

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.