Xcode 5.1 + 资产目录 + 存档 = AppIcon 无效图像路径

Posted

技术标签:

【中文标题】Xcode 5.1 + 资产目录 + 存档 = AppIcon 无效图像路径【英文标题】:Xcode 5.1 + Asset Catalog + Archive = AppIcon Invalid Image Path 【发布时间】:2014-03-24 00:29:36 【问题描述】:

在尝试验证我的存档应用程序时,我已经阅读了很多关于“无效图像路径”验证失败的消息。我的问题是,我已经在使用资产目录,但由于某种原因,它现在无法识别 AppIcon 图像集。

这是我在 Xcode 5 中的资产目录的屏幕截图:

这是我当前的目标设置,如果我单击 AppIcon 的小右箭头,它会将我带到正确的图像:

这是我在验证最近创建的存档后遇到的错误:

存档也没有图标:

这是我的 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>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<string>$PRODUCT_NAME</string>
<key>CFBundleExecutable</key>
<string>$EXECUTABLE_NAME</string>
<key>CFBundleIcons</key>
<dict>
    <key>UINewsstandIcon</key>
    <dict>
        <key>CFBundleIconFiles</key>
        <array>
            <string>newsstand-app-icon</string>
        </array>
        <key>UINewsstandBindingEdge</key>
        <string>UINewsstandBindingEdgeLeft</string>
        <key>UINewsstandBindingType</key>
        <string>UINewsstandBindingTypeMagazine</string>
    </dict>
</dict>
<key>CFBundleIcons~ipad</key>
<dict>
    <key>UINewsstandIcon</key>
    <dict>
        <key>CFBundleIconFiles</key>
        <array>
            <string>newsstand-app-icon</string>
        </array>
        <key>UINewsstandBindingEdge</key>
        <string>UINewsstandBindingEdgeLeft</string>
        <key>UINewsstandBindingType</key>
        <string>UINewsstandBindingTypeMagazine</string>
    </dict>
</dict>
<key>CFBundleIdentifier</key>
<string>com.magloft.magazine</string>
<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.1</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UIBackgroundModes</key>
<array>
    <string>newsstand-content</string>
    <string>remote-notification</string>
</array>
<key>UINewsstandApp</key>
<true/>
<key>UIRequiredDeviceCapabilities</key>
<array>
    <string>armv7</string>
</array>
<key>UIStatusBarHidden</key>
<false/>
<key>UIStatusBarHidden~ipad</key>
<false/>
<key>UISupportedInterfaceOrientations</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
    <string>UIInterfaceOrientationLandscapeLeft</string>
    <string>UIInterfaceOrientationLandscapeRight</string>
    <string>UIInterfaceOrientationPortraitUpsideDown</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
    <string>UIInterfaceOrientationPortraitUpsideDown</string>
    <string>UIInterfaceOrientationLandscapeLeft</string>
    <string>UIInterfaceOrientationLandscapeRight</string>
</array>

这里是 AppIcon 图标集的 Contents.json 文件的内容:


  "images" : [

  "size" : "29x29",
  "idiom" : "iphone",
  "filename" : "iphone-29x29.png",
  "scale" : "1x"
,

  "size" : "29x29",
  "idiom" : "iphone",
  "filename" : "iphone-29x29@2x.png",
  "scale" : "2x"
,

  "size" : "40x40",
  "idiom" : "iphone",
  "filename" : "iphone-40x40@2x.png",
  "scale" : "2x"
,

  "size" : "57x57",
  "idiom" : "iphone",
  "filename" : "iphone-57x57.png",
  "scale" : "1x"
,

  "size" : "57x57",
  "idiom" : "iphone",
  "filename" : "iphone-57x57@2x.png",
  "scale" : "2x"
,

  "size" : "60x60",
  "idiom" : "iphone",
  "filename" : "iphone-60x60@2x.png",
  "scale" : "2x"
,

  "size" : "29x29",
  "idiom" : "ipad",
  "filename" : "ipad-29x29.png",
  "scale" : "1x"
,

  "size" : "29x29",
  "idiom" : "ipad",
  "filename" : "ipad-29x29@2x.png",
  "scale" : "2x"
,

  "size" : "40x40",
  "idiom" : "ipad",
  "filename" : "ipad-40x40.png",
  "scale" : "1x"
,

  "size" : "40x40",
  "idiom" : "ipad",
  "filename" : "ipad-40x40@2x.png",
  "scale" : "2x"
,

  "size" : "50x50",
  "idiom" : "ipad",
  "filename" : "ipad-50x50.png",
  "scale" : "1x"
,

  "size" : "50x50",
  "idiom" : "ipad",
  "filename" : "ipad-50x50@2x.png",
  "scale" : "2x"
,

  "size" : "72x72",
  "idiom" : "ipad",
  "filename" : "ipad-72x72.png",
  "scale" : "1x"
,

  "size" : "72x72",
  "idiom" : "ipad",
  "filename" : "ipad-72x72@2x.png",
  "scale" : "2x"
,

  "size" : "76x76",
  "idiom" : "ipad",
  "filename" : "ipad-76x76.png",
  "scale" : "1x"
,

  "size" : "76x76",
  "idiom" : "ipad",
  "filename" : "ipad-76x76@2x.png",
  "scale" : "2x"

  ],
  "info" : 
"version" : 1,
"author" : "xcode"
  ,
  "properties" : 
"pre-rendered" : true
  

我尝试了以下方法但没有成功:

1) 删除 AppIcon 图像集并通过在 Xcode 中添加它并将图像拖动到所有占位符来从头开始创建一个新图像集。 2) 从 info.plist 中删除 CFBundleIcons 3) 从 info.plist 中删除了 CFBundleIcons~ipad (我添加了这个,因为我的应用程序不会在货架上显示 ios 7+ 中的默认报亭图标,这修复了它。 4)从上面删除了两个键,但仍然出现错误,包括缺少键/值表单报摊图标绑定类型。 5) 尝试针对 iOS 7.0 而不是 iOS 6.0。

我不知道为什么会突然发生这种情况。我在想可能是因为我将 Xcode 更新到了 5.1 版(5B130a)?我正在运行我认为最新的 OSX 10.9.2。

我确实找到了这个Invalid Image Path - No image found at the path. CFBundleIcons Xcode 5,这听起来很像我的情况。我已确保实际资产目录是目标的一部分(见第一个屏幕截图),但 OP 谈到确保每个图像都是目标的一部分?

更新:添加已编译的 Info.plist 内容。我无法打开它,因为它被压缩了,所以我抓住了一个屏幕截图。我可以看到一些对图像的引用,但不知道在 Xcode 项目中的哪里可以找到这些?我试图搜索一些名称,但没有产生任何结果。

我的构建日志看起来不错,但这个警告很明显:

Warning: The Copy Bundle Resources build phase contains this target's Info.plist file 'Baker/Magloft-Info.plist'.

不知道这意味着什么,但我删除了 app-info.plist 文件,创建了一个新文件并从原始 app-info.plist 文件复制到 XML 中(这是基于一个有效的开源项目) .

有什么建议可以尝试吗?谢谢!

【问题讨论】:

请问这种情况是否只发生在这个项目中?如果你在不同的项目中这样做,它会起作用吗?因为 xproj 结构可能存在某种损坏。但如果它不适用于其他项目,情况就不会如此。试试看,然后告诉我。 嗨@matt,我的印象是因为我使用的是资产目录,所以不需要这些条目? Xcode 应该在存档中生成 info.plist 信息? 嘿@isklikas 我认为这只发生在这个项目中,我已经创建了其他几个运行良好的报亭应用程序。我在让报亭图标在 iOS7+ 中工作时遇到了一些问题,并且一直在修改 info.plist,也许有什么东西破坏了它?? @NicholasJohnMartin 是的,我意识到了这一点,这就是我删除评论的原因。 :( 你能打开存档并显示其编译后的 Info.plist 的样子吗?存档的构建应用程序包中是否存在图标?构建日志显示了所有这些? @matt 我添加了存档中 info.plist 的屏幕截图。没有应用程序图标文件,但所有启动图像都在那里。构建日志显示了一堆警告,但只有一个突出一点,我在上面添加了关于 app-info.plist 的内容 【参考方案1】:

我终于明白这是怎么回事了。显然 Xcode 不喜欢我的实际图标图形。在最后一次绝望的尝试中,我尝试创建非常简单且没有阴影效果的新图标图形。仍然不知道这是否是真正的原因,但他们都被接受了,没有任何问题。

感谢所有促成这个谜团的人!

【讨论】:

以上是关于Xcode 5.1 + 资产目录 + 存档 = AppIcon 无效图像路径的主要内容,如果未能解决你的问题,请参考以下文章

无法从 xcode 导出 IOS 应用程序存档以进行 testflight

未能找到或生成匹配的签名资产“Xcode 6”

使用 Xcode 10 构建时 iOS10 上的像素化​​图像

xcode 5.1 beta ad hoc 构建无法上传到 Test Flight

使用 XCode 4.5.1 分发时出错

上传存档错误:“缺少...的 iOS 分发签名身份”