如何减小我的自定义iOS框架的大小?

3
我用Swift4在Xcode 9.2中创建了一个自定义iOS框架,其中包含9个.swift文件。当我尝试进行存档并创建.framework文件时,结果显示大小为5MB。然而,这9个.swift文件的总文件大小仅为72KB。存档的.framework文件太大(5 MB),我的客户不同意。
我尝试删除不必要的代码,但大小仍然保持不变。他们希望我将其缩小到Android框架的大小,即34KB。这是我第一次创建框架,我已经没有解决方案了,有人能帮我在不减少文件的情况下减小框架的大小吗?

1
我看了一下Framework SizeUnderstanding iOS framework size,我只是想知道你们的框架中是否包含多个二进制文件 - 据我所了解,你们不需要删除它们或者做任何其他操作,因为苹果会在他们那边处理 - 但我可能错了。 - undefined
是的,我有捆绑的.framework文件,它可以在模拟器和真实设备上运行。希望你所说的二进制文件就是指这个,如果我理解错了,请纠正我。另外,请给出你的建议,帮助我减小文件大小。 - undefined
是的,我在二进制方面进行参考。就个人而言,我认为你的客户不需要担心,iOS和Android的二进制工作方式有显著的区别 - 但这只是我的观点。 - undefined
在通知他们之前,我应该清楚地知道是否没有办法减小尺寸,这就是为什么我试图找出是否有我忽略的东西。 - undefined
1个回答

3
有两件事情我尝试过并且它对我有效。也许对你有用。
链接器默认导出所有符号。您可以通过一些技术来限制,这些技术在此处的符号可见性文章中进行了讨论。此外,链接器中有一个很好的功能,允许您指定必须导出或不导出的符号。仅导出接口符号可能有助于减小大小并避免客户端浪费内存。
因此,在实践中:
1. 假设我的框架存档是MyFramework.framework。 2. 运行$ nm -g MyFramework.framework/MyFramework列出了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中查看它。
希望它能像对我一样有用。

你能给我解释一下你是如何一步一步实现的吗?从创建通用目标的开始。 - undefined
(1)按照步骤1,你会得到原始的.framework文件。 (2)运行nm -g ABC.framework/ABCBinary命令,获取所有导出的符号。 (3)删除不需要的符号,只选择与客户端接口相关的符号。 (4)将这些符号保存在一个文本文件中,并在“Build Settings -> Exported Symbols File”中设置其路径。 (5)重新构建你的.framework文件。然后可以再次运行nm -g ABC.framework/ABCBinary命令,检查导出的符号是否相应地发生了变化。 (6)然后按照原始答案中提到的步骤进行剥离操作。 - undefined
你能进一步详细说明第一步和第二步吗? - undefined

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