hotcocoa下手
1. 这是什么? 这是macruby的一个Gem,用来快速开发mac GUI应用。 2. 安装 首先安装macruby,我装的是0.11版本。然后运行 3. 运行命令 4.build。 直接编译的话会有问题: 5. 编译没问题的话就可以看到界面了。不过还没完,试试ruby的closure语法,不然妄走一趟。 可以看到,比起objective-c来直观多了,想想看objective-c是怎么操作array的,痛苦。而且这里用closure的方法比用Interface Builder来建立button的事件响应要直观、简单的多,不过就要自己手工组织layout了。能否用HTML中的event bind呢?比如这样dojo.connect(‘buttonId’, “onclick”, function(){…} 这里如果把name.stringValue写成name.text,运行时会有异常:in `’: undefined method `value’ for you name please:NSTextField (NoMethodError),可以看到这里是直接访问cocoa的foundation的。macruby是基于cocoa的运行库的,比如NSString,但是当运行macrake时有个build的过程,时间有点长,难道macruby直接把ruby代码编译成二进制?打开打包好的app文件(这里为W3.app), 可以看到这里即有二进制,也有rb的源代码。可能这里的二进制文件是编译出来的,所以需要一段时间,二进制文件大概作为程序运行的入口,比如运行ruby加载rb文件,这个和有些exe结尾的可执行java程序相像。只是这样打包后coding-build-test的周期就长了,还是“刷新浏览器”的方式爽啊,当然有firebug这种工具就更爽了。sudo macgem install hotcocoa
,这个package默认是没有安装的。hotcocoa w3
,具体参考官方的指南。这里会产生一个和Rails类似的目录。Undefined symbols for architecture i386
,产生的代码都不能用,很无语。修改gem,在这里/Library/Frameworks/MacRuby.framework/Versions/0.11/usr/lib/ruby/Gems/1.9.2/gems/hotcocoa-0.5.1/lib/hotcocoa/application_builder.rb
里面的 archs = RUBY_ARCH.include?('ppc') ? '-arch ppc' : '-arch x86_64'
,把-arch i386
去掉,现在的macruby都已经只有64bit的了。
01
def
start
02
application
:name
=>
"W3"
do
|app|
03
app.delegate =
self
04
window
:frame
=> [
100
,
100
,
500
,
500
],
:title
=>
"W3"
do
|win|
05
title = label(
:text
=>
"Hello from HotCocoa."
,
:layout
=> {
:start
=>
false
})
06
win << title
07
name = text_field(
:text
=>
'you name please'
)
08
win << name
09
win << button(
:title
=>
'go'
)
do
|b|
10
b.on_action
do
11
title.text =
"hi,"
+ name.stringValue
12
end
13
end
14
win.will_close { exit }
15
end