優點
RubyMotion 的優點說穿了就是儘量讓你不會碰到 Objective-C, Xcode, 及 iOS API 的摧殘:
使用 Ruby 語法
應該不是只有我覺得 Objective-C 的語法很醜,Cocoa/iOS 的 API 也都是囉嗦的長, 但相對地 Ruby 就有漂亮易讀的語法及好用的內建 library。
與其要寫:
NSMutableArray *array = [NSMutableArray arrayWithObjects: @"one", @"two", @"three", @"four", nil];
NSArray *newAdditions = [NSArray arrayWithObjects: @"a", @"b", nil];
NSIndexSet *indexes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1,newAdditions.count)];
[array insertObjects:newAdditions atIndexes:indexes];
我更喜歡寫:
array = %w{one two three four}
newAdditions = %w{a b}
array.insert(1, *newAdditions)
可利用 RubyMotion gems
在 RubyMotion Wrappers 可以找到許多專爲 RubyMotion 設計的 gem,通常是把 iOS API 或是有名 的 library (例如 AFNetworking 或 Cocos2D) 包裝成 Ruby 的慣用方式,例如 SugarCube 可以把:
UIApplication.sharedApplication.openURL(NSURL.URLWithString(url))
簡化成:
url.nsurl.open
簡潔好維護的 DSL
例如 Teacup 可以取代用 XIB 來拉 UI:
Teacup::Stylesheet.new(:menu) do
style :root,
gradient: {
colors: ['#7a7a7a'.uicolor, '#414141'.uicolor]
}
style :header,
backgroundColor: 'background-menu-header.png'.uiimage.uicolor,
constraints: [
:top_left,
:full_width,
constrain_height(59)
]
style :title,
backgroundColor: UIColor.clearColor,
frame: CGRectMake(12, 0, 190, 50),
color: UIColor.whiteColor,
font: UIFont.boldSystemFontOfSize(18),
baselineAdjustment: UIBaselineAdjustmentAlignCenters
end
Rakefile
採用 Rakefile 比起用 xcodeproject 更有彈性且好維護,例如我一個 app 有分付費及免費兩個版本,建置時可以用環境變數來切換,Rakefile 可以加入程式邏輯來判斷處理:
Motion::Project::App.setup do |app|
case APP
when 'taoyuan'
app.name = 'TaoyuanAirport'
app.identifier = 'com.simplypatrick.taoyuanairport.paid'
when 'taoyuan-free'
app.name = 'TaoyuanAirport-Free'
app.identifier = 'com.simplypatrick.taoyuanairport'
end
app.deployment_target = '6.0'
app.version = app.info_plist['CFBundleShortVersionString'] = '1.5.7'
app.files << Dir.glob("./config/#{APP}/*.rb")
app.resources_dirs << "./config/#{APP}/resources"
# ...
end
缺點
反面列一些我覺得是缺點的地方:
額外的 Ruby 學習成本
之前說過,只懂 Ruby 是無法用 RubyMotion 開發 iOS App 的,必須先懂 Objective-C 及 Xcode 後再捨棄它們,對於非 Ruby 愛好者這是比較難接受的。
價格
RubyMotion 並不是免費軟體,第一次購買要 $199 USD,之後每年需要再付 $99 USD 的更新及支持費用,對於只是想嘗試用 Ruby 寫 iOS app 的開發者是個門檻。
App 的大小
RubyMotion 雖然是編譯成 native code,比起用純 Objective-C 開發,層層包裝後產生的 IPA 檔還是大了不少,但我覺得還可以是還可以接受的程度。
結論
如果是熟悉 Ruby 或是想學習 Ruby 的開發者我會蠻推薦 RubyMotion。