是否禁止在AppStore的iOS应用程序中使用JIT(just-in-time)编译代码?

我听说JIT编译代码在iOS AppStore中是不允许的,因为禁止在堆中放置可执行代码。 那对吗? 或者只是一个传闻?

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

  2. JIT编译成Javascript源代码文本似乎是被允许的。 (不是一个笑话,有一个商业编译器,这样做。)编译成字节码由一个解释器写的JavaScript执行,并在UIWebView中运行可能会使审阅者混淆足以可能拒绝这样做的应用程序。

  3. iOS安全沙箱可能会杀死任何尝试跳转到任何dynamic生成的数据的应用程序。

JIT编译成Javascript源代码文本似乎是被允许的。 (不是一个笑话,有一个商业编译器,这样做。)编译成字节码执行…

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

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

使用这种方法你会得到非常快的“字节码”。 也许商业编译器是这样工作的。 我不能相信在iOS上有一个运行本机代码的JIT编译器。

那是对的。 您可以阅读设置开发者注册时需要接受的iOS标准协议:

3.3.2应用程序不得下载或安装可执行代码。 如果所有的脚本,代码和解释器都被封装在应用程序中,并且没有被下载,那么解释的代码只能在应用程序中使用。 上述唯一的例外是脚本和代码下载并运行苹果的内置WebKit框架。