【问题标题】:Can you develop native iPhone apps in Ruby?你能用 Ruby 开发原生 iPhone 应用程序吗?
【发布时间】:2010-09-18 04:37:18
【问题描述】:

您好,我正在研究 iPhone 开发,但 Objective-C 不是我的首选语言。据我目前所见,Ruby 不能用于在 iPhone 上与 Cocoa Touch 对话。

所以我的问题是,我错了吗?我可以在 iPhone 上使用 Ruby 开发 Cocoa Touch 应用程序吗? iPhone 上的 Ruby 的未来会是什么样子?

【问题讨论】:

  • 苹果刚刚放宽了对应用商店应用开发工具的限制:apple.com/pr/library/2010/09/09statement.html
  • 嗨,3 年多之后,有一个新运动试图让 Apple 为 iOS 提供 MacRuby :) 在这里阅读更多相关信息 - welovemacruby.com 并请确保提交该错误报告:)
  • 很高兴,我想 Apple 正在内部考虑 MacRuby

标签: iphone ruby cocoa-touch ios


【解决方案1】:

不,你不能在 Ruby 中创建 iOS 原生应用。 Mac 和 iOS 的原生应用只有两种选择:-

Objective CSwift 编程语言

教程:-

Apple's official tutorial on Objective C

Apple's official tutorial on Swift Programing Language

如果您熟悉 Ruby,并且只想通过 Ruby 创建 iOS 应用程序。 Ruby Motion,可以是你的跨平台选项,但它不是免费的。

跨平台

【讨论】:

    【解决方案2】:

    现在您可以使用RubyMotion

    【讨论】:

    • 仅供参考,RubyMotion 是付费产品。
    【解决方案3】:

    目前不是真的,Apple 改变他们的政策,看看 ShinyCocos,是 Cocos2D-iphone 游戏框架的 ruby​​ 绑定。

    https://github.com/funkaster/shinycocos

    【讨论】:

      【解决方案4】:

      我在 3.1.3 越狱的 iPod Touch 1G 上安装了 Cydia 的 ruby​​ 包:

      似乎有效。

      至于可可触感,我会假设这是一个完全不同的故事。

      【讨论】:

      • 我现在看到这篇文章有更多的反对意见,这篇文章显然需要更新,因为它已经快 3 年了。我确信仍然有一种方法可以以非常相同的方式运行 ruby​​,如果 ruby Cydia 包不在那里,我会感到惊讶。
      【解决方案5】:

      看看http://www.appcelerator.com/products/titanium-mobile/ “使用 Web 技术构建的原生 iPhone 和 Android 应用程序。”

      听起来不错吧? ;-)

      【讨论】:

        【解决方案6】:

        一种可能的解决方案是创建一个应用程序包装,例如包含 ruby​​-vm 的 rice 库(google it)。我认为您将能够创建可以暴露给 ruby​​ 的 c++ 包装器,从而为使用 ruby​​ 的 iphone 开发提供环境。不过这可能需要做很多工作^^

        【讨论】:

          【解决方案7】:

          您可能想看看shinycocos。它是cocos2d-iphone 的子项目,这是一个用于 iPhone 的 Objective-C 游戏编程框架。

          我还没有玩过它,但从git README 我推断它会将 Ruby 1.9.1 捆绑到您的应用程序中。

          【讨论】:

          • 前段时间我也看了shinycocos,安装不了,所以改用obj-c学习了……不过他们正在用它开发真正的游戏……红宝石!!!所以绝对值得一试!!
          【解决方案8】:

          呃,Rhodes (Rhomobile) 确实允许您在 iPhone 和所有其他智能手机上开发本地应用程序。是的,我们确实利用通过 WebUIView 控件进行渲染。但我们允许所有设备功能和同步本地数据。

          【讨论】:

            【解决方案9】:

            rhomobile 是在 iPhone 上运行 ruby​​ 代码的一个选项,但它本质上是 Web 应用程序开发。 Web 服务器在 iPhone 上本地运行,您的 ruby​​ 代码呈现为标准客户端 Web 技术 (html/css/javascript)。

            http://rhomobile.com/

            【讨论】:

              【解决方案10】:

              在 iPhone 操作系统中,如果您尝试使用 mprotect() 将内存的可写部分标记为可执行,则它会失败。这打破了像 RubyCocoa(可能还有 MacRuby)这样使用 libffi 在运行时创建 Objective-C 方法处理程序的桥梁。我相信这是设计使然,因为并非总是如此。

              最终,这更多的是平台政治问题而不是技术问题,但存在解决此问题的技术解决方法。不是在运行时生成自定义方法处理程序,而是预编译一个根据需要分配的可重新配置的处理程序池,基本上使桥接过程完全由数据驱动。据我所知,这还没有在 RubyCocoa 或 MacRuby 中完成。

              另一个需要考虑的重要事情是,编译的 Ruby 和 RubyCocoa 运行时可能比编译的 Objective-C 应用程序大得多。如果这些库可以在 iPhone 上使用,这将不是问题,但就目前而言,即使您有 RubyCocoa 工作,您也可能不想将它用于您分发的应用程序。

              【讨论】:

                【解决方案11】:

                Ruby Cocoa 桥可能无法工作。大多数动态语言的桥都需要生成可执行的 thunk(手动或使用 libffi)。更有限的桥(对于更静态的语言)可能不存在此类问题。

                在任何一种情况下,建立一座桥梁可能都需要更加熟悉 Objective C 运行时,而不是仅仅学习如何编写 Cocoa Touch 应用程序,这可能一开始就失去了这样做的意义。

                【讨论】:

                  【解决方案12】:

                  您不必使用 Objective-C 来编写 iPhone 应用程序。如果您使用 QuickConnectiPhone,http://sourceforge.net/projects/quickconnect/,您可以完全用 JavaScript、CSS 和 HTML 编写它,并且仍然有一个可安装的应用程序而不是 Web 应用程序。

                  如果您了解 ruby​​,您可能已经在使用 JavaScript。

                  要了解如何安装、运行它以及其他想法,请访问 tetontech.wordpress.com

                  【讨论】:

                    【解决方案13】:

                    作为一名了解多种不同语言的程序员,你会更好 - 将 Objective-C 视为一个很好的学习机会。

                    我发现你用其他语言学习的东西通常会让你成为一个更好的程序员,并让你对你已经知道的其他语言有新的见解。

                    【讨论】:

                    • 我完全同意学习新语言,因为这是我非常喜欢的事情。老实说,我并不期待回到 C 风格的语言,因为我发现 C 对于应用程序级编程来说过于神秘。不过,Objective-C 肯定比 C++ 更有用,所以我对此表示感谢
                    • 语言不是我更喜欢一种语言而不是另一种语言的唯一原因——我继续在库和工具上进行大量投资。没有这些库会严重影响开发时间。
                    • 虽然我完全同意,但这是一个建议,而不是答案。
                    • 这是一个答案,我认为使用非本地语言进行开发是错误的,即使它有效。有时最好回答他们没有问但应该问的问题。
                    • 这会是一个很好的评论,但它不能回答问题。
                    【解决方案14】:

                    我想它现在不会工作,但我想你最终将能够使用 MacRuby 来构建 iphone 应用程序。苹果为此付出了很多努力

                    Here's a link to an ADC article describing how to build normal cocoa apps

                    【讨论】:

                      【解决方案15】:

                      其实,红宝石可可桥一点也不尴尬;事情运行得非常顺利,一直到连接 IB 中的插座等。生成的代码非常漂亮。

                      对于 iPhone 开发,如果你想要一个官方的 AppStore 应用程序,那么你很不幸。 Apple 规定 iPhone 是 Obj-C/Cocoa Touch,并且 SDK 许可证中有一个条款说他们拒绝应用程序的其中一个原因是拥有语言解释器/JIT 编译器,所以你无法自己在您的应用中添加 ruby​​ 解释器。

                      离题,但有趣的是,这就是为什么用于 iPhone 的 Flash 是 Adob​​e 冒烟的原因。根据 Apple 的许可,即使他们愿意,他们也无法将 swf 播放器放到 AppStore。

                      【讨论】:

                      • 如果 Apple 许可它,iPhone 的 Flash 仍然可以发生。该协议允许明确许可,它只是为安装任何旧的解释器提供了一个障碍。
                      • 我认为他们不会拒绝该应用程序。该应用程序根本无法运行。操作系统不会在内存堆外执行指令。
                      【解决方案16】:

                      有一个开源的Ruby-Cocoa bridge 你可以尝试开始工作。但我认为 Ruby 和 ObjC 之间存在一些阻抗不匹配,这使得它使用起来有点尴尬。

                      【讨论】:

                      • 这个答案与在 iPhone 上运行 Ruby 的法律和技术障碍无关
                      • 这不适用于 iphone,RubyCocoa 不是 CocoaTouch
                      【解决方案17】:

                      不,你是对的。目前,并且很可能在可预见的未来,Ruby 不会成为一种选择,至少对于 AppStore 应用程序来说是这样。没有理由不能在越狱手机上执行此操作,但 Apple 非常适合用于官方开发的 Objective C。

                      【讨论】:

                      • 为什么让 Ruby 在 Mac 而不是 iPhone 中成为一等公民?
                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2018-05-20
                      • 1970-01-01
                      相关资源
                      最近更新 更多