在iPhone应用中使用Ruby/Python代码?
我的应用需要使用一个只支持Python和Ruby的库。根据我的理解,苹果允许在iPhone上运行Ruby,只要用户不能随便执行代码(比如Rhomobile就是用Ruby的)。
我该如何把Ruby/Python和我的应用打包在一起,从我的Obj-C代码中调用一个函数,并把结果(一个字符串)以C或Obj-C的格式返回呢?
2 个回答
顺便说一下,App Store上有很多基于Rhomobile Rhodes的应用,比如维基百科、MyHumana、RhoLogic for SugarCRM、Multilingual、TrackR等等,还有很多其他的应用。这些应用的更多信息可以在http://rhomobile.com找到。我们经常和苹果公司沟通,并采取措施确保我们的应用始终符合所有iOS的服务条款。
另外,严格来说,你最终发布的本地应用里并不是一个解释器,而是在除了黑莓以外的所有平台上,使用的是Ruby 1.9的字节码执行器。而真正的解释功能(eval)是故意禁用的。
你不能这样做。新的SDK协议禁止使用除了C、C++或Objective-C以外的原生语言,而且这个协议一直以来都不允许动态解释代码。关于这些规则如何执行还有些不明确,但为了安全起见,最好还是先别用其他语言,等这些问题解决了再说。
补充:据我所知,目前没有技术手段可以在iPhone上运行Python,具体可以参考这个问题。听说过可以在iPhone应用中嵌入Lua,但没有听说过Python。你可以在越狱的iPhone上使用Python,但不能通过应用商店。
关于Ruby的情况也差不多,具体可以参考这个问题。iPhone上没有自带Ruby解释器,而编译器也还远未成熟。Rhomobile通过将解释器和框架打包到可执行文件中来工作,但我很怀疑这能通过新的SDK协议。如果你真的想用Ruby,Rhomobile可能是最好的选择(因为自己实现一个解释器工作量很大,而且同样不太可能被批准)。现在的情况有点让人失望——我们能期待的就是MacRuby最终能工作,并且苹果会批准它。不过这还需要一段时间。
补充 2:我还发现了tinypy,这可能对Python有帮助。不过我怀疑它能运行真正的库。