BLOG.tass.io

KZPlaygroundで、Obj-Cのコードを動的に書き換えて遊ぶ

2014-10-25

XCode6では、Swiftのための動的コードツール Playgroundsが追加されました。 これを「Obj-Cでもやりたい!」という巷の要望を受けて、僕らのKrzysztof Zabłockiがやってくれました!(●´ω`●)

KZPlayground https://github.com/krzysztofzablocki/KZPlayground

Obj-Cのコードを書いたその場で反映させることができる手軽な遊び場「KZPlayground」を試してみました。 動作は、公式の動画を見ていただくのがはやいと思います。

[前準備] DyCIのセットアップ

KZPlaygroundはあくまでプラットフォームなので、実際にコードを動的に置き換えるのはダイナミック・コードインジェクション(DyCI)ツールを使用します。 インストールは簡単で、https://github.com/DyCI/dyci-main からgit cloneしてきて、dyci-main/Install/Install.shを実行するだけで完了します。 clangを置き換えるために管理者パスワードの入力を求められるので注意してください。

$ git clone git@github.com:DyCI/dyci-main.git && cd dyci-main/Install/
Cloning into 'dyci-main'...
remote: Counting objects: 1236, done.
remote: Compressing objects: 100% (17/17), done.
remote: Total 1236 (delta 5), reused 0 (delta 0)
Receiving objects: 100% (1236/1236), 1.51 MiB | 265.00 KiB/s, done.
Resolving deltas: 100% (419/419), done.
Checking connectivity... done.
$ ./install.sh
== Backing up clang : grep -Fq == CLANG_PROXY == /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
Password:
Done.
== Faking up clang : Done.
== Preparing dyci-recompile directories: Done.
== Copying scripts : Done.
== Installing Xcode DYCI plugin : Done.
   Now you can use DYCI from the Xcode :P
DYCI was successfully installed!
Use (^X) hot key in your IDE to perform code injections. Have fun.

これで、XCodeの実行中に Ctrl+Xすることでコードが反映されるようになります。

KZPlaygroundの設営

自分のプロジェクトに取り込むこともできますが、まずはKZPlaygound付属のサンプルを使ってみます。

git clone git@github.com:krzysztofzablocki/KZPlayground.git
cd KZPlayground/Example
open KZPlayground.xcworkspace

まずは実行してみましょう!Cmd+Rでシミュレータで起動してみます。

なんか、画像がビヨンビヨン動いていてイラッとしますが、まずはこれで環境は整いましたw- (void)samplePlayground {…}の中を書き換えて、Ctrl+Xを押すと、その場で反映されます。 試しに

KZPAnimate(^{
    view.transform = CGAffineTransformRotate(CGAffineTransformMakeScale(scale, scale), rotation * (M_PI / 180));
});

をコメントアウトして、

// KZPAnimate(^{
//    view.transform = CGAffineTransformRotate(CGAffineTransformMakeScale(scale, scale), rotation * (M_PI / 180));
// });

と修正して保存した後、Ctrl+Xを押してみましょう。さきほどのビヨンビヨンが止まるはずです。

Playgroundの見方

画面左手が操作エリアで、とりあえず生成したUIViewがここに並びます。KZPActionを使ってお試し用のボタンを設置したり、KZPAdjustValueでスライダーを設置することもできます。

画面右手がワークシートエリアで、最初からself.worksheetというViewが配置されています。必要に応じて、ここにViewをaddSubViewして実際に配置して、プロパティを変えて調整した結果を確認することができます。

今後の展望

今後は、以下の機能の追加を検討しているそうです。楽しみですね!!

  • xibの再読み込み
  • storyboardの再読み込み
  • グラフディスプレイの統合(?)
  • タイムラインエリア、ワークシートエリアの分割
  • ArrayやDictionaryをイイかんぢに表示させる機能

Michael Kuroneko

Written by Michael Kuroneko. Follow me on twitter, github.