将 iOS 应用程序大小减小到 App Store

Posted

技术标签:

【中文标题】将 iOS 应用程序大小减小到 App Store【英文标题】:Decrease iOS Application size to App Store 【发布时间】:2014-05-29 16:45:26 【问题描述】:

我正在尝试在 App Store 中提交一个应用程序,如果可能的话,我需要稍微减少它的内存。我尝试了一种我将在下面描述的方法来使我的应用更轻巧,但没有运气。

详情

我按照这些步骤查看是什么导致了这个大尺寸

    将项目存档 分发它 为企业或临时部署保存 选择.ipa文件并将扩展名更改为.zip 解压并打开 Payload 显示包装内容

内容

我有 680 个 Kb.png 文件(当我添加大约 32 kb 的文件时),我删除了它们并将应用程序的大小减少了 2 MB。除了一个占用了.ipa's 大小的大约 90% 的可执行文件之外,还有其他文件占用了空间,但并不显着。

问题

是否可以减小可执行文件的大小?如果不是,那么您能否给我一个提示,我应该在哪里使我的应用在尺寸方面更轻。

PS 我使用第三方库,例如 Vuforia SDK 和 GitHUB

上的库

【问题讨论】:

你为什么觉得它“太大了”? @runmad 因为,我有一种程序无法达到 30 Mb 应用程序的复杂性。我认为图像不是问题,因此代码也不是那么大。完整阅读问题 我做到了,只是不确定您为什么担心应用程序大小为 28 MB。请参阅下面的答案。 有人可以向我解释为什么这篇文章要关闭。至少详细说明原因,以便我改进。 Retina 图像使应用程序膨胀得非常快。打开.app,看看各种东西有多大,看看你认为可以缩小什么。一种选择是消除大多数/所有非视网膜图稿,因为系统会很乐意使用视网膜图像并为您缩放它们。 【参考方案1】:

如何减小这个可执行文件

的大小

您无法在构建的应用程序包中减小可执行文件的大小。这是你的代码!减小其大小的唯一方法是:

剪切代码。显然你不能这样做,因为你会排除让你的应用工作的功能。

删除架构切片。您不应该这样做,因为您想为所有可能的架构进行构建。

话虽如此...我从来没有在这么大的应用程序包内生成可执行文件。也许您测量/构建错误:

确保您正在归档。除了档案,没有其他东西值得衡量。

确保在归档时生成发布版本。

确保您的 Release 构建设置包括完整的编译器优化(最小、最快)。

【讨论】:

是的,体积小,速度最快,我也尝试过归档和发布。我尝试了太多与此问题相关的帖子。但是 thnx 指出了如何减小可执行文件的大小。现在假设如果我有一些我没有在这个项目中使用但在编译源中添加的类,它们会增加项目的大小吗? 是的;一些编译器/语言具有神奇的“代码剥离”,其中未使用的代码被删除,但我认为 Clang 不会给你这样的东西。尽管如此,30MB 的编译代码,如果是你的编译代码占用了空间,那将是一大堆代码。 请注意,您可以通过查看目标的构建阶段轻松查看(并控制)可执行文件中的内容。 是的,我正在检查。事实上,关于库,我使用的是在 OpenGL 和 Unity3D 上实现的 Vuforia,其中包含一些代码。我明天试试看:)【参考方案2】:

关于如何从Reducing the size of my App减小二进制大小的建议:

编译器选项

将优化级别构建设置设置为最快、最小 [-Os];并且在复制构建期间剥离调试符号设置为是 (COPY_PHASE_STRIP = YES) 可以显着降低编译二进制文件的大小。这些设置是 Xcode 项目中“发布”配置的默认设置。

【讨论】:

【参考方案3】:

资产几乎总是导致应用程序变大的罪魁祸首。

如果您归档您的应用并导出 IPA,您将能够通过更改扩展名将其转换为 .zip,然后解压缩并查看包的内容。

如果您按文件大小排序,您将看到哪些文件最大。请记住,具有透明度的图像更大。

还有更多见解:http://bjango.com/articles/pngcompression/

【讨论】:

是的,但是在问题上我已经指定我已经这样做了,并且内存大的问题图像已被删除。所以我认为这不是造成麻烦的事情。问题出在可执行文件上 您应该仍然能够看到占用这么多空间的内容。第三方库包呢? 如何查看第三方库?【参考方案4】:

如果您真正关心可执行文件的内部结构,请使用链接映射进行构建。这会按段和符号显示大小。

例如

# Sections:
# Address   Size        Segment Section
0x0000AB90  0x00711D30  __TEXT  __text
0x0071C8C0  0x00028D34  __TEXT  __symbol_stub4
0x007455F4  0x00001A58  __TEXT  __stub_helper
0x0074704C  0x00057452  __TEXT  __cstring

[…]

# Symbols:
# Address   Size        File  Name
0x000122A0  0x00000020  [  6] ___Block_byref_object_copy_
0x000122C0  0x0000001C  [  6] ___Block_byref_object_dispose_
0x00012320  0x00000028  [  6] ___copy_helper_block_78
0x00012348  0x0000001C  [  6] ___destroy_helper_block_79

[…]

【讨论】:

这样做我能达到什么目的?也许我是 ios 开发的新手,这就是为什么我发现很难用这个来跟踪项目。我应该执行什么命令或如何执行此链接映射?谢谢你的时间 在 Xcode 的构建设置中,有一个名为“Write Link Map File”的选项,可以选择 Yes 或 No。您实现的是知道应用程序的哪一部分很大,因此哪一部分可能让您获得最大收益如果你要优化它,你会得到回报。 (OTOH,也许我应该问一下你愿意考虑什么样的事情来使应用程序更小……如果你是开发新手,这可能不是一件容易的事。)【参考方案5】:

我在网上看到一个article,它用以下9点解释了这个过程:

    确保您已达到 iOS 剥离的***别,对于 有关 iOS 剥离的更多信息,请参阅这篇文章。

    启用位码确实会增加无线下载的大小。 在我们的例子中,它是 130 和 70MB 之间的差异。如果你希望 要关闭位码,您可以在您的 xcode 项目中执行此操作,或者使用 发布构建属性,例如这个。

    您的 xcode 项目中的启动图像未优化。在跑步的时候 通过压缩算法的东西不起作用,因为 Unity 解压缩和存储图像而不进行太多压缩,以便 减少启动时间,它确实适用于启动图像 项目生成后由 Untiy 生成。运行所有图像 通过无损压缩算法以节省几 MB (在我们的例子中是 10 个)。

    如果这还不够,是时候开始查看您的资产日志了。 在 Unity 中运行你的构建并打开编辑器日志,就是这个 控制台偏好旁边的小图标。在我们的案例中, 它们已经优化。我们拥有 111MB 的未压缩资产, 能够实现 70MB 的无线大小。遍历每个资产 并将分辨率更改为您的最低质量 用户不会注意到。最佳压缩设置是适用于 iOS 的 PVRTC。 当您使用它时,请查看资源检查器以查看大 内存中的纹理。降低这些分辨率也将 减少构建大小以及内存消耗。另外,请使用 精灵图集——你会看到它的神奇之处!

    检查项目中未使用的库,或未使用的库 为它们的功能使用了太多空间。 df 等命令 和 ls -lh 可能在这里有用,在你的项目文件中运行它们 并查看哪些文件真正突出并且需要减小大小。 请记住,这些单独的库不一定有 与您的纹理相同的构建效果 - 通常,这些是编译的 对于多种架构,如果一个库是 20MB,通常 仅会影响您的构建大小约 6MB,因为 库通常包括对 i386、arm64 和 arm7 的体系结构支持 在同一个库中

    检查 /Plugins/android 是否未包含在您的 iOS 项目中。 有关详细信息,请参阅此帖子。

    确保构建设置中没有任何未使用的场景。

    构建您的项目,并在提交之前检查存档 iTunes 连接。您可以通过点击 “产品 -> 存档”, 让它存档,完成后,弹出“窗口->管理器” 打开这个界面,找到构建位置。

    在“Products/Applications/game.app”下运行 mv 命令来打开你的 .app 到一个可浏览的目录中。在这个目录中,您将能够 看到我们做的很多东西,也找到更多灵感 你可以做的事情。

现在,有很多事情可能会导致大于 预期的构建大小,我相信你可以做更多的事情 做得到它也低于它。

如果您想添加到此列表中,或有其他问题(我通常很乐意回答问题),请在下方评论您的具体用例,我会尽力提供帮助!

一切顺利,

皮姆

【讨论】:

在任何情况下都不要添加仅链接的答案。虽然理论上他们可能会回答这个问题,it is always be preferable 在这里包含答案的基本部分,并提供链接以供参考。或者,您始终可以将它们保留为 OP(和其他人)可以从中获得帮助的 cmets。【参考方案6】:

如果您已经检查了所有资产(图像、音频等),只需检查是否需要您在应用中导入的所有外部库(iOS sdk 之外的第三方库)。

【讨论】:

如何检查它们。我的意思是我知道我已经导入了库,我该怎么办? “外部库和框架”不是 IPA 的一部分,不会影响 IPA 的大小。 如果他们是第三方库,他们会。 看我已经更新了问题,我的意思是我将大小减少了 2 Mb 而不是 2 Mb。我的应用程序大小是 30 Mb 我指的是 iOS sdk 之外的库,它们会影响 IPA 大小。我已经编辑了我的答案以澄清。

以上是关于将 iOS 应用程序大小减小到 App Store的主要内容,如果未能解决你的问题,请参考以下文章

将 iOS 应用上传到 AppStore(上传到 App Store 时出错。)

将 iOS 应用上传到 App Store 是不是需要双重身份验证

代表客户将 iOS 应用发布到 App Store

用于将应用程序分发到 App Store 的 iOS 公司名称

将 iOS 7 应用程序上传到 Apple App Store 错误

尽管 Xcode 是最新的,但无法将 iOS 应用程序部署到 App Store