SlideShare una empresa de Scribd logo
1 de 149
Descargar para leer sin conexión
Ruby /
RubyCocoa
for iPhone
@takuma104
発端
iPhoneで
C#(CIL)が
動いてる
monoで
AOTで動く
らしい
じゃ
Rubyも
(もちろん)
動くよね??
では
移植
というか
なんとか
動かしたい
まず
Rubyの話
話は
OS1.0.x
時代 (JB)
Rubyを
動かすのが
流行った
が
irb
うごかねー
じゃん!!!
メモリ
足りないで
落ちる??
仕方無いので
eval.rbで
楽しむ
…うむむ。
捨て
話は戻って
iPhone
SDK 2.x
ちょっと制限
きつくなった
かも?
console
がない
stdout/stderr
はとりあえず
Xcodeの
Debug出力
動的リンク
できない
全部
static link
アプリ外の領
域のファイル
読み書き不可
とかとか
configure
との格闘
とりあえず
いらない
ヘッダ削る
削る
なんか
要らない
ヘッダ
なんかマクロ
なんとか動い
た (1.8.7)
samples/
test.rb
の8割動く
8割
Process
.kill($$)
できない
リソース
フォルダに
ファイル
書けない
外部の
miniryby起動
できない
とりあえず動
いたといって
いいかな…
irbモドキを
アプリにした
提出
待機
却下
理由
「どんなRubyの
コードでも
動いちゃう
っぽくね?(怒)」
(電卓とか作って
出したらどうな
るんだろう…)
あとで。
TODO
test/
test_*.rb
動かす
irb動かす
(ioをtelnet
で)
longjmp()
なんか
おかしい問題
rubyの中だけで
完結したraiseの
rescueは問題
ないっぽいが…
C側で
rb_longjmpさ
れたのが補足さ
れないっぽい
組込
全部static
linkにでき
たので
.h 5コ
ぐらいと、
.a 1コ
lib/用の
tar1コ
(resource)
ruby_init()
rb_eval_string_protect()
Ruby Scriptを
文字列で渡してや
ると実行してその
まま値を返す
くわしくは
irbアプリの
EvalRuby
クラス参照
次
RubyCocoa
のお話
Rubyで
Cocoaを
使える
?
ObjCな
人から見た
メリット(?)
例
ObjC
メソッド
呼び出し
[[UIView
alloc]

initWithFrame(CGRectZero)]
↓
OSX::UIView.alloc.
initWithFrame([0,0,0,0])
ほとんど
書き方が
一緒
かつ
[[ ]]
無い
!!!
型
つねにid型
になってる
イメージ
プリミティブ
型は自動変換
構造体は?
配列から
CGRectと
か自動変換
delegation
とか
どうなるの?
OSX::NSObjc
etを継承したク
ラスは普通に
受けられる
@interface
Hoge
@end
@implement
Hoge
‐
applicationDidFinishLaunching


(UIApplication
*app)
{


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


return
UIApplicationMain(0,
nil,





nil,
@”Hoge”);
}
class
Hoge
<
OSX::NSObject

 def
applicationDidFinishLaunching(app)

 
 p
app

 end
end
OSX.UIApplicationMain(0,nil,nil,"Hoge")
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


end
end
#
thnaks
to
@hitoriblog
(そういえば)
念願の
GC
参照カウンタ
地獄からの
開放
そんなに上手
くいかない?
欠点
ネイティブ
Thread
使えない
Rubyの
使えばいい
じゃない
t
=
Thread.new
do

p
“hoge”
end
t.join
Cocoaの
セレクタ名
が長いので
Rubyでも長
さは変らない
という話
‐
tableView:
(UITableView*)v

cellForRowAtIndexPath:
(NSIndexPath)i;
def

tableView_cellForAtRowInde
xPath(v,i)
どうしよう
もなさそう
プロパティの
get/setの
書き方長い
[UIApplication

sharedInstance].delegate
↓
OSX::UIApplication.sharedI
nstance.valueForKey(‘deleg
ate’)
.delegate
=
self;
↓
.setValue_forKey(self,

‘delegate’)
この書き方はプ
ロパティと同じ
にできるかも?
ちなみに
HotCocoa.rb
MacRubyの
一部分
PureRuby実装
のCocoaラッパ
例
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
詳しくは
@lrzさんの
資料参照
http://chopine.be/lrz/
talks/RubyKaigi2008.pdf
話は戻って
移植
最新
(0.13.2)で
調査
まずlibffi動
かないっぽい
orz
が
中川さん「古い
実装ならlibffi
使ってなかったと
思うよ?」
mjd
0.4.2まで
使って
なかった
5年前の実装
だけど0.4.2
ベースで
ということで
修正点
ObjC runtime
の構造体に直接
をやめてAPI経由
にした
struct
objc_method
struct
objc_ivar
とかは
もはや使用で
きないらしい
動的クラス
生成
objc_allocateClassPair()

objc_registerClassPair()
クラスに
メソッドを
追加
class_addMethod()
クラスにメンバ
変数を追加
class_addIvar()
構造体などの
スタブを生成
しているRuby
コードを修正
ObjC黒魔術
vs
Ruby黒魔術
とりあえず
まだかなり
不十分だけど
helloWorld
レベルが動く
いちばん
やりたかった
事、それは…
リモートからirb
で実機で動いて
るアプリを動作
中に変更する
Inspired by
JSCocoaの
iPhone用インタラ
クティブコンソール
TCPサーバを
Rubyで書いて
eval.rbに
繋げただけ
(Macとかの)
telnetから
コードを弄れる
デモ
githubの
repoで
開発継続
Repository:
http://github.com/takuma104/
iphone‐rubycocoa
RubyCocoa0.4.2
to
4iPhone:
http://github.com/takuma104/
iphone‐rubycocoa/commit/
0960279bdfe5601e57b3c951f53b8d2e11
2a997a
今後
楽
して
開発
可能
何か
纏め
Ruby
楽しいよ
Ruby
おしまい
Ruby/RubyCocoa for iPhone - UICoderz4

Más contenido relacionado

La actualidad más candente

シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話
シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話
シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話xztaityozx
 
この実装には問題がある!
この実装には問題がある!この実装には問題がある!
この実装には問題がある!GOMI NINGEN
 
@nukokusa_botを支える技術
@nukokusa_botを支える技術@nukokusa_botを支える技術
@nukokusa_botを支える技術Joe_noh
 
ダブルシンク難読化シェル芸
ダブルシンク難読化シェル芸ダブルシンク難読化シェル芸
ダブルシンク難読化シェル芸xztaityozx
 
Jpmobileを使ってみる
Jpmobileを使ってみるJpmobileを使ってみる
Jpmobileを使ってみるHiromu Shioya
 
Nfcのアプリつくってみる
NfcのアプリつくってみるNfcのアプリつくってみる
Nfcのアプリつくってみるmeco300
 
FPGAでmrubyを動かす
FPGAでmrubyを動かすFPGAでmrubyを動かす
FPGAでmrubyを動かすShuta Kimura
 
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswiftTomohiro Kumagai
 
C#からSORACOMを管理できるようにした話(SoraCommonNet)
C#からSORACOMを管理できるようにした話(SoraCommonNet)C#からSORACOMを管理できるようにした話(SoraCommonNet)
C#からSORACOMを管理できるようにした話(SoraCommonNet)Kei Nakazawa
 
Rubyを楽しくする第一歩!ブロックを理解する!
Rubyを楽しくする第一歩!ブロックを理解する!Rubyを楽しくする第一歩!ブロックを理解する!
Rubyを楽しくする第一歩!ブロックを理解する!Kanako Kobayashi
 
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介豊明 尾古
 
RubyPico スマホで楽しくプログラミング
RubyPico スマホで楽しくプログラミングRubyPico スマホで楽しくプログラミング
RubyPico スマホで楽しくプログラミングongaeshi
 
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」Takeshi Kiriya
 

La actualidad más candente (14)

シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話
シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話
シェル芸で使いたくてLINQが使えるコマンドを作ったらawkでよかった話
 
この実装には問題がある!
この実装には問題がある!この実装には問題がある!
この実装には問題がある!
 
Hello Ruby
Hello RubyHello Ruby
Hello Ruby
 
@nukokusa_botを支える技術
@nukokusa_botを支える技術@nukokusa_botを支える技術
@nukokusa_botを支える技術
 
ダブルシンク難読化シェル芸
ダブルシンク難読化シェル芸ダブルシンク難読化シェル芸
ダブルシンク難読化シェル芸
 
Jpmobileを使ってみる
Jpmobileを使ってみるJpmobileを使ってみる
Jpmobileを使ってみる
 
Nfcのアプリつくってみる
NfcのアプリつくってみるNfcのアプリつくってみる
Nfcのアプリつくってみる
 
FPGAでmrubyを動かす
FPGAでmrubyを動かすFPGAでmrubyを動かす
FPGAでmrubyを動かす
 
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
 
C#からSORACOMを管理できるようにした話(SoraCommonNet)
C#からSORACOMを管理できるようにした話(SoraCommonNet)C#からSORACOMを管理できるようにした話(SoraCommonNet)
C#からSORACOMを管理できるようにした話(SoraCommonNet)
 
Rubyを楽しくする第一歩!ブロックを理解する!
Rubyを楽しくする第一歩!ブロックを理解する!Rubyを楽しくする第一歩!ブロックを理解する!
Rubyを楽しくする第一歩!ブロックを理解する!
 
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
 
RubyPico スマホで楽しくプログラミング
RubyPico スマホで楽しくプログラミングRubyPico スマホで楽しくプログラミング
RubyPico スマホで楽しくプログラミング
 
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
 

Destacado

Cramer Cruise 2009’
Cramer Cruise 2009’Cramer Cruise 2009’
Cramer Cruise 2009’Tyler Cramer
 
Osoenbatuketa phpapp02
Osoenbatuketa phpapp02Osoenbatuketa phpapp02
Osoenbatuketa phpapp02karmelean
 
iPhone4! iPhone4!
iPhone4! iPhone4!iPhone4! iPhone4!
iPhone4! iPhone4!takuma mori
 
Hizkuntza aljebraikoa
Hizkuntza aljebraikoaHizkuntza aljebraikoa
Hizkuntza aljebraikoakarmelean
 
Hizkuntza aljebraikoa
Hizkuntza aljebraikoaHizkuntza aljebraikoa
Hizkuntza aljebraikoakarmelean
 
Osoenbatuketa phpapp02
Osoenbatuketa phpapp02Osoenbatuketa phpapp02
Osoenbatuketa phpapp02karmelean
 

Destacado (7)

Cramer Cruise 2009’
Cramer Cruise 2009’Cramer Cruise 2009’
Cramer Cruise 2009’
 
Osoenbatuketa phpapp02
Osoenbatuketa phpapp02Osoenbatuketa phpapp02
Osoenbatuketa phpapp02
 
iPhone4! iPhone4!
iPhone4! iPhone4!iPhone4! iPhone4!
iPhone4! iPhone4!
 
Hizkuntza aljebraikoa
Hizkuntza aljebraikoaHizkuntza aljebraikoa
Hizkuntza aljebraikoa
 
itineraris
itinerarisitineraris
itineraris
 
Hizkuntza aljebraikoa
Hizkuntza aljebraikoaHizkuntza aljebraikoa
Hizkuntza aljebraikoa
 
Osoenbatuketa phpapp02
Osoenbatuketa phpapp02Osoenbatuketa phpapp02
Osoenbatuketa phpapp02
 

Similar a Ruby/RubyCocoa for iPhone - UICoderz4

nomlab_okayamaruby_slide
nomlab_okayamaruby_slidenomlab_okayamaruby_slide
nomlab_okayamaruby_slidenomlab
 
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発takuma mori
 
RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2Kuniaki Igarashi
 
Effective SQLite For Android
Effective SQLite For AndroidEffective SQLite For Android
Effective SQLite For AndroidShinobu Okano
 
[RubyMotion LT] nitronに見るiosアプリ開発の未来
[RubyMotion LT] nitronに見るiosアプリ開発の未来[RubyMotion LT] nitronに見るiosアプリ開発の未来
[RubyMotion LT] nitronに見るiosアプリ開発の未来Masahiro Nishimi
 
Swift を振り返ってみよう #cswift
Swift を振り返ってみよう #cswiftSwift を振り返ってみよう #cswift
Swift を振り返ってみよう #cswiftTomohiro Kumagai
 
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPCZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPCYoshifumi Kawai
 
ROS2.0時代に備えたc++11/14
ROS2.0時代に備えたc++11/14ROS2.0時代に備えたc++11/14
ROS2.0時代に備えたc++11/14Takashi Ogura
 
20160422_lombokについて
20160422_lombokについて20160422_lombokについて
20160422_lombokについてHidaka Kazutaka
 
Morioka As 0x06 Usagi Koyomirya
Morioka As 0x06 Usagi KoyomiryaMorioka As 0x06 Usagi Koyomirya
Morioka As 0x06 Usagi Koyomirya兎 伊藤
 
Kotlinソースコード探訪
Kotlinソースコード探訪Kotlinソースコード探訪
Kotlinソースコード探訪yy yank
 
Coq for Moblie Phone @ ML名古屋
Coq for Moblie Phone @ ML名古屋Coq for Moblie Phone @ ML名古屋
Coq for Moblie Phone @ ML名古屋Hiroki Mizuno
 
Rubymotionはオススメか?
Rubymotionはオススメか?Rubymotionはオススメか?
Rubymotionはオススメか?Junya Ishihara
 
Railsしかやってなかった人が10時間で Swift iOSゲームをつくったら
Railsしかやってなかった人が10時間で Swift iOSゲームをつくったらRailsしかやってなかった人が10時間で Swift iOSゲームをつくったら
Railsしかやってなかった人が10時間で Swift iOSゲームをつくったらYuta Okazaki
 

Similar a Ruby/RubyCocoa for iPhone - UICoderz4 (18)

nomlab_okayamaruby_slide
nomlab_okayamaruby_slidenomlab_okayamaruby_slide
nomlab_okayamaruby_slide
 
Osc2012 hiroshima
Osc2012 hiroshimaOsc2012 hiroshima
Osc2012 hiroshima
 
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
 
RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2
 
Effective SQLite For Android
Effective SQLite For AndroidEffective SQLite For Android
Effective SQLite For Android
 
[RubyMotion LT] nitronに見るiosアプリ開発の未来
[RubyMotion LT] nitronに見るiosアプリ開発の未来[RubyMotion LT] nitronに見るiosアプリ開発の未来
[RubyMotion LT] nitronに見るiosアプリ開発の未来
 
Swift を振り返ってみよう #cswift
Swift を振り返ってみよう #cswiftSwift を振り返ってみよう #cswift
Swift を振り返ってみよう #cswift
 
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPCZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
 
ROS2.0時代に備えたc++11/14
ROS2.0時代に備えたc++11/14ROS2.0時代に備えたc++11/14
ROS2.0時代に備えたc++11/14
 
20160422_lombokについて
20160422_lombokについて20160422_lombokについて
20160422_lombokについて
 
Morioka As 0x06 Usagi Koyomirya
Morioka As 0x06 Usagi KoyomiryaMorioka As 0x06 Usagi Koyomirya
Morioka As 0x06 Usagi Koyomirya
 
120517 cf tour_london
120517 cf tour_london120517 cf tour_london
120517 cf tour_london
 
Kotlinソースコード探訪
Kotlinソースコード探訪Kotlinソースコード探訪
Kotlinソースコード探訪
 
Coq for Moblie Phone @ ML名古屋
Coq for Moblie Phone @ ML名古屋Coq for Moblie Phone @ ML名古屋
Coq for Moblie Phone @ ML名古屋
 
Lt130123
Lt130123Lt130123
Lt130123
 
Debug Hacks - 第4回つくらぐ勉強会
Debug Hacks - 第4回つくらぐ勉強会Debug Hacks - 第4回つくらぐ勉強会
Debug Hacks - 第4回つくらぐ勉強会
 
Rubymotionはオススメか?
Rubymotionはオススメか?Rubymotionはオススメか?
Rubymotionはオススメか?
 
Railsしかやってなかった人が10時間で Swift iOSゲームをつくったら
Railsしかやってなかった人が10時間で Swift iOSゲームをつくったらRailsしかやってなかった人が10時間で Swift iOSゲームをつくったら
Railsしかやってなかった人が10時間で Swift iOSゲームをつくったら
 

Ruby/RubyCocoa for iPhone - UICoderz4