Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios CbundleShortVersionString必须是由最多三个非负整数组成的以句点分隔的列表_Ios_Xcode_Xcode7 - Fatal编程技术网

Ios CbundleShortVersionString必须是由最多三个非负整数组成的以句点分隔的列表

Ios CbundleShortVersionString必须是由最多三个非负整数组成的以句点分隔的列表,ios,xcode,xcode7,Ios,Xcode,Xcode7,将我的应用提交到应用商店时,我收到以下错误: 以下是my info.plist文件中的相关部分: <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleName</key> <string>$(PRODUCT_NAME)</string> <key>CF

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

以下是my 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>
更新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:

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

  • 转到“生成设置”
  • 在“基本全部”的左侧,选择“全部”
  • 在“组合标高”的左侧,选择“标高”
  • 在搜索框中键入“版本”,然后按return/enter
  • 在我的MacOSX测试项目中,它如下所示:

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

    勾选2:

    或者,您可以grep项目文件:

    grep pre MyProject.xcodeproj/project.pbxproj
    
    勾选3:

    打开一个终端,在项目目录中调用:

    xcodebuild clean
    xcodebuild > build.log
    
    椰荚类动物可能是:

    xcodebuild -workspace PRJ.xcworkspace -scheme PRJ clean
    xcodebuild -workspace PRJ.xcworkspace -scheme PRJ > build.log
    
    build.log
    中搜索“ProcessInfoPlistFile”。在我的例子中,它看起来是这样的:(手动包装-实际项目名称已更改)

    注意
    -additionalcontentfile
    。请检查列出的其他文件,并检查这些文件

    勾选4:


    查看IPA档案,查看“1.0.0.pre”的实际位置。对于打开的“窗口>管理器”,选择您的应用程序并按“导出…”。选择“为iOS应用商店部署保存”。结果将是一个
    .ipa
    文件。将其重命名为
    PRJ.ipa.zip
    ——然后您可以将其解压缩。查找.plist文件并检查其内容。

    您的一个第三方pod的版本号为“1.0.0.pre”。似乎错误与此有关。错误没有说明哪个plist,可能您的构建有多个plist。例如,有问题的pod会自己创建一个包。

    查找版本号 由于您在项目中看不到字符串,因此可能存在与您的项目相关联的捆绑包、框架或库。在项目的最顶层目录中,除了使用
    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>
    
    二进制文件。/FooProject/Foo.framework/Info.plist匹配
    ./FooProject/Resources/Info.plist-1.0.0.pre
    
    如果返回结果,则您将找到“错误ITMS-90096此捆绑包无效。键CbundLeverOnShortString的值…”的原因。如果返回的结果在上面第一个结果(例如,
    二进制文件
    )所示的框架内,或者在另一个bundle/库内,则需要在其定义的项目内更改值(前提是版本号中存在错误)。您还可以创建一个清理脚本,以在代码签名之前的构建时替换该值

    1.0.0.pre 但这里更重要的是为什么你的应用被拒绝,以及
    1.0.0.pre
    版本是专门用来做什么的。使用版本标签故意让你的应用程序被拒绝是为了防止你在生产应用程序中使用预发布代码——这是出于设计。创建特定pod、捆绑包、框架和库的人员告诉您:

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

    我建议不要只是简单地更改items
    .plist
    的版本号,这样你的应用程序就可以成功提交,而应该检查是否有一个稳定的发布版本供生产使用

    多个Info.PLIST
    框架、pod和bundle都有自己的
    .plist
    和版本号。它们不是“覆盖”您的主要应用程序版本号,而是有自己的版本号(其中一个显然无效)。

    这很可能是CocoaPods相关的问题,不要手动更改框架中的
    信息。plist
    ,请执行以下步骤:

    1) 将此脚本添加到播客文件的末尾

    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安装


    此脚本将更改所有Cocoapods框架的版本号,以匹配应用程序的plist,这是2015年10月21日所需的。

    在plist文件中搜索.pre并确保它不在那里。如果不存在,请清理项目和构建文件夹,然后再次提交。哈哈哈,你不认为我这样做了吗?重新启动Xcode并重试?您还检查了Xcode为ShortVersionString提供了什么吗?检查您的应用程序使用的任何第三方捆绑包、库或框架
    *.plist
    ;这通常是错误版本导致问题的原因。(例如,
    find.-name“*.plist”-exec grep-o-A 1“CbundleShortVersionString”{}\
    )@confile我可以在那里看到
    1.0.0.pre
    。我检查了所有这些,但仍然没有1.0.0.pre。我还试过grep,但什么也没找到。@confile我又想了想,还记得命令行构建。你能看一下我更新答案中的“检查3”吗?请记住,如果这改变了什么,我会使用CoCoapod?@confile谢谢你的提示。我尝试使用cocoapods处理一个项目并更新了我的答案。为什么pod的info.plst会覆盖我的项目info.plst?为什么pod的info.plst会覆盖我的项目info.plst?存在,而不是覆盖。版本号规则适用于一般情况,而不仅仅适用于二进制文件。感谢您提供了这个优雅的解决方案。这是找出所指框架Xcode错误的最简单方法。苹果必须对我们隐瞒一切,这样我们才能通过研究它的错误信息变得更好
    Binary file ./FooProject/Foo.framework/Info.plist matches
    ./FooProject/Resources/Info.plist-  <string>1.0.0.pre</string>
    
    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