Swift项目比我预期的要大

时间:2014-08-19 11:30:47

标签: ios memory swift ios8

我的项目有4个框架和31个(31种语言)自定义键盘扩展。当我编译它时,它需要98 MB的内部设备内存。

所以我决定看看为什么这么多。我在设备文件夹中找到了我的项目。

enter image description here

文件夹插件需要38 MB,文件夹框架需要42 MB。

enter image description here

enter image description here

在Frameworks文件夹中有4个我的框架和8个Swift的框架,你可以在上面的图片中看到

enter image description here

我的每个框架都包含相同的8个Swift框架。我能以某种方式只添加一次这种快速框架吗?

并非全部。在插件文件夹中是我的自定义键盘扩展文件夹。我有200个图像添加到我的一个模块(框架)中,并将其引用到每个扩展中(因为它们需要用于构建键盘的图像)。但在项目文件夹中,每个扩展文件夹都有该图像。它需要大量的内存。

所以...我能以某种方式只添加一次图像(不是每个自定义键盘扩展名)吗?我可以只添加一次swift框架(不是每个我的框架和项目)吗?

修改:

我暗示每个自定义键盘扩展都像是单独的程序。所以maby他们真的需要将这些图像复制到每个扩展名中。

2 个答案:

答案 0 :(得分:3)

看起来这是由于为实现兼容性保证而采取的措施。

  

... Xcode在你的应用程序包中嵌入了一个小的Swift运行时库。由于库是嵌入式的,因此您的应用程序使用一致的Swift版本,该版本可在过去,现在和将来的操作系统版本上运行。

有趣的是,您在每个框架中都能看到它。该声明似乎表明该框架不包含运行时库。

  

虽然确保了应用程序的运行时兼容性,但Swift语言本身将继续发展,二进制接口也将发生变化。为了安全起见,应用应使用相同版本的Xcode和Swift编译器构建应用程序的所有组件,以确保它们协同工作。

来源:Swift Blog - Compatibility

我不确定你是否可以控制它。一个很好的选择是打败devforums,看看Swift的创造者是否可以减少更多光线。

答案 1 :(得分:0)

现在没有必要对每种语言进行扩展,所以现在这不是什么大问题。您应该为所有语言使用1个扩展名,或者至少为语言组使用。