没有@ 3x图像的应用程序变薄,以及某些图像是JPG时

对于即将到来的更新,我已将所有图像资源打包到资产目录中。

然而,目前我没有@ 3x版本的大部分图像。 我已经检查过模拟器,并使用iPhone 6 Plus @ 2x版本。

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

  1. 对于我正在使用的图像来说,结果足够好
  2. 我的用户中只有50%使用iOS 9.如果我添加@ 3x图像,则对于较旧的操作系统,我的应用程序的大小将会大幅增加

虽然图像加载正确的模拟器iPhone 6加,我有点担心会发生什么事情时,我的应用程序。 特别是,与应用稀薄iPhone 6 Plus的用户恐怕会得到一个应用程序没有任何图像:)

所以,我有两个问题:

  1. 如果我没有提供@ 3x图像,那么在iPhone 6上加载2倍后,我的更新将在App Store中生效?
  2. 我仍然可以从应用程序细化中受益,因为拥有@ 2x和@ 3x显示的用户不会下载@ 1x图像(反之亦然)? 或者在这种情况下应用稀疏function无法工作,用户将获得相同的资产,而不考虑其设备的屏幕?

这些都是微不足道的问题,但我不能在网上find任何信息,当你不遵循苹果的指导方针时,不会在资产目录中提供@ 3x图片,但是你的应用程序仍然可用于iPhone 6 +。 此外,我的一些图像是JPG格式,这增加了额外的不确定性,因为它不是iPhone的理想格式。

在此先感谢您的帮助!

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

在这里输入图像说明

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

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

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

我已经使用了Mattbuild议的图像提取工具从这些资源中提取图像。 我只能通过Retina设备的档案文件导出,而且我可以确认所有的图像都有正确的分辨率(即只有视网膜大小,忽视了iPad特定的图像)。 但是,该工具将所有这些文件保存为PNG格式,因此文件夹的最终大小始终大于Assets.car。

最令人惊讶的是,对于案例3和案例4,文件夹的大小是相同的(39.4MB)。而且,图像看上去完全一样。 所以,我真的不知道会发生什么,因为在这些情况下,Assets.car的大小相差2MB。

总而言之,我们仍然不确定是否可以使用这种testing方法来准确地模拟App Thinning行为。 所以,如果有人有这个亲身经历,如果他们能分享它,那将是非常棒的。

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

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

最后两个结论似乎与这个问题无关,但是我发现Stack Overflow有关如何正确地使用资源目录加载JPG图像的一些矛盾的观点。 有些人声称你可以在不提供“.jpg”扩展的情况下加载它们,而其他人则抱怨说这种方法无效。 我想上面的3和4详细解释了这种情况下发生了什么,以及为什么人们得到不同的结果。

获得iPhone4s和iPhone 6SPlus档案后,从一个缺less3x图像的项目

然后使用Mattbuild议的图像提取器工具 ,

部署目标iOS 7

结果如下: iPhone 4S离开,iPhone 6加右