2015-10-21 15 views
4

对于即将更新的其中一个应用程序,我已将所有图像资源打包到资产目录中。不使用@ 3x图像和某些图像为JPG时的应用程序稀释

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

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

  1. 其结果是图像不够好,我现在用
  2. 我的用户中,只有50%使用的是iOS 9.如果我添加@ 3倍的图像我的应用程序的大小将那些暴涨的旧操作系统

虽然图像加载正确的模拟器为iPhone 6加,我有点担心,当我存档我的应​​用程序会发生什么。具体而言,恐怕与App细化iPhone 6 Plus上的用户将获得一个应用程序没有任何图像:)

所以,我有两个问题:

  1. 如果我不提供@ 3倍的图像将@在iPhone 6上加载2次后加上 我的更新在App Store上生效后?
  2. 我还会受益于应用程序细化吗,因为使用@ 2x和 @ 3x显示的用户不会下载@ 1x图像(反之亦然)?或者在这种情况下应用稀疏功能不起作用,用户将获得相同的资产,而与设备的屏幕无关?

这些琐碎的问题,但我不能在任何地方在线的,当你不遵守苹果的指导方针不能提供@资产目录3倍的图像,但你的应用程序仍然可以在iPhone 6个究竟找到信息+ 。此外,我的一些图像是JPG格式,这增加了额外的不确定性,因为它不是iPhone的理想格式。

在此先感谢您的帮助!

+0

那么,为什么你不测试和发现?您可以导出细化的应用程序以查看它的功能,就在您的机器上。为什么不试试它? – matt

+0

@matt感谢您的建议。但是,我不确定如何通过查看存档来查看哪些图像将加载到哪些设备上。你可以请扩展一下吗? –

+0

您可以导出适用于iPhone 6 Plus的应用程序。现在查看它并查看它包含的资源。现在你知道iPhone 6 Plus用户在应用中会有什么。所以如果有2张图像,那么你知道它们会被加载,因为这是2倍图像而不是3倍图像时发生的情况。如果1x图像不在那里,您知道您从应用稀疏中受益。这是你问的,不是吗? – matt

回答

3

我执行使用由Matt提出的程序几个附加的检查:

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

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

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

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

然而,假定出口为特定设备为即席产生相同的结果作为实际应用细化由应用商店进行,我们可以得出这样的结论:当部署目标是iOS 7以上版本中

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

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

3

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

enter image description here

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

+0

非常感谢!我不知道这是可能的。明天早上将给它一个镜头,并通过提供结果更新问题。 –

+0

这种方法破坏了某些东西。我已经尝试过,并且包含了所有图像。然后我做了一个简单的测试,除了应用程序图标和启动图像外,我从资产目录中删除了所有图像。这些包含在所有变体中,包括3x。当我存档它,然后导出为iPhone 6+我包含所有这些图像。很明显,在后面的例子中,应用程序细化应该去除1x和2x图像,但它不会。你知道什么可能是错的吗? –

+0

不幸的是,这并不能证明我们想要证明什么,而且我提出的方法也没有,因为你用一个不透明的_.car_文件结束了。我会删除我的答案。对不起,这对于这个特定的问题没有效果。 – matt

0

失踪3倍的图像

然后使用由Matt建议image extractor tool获得的iPhone4s和iPhone 6SPlus档案,从项目后,

部署目标的iOS 7

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

+0

很奇怪某些图像未复制到所有。 ico-xxx和其他导致这种结果的图像有什么区别? –

+0

我应该预计没有3x的资产会被复制到iPhone 6plus中吗? – Ted

+0

我不确定是否诚实。不过,我所知道的是,如果您的资产都不包含3x版本,则2张图片将被复制到iPhone 6 plus。当一些资产有3x版本时,它的工作原理可能不同。 –

相关问题