使用 RubyMotion 構(gòu)建一個完整的 iOS 交互執(zhí)行環(huán)境的解釋器

iOS 開發(fā)過程中,調(diào)試 UI,因為官方開發(fā)環(huán)境不足,一般都是配合 Reveal這種工具,來調(diào)試修改,后來蘋果推出 Swift 的時候,引入了 Playground,Xcode 中也增加了 UIView Debug,這樣一來就簡化了 View 層的調(diào)試難度。然而因為兩者各自有問題:

Playground:

  • 不是在完整的應(yīng)用執(zhí)行環(huán)境中執(zhí)行的
  • 設(shè)置 View 屬性不夠靈活,只能通過 Playground 中的代碼來執(zhí)行

Reveal:

  • 能設(shè)置的屬性有限
  • 能設(shè)置控件的屬性有限

此外這兩種方式都沒有交互執(zhí)行代碼的能力。一般解釋執(zhí)行的語言都帶這個福利,一邊調(diào)試一邊寫代碼,效率飆升。Swift 中帶一個環(huán)境,然而也不是完整的環(huán)境。


是時候讓 RubyMotion 出場了。這個項目好幾年了,目標(biāo)是拿 Ruby 來寫移動端的項目,聽起來很 Cool,然而因為各種原因,最終沒發(fā)展起來,我感覺以后也夠嗆,有些狗注定單身,有些項目注定小眾。項目的作者也是 MacRuby 的作者,有興趣自己了解,不贅述。

RubyMotion 的思路是用 Ruby 代碼根據(jù)一定規(guī)范,去調(diào)用各個平臺的接口,然后它從中間做一些兼容和轉(zhuǎn)換,因為有完整的兼容層和解釋器,所以拿來做 iOS 環(huán)境的解釋器十分合適。


首先來注冊個免費賬戶:

http://www.rubymotion.com/cn/download/starter/

然后會給你郵箱發(fā)個 Key,和下載地址。安裝的時候輸入那個 Key 就能繼續(xù)了。

我曾經(jīng)滿心歡喜花 199 刀買了一個收費版(當(dāng)時還沒有免費版),一年多后才用 RubyMotion 把這個錢給掙回來……

安裝完畢后在終端下執(zhí)行 motion create testApp:

這樣就創(chuàng)建了一個 iOS 工程。進(jìn)去執(zhí)行 Rake:

然后一片空白:

很好,執(zhí)行起來了?,F(xiàn)在你已經(jīng)得到一個完整的交互式 iOS 執(zhí)行環(huán)境了。

還支持 tab 鍵列出方法名。

切換到模擬器界面,然后按 cmd 鍵在空白的地方,會發(fā)現(xiàn)出現(xiàn)一個紅線,點一下然后切換到終端:

可以看到終端的標(biāo)簽變成了這個 View,你已經(jīng)進(jìn)入了這個 View 的內(nèi)部了。調(diào)整個背景色看看:

添加個子視圖:

這樣已經(jīng)能用了,然而命令還是有些繁瑣,在 Ruby 社區(qū)里,大家都想法兒少寫代碼。我們引入 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 增加了各種優(yōu)化,比如查找當(dāng)前應(yīng)用的所有 Controller,當(dāng)前的視圖,等便利的操作。詳情參考文檔

這時這個調(diào)試環(huán)境就很具可用性了。


我開發(fā)維護(hù)過幾個 RubyMotion 的項目,并不是很推薦使用 RubyMotion 作為移動端開發(fā),原因這個社區(qū)的老哥已經(jīng)說的很清楚了:Why I stopped using RubyMotion,不過拿來當(dāng)一個輔助工具使用,還是極好的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容