CFBundleShortVersionString必须是由三个非负整数组成的句点分隔列表

提交我的应用程序到应用程序商店时,我得到这个错误:

在这里输入图像说明

以下是我的info.plist文件中的相关部分:

<key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleName</key> <string>$(PRODUCT_NAME)</string> <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> <string>1.0.0</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> <string>1.0.0</string> 

在这里输入图像说明

当我提交的应用程序,你可以清楚地看到,没有版本1.0.0.pre

在这里输入图像说明

我也使用CocoaPods。

我如何解决这个问题?

更新:这是我在我的项目path尝试: find . -name "*.plist" -exec grep -o -A 1 "CFBundleShortVersionString" {} \; find . -name "*.plist" -exec grep -o -A 1 "CFBundleShortVersionString" {} \; 这是结果:

 CFBundleShortVersionString <string>1.0.6</string> CFBundleShortVersionString <string>1.0</string> CFBundleShortVersionString <string>3.3.4</string> CFBundleShortVersionString <string>1.5.5</string> CFBundleShortVersionString <string>2.0.2</string> CFBundleShortVersionString <string>0.7.0</string> CFBundleShortVersionString <string>0.0.9</string> CFBundleShortVersionString <string>1.2.2</string> CFBundleShortVersionString <string>1.6.0</string> CFBundleShortVersionString <string>1.7.2</string> CFBundleShortVersionString <string>2.0.0</string> CFBundleShortVersionString <string>1.3.2</string> CFBundleShortVersionString <string>1.4.1</string> CFBundleShortVersionString <string>1.0</string> CFBundleShortVersionString <string>0.9.1</string> CFBundleShortVersionString <string>0.2.3</string> CFBundleShortVersionString <string>1.0.0</string> CFBundleShortVersionString <string>3.7.3</string> CFBundleShortVersionString <string>0.15.0</string> CFBundleShortVersionString <string>1.0.0.pre</string> CFBundleShortVersionString <string>2.3.0</string> CFBundleShortVersionString <string>2.0.0</string> CFBundleShortVersionString <string>1.2</string> CFBundleShortVersionString <string>3.0.2</string> 

更新2:做: xcodebuild > build.log我得到以下错误:

 2015-10-25 22:02:52.653 xcodebuild[6273:1043943] [MT] PluginLoading: Required plug-in compatibility UUID 7265231C-39B4-402C-89E1-16167C4CC990 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/VVDocumenter-Xcode.xcplugin' not present in DVTPlugInCompatibilityUUIDs ** BUILD FAILED ** 

检查1:

您可能需要在构build设置中search“版本”。 在奇怪的情况下,我通常使用这个“视图”:

  1. 转到生成设置。
  2. 在“全部基本”的左侧select“全部”
  3. 在“组合等级”的左边select“等级”
  4. 在search框中键入“版本”,然后按回车键

在我的MacOSXtesting项目中,它看起来像这样:

版本设置

请注意,有一个名为“版本名称后缀”的条目。 我不确定这是否存在于iOS项目中(稍后会testing)。 在任何情况下,您都可以查看“容易”与“版本”相关的设置。

检查2:

或者你可以grep项目文件:

 grep pre MyProject.xcodeproj/project.pbxproj 

检查3:

打开一个terminal并在项目目录下调用:

 xcodebuild clean xcodebuild > build.log 

与椰子树可能是这样的:

 xcodebuild -workspace PRJ.xcworkspace -scheme PRJ clean xcodebuild -workspace PRJ.xcworkspace -scheme PRJ > build.log 

build.logsearch“ProcessInfoPlistFile”。 在我的情况下,它看起来像这样:(手动包装 – 实际项目名称已更改)

 ProcessInfoPlistFile build/Release-iphoneos/PRJ.app/Info.plist PRJ/Info.plist cd /Users/fsc/prj/PRJ export PATH="/Applications/Xcode.app/..." builtin-infoPlistUtility /Users/fsc/prj/PRJ/PRJ/Info.plist -genpkginfo /Users/fsc/prj/PRJ/build/Release-iphoneos/PRJ.app/PkgInfo -expandbuildsettings -format binary -platform iphoneos -additionalcontentfile /Users/fsc/prj/PRJ/build/PRJ.build/Release-iphoneos/PRJ.build/Main-SBPartialInfo.plist -additionalcontentfile /Users/fsc/prj/PRJ/build/PRJ.build/Release-iphoneos/PRJ.build/LaunchScreen-PartialInfo.plist -additionalcontentfile /Users/fsc/prj/PRJ/build/PRJ.build/Release-iphoneos/PRJ.build/assetcatalog_generated_info.plist -o /Users/fsc/prj/PRJ/build/Release-iphoneos/PRJ.app/Info.plist 

请注意-additionalcontentfile 。 请检查列出哪些附加文件并检查这些文件。

检查4:

查看IPA存档以查看“1.0.0.pre”实际发现的位置。 对于打开“窗口>组织者”,select你的应用程序,然后按“导出…”。 select“保存iOSapp store部署”。 结果将是一个.ipa文件。 重命名为PRJ.ipa.zip – 然后你可以解压缩它。 查找.plist文件并检查其内容。

查找版本号

既然你没有看到你的项目中的string,可能有一个捆绑,框架或库与你的项目是负责任的。 从项目中最顶层的目录中,除了grep之外,还可以使用find来寻找罪魁祸首:

 find . -name "*.plist" -exec grep -iq "CFBundleShortVersionString" {} \; \ -exec grep -Him 1 "1.0.0.pre" {} \; 

这可能会返回可能类似于以下内容的结果:

 Binary file ./FooProject/Foo.framework/Info.plist matches ./FooProject/Resources/Info.plist- <string>1.0.0.pre</string> 

在事件结果被返回的情况下,您将find“ ERROR ITMS-90096此捆绑包无效的原因.CFBundleVersionShortString …的值 。 如果返回的结果在上面的第一个结果(如Binary file )或另一个bundle / library中显示的框架内,那么您将需要更改定义项目中的值(假设它只是版本号中的一个错误) 。 您也可以在代码签名之前创build一个清理脚本来replace构build时的值。

1.0.0.pre

这里更重要的是为什么你的应用程序被拒绝, 1.0.0.pre版本是专门为什么创build的。 使用有目的地使您的应用程序被拒绝的版本标记是为了防止您在生产应用程序中使用预发布代码 – 这是devise 。 创build特定Pod,包,框架,库的人告诉你:

“不要在您计划部署给公众的应用程序中使用此预发布代码”。

我build议不要只是简单地改变项目.plist的版本号,以便您的应用程序成功提交 – 而是检查生产的稳定版本。

多个Info.plists

框架,豆荚和捆绑包都有自己的.plist和版本号。 他们并不是“覆盖”你的主要应用程序版本号,而只是有自己的(其中一个显然是无效的)。

您的第三方吊舱的版本号为“1.0.0.pre”。 似乎与它有关的错误。 错误不是说哪个plist,也许你的构build不止一个。 例如,所讨论的Pod自己创build一个捆绑包。

这很可能是一个CocoaPods相关的问题,不要手动更改您的框架中的info.plist ,请执行以下步骤:

1)将此脚本添加到Podfile的末尾。

 post_install do |installer| app_plist = "MyApp/Info.plist" plist_buddy = "/usr/libexec/PlistBuddy" version = `#{plist_buddy} -c "Print CFBundleShortVersionString" #{app_plist}` version = `echo "#{version}" | tr -d '\n'` puts "Updating CocoaPods frameworks' version numbers to #{version}" installer.pods_project.targets.each do |target| `#{plist_buddy} -c "Set CFBundleShortVersionString #{version}" "Pods/Target Support Files/#{target}/Info.plist"` end end 

2)更新app_plistvariables中的path,使其与您应用的.plist文件的path匹配。

3)之后运行pod install

这个脚本改变了所有Cocoapods框架的版本号,以匹配应用程序的plist,这是2015年10月21日之前的必需。