2013-07-19 77 views
6

我在Delphi XE4 for iOS中创建了一个小应用程序。我有7种形式。一切都很好。Delphi和iOS文件大小

但我有点震惊的文件大小!它在模拟器上有44MB。我为android制作的应用程序差不多是2MB。它有一个320kb的jpg格式的背景图片 我没有在iPhone设备上测试它!

如果您在XCode上使用ListBox,文本,按钮在窗体上创建,那么正常大小的应用程序是什么?

有没有办法通过更改Delphi中的任何设置来减少文件大小?

+0

您是否尝试在发布模式下定位iOS ARM?它应该更小。已知更新版本的Delphi向.Exe添加大量内容,包括RTTI和调试信息。 –

+0

这看起来不对。我有完整的应用程序XE3超过300个窗体,DevExpress和其他VCL和大小为45MB。 IOS应用程序应该更小! – ZibNimer

回答

17

大约15 MB听起来是Delphi for iOS最小的可执行文件大小(在Release模式下没有调试信息)。如果你不需要它,你可以尝试disable the RTTI generation。但没有很多希望。

它比ObjectiveC“native”大得多,但它嵌入了整个Delphi RTL和FireMonkey库来完成所有渲染,因此它更大。

用FPC编译的使用本地iOS控件的“plain Objective Pascal”可执行文件应该更小。或者编辑时使用“Oxygene for Cocoa”,它应该小得多。

但是不要只看可执行文件的大小,考虑执行过程中使用的内存和一般速度。您可能必须与嵌入PhoneGap的HTML5应用程序进行比较。 FireMonkey在屏幕上渲染速度可能较慢,但使用ARC内存处理的本机代码应该比JavaScript更强大。

不要忘记你的智能手机现在有很多内存。 ;)

不幸的是,在iOS下无法与外部库(.so)共享一些代码,所以你将无法使用类似Delphi包的东西来减少可执行文件的大小。

当然,Apple一直在竭尽全力,迫使开发者使用自己的工具和语言。与微软一样,尤其是Windows 8,Delphi for iOS并没有声称比XCode + Objective C更好,但是为了跨平台,您可以尽可能多地与您的服务器或Windows/Mac OSX应用程序共享代码:不能在Mac世界之外使用你的Objective C代码......但是你可以在平台之间共享你的Delphi代码,即使UI需要重写手机。这就是为什么与JavaScript/PhoneGap,MonoDroid/MonoTouchAppCelerator更公平的比较。

一些数据,从StackOverflow的检索到:

一个问题:AFAIK AppStore中3G下载的大小限制约为20 MB。

+0

如果通过应用程序商店通过空中下载发送大小是非常重要的 –

+0

@DavidHeffernan但是如果您希望您的应用程序能够被所有人下载,XCode/ObjectiveC中的专用版本是值得的。如果您希望您的应用程序成为专有系统的一部分,Delphi for iOS将帮助您通过重复使用代码和知识来降低成本。我的意思是,我们不必错过目标。 –

+0

我发现一个在Delphi中制作的应用程序,它只有11MB。 当我创建简单的应用程序没有什么,只有1个表格我有35MB。 下周我会购买Apple开发者账户并且会生成IPA文件。也许当建设IPA文件大小减少... – Barlet

0

为了增加阿尔诺的回答是:

您可以使用,而不是Firemonkey那些本地控件。
Babak Yaghoobi已经编写了一个库让Delphi使用操作系统的本地控件。

在这里看到的iOS:http://sourceforge.net/projects/dpfdelphiios/files/?source=navbar
这里为Android:http://sourceforge.net/projects/dpfdelphiandroid/

Firemonkey渲染使用100%Delphi代码,原生控制在手机中使用的ROM的内部代码。

+0

对于非本地控件(即TForm),你仍然需要嵌入其余的FireMonkey库。如果你想达到这样的长度,只要把德尔菲丢掉,如果它让你感到困扰的话,那么它就会完全原生。 大小很重要,但是,Facebook应用程序是70 MB。 –

+0

@SteveChilds如果没有使用类,则由于删除了死代码,其代码将从可执行文件中删除。所以你的评论是不正确的。 – Johan

0

我们有一个具有6种形式和许多控件的iOS应用程序。 ipa的发布时钟刚刚超过11 MB,并包含所有必需的应用程序图标(总计28个,超过1 MB)。

在我看来,这并不是那么大,所以我在这里没有看到问题。