6

无论如何在运行时加载一个目标 c 脚本,并针对当前 iPhone 应用程序中的类/方法/对象/函数运行它?

主要注意事项:我想这样做的主要原因是允许我快速构建应用程序原型,然后在完成主要原型设计阶段后,获取我正在编写的脚本并在构建时编译它们。我从不打算发布一个带有客观 c 解释器的应用程序。

我问的原因是我一直在玩iPhone 蜡,一个可以嵌入到 iPhone 应用程序中的 lua 解释器,它工作得非常好,因为在你的目标中公开可用的任何对象/方法/函数C 代码是自动桥接的,并且在 lua 中可用。

这允许您通过简单地将应用程序的核心设置为用户文档目录中的 lua 文件来快速构建应用程序原型。只需重新加载应用程序,您就可以测试对 lua 文件的更改,而无需在 XCode 中重新构建应用程序 - 节省大量时间!

但是,对于 Apple 最近 3.1.3 SDK 的东西,它让我想到,进行这种类型的快速原型制作最安全的方法是如果你可以使用 Objective C 作为解释代码......那样,最坏的情况下,你可以只需在发布之前将其编译到您的应用程序中即可。我听说 lua 源可以编译为字节码,并在构建时链接,但我认为最终安全的事情是脚本源是在目标 c 中,而不是 lua。这样,您的来源始终处于目标 c 中,无论如何。

这让我想知道(我已经搜索过,但一无所获)是否有任何关于如何在 iPhone 应用程序中嵌入 Objective C 解释器的示例?这将允许您针对构建在二进制文件中的当前类快速构建您的应用程序原型,并且当您即将部署您的应用程序时,而不是通过应用程序内解释器运行这些类,而是编译它们。

在 iPad 和 OS 4 中,蓝牙和虚拟键盘可以与 iPhone 和 iPad 一起使用……这将使这种快速原型设计变得更加有用,至少在开发时间是这样。例如,如果您的应用程序中内置了解释器并在 iPad 上安装了它,那么您可以在旅途中针对解释器进行编码,而无需 XCode。对我来说,让源代码回到“苹果批准”状态的最有用的方法是脚本是否是 Objective C。

4

8 回答 8

3

Objective-C 实际上只是带有运行时和一些语法糖的 C。它是一种固有的编译语言(我认为没有任何可用于 C 的生产就绪解释器,尽管我可能错了)。

Xcode 曾经有一个名为ZeroLink的功能来加快编译时间,但在 Xcode 3 中删除了它,因为它导致了太多的错误。

于 2010-04-27T17:05:26.173 回答
3

这并非完全不可能,但它并不容易值得。Objective-C 通常不是解释性语言。这不是不可克服的——解释与编译在大多数情况下只是一种实现选择。例如,Ruby 传统上被认为是一种解释性脚本语言,但 MacRuby 将其编译为代码,就像 Objective-C 生成的一样。因此,可以为 Objective-C 编写解释器,但没有人这样做。你必须自己写。

此外,规则禁止使用 Apple 的 Javascript 解释器以外的解释器。到目前为止,这还没有对任何人强制执行,但是如果您想成为一个非常直的箭头,那么不幸的是,解释代码也是如此。

于 2010-04-27T17:12:50.103 回答
2

好吧,有几点值得提出:

  1. 既然可以编译,为什么还要解释Objective-C 代码?我理解“快速原型设计”的想法,但在 Lua 中这样做的部分原因是因为 Lua 是一种比 Objective-C 更简洁的语言。我不知道解释 Objective-C 是否会有同样多的好处。
  2. 如果您想在您的应用程序中拥有插件或可动态加载的模块,您始终可以将它们编译为单独的包并使用NSBundle或类似机制加载它们。
  3. 综上所述,我不知道任何 Objective-C 解释器。您可能必须自己编写。我不确定它是否会违反 Apple 的准则:它仍然是 Objective-C 代码,但我认为他们也有针对解释代码的规则。(不过,我想他们从未设想过解释Objective-C的假设场景。)
于 2010-04-27T17:08:46.107 回答
1

你应该看看cycript。您可以连接到应用程序,即时替换方法,更改变量,随叫随到。它是 Objective-C 和 JavaScript 之间的混合语言。您需要越狱您的 iDevice 才能安装它。

于 2013-04-30T10:07:14.167 回答
1

Ch 是一个商业 C/C++ 解释器。它是由一家名为 SoftIntegration 的公司制造的。

于 2011-04-14T15:44:54.287 回答
1

不是在 iPhone 上,而是在模拟器上,您可以使用
动态代码注入工具
http://dyci.github.com/

还有另一个工具,它的工作方式有点不同,但允许相同的功能
http://injectionforxcode.com/

于 2012-12-05T18:22:07.553 回答
1

有一个基本的 Objective-C 解释器:

查看帖子:

是否有适用于 Mac 的 Objective-C 解释器?

还:

http://forrst.com/posts/Beginnings_of_a_Objective_C_Interpreter-Tdl

于 2012-12-07T05:23:41.143 回答
0

查看Objective-C 运行时参考的文档objc_msgSend()和其他部分。您基本上可以解析文本并将其发送到运行时。

于 2010-04-27T17:31:17.313 回答