4

对于我的一个应用程序的即将更新,我已将所有图像资源打包到资产目录中。

但是,目前我的大多数图像都没有@3x 版本。我已经检查了模拟器并在 iPhone 6 Plus 上使用了@2x 版本。

我不介意这种行为有两个原因:

  1. 结果对于我正在使用的图像来说已经足够好了
  2. 我的用户中只有 50% 使用 iOS 9。如果我添加 @3x 图像,我的应用程序的大小对于旧操作系统上的用户来说会飙升

尽管图像在 iPhone 6 plus 的模拟器中正确加载,但我有点担心归档应用程序时会发生什么。特别是,我担心使用 App Thinning iPhone 6 Plus 用户会得到一个没有任何图像的应用程序 :)

所以,我有两个问题:

  1. 如果我不提供@3x 图像,我的更新在 App Store 上发布后,@2x 会加载到 iPhone 6 plus 上吗?
  2. 我是否仍会从 App Thinning 中受益,因为使用 @2x 和 @3x 显示器的用户不会下载 @1x 图像(反之亦然)?或者在这种情况下,App Thinning 会不起作用,用户将获得相同的资产,而不管他们的设备屏幕如何?

这些都是微不足道的问题,但我无法在网上找到任何信息,说明当您不遵循 Apple 的指导方针,不在资产目录中提供 @3x 图像但您的应用程序仍可用于 iPhone 6 + 时会发生什么。此外,我的一些图像是 JPG 格式,这增加了额外的不确定性,因为它不是 iPhone 的理想格式。

提前感谢您的任何帮助!

4

3 回答 3

4

我使用 Matt 提出的程序进行了几个额外的测试:

  1. 当最小部署目标是 iOS 6 时,不会生成 Assets.car。[UIImage imageNamed:]返回nilJPG 图像,除非“.jpg”扩展名作为图像名称的一部分提供
  2. 当最小部署目标是 iOS 7 时,会生成 Assets.car,但它只包含那些在 Asset Catalog 中作为 PNG 导入的图像。所有 JPG 都被复制到 Assets.car 之外。除非“.jpg”扩展名作为图像名称的一部分提供,否则[UIImage imageNamed:]返回JPG 图像。nil
  3. 当最小部署目标是 iOS 8 时,Assets.car 包含所有图像。它的大小为 13MB。[UIImage imageNamed:]即使未指定“.jpg”扩展名,也能正确返回 JPG 图像。包含“.jpg”扩展名时,图像也能正确加载
  4. 当最小部署目标是 iOS 9 时,Assets.car 包含所有图像。它的大小为 11.5MB。[UIImage imageNamed:]即使未指定“.jpg”扩展名,也能正确返回 JPG 图像。包含“.jpg”扩展名时,图像也能正确加载

我使用了Matt 建议的图像提取工具从这些资产中提取图像。我只能从配备 Retina 的设备的档案中导出,并且我可以确认所有图像都具有正确的分辨率(即只有视网膜尺寸,iPad 特定图像被忽略)。然而,该工具以 PNG 格式保存所有这些文件,因此文件夹的最终大小总是比 Assets.car 大。

最令人惊讶的是,案例 3 和案例 4 的文件夹大小相同(39.4MB)。此外,图像似乎完全相同。所以,我真的很想知道那里会发生什么,因为这些情况下 Assets.car 的大小有 2MB 的差异。

总而言之,我们仍然不确定这种测试方法是否可以用来准确地模拟 App Thinning 行为。所以,如果有人有这方面的个人经历,如果他们能分享出来,那就太棒了。

但是,假设为 AdHoc 导出特定设备会产生与 App Store 执行的实际 App Thinning 相同的结果,我们可以得出以下结论:

  1. 仅当部署目标是 iOS 7 或更高版本时,才会启动应用程序精简
  2. JPG 图像的应用程序细化仅适用于从 iOS 8 的最低部署目标开始
  3. [UIImage imageNamed:]仅当通过资产目录正确处理 JPG 图像时,才正确返回 JPG 图像而不提供“.jpg”扩展名。如前所述,仅当最小部署目标是 iOS 8 或更高版本时才会发生
  4. [UIImage imageNamed:]如果指定了“.jpg”扩展名,则始终加载正确的图像。

最后两个结论似乎与这个问题无关,但我在 Stack Overflow 上发现了几个关于如何使用 Asset Catalogs 正确加载 JPG 图像的相互矛盾的意见。有些人声称您可以在不提供“.jpg”扩展名的情况下加载它们,而其他人则抱怨这种方法不起作用。我认为上面的 3 和 4 详细解释了在这种情况下发生了什么以及为什么人们会得到不同的结果。

于 2015-10-21T19:54:10.860 回答
3

回答你自己的问题。归档应用程序。为您感兴趣的目标设备导出应用程序:

在此处输入图像描述

现在查看导出的应用程序内部,看看它包含哪些资源。An.ipa只是.zip另一个名称的文件;通过更改后缀很容易查看它的内部。现在您知道 iPhone 6 Plus 用户将从 App Store 下载哪些资源了。

于 2015-10-21T03:23:04.653 回答
0

从缺少 3x 图像的项目中获取 iPhone4s 和iPhone 6SPlus存档后

然后使用马特建议的图像提取工具,

部署目标iOS 7

结果如下: iphone 4S 左,iphone 6 plus 右

于 2016-02-22T13:31:12.160 回答