使用 RubyMotion 构建一个完整的 iOS 交互执行环境
iOS 开发过程中,调试 UI,因为官方开发环境不足,一般都是配合 Reveal这种工具,来调试修改,后来苹果推出 Swift 的时候,引入了 Playground,Xcode 中也增加了 UIView Debug,这样一来就简化了 View 层的调试难度。然而因为两者各自有问题:
Playground:
- 不是在完整的应用执行环境中执行的
- 设置 View 属性不够灵活,只能通过 Playground 中的代码来执行
Reveal:
- 能设置的属性有限
- 能设置控件的属性有限
此外这两种方式都没有交互执行代码的能力。一般解释执行的语言都带这个福利,一边调试一边写代码,效率飙升。Swift 中带一个环境,然而也不是完整的环境。
是时候让 RubyMotion 出场了。这个项目好几年了,目标是拿 Ruby 来写移动端的项目,听起来很 Cool,然而因为各种原因,最终没发展起来,我感觉以后也够呛,有些狗注定单身,有些项目注定小众。项目的作者也是 MacRuby 的作者,有兴趣自己了解,不赘述。
RubyMotion 的思路是用 Ruby 代码根据一定规范,去调用各个平台的接口,然后它从中间做一些兼容和转换,因为有完整的兼容层和解释器,所以拿来做 iOS 环境的解释器十分合适。
首先来注册个免费账户:
http://www.rubymotion.com/cn/download/starter/
然后会给你邮箱发个 Key,和下载地址。安装的时候输入那个 Key 就能继续了。
我曾经满心欢喜花 199 刀买了一个收费版(当时还没有免费版),一年多后才用 RubyMotion 把这个钱给挣回来……
安装完毕后在终端下执行 motion create testApp:
这样就创建了一个 iOS 工程。进去执行 Rake:
然后一片空白:
很好,执行起来了。现在你已经得到一个完整的交互式 iOS 执行环境
了。
还支持 tab 键列出方法名。
切换到模拟器界面,然后按 cmd 键在空白的地方,会发现出现一个红线,点一下然后切换到终端:
可以看到终端的标签变成了这个 View,你已经进入了这个 View 的内部了。调整个背景色看看:
添加个子视图:
这样已经能用了,然而命令还是有些繁琐,在 Ruby 社区里,大家都想法儿少写代码。我们引入 SugarCube 这个项目。在 Gemfile 中增加:
source 'https://rubygems.org'
gem 'rake'
# Add your dependencies here:
gem 'sugarcube', :require => [
'sugarcube',
'sugarcube-repl',
'sugarcube-factories',
'sugarcube-ui',
'sugarcube-color',
'sugarcube-foundation',
'sugarcube-constants',
'sugarcube-timer',
'sugarcube-notifications',
'sugarcube-nsuserdefaults',
'sugarcube-gestures',
'sugarcube-nsdata'
]
这下就好写多了。
这个项目还对 REPL 增加了各种优化,比如查找当前应用的所有 Controller,当前的视图,等便利的操作。详情参考文档
这时这个调试环境就很具可用性了。
我开发维护过几个 RubyMotion 的项目,并不是很推荐使用 RubyMotion 作为移动端开发,原因这个社区的老哥已经说的很清楚了:Why I stopped using RubyMotion,不过拿来当一个辅助工具使用,还是极好的。