嗨,我正在研究 iPhone 开发,而 Objective-C 不是我的首选语言。据我目前所见,Ruby 不能用于在 iPhone 上与 Cocoa Touch 对话。
所以我的问题是,我错了吗?我可以在 iPhone 上使用 Ruby 开发 Cocoa Touch 应用程序吗?Ruby 在 iPhone 上的未来会是什么样子?
嗨,我正在研究 iPhone 开发,而 Objective-C 不是我的首选语言。据我目前所见,Ruby 不能用于在 iPhone 上与 Cocoa Touch 对话。
所以我的问题是,我错了吗?我可以在 iPhone 上使用 Ruby 开发 Cocoa Touch 应用程序吗?Ruby 在 iPhone 上的未来会是什么样子?
现在您可以使用RubyMotion
在 iPhone OS 中,如果您尝试使用 mprotect() 将内存的可写部分标记为可执行,则 mprotect() 将失败。这打破了像 RubyCocoa(可能还有 MacRuby)这样使用 libffi 在运行时创建 Objective-C 方法处理程序的桥梁。我相信这是设计使然,因为并非总是如此。
归根结底,这更多的是平台政治问题,而不是技术问题,但存在解决此问题的技术方法。不是在运行时生成自定义方法处理程序,而是预编译一个根据需要分配的可重新配置的处理程序池,基本上使桥接过程完全由数据驱动。据我所知,这还没有在 RubyCocoa 或 MacRuby 中完成。
另一个需要考虑的重要事情是编译的 Ruby 和 RubyCocoa 运行时可能比编译的 Objective-C 应用程序大得多。如果这些库可以在 iPhone 上使用,这将不是问题,但就目前而言,即使您有 RubyCocoa 工作,您也可能不想将它用于您分发的应用程序。
不,你是对的。目前,很可能在可预见的未来,Ruby 不会成为一种选择,至少对于 AppStore 应用程序来说是这样。您没有理由不能在越狱手机上执行此操作,但 Apple 非常适合用于官方开发的 Objective C。
作为一名了解多种不同语言的程序员,你会做得更好——将 Objective-C 视为一个很好的学习机会。
我发现你用其他语言学习的东西通常会让你成为一个更好的程序员,并让你对你已经知道的其他语言有新的见解。
rhomobile是在 iPhone 上运行 ruby 代码的一个选项,但它本质上是 Web 应用程序开发。Web 服务器在 iPhone 上本地运行,您的 ruby 代码呈现为标准客户端 Web 技术 (html/css/javascript)。
其实,红宝石可可桥一点也不尴尬;事情工作得非常顺利,一直到连接 IB 中的插座等。生成的代码非常漂亮。
至于 iPhone 开发,如果你想要一个官方的 AppStore 应用程序,那么你很不幸。Apple 规定 iPhone 是 Obj-C/Cocoa Touch,并且 SDK 许可证中有一个条款说他们将拒绝应用程序的其中一个原因是拥有语言解释器/JIT 编译器,所以你不能添加 ruby 解释器在您自己的应用程序中。
离题,但有趣的是,这就是为什么用于 iPhone 的 Flash 是 Adobe 冒烟的原因。根据 Apple 的许可,即使他们愿意,他们也无法将 swf 播放器加入 AppStore。
呃,Rhodes (Rhomobile) 确实允许你在 iPhone 和所有其他智能手机上做本地应用程序。是的,我们确实利用通过 WebUIView 控件进行渲染。但我们允许所有设备功能和同步本地数据。
您可能想看看shinycocos。它是cocos2d-iphone的子项目,一个用于 iPhone 的 Objective-C 游戏编程框架。
我还没有玩过它,但从git README我推断它会将 Ruby 1.9.1 捆绑到您的应用程序中。
我在 3.1.3 越狱的 iPod Touch 1G 上安装了 Cydia 的 ruby 包:
似乎工作。
现在至于可可味,我会假设这是一个完全不同的故事。
看看http://www.appcelerator.com/products/titanium-mobile/ “使用 Web 技术构建的原生 iPhone 和 Android 应用程序”。
听起来不错不是吗?;-)
不,您不能在 Ruby 中创建 iOS 本机应用程序。Mac 和 iOS 的原生应用程序只有两个选项:-
Objective C和Swift 编程语言
教程:-
如果您熟悉 Ruby,并且只想通过 Ruby 创建 iOS 应用程序。Ruby Motion可以成为您的跨平台选项,但它不是免费的。
跨平台
我想它现在不会工作,但我想你最终将能够使用 MacRuby 来构建 iphone 应用程序。苹果为此付出了很多努力
您不必使用 Objective-C 来编写 iPhone 应用程序。如果您使用 QuickConnectiPhone,http://sourceforge.net/projects/quickconnect/,您可以完全用 JavaScript、CSS 和 HTML 编写它,并且仍然有一个可安装的应用程序而不是 Web 应用程序。
如果您了解 ruby,您可能已经在使用 JavaScript。
要了解如何安装、运行它以及其他想法,请访问 tetontech.wordpress.com
您可以尝试使用开源Ruby-Cocoa 桥接器。但我认为 Ruby 和 ObjC 之间存在一些阻抗不匹配,这使得它使用起来有点尴尬。
Ruby Cocoa 桥可能不起作用。大多数动态语言的桥都需要生成可执行的 thunk(手动或使用 libffi)。更有限的桥(对于更多静态语言)可能没有这样的问题。
在任何一种情况下,建立一座桥梁可能都需要更加熟悉 Objective C 运行时,而不是仅仅学习如何编写 Cocoa Touch 应用程序,这可能一开始就失去了这样做的意义。
目前不是真的,Apple 改变他们的政策,看看 ShinyCocos,是 Cocos2D-iphone 游戏框架的 ruby 绑定。
一种可能的解决方案是创建一个应用程序包装,例如包含 ruby-vm 的 rice 库(google it)。我认为您将能够创建可以暴露给 ruby 的 c++ 包装器,从而为使用 ruby 进行 iphone 开发创建环境。不过,这可能需要很多工作^^