Xcode9 iOS11 应用版本中缺少 CFBundleIconName

Missing CFBundleIconName in Xcode9 iOS11 app release

我正在努力使用 Xcode 9 和 iOS 11 SDK 构建我们的应用程序的新版本。归档和上传二进制文件很顺利,没有任何问题。该构建在 Activity 下的 iTunes Connect 中显示为 'processing',它消失了,我收到了以下电子邮件。

Dear developer,

We have discovered one or more issues with your recent delivery for "". To process your delivery, the following issues must be corrected: Missing Info.plist value - A value for the Info.plist key CFBundleIconName is missing in the bundle ''. Apps that provide icons in the asset catalog must also provide this Info.plist key. For more information see http://help.apple.com/xcode/mac/current/#/dev10510b1f7. Once these issues have been corrected, you can then redeliver the corrected binary. Regards, The App Store team

link 提供了一些关于资产包的信息。我尝试将 CFBundleIconName 键设置为项目名称或图像文件名称,然后再次提交应用程序。但是,我仍然收到与上面相同的电子邮件。

如有任何帮助建议,我们将不胜感激。

我为此苦苦挣扎了一整天,一直到深夜,尝试了我能想到的每一种排列方式,并最终找到了这个解决方案——希望这能让某人免于经历这场噩梦。

我的应用程序之前没有使用 xcassets 目录,因此我在尝试通过使用文件 - 新建 - 文件... 并从文件类型中选择资产目录来解决此问题时向项目添加了一个 - 我将其命名为 Assets.xcassets 并在 xcode 项目中选择它。然后右键单击右侧区域并选择添加应用程序图标和启动图像,然后选择新建 iOS 应用程序图标,然后我将我的 1024x1024 图像拖到应用程序商店 iOS 1024pt 插槽的井中你会认为会奏效。但我在存档并提交到商店后仍然收到拒绝邮件。

缺少 Info.plist 值 - 捆绑包中缺少 Info.plist 键 CFBundleIconName 的值。 bla bla bla...

我还为 "Icon Name" 添加了 Info.plist 的密钥,CFBundleIconName 也知道它,并将其设置为与我在项目中的 1024x1024 图像匹配的字符串文件名。但是 none 即使检查 IPA 内容显示一切正确。

最后,我从名为 Assets.xcassets 的目录中删除了 AppIcon,使其为空,并执行以下操作来解决问题:

通过单击您的应用程序名称转到应用程序的主要设置,然后select进入“常规”选项卡,然后在“应用程序图标”和“启动图像”部分下单击“应用程序图标源”旁边的按钮,然后选择使用资产目录 - select 你的资产目录的名称 - 我的名称为 Assets.xcassets - 并说要使用该弹出窗口上的按钮转换(迁移)应用程序 - 我还选中了复选框也转换启动图像 - 完成后,应用程序图标源和启动图像源将在下拉列表中显示名称。

点击它进入资产目录 - 我的也是 Assets.xcassets 然后点击 AppIcon 部分并将你的 1024x1024 图像拖到 App Store iOS 1024pt well / slot。最后一次存档你的应用程序并将其提交到应用程序商店 - 到那时希望不会再收到来自地狱的电子邮件,因为我开始打电话给他们关于拒绝你的应用程序并且你可以 return 到 iTunesConnect 提交你的应用程序.

祝你好运 - 当你尝试了很多合理的修复但没有成功时,我理解你可能会因为这个大多是神秘的错误而感到痛苦。有时这就是软件工程师的生活……;)

如果容易的话每个人都会做,对吧。 ;)

我想通了,因为 Xcode 9 iOS 11 个构建需要 iTunes Connect 应用程序图标与二进制文件本身捆绑在一起,这可以在早期版本中直接添加到 iTunes Connect Xcode(XCode 8.3.3 更早)。

If you distribute your app through the App Store, add the App Store icon to an asset catalog located in the Xcode project. The location of the icon is different depending on the platform.

For iOS and watchOS apps built using Xcode 8.3.3 and earlier, you add the App Store icon in iTunes Connect. For macOS and tvOS apps, you add the App Store icon to the Xcode project but the location in the asset catalog is different than apps built with Xcode 9 and later.

所需的 App Store 图标应放置在应用程序包中的资产目录中。

因此,现在应将 CFBundleIconName 设置为 AppIcon(默认值)或您设置的任何值。

仅添加该图像不会通过 iTunes 存档上传过程,因此我们需要添加以下尺寸的所有应用程序图标图像:

  • 20pt 1x、2x、3x
  • 29pt 1x、2x、3x
  • 40pt 1x、2x、3x
  • 60pt 1x、2x、3x
  • 76pt 1x, 2x
  • 83.5pt 2x
  • 1024pt 1x

所以,现在是时候使用资产目录来指定应用程序图标了。

我也遇到了 “缺少 Info.plist 值 - 捆绑包中缺少 Info.plist 键 CFBundleIconName 的值...” 错误并想留下一个简洁的答案,希望能帮助下一个人。

该应用未使用资产目录。尽管这不是此错误所说的内容,但这是解决此问题所需的内容,但添加值的方式很重要。将这个缺失的 key\value 手动添加到 .plist 中是不够的;不仅如此。您还需要从 .plist 中删除 CFBundleIcons 值。这可以手动完成,但我建议使用 XCode 界面通过项目属性 - 常规应用程序图标和启动图像对其进行编辑。我就是这样工作的。

下面是对我的 .plist.

所做更改的屏幕截图

应用程序图标和启动图像

如果您还没有新的资产目录,请将其添加到您的项目中。
单击导航器顶部的应用名称 window
Select 常规选项卡
向下滚动到“应用程序图标和启动图像”部分
单击“使用资产目录”按钮
注意:我创建了自己的资产目录和 iOS 应用程序图标图像集,但链接到现有图像集对我不起作用,因为它创建了一个空 values\images 的新图像集。我不得不将它们全部删除,让这个过程为我创建它们。如果您刚刚添加资产目录来解决此问题,请让此过程为您创建它,不要手动添加图像集。

点击 convert\migrate 应用程序
单击按钮后,没有任何内容自动为我刷新。我导航离开然后返回到设置屏幕,现在在下拉列表中分配了值。

现在点击打开您的新资产目录
单击“AppIcon”部分并将所需的图像拖到适当的位置。

您需要 App Store 的 1024x1024 图片 iOS 1024pt 图标和任何其他 iPhone\iPad\Universal 应用所需的图标。 1024x1024 像素的图像也称为营销图标。如果没有它,您将无法提交您的应用程序。

您现在应该可以存档您的应用程序并将其提交到应用程序商店。

最简单的解决方案是在 plist 中添加 CFBundleIconName 键并填充资产目录中的所有 AppIcon 切片。

Info.plist :

<key>CFBundleIconName</key>
<string>AppIcon</string>

Download Working AppIcons Assets Here

按照以下步骤操作。

  1. 在您的项目中添加新文件>>资产目录。
  2. Goto 在 XCODE>>常规>>应用程序图标中单击您的项目。参见 screenshot。 这将在您的资产中自动创建 AppICon 和 LaunchImage 规范,之后您可以将 Appstore 图标和其他图标拖放到其中。

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

您的 plist 文件中的此项。

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

无需编辑 info.plist。与图标相关的错误将通过在 images.xcassets.

中填写 AppIcon 的所有图像占位符来解决

每当我为我的一个应用程序的新版本提交二进制文件时,我都会收到相同的电子邮件。我尝试了此处列出的所有补救措施,但没有任何效果。然后我又进行了一项有效的更改。

目标中。 . .构建设置。 . . Asset Catalog Compiler - Options 部分,确保包含图标的资产目录的名称显示在 Asset Catalog App Icon Set Name 中。出于某种原因,我的 Asset Catalogue 应用程序图标集名称 是空白的。

使用 iOS 11 或更高版本 SDK 构建的应用程序必须在资产目录中提供应用程序图标,并且还必须为此 Info.plist 键提供值

对于没有资产目录的旧项目,提交到 Appstore 时会出现问题

在Project —> Target Properties - General 选项卡—> App Icons and Launch Image。 App Icons —> Select 使用资产目录 然后它会要求转换(迁移)并发出警报并创建一个 .xcassets 文件。选中此框以也转换启动图像。
完成后,App Icons Source 和 Launch Images Source 的名称将出现在下拉列表中。 向其中添加应用程序图标和其他图标

Visual Studio 17(v-15.2) 存在问题,更新版本 > 15.2 后,您将在 AssetCatalog > Media> AppIcons

中看到 App-Icon-1024x1024 占位符

现在 IOS11,我们需要在我们的项目中添加一个大小为 1024x1024 的新图标。

确保从源代码包中的资源文件夹中删除图标文件,并清除 info.plist 中的图标文件键。 还要在 plist 中添加 CFBundleIconName 键,如下所示

Info.plist :

<key>CFBundleIconName</key>
<string>AppIcon</string>

同样在 Project - Target—>Build Settings —> Asset Catalog Compiler - 部分,确保包含图标的资产目录的名称显示在 Asset Catalog App Icon Set Name 中。

我遇到了同样的问题,解决方法如下。

这是分步指南。

第 1 步:

用1024*创建一个图标1024.png

第 2 步:

将此 png 上传到 https://www.appicon.build/ 网站并拖放到屏幕上。

第 3 步:

它会要求您输入您的电子邮件地址。输入它,然后几秒钟后,您将在您的邮箱中获得所有需要的图像尺寸。下载压缩文件夹并解压缩。

第 4 步:

返回您在 Xcode 上的项目并将此解压缩文件夹(名为 AppIcon.appconset)添加到 xcode 项目的资源文件夹中。

第 5 步:

双击 Asset.xcassets 文件夹,将生成的图像中的 2x 和 3x 图像所需的图像拖放到图像占位符上。

一切顺利!...

每个应用开发者都使用著名的 "Icon Dog"

(可惜改名了!)

https://itunes.apple.com/us/app/app-icon-set-creator/id1052532083?mt=12

它是 iOS 开发者使用的排名第一的最受欢迎的应用程序,有点崇拜。

立马解决所有问题

对于以上答案没有帮助的人(花了很多 head-wall 敲打这个):

确保检查资产目录的目标成员资格!如果你没有正确 link 这里的成员资格,你将得到同样的 super-generic 错误(Apple 应该对错误消息做些什么)。

目标成员应与您使用图标的目标直接相关。例如,我将这个单一目录用于我的主应用程序和手表应用程序资产,您必须通过选择适当的成员来指定它。

您根本不需要编辑 plist,这些答案中的大多数都是误导性的。

希望这对点击它的人有所帮助!

以我的情况;完成此页面中的所有这些操作后,请不要忘记再次存档您的项目:)

我终于想出了一个干净的解决方案来解决这个问题,它不需要向 info.plist 添加键,例如 CFBundleIconName。我在更新应用程序商店中的旧应用程序以针对 SDK 11.2 构建时这样做(并且相信我,这涉及到相当多的挫败感)。我在 PC 上的 Visual Studio 中使用 Xamarin,但此解决方案应该适用于任何其他 IDE 或框架,例如XCode。解决方案的要点是,就应用程序图标和启动图像而言,info.plist 文件和资源文件夹不再需要发挥任何作用。事实上,您可以从 info.plist 文件中删除 CFBundleIconFiles 密钥,这不会对您的项目产生任何影响。

以下是您需要遵循的步骤:

  1. 复制您的应用程序图标和启动图像并将它们存储在单独的位置。
  2. 为了干净利落地从 info.plist 中删除对应用程序图标和启动图像的引用,这意味着删除 CFBundleIconFiles 项下的值。
  3. 从 Resources 文件夹中删除应用程序图标和启动图像。
  4. 使用删除选项删除您在 'Asset Catalogs' 下声明的任何 'Assets' 或 'Media'。
  5. 名为 Assets.xcassets 或 Media.xcassets 的文件夹(或类似名称的 .xcassets 文件夹)可能仍存在于您的项目中。它们要么在 Resources 文件夹外,要么在 Resources 文件夹内。删除所有 .xcassets 文件夹。
  6. 现在在记事本等编辑器中打开您的项目文件(即 Visual Studio 中的 .csproj),查看是否有任何引用指向 .xcassets 文件夹中的文件。删除所有此类引用。还要检查该文件中的 Resources 文件夹下是否没有指向应用程序图标或启动图像的引用,并将它们也删除。
  7. 检查以确保 XSAppIconAssets 和 XSLaunchImageAssets 密钥不再出现在 info.plist 中。如果它们仍然存在,请删除它们。
  8. 此时您已经从项目中删除了所有以前的文件或对应用程序图标和启动图像的引用。如果它们仍然存在,请返回并删除它们。现在重新开始,在 'Asset Catalogs' 下创建一个新的 'Asset' 或 'Media',这会在您的项目中创建一个 .xcassets 文件夹。将步骤 1 中的应用程序图标(如果需要,还可以启动图像)复制到新 .xcassets 文件夹下的相应文件夹中。确保包含所有必需的图像。
  9. 检查以确保 info.plist 现在包含您创建的新 'Asset' 的 XSAppIconAssets(和 XSLaunchImageAssets,如果需要)键值。您的项目文件(Visual Studio 中的 .csproj)现在应该包含对您添加到新 'Asset' 中的每个图像的引用。除了项目所需的图像外,不需要任何额外的图像。我建议从您的资产中删除任何额外的图像。
  10. 如果您在其他解决方案中添加了名为 CFBundleIconName 的密钥,请从 info.plist 中删除该密钥。这不是必需的。现在您已准备好将您的应用程序提交到商店。

对于 Xcode 9.2 对于 iOS 11 个应用程序,有几点需要澄清。

1- 这个错误应该是因为资产目录中没有图标资产。

(提交没有资产目录的应用程序时出现此错误)。

2- 通过添加具有所需图标的资产目录解决此错误。

(在我的例子中,它是一个仅 iPhone 的应用程序,我添加了一些 120x 和 180x 的占位符图像)。

3- 此错误与 1024x1024 无关 "App Store Icon"

(当您忘记较大的商店图标时,将显示一个单独的特定错误,而不是此错误)。

4- 与Apple文档相反,即使有(Xcode9+为iOS11编写),您也可以使用该网站提交App Store图标。

(上面提到的单独的特定错误是由缺少图标触发的,而不是提交的版本中缺少图标。

5- Info.plist 中缺少的 CFBundleIconName 未更改。

我在这件事上也遇到了很多问题 - 我经常收到缺少 CFBundleIconName 的错误,而且找不到我的图标。所以这是我的故事,也许它会对某些人有所帮助。顺便说一下,我在 Xamarin 中使用 Visual Studio。

  1. 使用 AppIcons 将资产目录添加到您的项目(资产的实际名称并不重要,重要的是应用程序图标)。添加所有必要的图标大小。对于 'App Store' 图标,我添加了一个名称中没有 @ 的图标,正如论坛中有人建议的那样,但我不确定是否 100% 有必要。要生成不同的图标大小,有很多网站和工具可以为您完成这项工作,您只需要提供 1024x1024 的图标即可。他们将生成其余部分。

  2. 在 'Visual Assets' 下的 Info.plist 然后 'App Icons' 将源设置为您刚刚创建的资产。

  3. 现在检查您的 Info.plist。 不要使用外部编辑器打开它,因为一旦您构建项目,您的所有更改都将被覆盖。执行以下操作 - 右键单击​​解决方案资源管理器中的 Info.plist,然后 select 打开方式 -> 通用 PList 编辑器。

  4. 检查您是否有以下条目:

    -属性 = CFBundleIconName,类型 = 字符串。 Value = Assets.xcassets/AppIcons.appiconset -属性 = XSAppIconAssets,类型 = 字符串。价值=资产。xcassets/AppIcons.appiconset

  5. 请注意,Visual Studio 自动添加,当它完全添加某些内容时,'Resources/Assets.xcassets/AppIcons.appiconset' 作为值。但就我而言,资产目录是在 Resources 文件夹之外创建的,因此找不到我的图标。因此,请检查您的资产文件夹的创建位置。

  6. 不需要 CFBundleIconFiles,因为 Apple 现在使用资产目录。

希望对您有所帮助:)

我使用了@Omair 的答案,它是正确的,但是,我收到了找不到各种图标的错误。问题是创建资产目录时 VS2017 的错误。添加新资产目录时,目录文件夹是在项目的根目录下创建的,而不是在 /resources 目录下。但是,info.plist 中的条目具有 /resources 下的路径。一旦我从资产目录的路径中删除 /resources 一切正常。希望这对某人有所帮助!

我将在 Xamarin 的范围内回复以解决此问题 - 这与 Xcode 相似但不完全相同。使用 VisualStudio Community (16.6 Windows/ 8.6.1 macOS) 并在 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 之间有 space 改善资产管理。

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

当然,除此之外,Info.plist,你必须要有下面这把钥匙:

<key>XSAppIconAssets</key>
<string>Media.xcassets/AppIcons.appiconset</string>

然后我重建了所有东西,瞧,它成功了。

提示在上传到AppStoreConnect前查看是否正确生成图标是部署到模拟器,或者,在Xcode->Organizer工具中检查IPA是否正确得到了正确的图标。不然这就是dev"no icon",也不行了

另外,一些应用程序图标生成网站没有包含我需要的一切。最后,我使用这个进行快速测试(但我更喜欢本地工具 - 见上文):https://www.iconsgenerator.com/Home/AppIcons

此外,由于没有 Launchimage(与故事板相关,也存储在 Asset.xcassets 中,您可能会遇到上传问题,因此有一个很棒的应用程序可以同时生成应用程序图标和启动图像:https://github.com/raphaelhanneken/iconizer

在我的案例中,问题是我有一个 App Store 营销图标 (1024x) 的 PNG 图片,

此 App Store 图标 (1024x) 必须使用 jpeg,Non-transparent 图片,问题解决了。

以上都不适合我。我需要从构建设置中删除 Development Assets 的值。

  1. 删除了资产目录下现有的“资产”文件夹

  2. “新增”一个空的“资产目录”

  3. 已关注 Managing Icons with Asset Catalogs

  4. info.plist 更新:+1 你的版本和构建 #'s 并添加放置在资源中的图标作为“必需”?一些较早的 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>
    

Apple 回复:

The following build has completed processing: Platform: iOS App Name: FltLogger Build Number: 1.6

下次把这个放在这里是为了帮助我。狩猎愉快...

如果有人像我一样在这个页面上因为你无法将应用程序推送到应用程序商店——而当你这样做时,你会收到一封关于丢失资产目录的电子邮件……16.10.0 是完全坏了。 16.11.0 预览版也没有修复它。我有一个 Xamarin 项目仍然可以发布,但我怀疑如果我删除了 mac 上的构建缓存,它就再也无法工作了。稳定运行 5 天后,我降级到 16.8.6(可能不需要退那么远)。我又开始收到有关图像的有用警告,而且我的资产目录不仅生成 asssets.cer,而且捆绑包中的目录也已正确添加。它是从 visual studio 开始工作还是单声道降级到旧版本,我不知道,但希望这可以节省一些我在尝试调整 info.plist、catalog.json 时所浪费的日子。 csproj、擦除 mac 端缓存、检查已发布的文件、1000 个 build/archive/transports、重命名和仔细检查数千个图标文件、完全重建项目等。您可以通过以下方式解决丢失的资产目录实现 CFBundle 图标文件,如果你设法让它们变得完美,但如果你成功了,你将上传应用程序,它会立即消失,appstore connect 会通过电子邮件告诉你所有应用程序现在都需要资产目录。

对我来说,关键是选中 Assets.xcassets

的目标成员复选框

我在尝试上传存档时遇到 Flutter 应用程序的问题。

修复:

  • 将以下内容添加到 Info.plist
<key>CFBundleIconName</key>
<string>AppIcon</string>
  • Tools > Flutter > Flutter Clean
  • Tools > Flutter > Open iOS module in Xcode

创建新存档并上传。

就我而言,我尝试了所有方法,唯一有效的是我必须删除整个 xassets 文件夹并创建一个包含图标文件的新文件夹。

如果您仍然遇到此问题并且您使用的是 XCode 13,也许解决方案是删除 info.plist 键。我在这里解释更多: