没有@ 3x图像的应用程序稀疏,当某些图像是JPG时

时间:2015-10-21 02:57:30

标签: ios iphone-6-plus asset-catalog app-thinning

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

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

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

  1. 对于我正在使用的图片
  2. ,结果非常好
  3. 我的用户中只有50%使用iOS 9.如果我添加了@ 3x图片,我的应用程序的大小将会为旧操作系统上的用户量增加
  4. 虽然图像在iPhone 6 plus的模拟器中正确加载,但我有点担心存档我的应​​用时会发生什么。特别是,我担心使用App Thinning iPhone 6 Plus用户将获得一个没有任何图像的应用程序:)

    所以,我有两个问题:

    1. 如果我不提供@ 3x图像,将在iPhone 6 plus上加载@ 2x 我的更新在App Store上发布后?
    2. 我仍然可以从App Thinning中受益,因为用户使用@ 2x和 @ 3x显示器不会下载@ 1x图像(反之亦然)?或者App Thinning在这种情况下不起作用,用户将获得相同的资产而不管其设备的屏幕是什么?
    3. 这些都是微不足道的问题,但我无法在网上找到有关当您不遵守Apple的指导原则而不会在资产目录中提供@ 3x图片但您的应用仍可用于iPhone 6 +。此外,我的一些图像采用JPG格式,这增加了额外的不确定性,因为它不是iPhone的理想格式。

      提前感谢您的任何帮助!

3 个答案:

答案 0 :(得分:3)

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

enter image description here

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

答案 1 :(得分:3)

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

  1. 当最低部署目标是iOS 6时,没有Assets.car 产生。 [UIImage imageNamed:]会为JPG图片返回nil,除非" .jpg"扩展名作为图像名称
  2. 的一部分提供
  3. 当最低部署目标是iOS 7时,会生成Assets.car但是 它仅包含在资产目录中导入的图像 作为PNG。所有JPG都被复制到Assets.car之外。 [UIImage imageNamed:]会为JPG图片返回nil,除非" .jpg"扩展名作为图像名称的一部分提供。
  4. 当最低部署目标是iOS 8时,Assets.car包含所有内容 图片。它的大小是13MB。即使未指定" .jpg" [UIImage imageNamed:]也会正确返回JPG图像延期。当" .jpg"时,图像也会正确加载包括扩展
  5. 当最低部署目标是iOS 9时,Assets.car包含所有 图片。它的大小是11.5MB。即使未指定" .jpg" [UIImage imageNamed:]也会正确返回JPG图像延期。当" .jpg"时,图像也会正确加载包括扩展
  6. 我使用了Matt建议的image extractor tool从这些资产中提取图像。我只能从档案中导出带有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. 如果" .jpg"
    5. [UIImage imageNamed:]总是加载正确的图片已指定扩展名。
    6. 最后两个结论似乎与这个问题无关,但我发现Stack Overflow关于如何使用资产目录正确加载JPG图像的几个相互矛盾的意见。有些人声称你可以加载它们而不提供" .jpg"延伸,而其他人抱怨这种方法不起作用。我认为上面的3和4详细解释了这种情况下发生的情况以及为什么人们会得到不同的结果。

答案 2 :(得分:0)

从缺少3张图片的项目获取iPhone4s和 iPhone 6SPlus 存档后

然后使用Matt建议的image extractor tool

部署目标 iOS 7

这是结果: iphone 4S left, iphone 6 plus right