Xcode9发布iOS11应用时缺少CFBundleIconName

133
我在使用 iOS 11 SDK 和 Xcode 9 构建应用程序时,遇到了发布新版本的问题。构建和上传二进制文件都非常顺利没有出现任何问题。然后,在“活动”中,我能看到该版本已在 iTunes Connect 中以“处理中”的状态出现。但是一段时间后,它就消失了,并且我收到了以下电子邮件回复:

尊敬的开发者:

我们发现了您最近提交的""应用程序的一个或多个问题。为了处理您的提交,请纠正以下问题:Info.plist 缺少值 - 在捆绑包''中缺少 Info.plist 关键字 CFBundleIconName 的值。提供资产目录中图标的应用程序还必须提供此 Info.plist 关键字。有关更多信息,请参见http://help.apple.com/xcode/mac/current/#/dev10510b1f7。纠正这些问题后,您可以再次提交修正后的二进制文件。祝好,应用商店团队

链接中提供了有关资源包的一些信息。我尝试将 CFBundleIconName 键设置为项目名称或图像文件名称,然后重新提交应用程序。然而,我仍然收到与上述相同的电子邮件。

非常感谢任何建议或帮助。


2
你是否在项目的常规设置中正确设置了“应用程序图标源”到你的资源目录? - vmeyer
1
@vmeyer: 那么不使用资源目录的应用程序怎么办? - user102008
30个回答

3
请按照以下步骤操作:
  1. 在您的项目中添加新文件 >> 资产目录。
  2. 转到 XCODE 中的项目 >> 通用 >> 应用程序图标。请参见 截图。 这将在您的资产中自动创建 AppICon 和 LaunchImage 规格,之后您可以将应用商店图标和其他图标拖放到其中。

  3. 同时添加
    <key>CFBundleIconName</key>
    <string>AppIcon</string>

将此输入您的 plist 文件中。

上传您的二进制文件到 Itunes。


(Xcode 9,“General”部分仅适用于Target,而不是Project…) - benc

2
我遇到了一个问题,是在上传存档时,与 Flutter 应用程序相关。
解决方案:
  • 将以下内容添加到 Info.plist 中。
<key>CFBundleIconName</key>
<string>AppIcon</string>
  • 工具 > Flutter > 清除Flutter
  • 工具 > Flutter > 在Xcode中打开iOS模块

创建一个新的存档并上传。


2
我终于想出了一种简洁的解决方案,不需要向info.plist添加任何键,如CFBundleIconName。在将旧应用程序更新到SDK 11.2时,我使用Visual Studio上的Xamarin进行操作(相信我,这涉及到相当多的挫败感)。但是,这个解决方案应该适用于任何其他IDE或框架,例如XCode。解决方案的要点是,与应用程序图标和启动图像有关的info.plist文件和Resources文件夹不再需要扮演任何角色。实际上,您可以从info.plist文件中删除CFBundleIconFiles键,它对您的项目没有任何影响。
以下是您需要遵循的步骤:
  1. 复制您的应用程序图标和启动图像,并将它们存储在单独的位置。
  2. 为了开始清理工作,请从info.plist中删除有关应用程序图标和启动图像的引用,这意味着删除CFBundleIconFiles键下的值。
  3. 从资源文件夹中删除应用程序图标和启动图像。
  4. 使用删除选项删除您在“资产目录”下声明的任何“资产”或“媒体”。
  5. 您的项目中可能仍然存在名为Assets.xcassets或Media.xcassets(或类似命名的.xcassets文件夹)。它们可能在资源文件夹内部或外部。删除所有.xcassets文件夹。
  6. 现在,在像记事本这样的编辑器(即Visual Studio中的.csproj)中打开您的项目文件,并查看是否有任何指向.xcassets文件夹中文件的引用。删除所有这些引用。还要检查此文件中是否存在指向资源文件夹下应用程序图标或启动图像的引用,并将其删除。
  7. 确保info.plist中不再存在XSAppIconAssets和XSLaunchImageAssets键。如果它们仍然存在,请将它们删除。
  8. 此时,您已从项目中删除了以前的应用程序图标和启动图像的所有文件或引用。如果它们仍然存在,请返回并将它们删除。现在,为了重新开始,请在“资产目录”下创建一个新的“资产”或“媒体”,这将在您的项目中创建一个.xcassets文件夹。从步骤1中复制您的应用程序图标(如果需要,则包括启动图像)到新.xcassets文件夹下的相应文件夹中。确保所有所需的图像都已包含在内。
  9. 检查info.plist是否包含新创建的“资产”所需的XSAppIconAssets(如果需要,则为XSLaunchImageAssets)键值。您的项目文件(在Visual Studio中为.csproj)现在应该包含对您新“资产”中添加的每个图像的引用。项目不需要任何额外的图像。我建议从资产中删除任何额外的图像。
  10. 如果您按其他解决方案中提到的添加了名为CFBundleIconName的键,则请从info.plist中删除此键。它是不必要的。现在,您已准备好将应用程序提交到商店。

2
无需编辑info.plist。填写images.xcassets中AppIcon的所有图像占位符即可解决与图标相关的错误。

1
  1. 删除 Asset Catalogs 下的现有 "Assets" 文件夹

  2. "添加新的" 空的 "Asset Catalog"

  3. 按照 使用 Asset Catalogs 管理图标 进行操作

  4. 更新 info.plist:将版本号和构建号增加 1,并将放置在资源中的图标作为一些早期 iOS 的 "必需品" 添加

    <dict>
        <key>CFBundlePrimaryIcon</key>
        <dict>
            <key>CFBundleIconName</key>
                <string>AppIcon</string>
            <key>CFBundleIconFiles</key>
        <array>
            <string>Icon152</string>
            <string>Icon167</string>
            <string>Icon76</string>
        </array>
    </dict>
    

苹果回复道:

以下构建已完成处理:平台:iOS 应用程序名称:FltLogger 构建编号:1.6

将此放在这里,既是为了下次方便自己查找,也是为了帮助其他人。祝你好运...


似乎缺少一个 </dict> - Greenonline

1

对我来说,关键是勾选Assets.xcassets的目标成员复选框。


1
如果你和我一样因为无法将应用程序推送到应用商店而来到这个页面,或者当你这样做时,你会收到一个关于缺少资源目录的电子邮件......16.10.0完全有问题。16.11.0预览版也没有修复它。我有一个Xamarin项目仍然可以发布,但我怀疑如果我在我的Mac上删除构建缓存,它将永远不再起作用。经过连续5天的努力,我降级到了16.8.6(可能不需要回退那么多)。我开始再次收到有用的有关图像的警告,我的资源目录不仅生成了asssets.cer,而且bundle也正确地添加了目录。无论是从Visual Studio开始工作还是从旧版本的Mono降级开始工作,我都不知道,但希望这能为某人节省我所遭受的浪费时间,尝试调整info.plist、catalog.json、.csproj、清除Mac端缓存、检查已发布的文件、数千个构建/归档/传输、重命名和双重检查数千个图标文件、完全重建项目等。您可以通过实现CFBundle图标文件来解决缺少资源目录的问题,如果您成功实现了这一点,您将上传该应用程序,它将立即消失,并且appstore connect将通过电子邮件告诉您所有应用程序现在都需要资源目录。

我在这里,使用16.10.1版本。第四天了,还是老一套,什么也没做成。 - Lavandysh
知道我不是一个人让我感觉好多了,谢谢。 - Lavandysh
1
最新的16.10.2更新声称已经修复了这个问题!个人还没有试过,但我很期待! - Victor Thomas Wilcox Jr.
1
我在周一刚刚完成了它。新版本于周二发布。我通过安装Mac版的VS并在那里进行iOS构建(仅限iOS构建)来完成它。 - Lavandysh

1
一旦更新到Visual Studio 17(v-15.2)的版本,您会发现在AssetCatalog > Media > AppIcons中出现了一个App-Icon-1024x1024占位符。

enter image description here


你能提供一些上下文吗?不确定为什么Visual Studio版本与这个主题有关... - benc

1

1
我将在 Xamarin 的范围内回复,以解决此问题 - 尽管与 Xcode 类似但并非完全相同。在 macOS 上安装了 VisualStudio Community(16.6 Windows / 8.6.1 macOS)和 Xcode 11。

在 Info.plist 中添加 CFBundleIconName 并没有帮助,因为这个键现在已不再使用(针对 iOS 11 及以上版本的构建,只使用 Assets.xcassets - 它也可以是 Media.xcassets,您可以选择任何一个,但我将其称为 Assets.xcassets)。

我的问题是:尽管在 Assets.xcassets 视图中视觉上很好,但图像却不正确。一旦我尝试手动重新分配它们,就会出现格式错误。

Xamarin 将 Asset.xcassets 处理为 .csproj 文件时处理得有点混乱。有时仅引用 Contents.json 文件不足以描述所有资产,您还必须导入每个单独的文件,以便它可以在 PC 上运行,但在 Mac 上无法运行,反之亦然。在 Visual Studio PC、Visual Studio Mac 和 Xcode 之间改进资产管理的空间还很大。

我重新生成了所有图标,并逐个手动插入到 Assets.xcassets 视图中。

当然,除了Info.plist之外,您还必须拥有以下密钥:
<key>XSAppIconAssets</key>
<string>Media.xcassets/AppIcons.appiconset</string>

然后我重新构建了一切,哎呀,它起作用了。
检查图标是否正确生成并上传到AppStoreConnect的提示是在模拟器上部署或在Xcode->组织者工具中检查IPA是否有正确的图标。否则,这是dev“无图标”,不会没问题。
此外,一些用于应用程序图标生成的网站不包含我需要的所有内容。最后,我使用了这个进行快速测试(但我更喜欢本地工具-请参见上文):https://www.iconsgenerator.com/Home/AppIcons 另外,由于您可能上传时会遇到没有Launchimage的问题(与故事板相关,并且也存储在Asset.xcassets中),因此有一个很棒的应用程序可以同时生成应用程序图标和启动图像:https://github.com/raphaelhanneken/iconizer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接