2

我在 iOS 中创建了一个自定义框架,在 Xcode 9.2 中使用了 swift4。该框架包含 9 个 .swift 文件,当我尝试归档并创建一个 .framework 文件时,结果显示大小为 5MB。然而,这 9 个 swift 文件总共显示的文件大小仅为 72KB。存档的 .framework 文件太大(5 MB),我的客户不同意。

我试图删除不需要的代码,但大小仍然保持不变,他们希望我让它像 Android 框架一样,它只有 34KB 的大小。这是我第一次创建框架并且我没有解决方案,有人可以帮助我在不减少文件的情况下减小框架的大小吗?

4

1 回答 1

2

我尝试了两件事,并且对我有用。也许它对你也有用。

链接器默认导出所有符号。您可以通过本文中讨论的有关 Symbol Visibility 的一些技术来限制它。此外,链接器中有一个很好的功能,允许您指定必须导出或不导出的符号。仅导出界面符号可能会帮助您减小大小并且您的客户端不会浪费内存。

所以,在实践中:

  1. 考虑到我的框架存档是MyFramework.framework.

  2. MyFramework.framework/MyFramework通过运行列出了所有符号,$ nm -g MyFramework.framework/MyFramework并选择了我的二进制文件需要导出的符号(我的客户端需要访问的符号)。

  3. 所有选定的符号都保存在文本文件中。因此,假设在列出的所有符号中,您只需要将您需要的符号(您的客户需要)保存到文本文件中。

  4. 打开MyFramework项目并设置Build Settings -> Exported Symbols File指向您刚刚创建的文本文件。

  5. 有了手中的二进制文件,您可以使用strip -N MyFramework.framework/MyFramework.

就我而言,我可以取得一些好的成绩,但我认为它可能会因项目而异。另外,我正在处理Objective-C。我制作了一个示例 Swift 项目并取得了成果。您可以在https://github.com/gbazilio/ios-framework-size查看。

希望它对你有帮助,就像对我一样。

于 2018-05-23T20:45:47.540 回答