paint-brush
如果你有 iPhone 15,尺寸还重要吗?经过@marcushaldd
657 讀數
657 讀數

如果你有 iPhone 15,尺寸还重要吗?

经过 Daria Leonova7m2023/11/10
Read on Terminal Reader

太長; 讀書

我们仍然应该关注应用程序大小的一些重要原因如下: - 应用商店限制; - 下载启动速度; - 对设备电池寿命的影响; 有一些方法可以减少应用程序的大小: - 图像的 HEIC 和 SVG 格式; - 资产目录; - 动态链接; - 过滤多余文件;
featured image - 如果你有 iPhone 15,尺寸还重要吗?
Daria Leonova HackerNoon profile picture
0-item

苹果每年都会发布新款 iPhone,逐渐增加 RAM 和主内存的大小,为芯片增加性能。如今,在 iPhone 15 上,你已经可以运行《生化危机 4》等主机游戏。并且可能会出现一个逻辑问题 - 我应该优化应用程序的大小还是可以不花更多时间在它上面?


总之,尺寸上还是值得优化的。在本文中,我收集了为什么必须这样做的原因,并提供了一些有用的优化方法。

问题和定义

那么,让我们开始用最平庸的答案来回答“为什么尺寸很重要?”这个问题。 - App Store 的限制。 App Store Connect 根本不允许您下载超过指定大小限制的文件。


对于 iOS 和 tvOS 应用程序,请验证您的应用程序没有超过支持的操作系统上的最大文件大小。您的应用程序的未压缩总大小必须小于 4GB。


Apple Watch 应用程序必须小于 75MB。此外,每个 Mach-O 可执行文件(例如 app_name.app/app_name)不得超过这些最大文件大小。关联


他们所指的具体文件可能有点令人困惑。为了更好地理解这一点,让我们逐步完成向 App Store Connect 提交应用程序的过程。


.xcarchive

Product -> Archive

第一步是创建档案。此存档存储 iOS、macOS、watchOS 或 tvOS 应用程序的构建工件和相关信息的集合。



.xcarchive right click -> Show Package Contents

我们确实有机会研究档案中到底包含什么内容以及以什么形式。




在主要文件中,您会发现:


  • 包含您的应用程序的产品文件夹;

  • dSYMs(“调试符号”的缩写),由 Xcode 生成的特殊文件,其中包含调试所需的信息,简而言之,就是崩溃日志;

  • 信息.plist;


顺便说一句,应用程序文件也可以通过“显示包内容”打开,在文件中,你会发现可执行文件和代码签名的结果CodeResources;它跟踪各种应用程序资源(图像等)的数字签名。


.ipa

返回到 Xcode,生成存档后,您可以使用Distribute App按钮。在此阶段, .xcarchive变为.ipa


.ipa文件可以被视为包含“Payload”文件夹的压缩包。在这个“Payload”文件夹中,是重要的“YourApp.app”包。在“.app”包中,您将找到应用程序的所有关键组件,包括诸如


  • 图片;
  • plist 文件;
  • 压缩 nib 文件;
  • 可执行文件


此外,它还包含代码签名资源,以确保应用程序的完整性和安全性。


要查看.ipa的内部结构,请在分发后单击Export ,将类型从.ipa转换为.zip,然后提取。


总之, .ipa文件是最终用户在其 iOS 设备上安装的打包应用程序,而.xcarchive是一个以开发人员为中心的存档,其中包含应用程序的各种资产和构建信息。


.ipa用于分发,而.xcarchive用于调试、存档和进一步开发目的。另一方面,可执行文件是执行应用程序功能的中心代码,包含在.ipa包中。


因此,AppStore的局限性可以如下说明。

操作系统版本

.ipa 大小

.ipa -> 有效负载 -> 应用程序 -> exe 大小

iOS 9.0 及更高版本tvOS 9.0 及更高版本

4GB

500MB

iOS 7.X 到 iOS 8.X

2GB

60MB


但是,要估计最终应用程序的大小,即特定用户必须在其设备上安装多少字节,您将需要执行其他操作,即生成应用程序大小报告。该文档很好地描述了创建它的过程,所以我将留下一个关联这里。


考虑应用程序大小的下一个原因是……再次是 AppStore,但现在我们不是在谈论系统限制,而是在谈论下载速度。这里一切都很明显 - 尺寸越小,速率越高。


此外,还有 200 MB 的限制,达到该限制后,用户需要连接到 Wi-Fi 网络才能安装该应用程序。这种延迟可能会阻碍用户并导致更高的放弃率。


苹果的应用商店搜索和发现算法通常有利于较小的应用程序,因为它们更容易让用户下载和试用。较小的应用程序大小可能会提高应用程序在搜索结果和推荐中的可见性。


一旦应用程序安装在设备上,它的大小仍然很重要。较小的应用程序启动速度更快,提供更好的用户体验。当应用程序优化存储时,它有助于延长电池寿命、减少应用程序占用空间和良好的设备运行状况。因此,越多的人对 iPhone 感到满意,你拥有的潜在用户就越多。

解决方案

有一些简单的技巧可以避免在开发过程中不必要地增加应用程序的大小。第一个是有意识地处理图像。

图片

首先,选择HEIC而不是 JPEG。 HEIC 提供的文件比 JPEG 小 50%,同时保持相似的图像质量。这会导致设备上的存储空间减少。较小的文件更容易通过网络传输文件,并且加载和保存到磁盘的速度也更快。


HEIC 支持图像透明度以及存储包含深度和视差信息的补充图像的能力。它支持无损压缩,使您能够在单个容器中存储多个图像。



其次,尝试采用SVG (一种基于XML的矢量图像格式,用于显示二维矢量图形)而不是PDF和PNG。与光栅图像相比,矢量图形通常表现出较小的文件大小,因为它的特征是定义形状和曲线的数学方程,而不是存储单个像素。


最初,需要添加 3 个带有前缀的图像(针对每个像素密度)。然后添加了 PNG 支持(= 给定大小的矢量图像),但它仍然在“当我们组装项目时从 PDF 中剪切 3 个 PNG”的水平上工作。


只有这样,才可以使用 SVG + 在资产目录中包含“使用矢量日期”复选框,从而真正减少所使用图像的大小 + 增加无限缩放的可能性,而不会损失质量。


第三,充分利用资产目录的功能。资产目录为同一图像的多种分辨率提供了易于使用的存储。此外,目录以元数据而不是单个文件的单一优化格式存储所有图像资产。


它允许 App Store 仅为其特定设备提供必要的资源。这会提高下载速度,而且我们已经知道用户不喜欢等待。


资产目录

可以对资源进行“按需”设置,即仅在需要时才将资源下载到设备上,并且在一段时间不使用后将其删除。 关联


不要忘记您有一个巨大的“免费”图像目录 - SF Symbols 。苹果不断致力于增加角色,增加自定义颜色甚至动画的能力。


因此,对于图片和其他图形资源,一切似乎都很清楚 - 我们使用正确的格式,并通过资产添加目录。总有机会不在最终装配中包含大量资源,而只是在需要时从 Internet 上传。现在,我们来谈谈代码和库的使用。

框架管理

让我快速提醒您有关链接的信息。它有两种类型:静态和动态。


静止的

动态的

当发生链接时

构建时间

运行

存储依赖项的位置

在最终的可执行文件中

在单独的动态库中

如何共享依赖项

应用程序的所有实例都使用相同的副本

应用程序的每个实例都有自己的副本

如何处理依赖项的更新

重建应用程序

更新动态库


根据本文的主题,依赖项存储对我们来说尤其重要,而动态链接看起来是我们最喜欢的。


动态库不是静态链接到客户端应用程序的;它们不会成为可执行文件的一部分。相反,动态库可以在应用程序启动时或运行时加载(并链接)到应用程序中。 关联


长话短说,选择动态库而不是静态库会导致更小的应用程序文件大小和更低的初始内存使用量。但是,保持平衡并避免过度使用动态库仍然很重要,因为这可能会在应用程序启动期间造成性能延迟。


Apple 还建议在您的应用程序中创建模块化代码库 ( SPM ),这在与其他目标(例如 App Clipps)共享代码时非常方便。


Swift Package Manager 提供了一种简化的本机方式来管理 Swift 项目中的依赖项。

多余的文件

减少应用程序大小的最有效方法之一是删除所有不必要的文件。这些额外文件可以是 Read.me 或剩余图像等。事实上,在文章的一开始,我们就弄清楚了 .ipa 是什么,我们已经学会了如何查找所有将进入 AppStore 的文件: .ipa -> .zip -> App -> show package内容。


找出您不需要的所有资源,并随时从您的应用程序中删除它们。


结论

只是为了说明这一点。我们仍然应该关注应用程序大小的一些重要原因:

  • 应用商店限制;
  • 下载和启动速度;
  • 对设备电池寿命的影响;


有一些方法可以减少应用程序的大小:

  • 图像的 HEIC 和 SVG 格式;
  • 资产目录;
  • 动态链接;
  • 过滤多余文件;


因此,在日常开发过程中不要忘记这一点;每天变得更聪明🙃