无论如何在运行时加载一个目标c脚本,并针对当前iPhone应用程序中的classes / methods / objects / functions运行它?
主要注意: 我想做的主要原因是允许我快速建立应用程序原型,然后,在我之后做了一个主要的原型设计阶段,拿起我写的脚本,然后在构建时编译它们。我从来没有计划在其中发布带有客观c解释器的应用程序。
我问的原因是我一直在玩iPhone wax,一个可以嵌入到iPhone应用程序中的lua解释器,并且它的工作非常好,在任何对象/方法/功能的意义上您的Objective C代码中公开提供的内容将自动桥接,并在lua中提供。
这使您可以通过简单地将应用程序的核心设置为用户文档目录中的lua文件来快速构建应用程序原型。只需重新加载应用程序,您就可以测试对lua文件的更改,而无需在XCode中重建应用程序 - 节省大量时间!
但是,有了Apples最新的3.1.3 SDK的东西,它让我觉得做这种类型的快速原型的最安全的方法是,如果你可以使用Objective C作为解释代码......那样,最糟糕的情况,您可以在发布之前将其编译到您的应用中。我听说lua源代码可以编译成字节代码,并在构建时链接,但我认为最终安全的事情是如果脚本源是在客观c,而不是lua。这样,无论如何,您的来源始终是客观的。
如果有关于如何在iPhone应用程序中嵌入Objective C Interpreter的示例,这会让我想知道(我已经搜索过,但没有提出任何内容)?这将允许您根据二进制文件中内置的当前类快速构建应用程序原型,并且,当您即将部署应用程序时,而不是通过in app解释器运行类,而是编译它们。
使用iPad和OS 4,蓝牙和虚拟键盘可以与iPhone和iPad配合使用......这将使这种类型的快速原型制作更有用,至少在开发时间。例如,如果您的应用程序内置了解释器并将其放在iPad上,则可以在旅途中对解释器进行编码,而无需XCode。对我而言,将源恢复为“苹果批准”状态的最有用方法是脚本是否为目标C。
答案 0 :(得分:3)
Objective-C实际上只是带有运行时和一些语法糖的C.它是一种固有的编译语言(我不认为有任何生产就绪的C语言解释器,尽管我可能错了)。
Xcode曾经有一个名为ZeroLink的功能来加快编译时间,但在Xcode 3中将其删除,因为它导致了太多错误。
答案 1 :(得分:3)
这并非完全不可能,但要值得这样做并不容易。 Objective-C通常不是解释性语言。这不是不可克服的 - 在大多数情况下,解释与编译只是一种实现选择。例如,Ruby传统上被认为是一种解释性脚本语言,但MacRuby将其编译为代码,就像Objective-C产生的那样。因此可以为Objective-C编写一个解释器,但没有人这样做。你必须自己写。
此外,规则禁止Apple的Javascript解释器以外的解释器。到目前为止,这还没有对任何人强制执行,但是如果你想要成为一个非常直的箭头,那么解释的代码也是不幸的。
答案 2 :(得分:2)
嗯,有一些值得提出的要点:
NSBundle
或类似机制加载它们。答案 3 :(得分:1)
Ch是商业C / C ++解释器。它由一家名为SoftIntegration的公司制作。
答案 4 :(得分:1)
不在iPhone上,但在模拟器上,您可以使用
执行此操作
动态代码注入工具
http://dyci.github.com/
还有另一种工具,它的工作方式略有不同,但允许相同的功能 http://injectionforxcode.com/
答案 5 :(得分:1)
有一个基本的Objective-C解释器:
查看帖子:
Is there an Objective-C Interpreter for the Mac?
此外:
http://forrst.com/posts/Beginnings_of_a_Objective_C_Interpreter-Tdl
答案 6 :(得分:1)
你应该看看cycript。你可以挂钩应用程序,动态替换方法,更改变量,你可以命名它。它是Objective-C和JavaScript之间的混合语言。 您需要jailbreak您的iDevice才能安装它。
答案 7 :(得分:0)
查看objc_msgSend()
的文档以及Objective-C Runtime Reference的其他部分。您基本上可以解析文本并将其发送到运行时。