减小iOS应用文件大小

8
我用Xcode 6.1和Swift制作了一个非常简单的iPhone应用程序。我对iOS开发非常陌生,最终生成的应用程序大小为134MB!这当然是不可接受的。
我为所有屏幕尺寸准备了背景图片,总共20MB。我将这些图像存储在xcassets中,因为我想这是首选方法。
我认为这个应用程序不应该超过25MB。我发现我的项目中有一些重复引用。我删除了它们,但我的.app文件仍然有89MB!
我做错了什么?我阅读了几篇相关文章,但没有真正帮助到我!
到目前为止,我做了以下工作:
- 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)

编辑1: 显然Xcode对我的png文件做了一些奇怪的处理。一些原本为2 mb的图片,在.app文件中超过10mb。这是Xcode在做什么?


4
你检查了应用程序包吗?在Finder中找到你的应用程序的.app文件,右键点击并选择“显示包内容”。你应该能看到实际占用了这么多空间的内容。 - Matthias Bauch
谢谢Matthias,我刚刚完成了那个!请看编辑1。 - Michael
1个回答

13

苹果重新压缩文件更大并不奇怪,因为它们优化了快速加载而非小文件大小。如果您不在意大小而在意速度,那么一定要关闭压缩。即使您在意速度,也有比苹果更好的选择。

https://imageoptim.com/xcode.html

所以,请关闭PNG压缩。首先,我会构建ipa。ipa实际上是一个zip文件,因此请构建ipa,将其复制到Mac上的文件夹中,将文件重命名为.zip扩展名,然后双击该文件进行展开。在Payload文件夹中找到应用程序,右键单击它并选择“显示包内容”。您将看到所有资产。按大小排序,我猜测您拥有过大的图像。在此大小下,我猜额外的大小可能几乎完全由PNG文件引起。

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

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

默认情况下,PNG文件为32位。24位颜色和8位alpha/透明度。通过降低到24位可以节省一些空间。通过降低到16位或以下可以节省大量空间。在8位PNG文件中使用颜色查找表。尝试使用Photoshop和PNG选项中的深度为8及以下的保存选项。

我拥有各种昂贵的压缩软件,但通常使用价值$8的

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

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

编辑

我进行了一些研究,我一直知道Fireworks在PNG压缩方面表现更好。但我没有意识到有一种带有8位Alpha通道的8位PNG格式。Photoshop支持8位带有1位Alpha通道的PNG格式。我一直告诉人们,如果他们的透明度需要超过1位,请使用32位PNG格式。将来,我会让他们知道8位带有8位Alpha通道可能是更好的选择,他们只需将文件最终保存在Photoshop中,然后在其他地方进行压缩即可。

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

David


最终,我删除了为每个屏幕尺寸准备的xcassets。这些文件单独存储在我的ipa中的assets.car文件中,大约有80 mb!我压缩了png文件和其他所有内容,现在应用程序不到20 mb... - Michael
  1. 在 Swift 代码中使用 @objc 等标签和公共类是否会影响 IPA 的大小?如果是,它在字节顺序上有多大的影响?
  2. 此外,我个人看到过多次,在 Swift 中编写执行相同操作的代码生成的 IPA 比在 Objective-C 中编写的要大。这是有原因的吗?
- Ran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接