CFBundleShortVersionString必须是大多数三个非负整数的以句点分隔的列表

时间:2015-10-22 17:30:52

标签: ios xcode xcode7

将我的应用提交到应用商店时,我收到此错误:

enter image description here

以下是我的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>

enter image description here

当我提交应用时,您可以清楚地看到没有版本1.0.0.pre

enter image description here

我也使用CocoaPods。

如何解决此问题?

更新:以下是我在项目路径上尝试的内容: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 **

4 个答案:

答案 0 :(得分:7)

查找版本号

由于您没有在项目中看到字符串,因此可能存在与您的项目相关联的包,框架或库。从项目的最顶层目录开始,除了find之外,您还可以使用grep查找罪魁祸首:

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>

如果返回结果,那么您将找到“错误ITMS-90096此捆绑包无效。键CFBundleVersionShortString的值... ”的原因。如果返回的结果是在上面第一个结果(例如Binary file)或另一个包/库中显示的框架内,那么您将需要更改其定义项目中的值(前提是它只是一个错误)版本号)。您还可以创建一个清理脚本,以便在代码签名之前替换构建时的值。

1.0.0.pre

这里更重要的是为什么你的应用被拒绝以及1.0.0.pre版本是专门创建的。使用有目的地使您的应用程序被拒绝的版本标记意味着阻止您在生产应用程序中使用预发行代码 - 它是设计。创建该特定pod,bundle,framework,library的人告诉你:

  

“请勿在您计划部署到公众的应用中使用此预发布代码”。

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

多个Info.plists

框架,广告连播和捆绑包都有自己的.plist和版本号。它们不会“覆盖”您的主要应用程序版本号,而只是拥有自己的(其中一个显然无效)。

答案 1 :(得分:5)

检查1:

您可能想要搜索&#34;版本&#34;在构建设置中。如果出现奇怪的情况,我通常会使用这个&#34;查看&#34;:

  1. 转到构建设置。
  2. 在&#34; Basic All&#34;的左侧。选择&#34;全部&#34;
  3. 在&#34; Combined Level&#34;的左侧。选择&#34;等级&#34;
  4. 在搜索框中输入&#34;版本&#34;并按返回/输入
  5. 在我的MacOSX测试项目中,它看起来像这样:

    Version settings

    请注意,有一个名为&#34;版本名称后缀&#34;的条目。我不确定,这是否存在于iOS项目中(稍后会测试)。在任何情况下,您都可以查看&#34;轻松&#34;涉及&#34;版本&#34;。

    检查2:

    或者你可以grep项目文件:

    grep pre MyProject.xcodeproj/project.pbxproj
    

    检查3:

    打开终端并在项目目录中调用:

    xcodebuild clean
    xcodebuild > build.log
    

    cocoapods可能是这样的:

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

    build.log中搜索&#34; ProcessInfoPlistFile&#34;。在我的情况下,它看起来像这样:(手动包装 - 实际项目名称已更改)

    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档案,了解&#34; 1.0.0.pre&#34;实际上是找到了。对于那个开放的&#34; Window&gt;管理器&#34;,选择您的应用并按&#34;导出...&#34;。选择&#34;保存iOS App Store部署&#34;。结果将是.ipa文件。将其重命名为PRJ.ipa.zip - 然后您可以将其解压缩。查找.plist文件并检查其内容。

答案 2 :(得分:0)

您的第三方pod之一的版本号为“1.0.0.pre”。似乎错误与它有关。错误并没有说哪个plist,也许你的构建有多个。例如,有问题的pod就会自行创建一个包。

答案 3 :(得分:0)

很可能是与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_plist变量中的路径,使其与应用的.plist文件的路径相匹配。

3)之后运行pod install

此脚本会更改所有Cocoapods框架&#39;版本号与应用程序的plist相匹配,这是自2015年10月21日起必需的。