当前位置: 首页 > 面试题库 >

减少iOS App文件大小

范承望
2023-03-14
问题内容

我用Xcode 6.1和Swift制作了一个非常简单的iPhone应用程序。我对ios开发真的很陌生,遇到了一个134 mb的应用程序!当然这是不可接受的。

我的所有屏幕尺寸的背景图像加起来总计20 mb。就是这样!我将这些图像存储在xcassets中,因为那是我猜的首选方式。

我认为该应用程序不应超过25 mbs。

我发现我的项目中有一些参考文献加倍。我删除了这些,但我的.app文件仍然是89 mbs!

我究竟做错了什么?我读了一些关于此的主题,但没有什么真正的帮助!

到目前为止,我所做的是:

- reduce the size of all pngs
- disable the compress PNG option, as it seems to make the PNGs bigger (lol)
- configured the build settings to run the fastest and smallest build
- Strip Debug Symbols During Copy build setting to Yes (COPY_PHASE_STRIP = YES)

edit1:显然Xcode对我的png做了一些奇怪的事情。.app文件中的某些图片最初为2 mb,超过10 mb。xcode在那做什么?


问题答案:

实际上,Apple重新压缩的文件更大并不奇怪。它们针对快速加载而不是小尺寸进行了优化。如果您不在乎速度大小,请严格关闭压缩。即使您关心速度,也可以比Apple做得更好。

https://imageoptim.com/xcode.html

因此,请关闭PNG压缩。我要做的第一件事是建立ipa。IPA实际上是一个zip文件,因此请构建该IPA,将其复制到Mac上的文件夹中,并使用.zip扩展名重命名该文件,然后双击它。这将扩展它。在有效载荷文件夹中找到该应用程序,然后右键单击它,然后选择显示包内容。您将看到所有资产。按大小排序。我猜您的图片太大了。以这样的大小,我猜想,多余的大小几乎完全是由PNG文件引起的。

考虑使用非视网膜图像。老实说,大多数人不会注意到。iOS将在视网膜上正常使用非视网膜。这样可以节省大量空间,

如果您不需要透明度,也可以考虑对某些文件使用jpeg文件而不是PNG。Jpeg文件效率较低,但可以更小。比较两者。取决于图像连续色调的程度。

默认情况下,PNG文件为32位。24位彩色和8位Alpha
/透明度。您可以通过转至24位来节省一点大小。您还可以节省很多尺寸,以达到16位以下的颜色。在8位PNG文件中使用颜色查找表。在位深度为8或以下的PNG中使用Photoshop和“为我们保存”选项。

我有各种昂贵的压缩软件,但经常使用$ 8

https://itunes.apple.com/us/app/lossless-photo-
squeezer/id704083918?mt=12

尝试使用8位PNG选项和JPEG选项。

编辑
我做了一些研究。我一直都知道Fireworks可以更好地进行PNG压缩。我没有意识到有一个带有8位alpha通道的8位PNG。Photoshop支持带有1位Alpha通道的8位。我一直告诉人们,如果透明度需要超过1位,请使用32位PNG。将来,我会让他们知道使用8位alpha的8位可能是更好的方法,他们只是可以使用Photoshop进行文件的最终保存。他们只需要保存32位并压缩到其他位置即可。

http://calendar.perfplanet.com/2010/png-that-
works/

大卫



 类似资料:
  • 问题内容: 有什么办法可以减少jar文件的大小? 我想要一个减少未使用依赖性的工具。 我使用Maven进行依赖管理。 问题答案: 从Maven的角度来看,JAR文件通常不包含依赖项。因此,您必须在谈论: WAR或EAR或类似文件, 通过合并大量JAR文件而产生的所谓的UberJAR文件;例如使用Maven阴影插件,或 依赖比Maven模块更精细。 在前两种情况下,可以通过在依赖关系规范或war或s

  • 问题内容: 我已经为Java项目开发了一个模块。该模块取决于外部库()。问题是,该文件比整个项目本身(14 MB)大两倍。我仅使用库中类的一小部分。该模块现已完成,将来没有人会对其进行扩展。有没有一种方法可以将相关类仅提取给某些类,以便其他人不必下载所有这些额外的内容? 问题答案: ProGuard之类的混淆工具通常提供从jar文件中删除未使用的类(甚至字段和方法)的功能。但是,您必须小心确认所有

  • 问题内容: 让我们比较一下c:Hello_world.c: Hello_world.go: 都编译: 还有,这是什么? 大约1Mb的世界。你在跟我开玩笑吗?我做错了什么? (仅限Hello_go-> 893K) 问题答案: 文件较大是否有问题?我不知道Go,但是我认为它会静态链接某些运行时库,而C程序则不是这种情况。但是,只要程序变大,就不必担心。 如上所述这里,静态链接Go运行时是默认的。该页面

  • 问题内容: 我只有一行用python编写的代码,并带有pyinstaller和option 。exe文件为4577 kB,几乎是5Mb。如何减小其大小或排除某些自动捆绑的图书馆? 问题答案: 您使用pyinstaller创建的.exe文件包括python解释器和脚本中包含的所有模块。也许您正在使用的模块本身都有一个很大的库。但是,您可以尝试使用 py2exe, 但它可能不适用于所有项目。另一种缩小

  • 问题内容: 我们将Java 6 JRE与我们的应用程序安装程序捆绑在一起,以便可以在任何计算机上运行,​​但这会使应用程序变得更重。因此,我们计划减小JRE的大小。如果有人完成了此类任务,您能否提供指导以继续前进? 问题答案: 查看JRE目录中的README文件。“可选文件和目录”部分列出了一些文件(如果将它们与应用程序打包在一起,可以从Oracle / Sun JRE中删除)。 创建安装时,我使

  • 我有一个应用程序,它使用大量的内存来区分两个潜在的巨大(100k)目录的内容。对我来说,这样的操作会占用大量内存是有道理的,但是一旦我的 diff'ing 操作完成,堆的大小就会保持不变。 我基本上有实例化类的代码,用于存储源和目标上每个文件的文件名、文件大小、路径和修改日期。我将添加、删除和更新保存在其他数组中。然后,我我的源数组和目标数组(现在可能每个都是100k),只剩下相对较小的添加、删除