是否禁止在iOS应用程序中为AppStore使用JIT(即时)编译代码?

时间:2011-02-20 01:35:27

标签: ios jit appstore-approval

我听说iOS AppStore中不允许使用JIT编译代码,因为禁止在堆中放置可执行代码。那对吗?或只是谣言?

3 个答案:

答案 0 :(得分:5)

  1. 不允许使用可安装代码(“或”是3.3.2中的关键字)。一切(Javascript除外)必须静态链接。

  2. JIT编译成Javascript源代码文本似乎是允许的。 (不是一个玩笑,有一个商业编译器可以做到这一点。)编译成字节码以便由编写Javascript并在UIWebView中运行的解释器执行可能会使审阅者感到困惑,可能会拒绝执行此操作的应用程序。

  3. iOS安全沙箱可能会杀死任何试图跳转到任何动态生成数据的应用。

答案 1 :(得分:2)

这是对的。 您可以阅读iOS标准协议,在设置开发人员注册时需要接受该协议:

  

3.3.2应用程序可能无法下载或安装可执行代码。   解释的代码只能用于   应用程序,如果所有脚本,代码   和口译员包装在   申请而非下载。该   唯一的例外是上述情况   下载和运行的脚本和代码   Apple的内置WebKit框架。

答案 2 :(得分:2)

  

JIT编译成Javascript源代码文本似乎是允许的。 (不是一个玩笑,有一个商业编译器可以做到这一点。)编译成字节码以便执行...

我也想到了在iOS上运行的编译器(不是JIT,但是真正的编程语言)。我的想法是使用地址来编译器编写的函数,将伪操作码作为指令而不是“传统字节码”(每个伪操作码1个字节)。

一个ARM寄存器保留为指向“字节码”的“代码指针”(此处命名为“rCP”)。伪操作码函数的最后一条指令是“ldmfd rCP!,{pc}”。这意味着函数的最后一条指令不是“返回”,而是跳转到下一个操作码。

使用此方法可以获得非常快速的“字节码”。也许商业编译器的工作原理如下。我无法相信在iOS上运行本机代码的JIT编译器。