Ruby/RubyCocoa for iPhone - UICoderz4

  • 4,613 views
Uploaded on

this slide is written in Japanese …

this slide is written in Japanese

iphone-rubycocoa project (in English):
http://wiki.github.com/takuma104/iphone-rubycocoa

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • Apple’s New iPod Touch
    A Worthy Innovation or a High Priced Techno Overload?
    http://www.slideshare.net/Zanura/new-i-pod-touch-review
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
4,613
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
25
Comments
1
Likes
8

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Ruby /RubyCocoafor iPhone @takuma104
  • 2. 発端
  • 3. iPhoneでC#(CIL)が 動いてる
  • 4. monoでAOTで動く らしい
  • 5. じゃ
  • 6. Rubyも(もちろん)動くよね??
  • 7. では
  • 8. 移植
  • 9. というかなんとか動かしたい
  • 10. まずRubyの話
  • 11. 話はOS1.0.x時代 (JB)
  • 12. Rubyを動かすのが流行った
  • 13.
  • 14. irbうごかねーじゃん!!!
  • 15. メモリ足りないで落ちる??
  • 16. 仕方無いので eval.rbで 楽しむ
  • 17. …うむむ。
  • 18. 捨て
  • 19. 話は戻って iPhoneSDK 2.x
  • 20. ちょっと制限きつくなった かも?
  • 21. console がない
  • 22. stdout/stderr はとりあえず Xcodeの Debug出力
  • 23. 動的リンクできない
  • 24. 全部static link
  • 25. アプリ外の領域のファイル読み書き不可
  • 26. とかとか
  • 27. configure との格闘
  • 28. とりあえずいらないヘッダ削る
  • 29. 削る
  • 30. なんか要らない ヘッダ
  • 31. なんかマクロ
  • 32. なんとか動い た (1.8.7)
  • 33. samples/ test.rbの8割動く
  • 34. 8割
  • 35. Process.kill($$)できない
  • 36. リソースフォルダに ファイル書けない
  • 37. 外部のminiryby起動 できない
  • 38. とりあえず動いたといっていいかな…
  • 39. irbモドキをアプリにした
  • 40. 提出
  • 41. 待機
  • 42. 却下
  • 43. 理由
  • 44. 「どんなRubyの コードでも 動いちゃうっぽくね?(怒)」
  • 45. (電卓とか作って出したらどうな るんだろう…)
  • 46. あとで。
  • 47. TODO
  • 48. test/test_*.rb 動かす
  • 49. irb動かす(ioをtelnet で)
  • 50. longjmp() なんかおかしい問題
  • 51. rubyの中だけで完結したraiseの rescueは問題 ないっぽいが…
  • 52. C側でrb_longjmpされたのが補足さ れないっぽい
  • 53. 組込
  • 54. 全部staticlinkにでき たので
  • 55. .h 5コぐらいと、 .a 1コ
  • 56. lib/用の tar1コ(resource)
  • 57. ruby_init()rb_eval_string_protect()
  • 58. Ruby Scriptを文字列で渡してやると実行してその まま値を返す
  • 59. くわしくはirbアプリのEvalRuby クラス参照
  • 60.
  • 61. RubyCocoa のお話
  • 62. RubyでCocoaを 使える
  • 63. ?
  • 64. ObjCな人から見たメリット(?)
  • 65.
  • 66. ObjCメソッド呼び出し
  • 67. [[UIView
alloc]
initWithFrame(CGRectZero)]↓OSX::UIView.alloc.initWithFrame([0,0,0,0])
  • 68. ほとんど書き方が 一緒
  • 69. かつ
  • 70. [[ ]]
  • 71. 無い
  • 72. !!!
  • 73.
  • 74. つねにid型になってる イメージ
  • 75. プリミティブ型は自動変換
  • 76. 構造体は?
  • 77. 配列からCGRectとか自動変換
  • 78. delegation とかどうなるの?
  • 79. OSX::NSObjcetを継承したク ラスは普通に 受けられる
  • 80. @interface
Hoge@end@implement
Hoge‐
applicationDidFinishLaunching

(UIApplication
*app)
{

NSLog(“%s”,
class_getName(app‐>isa));}@endint
main(){

return
UIApplicationMain(0,
nil,




nil,
@”Hoge”);}
  • 81. class
Hoge
<
OSX::NSObject
 def
applicationDidFinishLaunching(app)
 
 p
app
 endendOSX.UIApplicationMain(0,nil,nil,"Hoge")
  • 82. class
Fuga
<
OSX::UIView
 def
initialize
 
 @tv
=
OSX::UITableView.alloc.initWithFrame(OSX::UIScreen.mainScreen.bounds)
 
 @tv.setValue_forKey(self,
"delegate")
 
 @tv.setValue_forKey(self,
"dataSource")
 
 self.addSubview(@tv)
 end

def
tableView_numberOfRowsInSection(tableView,
section)



return
10

end

def
tableView_cellForRowAtIndexPath(tableView,
indexPath)



cellIdentifier
=
"Cell"



cell
=
tableView.dequeueReusableCellWithIdentifier(cellIdentifier)



if
(cell
==
nil)
then







cell
=
OSX::UITableViewCell.alloc.initWithFrame_reuseIdentifier([0,0,0,0],
cellIdentifier)



end



cell.setValue_forKey(indexPath.row.to_s,
"text")



cell

endend#
thnaks
to
@hitoriblog
  • 83. (そういえば) 念願の
  • 84. GC
  • 85. 参照カウンタ地獄からの 開放
  • 86. そんなに上手くいかない?
  • 87. 欠点
  • 88. ネイティブThread使えない
  • 89. Rubyの使えばいいじゃない
  • 90. t
=
Thread.new
do
p
“hoge”endt.join
  • 91. Cocoaのセレクタ名が長いので
  • 92. Rubyでも長さは変らない という話
  • 93. ‐
tableView:(UITableView*)v
cellForRowAtIndexPath:(NSIndexPath)i;
  • 94. def
tableView_cellForAtRowIndexPath(v,i)
  • 95. どうしようもなさそう
  • 96. プロパティのget/setの書き方長い
  • 97. [UIApplication
sharedInstance].delegate↓OSX::UIApplication.sharedInstance.valueForKey(‘delegate’)
  • 98. .delegate
=
self;↓.setValue_forKey(self,
‘delegate’)
  • 99. この書き方はプロパティと同じにできるかも?
  • 100. ちなみに
  • 101. HotCocoa.rb
  • 102. MacRubyの 一部分PureRuby実装のCocoaラッパ
  • 103.
  • 104. require
hotcocoa
include
HotCocoa
app
do


window
:title
=>
Hello
World,




:frame
=>
[0,
0,
120,
120]
do
|w|




button
:title
=>
Click
me
do
|b|






b.on_action
{
puts
Hello
World!
}






w
<<
b




end


end
end
  • 105. 詳しくは@lrzさんの 資料参照
  • 106. http://chopine.be/lrz/talks/RubyKaigi2008.pdf
  • 107. 話は戻って
  • 108. 移植
  • 109. 最新(0.13.2)で 調査
  • 110. まずlibffi動かないっぽい
  • 111. orz
  • 112.
  • 113. 中川さん「古い 実装ならlibffi使ってなかったと 思うよ?」
  • 114. mjd
  • 115. 0.4.2まで 使って なかった
  • 116. 5年前の実装だけど0.4.2 ベースで
  • 117. ということで 修正点
  • 118. ObjC runtimeの構造体に直接をやめてAPI経由 にした
  • 119. struct
objc_methodstruct
objc_ivar
  • 120. とかはもはや使用できないらしい
  • 121. 動的クラス 生成
  • 122. objc_allocateClassPair()
objc_registerClassPair()
  • 123. クラスにメソッドを 追加
  • 124. class_addMethod()
  • 125. クラスにメンバ 変数を追加
  • 126. class_addIvar()
  • 127. 構造体などの スタブを生成しているRubyコードを修正
  • 128. ObjC黒魔術 vsRuby黒魔術
  • 129. とりあえず
  • 130. まだかなり不十分だけどhelloWorldレベルが動く
  • 131. いちばんやりたかった事、それは…
  • 132. リモートからirbで実機で動いてるアプリを動作 中に変更する
  • 133. Inspired by JSCocoaのiPhone用インタラクティブコンソール
  • 134. TCPサーバをRubyで書いて eval.rbに 繋げただけ
  • 135. (Macとかの) telnetからコードを弄れる
  • 136. デモ
  • 137. githubの repoで開発継続
  • 138. Repository:http://github.com/takuma104/iphone‐rubycocoaRubyCocoa0.4.2
to
4iPhone:http://github.com/takuma104/iphone‐rubycocoa/commit/0960279bdfe5601e57b3c951f53b8d2e112a997a
  • 139. 今後
  • 140.
  • 141. して
  • 142. 開発
  • 143. 可能
  • 144. 何か
  • 145. 纏め
  • 146. Ruby楽しいよ Ruby
  • 147. おしまい