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 10 构建时 iOS10 上的像素化图像