Browse files

Site updated at 2013-02-15 07:01:23 UTC

  • Loading branch information...
1 parent 38dc89e commit 7c75869e3f9e7240095dbad119572091636404d6 @Watson1978 committed Feb 15, 2013
Showing with 631 additions and 1,135 deletions.
  1. +104 −216 atom.xml
  2. +31 −43 blog/2012/05/03/creating-an-ios-application-using-rubymotion_en/index.html
  3. +27 −39 blog/2012/05/03/creating-an-ios-application-using-rubymotion_ja/index.html
  4. +2 −6 blog/2012/05/03/first-step-in-rubymotion_ja/index.html
  5. +1 −6 blog/2012/05/08/specs-for-stopwatch-app/index.html
  6. +3 −8 blog/2012/05/08/using-interactive-shell/index.html
  7. +1 −8 blog/2012/05/09/mixing-the-ruby-and-objc/index.html
  8. +2 −6 blog/2012/05/10/benchmark-result/index.html
  9. +2 −4 blog/2012/05/12/translating-rubymotion-guide/index.html
  10. +4 −9 blog/2012/06/07/create-static-library/index.html
  11. +2 −3 blog/2012/07/22/meet-up-rubymotionjp/index.html
  12. +1 −1 blog/2012/08/01/translating-rubymotion-articles/index.html
  13. +2 −6 blog/2012/08/22/make-a-gradient/index.html
  14. +9 −13 blog/2012/08/23/make-a-sublime-text-environment/index.html
  15. +2 −10 blog/2012/08/29/make-an-application-which-target-the-ios-4/index.html
  16. +9 −15 blog/2012/08/30/use-google-analytics/index.html
  17. +2 −4 blog/2012/09/10/bonjour-rubymotion/index.html
  18. +9 −15 blog/2012/09/19/using-parse/index.html
  19. +33 −41 blog/2012/09/20/push-notifiation-with-rubymotion/index.html
  20. +1 −4 blog/2012/10/19/rubymotion-can-not-launch-simulator-in-tmux/index.html
  21. +20 −37 blog/2012/12/03/dtrace/index.html
  22. +4 −9 blog/2012/12/04/proxy-server-for-HTTP-test/index.html
  23. +8 −19 blog/2012/12/07/jenkins/index.html
  24. +1 −5 blog/2012/12/09/find-methods/index.html
  25. +3 −6 blog/2012/12/10/autorelease-pool/index.html
  26. +3 −7 blog/2012/12/15/target-cpu-archs/index.html
  27. +1 −9 blog/2012/12/20/rubymotion-class/index.html
  28. +1 −8 blog/2013/01/19/pit/index.html
  29. +1 −4 blog/2013/01/25/motion-pixate-observer/index.html
  30. +10 −15 blog/2013/01/30/rubymotion-jenkins-tap/index.html
  31. +2 −4 blog/2013/02/11/tokyo-rubykaigi-3rd/index.html
  32. +2 −4 blog/2013/02/12/rubymotion-build-plugin-for-jenkins/index.html
  33. +53 −105 blog/categories/dtrace/atom.xml
  34. +15 −28 blog/categories/library/atom.xml
  35. +27 −40 blog/categories/macruby/atom.xml
  36. +1 −4 blog/categories/pixate/atom.xml
  37. +2 −4 blog/categories/rubykaigi-/atom.xml
  38. +93 −174 blog/categories/rubymotion-/atom.xml
  39. +100 −154 blog/categories/rubymotion/atom.xml
  40. +1 −4 blog/page/2/index.html
  41. +2 −4 blog/page/3/index.html
  42. +33 −33 sitemap.xml
  43. +1 −1 stylesheets/screen.css
View
320 atom.xml
@@ -4,7 +4,7 @@
<title><![CDATA[Watson's Blog]]></title>
<link href="http://watson1978.github.com/atom.xml" rel="self"/>
<link href="http://watson1978.github.com/"/>
- <updated>2013-02-12T22:20:13+09:00</updated>
+ <updated>2013-02-15T16:01:18+09:00</updated>
<id>http://watson1978.github.com/</id>
<author>
<name><![CDATA[Watson]]></name>
@@ -24,8 +24,7 @@
<!-- more -->
-
-<p><img src="http://watson1978.github.com/images/blog/jenkins/jenkins.jpg" alt="jenkins" /></p>
+<p><img src="http://watson1978.github.com/images/blog/jenkins/jenkins.jpg" alt="jenkins"></p>
<p>RubyMotion に日々変更を加えており、既存のライブラリに影響がないか確認するために Jenkins にいろいろメジャーなものを登録してテストしています。</p>
@@ -35,7 +34,6 @@
<li><a href="https://github.com/Watson1978/jenkins-rubymotion-plugin">https://github.com/Watson1978/jenkins-rubymotion-plugin</a></li>
</ul>
-
<p><a href="http://jruby.org/">JRuby</a> と <a href="https://github.com/jenkinsci/jenkins.rb">jenkins.rb</a> というものを使って作っています。JRuby な方角に足を向けて寝ることができません。</p>
<p>プラグインのビュー画面でデバイスやテスト結果の出力形式などをリストで選択できるようにしたかったのですが、どうにもうまくいっていません。jenkins.rb 風に記述しようとすると例外がでてしまい XML を直に書いたのですが、どうもその記述が良くないようです。</p>
@@ -57,22 +55,20 @@
<!-- more -->
-
<p>@satococoa さんが発表の前に壇上からアンケートをとっていたので興味深く拝見しました。</p>
<ul>
<li>RubyMotion の認知度は 8 - 9 割くらい。<a href="https://twitter.com/satococoa">@satococoa</a> さんや <a href="https://twitter.com/naoya_ito">@naoya_ito</a> さんの宣伝のおかげですね。ありがとうございます。</li>
<li>購入した方は、ぱっと見て居ないんじゃないかと言うくらい・・・。</li>
</ul>
-
<p>UITableView を実装した RubyMotion アプリ上に、<a href="https://github.com/rubymotion/BubbleWrap">BubbleWrap</a> という gem を使用して rails サーバからデータを取得し表示するというものを、一からライブコーディングされていました (rails サーバ側は事前に用意されてました)。</p>
<p>15 分という持ち時間でちゃんと動くものになっていたのは圧巻で、観衆のみなさんの受けはとても良かったように思います。発表資料やアプリのコードは <a href="http://satococoa.github.com/blog/2013/02/11/tkrk10-3rd-day/">東京 Ruby 会議 10 3日目に参加しました</a> で参照できます。</p>
<p>発表前に RubyFriendsCamera というアプリを試されていた風景。</p>
-<p><img src="http://farm9.staticflickr.com/8096/8462804169_48935f12fc_z.jpg" alt="RubyFriends" /></p>
+<p><img src="http://farm9.staticflickr.com/8096/8462804169_48935f12fc_z.jpg" alt="RubyFriends"></p>
<p>From <a href="http://www.flickr.com/photos/igaiga/sets/72157632741076174/">http://www.flickr.com/photos/igaiga/sets/72157632741076174/</a></p>
]]></content>
@@ -87,31 +83,29 @@
<!-- more -->
-
<p>テスト実行結果の出力形式として <a href="http://testanything.org/wiki/index.php/Main_Page">Test Anything Protocol (TAP)</a> というものがあります。</p>
<p>RubyMotion では Spec を実行する際に <code>output</code> という環境変数で出力形式を TAP にすることができます(他にも <code>spec_dox</code>, <code>fast</code>, <code>test_unit</code>, <code>knock</code>, <code>rubymine</code> を指定できます)。</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$ rake spec output=tap</span></code></pre></td></tr></table></div></figure>
-
<p>Jenkins では <a href="https://wiki.jenkins-ci.org/display/JENKINS/TAP+Plugin">TAP Plugin</a> というプラグインを導入すると、この TAP 形式に対応することができます。これを導入するとテスト数の増減(Faild が増えたとか)がグラフ表示されておしゃれな感じです。</p>
-<p><img src="http://watson1978.github.com/images/blog/jenkins/tap.png" alt="TAP のグラフ" />
-<img src="http://watson1978.github.com/images/blog/jenkins/tap2.png" alt="TAP のグラフ" /></p>
+<p><img src="http://watson1978.github.com/images/blog/jenkins/tap.png" alt="TAP のグラフ">
+<img src="http://watson1978.github.com/images/blog/jenkins/tap2.png" alt="TAP のグラフ"></p>
<h2>TAP Plugin の導入</h2>
-<p>Jenkins のプラグイン管理画面で &#8220;Jenkins TAP Plugin&#8221; にチェックを入れます。</p>
+<p>Jenkins のプラグイン管理画面で &quot;Jenkins TAP Plugin&quot; にチェックを入れます。</p>
-<p><img src="http://watson1978.github.com/images/blog/jenkins/tap_plugin.png" alt="Jenkins TAP Plugin" /></p>
+<p><img src="http://watson1978.github.com/images/blog/jenkins/tap_plugin.png" alt="Jenkins TAP Plugin"></p>
<h2>プロジェクトの設定</h2>
-<p>&#8220;Jenkins TAP Plugin&#8221; を導入するとプロジェクトの設定画面で、ビルド後の処理に TAP Plugin に関する設定項目が追加されます。</p>
+<p>&quot;Jenkins TAP Plugin&quot; を導入するとプロジェクトの設定画面で、ビルド後の処理に TAP Plugin に関する設定項目が追加されます。</p>
-<p><img src="http://watson1978.github.com/images/blog/jenkins/tap_result.png" alt="Jenkins TAP Plugin" /></p>
+<p><img src="http://watson1978.github.com/images/blog/jenkins/tap_result.png" alt="Jenkins TAP Plugin"></p>
<p>テスト結果をいったんファイルに保存し、そのテスト結果が書かれたファイルを TAP Plugin が読み込んで処理をするようです。</p>
@@ -165,15 +159,12 @@
</span><span class='line'><span class="nb">system</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="n">rake</span><span class="si">}</span><span class="s2"> spec output=tap SIM_STDOUT_PATH=</span><span class="si">#{</span><span class="n">output_path</span><span class="si">}</span><span class="s2"> SIM_STDERR_PATH=</span><span class="si">#{</span><span class="n">stderr_file</span><span class="o">.</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span>
</span></code></pre></td></tr></table></div></figure>
-
-<p>あとは、Jenkins でプロジェクト毎に以下のようなコマンドを記述して、テストを実行するようにしてます。</p>
-
+<p>あとは、Jenkins でプロジェクト毎に以下のようなコマンドを記述して、テストを実行するようにしてます。
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="n">run_spec</span> <span class="o">--</span><span class="n">bundle</span> <span class="o">--</span><span class="n">output</span><span class="o">=</span><span class="vg">$WORKSPACE</span><span class="o">/</span><span class="n">result</span><span class="o">.</span><span class="n">txt</span>
-</span></code></pre></td></tr></table></div></figure>
-
+</span></code></pre></td></tr></table></div></figure></p>
-<p><img src="http://watson1978.github.com/images/blog/jenkins/shell_command2.png" alt="Jenkins shell command" /></p>
+<p><img src="http://watson1978.github.com/images/blog/jenkins/shell_command2.png" alt="Jenkins shell command"></p>
]]></content>
</entry>
@@ -188,15 +179,13 @@
<!-- more -->
-
<p>最初は <a href="https://gist.github.com/4573005">https://gist.github.com/4573005</a> で、</p>
<ol>
<li>HTTP サーバに CSS ファイルを置いて更新用のボタンなど押す</li>
<li>HTTP サーバ から CSS をダウンロードしてデザインを更新</li>
</ol>
-
<p>というフローでやっていたのですが、サーバが決め打ちで柔軟性を持たせようとすると iOS アプリ側でサーバのアドレスを変更できるようにしないといけなくて面倒、さらに更新用のボタンを押すことすら面倒かもと、面倒なことが多すぎ!!</p>
<p>ということで、RubyMotion もくもく会で <a href="https://github.com/Watson1978/motion-pixate-observer">motion-pixate-observer</a> という gem を作ってみました。</p>
@@ -207,7 +196,6 @@
<li>iOS 側で CSS を受信したらデザインを更新します。</li>
</ol>
-
<p>という感じで、CSS ファイルを変更したら即座に反映される感じで動作します。</p>
<p>gem を組み込んだ後は、何も設定がいらないお手軽仕様となっております。アプリを iOS デバイスに転送したあとでも動作するので、RubyMotion もくもく会でデモをしたらものすごく受けが良かったです。</p>
@@ -233,13 +221,9 @@
<!-- more -->
-
-
-
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$ gem install pit</span></code></pre></td></tr></table></div></figure>
-
<p>とターミナルでコマンドを実行して pit をインストールします。</p>
<p>使い方は <a href="http://subtech.g.hatena.ne.jp/cho45/20080102/1199257680">アカウント情報を管理するコマンド pit</a> を見ていただければ良いかと思います。</p>
@@ -262,7 +246,6 @@
</span><span class='line'><span class="p">})</span>
</span></code></pre></td></tr></table></div></figure>
-
<p>初回の <code>rake</code> 実行時に vi ($EDITOR で設定されているエディタ) が起動するので、ユーザ名など記入し保存します。</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
@@ -275,7 +258,6 @@
</span><span class='line'><span class="l-Scalar-Plain">framework</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">Pixate framework path</span>
</span></code></pre></td></tr></table></div></figure>
-
<p>framework を毎回 vendor ディレクトリにコピーしたりするのも面倒なので、適当な場所に配置してそれを直接使うようにしました。</p>
<p>あとは、下のように読み込んだ設定情報を利用するだけ。</p>
@@ -294,7 +276,6 @@
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
<p>pit を使うと設定情報が ~/.pit に保存されるので git でプロジェクトを管理するときなど都合が良さそうな感じです。</p>
]]></content>
</entry>
@@ -310,7 +291,6 @@
<!-- more -->
-
<h2>RubyMotion はすべて Objective-C のクラス</h2>
<p>CRuby ではルートクラスとして Object というクラスが存在します(Ruby 1.9 からだと BasicObject というのもありますが)。これに対して Objective-C では NSObject というクラスがルートクラスとして存在しています。似たようなクラスがお互いにルートクラスに存在していますね。</p>
@@ -322,7 +302,6 @@
</pre></td><td class='code'><pre><code class=''><span class='line'>(main)&gt; Object.new
</span><span class='line'>=&gt; #&lt;NSObject:0x937e410&gt;</span></code></pre></td></tr></table></div></figure>
-
<p>NSObject をベースとしてクラスを構築しているため、すべてのオブジェクトは何らかの Objective-C のメソッドを持っています。</p>
<p>Objective-C の performSelector で、 Ruby の to_s というメソッドを実行してみました。</p>
@@ -332,7 +311,6 @@
</pre></td><td class='code'><pre><code class=''><span class='line'>(main)&gt; Object.new.performSelector("to_s")
</span><span class='line'>=&gt; "#&lt;NSObject:0xe13efc0&gt;"</span></code></pre></td></tr></table></div></figure>
-
<p>(ちなみに Objective-C ではセレクタを指定する際 <code>@selector(to_s)</code> のように指定しますが、RubyMotion では単に文字列を渡すだけで良いようになっています)</p>
<h2>String/Array/Hash/Numeric/Time</h2>
@@ -348,7 +326,6 @@
<tr><td>Time</td><td>Time → NSDate → NSObject</td></tr>
</table>
-
<p>この継承関係のおかげで、Ruby の Time として作ったオブジェクトでも、NSDate のメソッドを使うことができたりします。</p>
<p>Objective-C で書かれたプログラムに Time オブジェクトを渡しても NSDate として振る舞ってくれるので Objective-C にとっても都合が良いということですね。私たちにとってはオブジェクトを変換する手間が不要で嬉しい!!</p>
@@ -366,7 +343,6 @@
</span><span class='line'>(main)&gt; time.timeIntervalSince1970
</span><span class='line'>=&gt; 1355993088.0</span></code></pre></td></tr></table></div></figure>
-
<p>親のクラスである NSString, NSArray, NSDictionary, NSNumber, NSDate には互換性のために Ruby メソッドが追加されています。</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
@@ -386,7 +362,6 @@
</span><span class='line'>(main)&gt; date.strftime("%Y")
</span><span class='line'>=&gt; "2012"</span></code></pre></td></tr></table></div></figure>
-
<p>というように、 どのメソッドで作られたか、どのメソッドを呼び出すのか意識しなくても Ruby が書けるようになっています。</p>
<h2>オープンクラスでメソッドを追加する場合は上位クラスに</h2>
@@ -420,7 +395,6 @@
</span><span class='line'>*** set a breakpoint in malloc_error_break to debug
</span><span class='line'>=&gt; #&lt;NoMethodError: undefined method `foo' for "abc":String&gt;</span></code></pre></td></tr></table></div></figure>
-
<p>オープンクラスでメソッドを追加する場合は上位の NSString や NSArray に追加するとハマることが少なくなるかと思います。</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
@@ -447,7 +421,6 @@
</span><span class='line'>
</span><span class='line'>(main)&gt; "abc".hello
</span><span class='line'>=&gt; "hello"</span></code></pre></td></tr></table></div></figure>
-
]]></content>
</entry>
@@ -462,10 +435,9 @@
<!-- more -->
-
<h2>iOS SDK がサポートする CPU アーキテクチャ</h2>
-<p> iOS SDK がサポートする CPU アーキテクチャは以下の表のようになっています。</p>
+<p>iOS SDK がサポートする CPU アーキテクチャは以下の表のようになっています。</p>
<table class="table">
<tr><th>iOS SDK バージョン</th><th>サポート CPU アーキテクチャ</th></tr>
@@ -475,7 +447,6 @@
<tr><td>iOS 6.0</td><td>armv7, armv7s</td></tr>
</table>
-
<p>RubyMotion では iOS SDK がサポートしている CPU アーキテクチャにあわせてビルドが行われます。ビルド対象を iOS 6.0 にすると armv7 と armv7s を対象にビルドが行われます。</p>
<p>たいていは問題がないのですが、サードパーティのライブラリを使うときに気をつけてください。</p>
@@ -501,10 +472,9 @@
</span><span class='line'>ld: ld: file is universal (2 slices) but does not contain a(n) armv7s slice: /Users/watson/Documents/workspace/HelloGMaps/vendor/GoogleMaps.framework/GoogleMaps for architecture armv7s
</span><span class='line'>clang: error: linker command failed with exit code 1 (use -v to see invocation)</span></code></pre></td></tr></table></div></figure>
-
<h2>CPU アーキテクチャを指定する</h2>
-<p><code>Rakefile</code> で <code>app.archs['iPhoneOS']</code> を設定するとビルドするデバイスの CPU アーキテクチャを指定することができます。</p>
+<p><code>Rakefile</code> で <code>app.archs[&#39;iPhoneOS&#39;]</code> を設定するとビルドするデバイスの CPU アーキテクチャを指定することができます。</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -516,7 +486,6 @@
</span><span class='line'> <span class="o">.</span><span class="n">.</span><span class="o">.</span>
</span></code></pre></td></tr></table></div></figure>
-
<p>これで armv7 だけを対象にデバイス向けにビルドすることができます。</p>
]]></content>
</entry>
@@ -534,7 +503,6 @@
<!-- more -->
-
<h2>メモリサイクル</h2>
<p>iOS では、ボタンをタップなどするとイベントが発生します。イベントの開始時に自動的にメモリプールを生成し、イベント終了時にプールをリリースします。このときメモリプールに登録されている不要になったオブジェクトが一緒にリリースされます。</p>
@@ -555,10 +523,9 @@
</span><span class='line'> <span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
<p>Instruments.app でメモリ使用を確認すると、以下のようになります。</p>
-<p><img src="http://watson1978.github.com/images/blog/autorelease_pool_1.png" alt="autorelease_pool なし" /></p>
+<p><img src="http://watson1978.github.com/images/blog/autorelease_pool_1.png" alt="autorelease_pool なし"></p>
<p>イベントが終了するまで一時的なオブジェクトは生存していて、イベント終了とともに破棄されている様子がわかります。</p>
@@ -584,12 +551,11 @@
</span><span class='line'> <span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
<p><code>autorelease_pool</code> のブロックで囲むようにしただけです。Objective-C の <code>@autorelease</code> ブロックと同じようですね。</p>
<p>Instruments.app でメモリ使用を確認してみます。</p>
-<p><img src="http://watson1978.github.com/images/blog/autorelease_pool_2.png" alt="autorelease_pool なし" /></p>
+<p><img src="http://watson1978.github.com/images/blog/autorelease_pool_2.png" alt="autorelease_pool なし"></p>
<p>今回は一定のメモリ使用率をキープしていることが分かります。<code>autorelease_pool</code> ブロックの処理が終わると、ブロック内で使用した不要なオブジェクトが破棄されていることが分かるかと思います。</p>
@@ -608,7 +574,6 @@
<!-- more -->
-
<h2>grep で検索すると・・・</h2>
<p>grep で検索するといろいろなノイズに紛れ込んでしまいます。</p>
@@ -648,7 +613,6 @@
</span><span class='line'>spec/main_spec.rb:3: @app = UIApplication.sharedApplication
</span><span class='line'>spec/main_spec.rb:7: @app.windows.size.should == 1</span></code></pre></td></tr></table></div></figure>
-
<h2>検索するツールを作りました</h2>
<figure class='code'><figcaption><span>rbfind </span></figcaption>
@@ -716,7 +680,6 @@
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
<p>RubyMotion はキーワード付き引数をサポートしているため、それを扱える MacRuby か Ruby 2.0 で実行してください。(CRuby 向けのコードでしたら、Ruby 1.9 でも動作するはずです)</p>
<p>Rubyのソースコードをトークン単位で検索します。実行すると、以下のような感じになります。</p>
@@ -726,7 +689,6 @@
</pre></td><td class='code'><pre><code class=''><span class='line'>$ rbfind p
</span><span class='line'>app/controllers/camera_controller.rb:33: p @front</span></code></pre></td></tr></table></div></figure>
-
<p>完全に一致した場合に表示しているので、インスタンス変数を調べるときには <code>@front</code> のように ワードを指定します。</p>
<p>短いメソッドなどを探すのが楽になるかなと思っていますが、いかがでしたでしょうか。</p>
@@ -744,29 +706,25 @@
<!-- more -->
-
<h2>Jenkins をインストール</h2>
<p>Homebrew を利用してインストールしました。</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$ brew install jenkins</span></code></pre></td></tr></table></div></figure>
-
<p>以下のコマンドを実行すると Jenkins が起動します。</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$ java -jar /usr/local/opt/jenkins/libexec/jenkins.war</span></code></pre></td></tr></table></div></figure>
-
<p>ログインしたときに自動的に Jenkins を起動したい場合には以下のコマンドを実行すると良いようです。</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$ ln -sfv /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents
</span><span class='line'>$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist</span></code></pre></td></tr></table></div></figure>
-
<p>Jenkins をインストールしたマシンからのみアクセスする場合には問題がないのですが、別のマシンからもアクセスしたい場合には homebrew.mxcl.jenkins.plist を修正する必要があるようです。</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
@@ -795,7 +753,6 @@
</span><span class='line'> &lt;true/&gt;
</span></code></pre></td></tr></table></div></figure>
-
<p><code>--httpListenAddress</code> の行をざっくりと削除しましょう。</p>
<p>http://localhost:8080/ にアクセスすると、Jenkins で作業をおこなうことができます。</p>
@@ -812,25 +769,23 @@
</span><span class='line'>$ git clone git://github.com/HipByte/RubyMotionSamples.git
</span></code></pre></td></tr></table></div></figure>
-
<p>次に Jenkins でジョブを設定してきます。</p>
<ol>
<li><p>メニューの「新規ジョブ作成」を選択します。ここではジョブ名に「Timer」とし、「フリースタイル・プロジェクトのビルド」をチェックします。<br/>
-<img src="http://watson1978.github.com/images/blog/jenkins/create_new_job.png" alt="新規ジョブ作成" /></p></li>
+<img src="http://watson1978.github.com/images/blog/jenkins/create_new_job.png" alt="新規ジョブ作成"></p></li>
<li><p>「プロジェクトの高度なオプション」でカスタムワークスペースを設定します。先ほど <code>git clone</code> したプロジェクトのパスを設定します。私の環境では <code>/Users/watson/work/RubyMotionSamples/Timer</code> というパスになります。<br/>
-<img src="http://watson1978.github.com/images/blog/jenkins/custom_workspace.png" alt="カスタムワークスペースの設定" /></p></li>
+<img src="http://watson1978.github.com/images/blog/jenkins/custom_workspace.png" alt="カスタムワークスペースの設定"></p></li>
<li><p>「ビルド」で「シェルの実行」を選択し、<code>rake spec</code> を実行します。
-<img src="http://watson1978.github.com/images/blog/jenkins/shell_command.png" alt="シェルスクリプト" /></p></li>
+<img src="http://watson1978.github.com/images/blog/jenkins/shell_command.png" alt="シェルスクリプト"></p></li>
</ol>
-
<h2>ビルド実行</h2>
<p>先ほど作成したジョブを実行してみます。メニューから「ビルド実行」を選択します。
ビルドした結果のコンソール出力を見てみましょう。</p>
-<p><img src="http://watson1978.github.com/images/blog/jenkins/consol_log.png" alt="コンソール出力" /></p>
+<p><img src="http://watson1978.github.com/images/blog/jenkins/consol_log.png" alt="コンソール出力"></p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -840,13 +795,12 @@
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='diff'><span class='line'><span class="gi">+ rake spec</span>
</span><span class='line'>...
-</span><span class='line'>[1m Simulate[0m ./build/iPhoneSimulator-6.0-Development/Timer_spec.app
+</span><span class='line'>[1m Simulate ./build/iPhoneSimulator-6.0-Development/Timer_spec.app
</span><span class='line'>*** stdout unavailable, output disabled
</span><span class='line'>*** stderr unavailable, output disabled
</span><span class='line'>Finished: SUCCESS
</span></code></pre></td></tr></table></div></figure>
-
<p><code>SUCCESS</code> で終了しているのに、<code>*** stdout unavailable, output disabled</code> と結果が出力されません。</p>
<h2>実行するスクリプトの修正</h2>
@@ -861,7 +815,6 @@
</span><span class='line'>cat /tmp/jenkins_output
</span></code></pre></td></tr></table></div></figure>
-
<p>ジョブを実行すると、コンソール出力が次のようになります。</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
@@ -877,8 +830,8 @@
<span class='line-number'>11</span>
<span class='line-number'>12</span>
</pre></td><td class='code'><pre><code class='diff'><span class='line'><span class="gi">+ rake spec SIM_STDOUT_PATH=/tmp/jenkins_output SIM_STDERR_PATH=/tmp/jenkins_error</span>
-</span><span class='line'>[1m Build[0m ./build/iPhoneSimulator-6.0-Development
-</span><span class='line'>[1m Simulate[0m ./build/iPhoneSimulator-6.0-Development/Timer_spec.app
+</span><span class='line'> Build ./build/iPhoneSimulator-6.0-Development
+</span><span class='line'> Simulate ./build/iPhoneSimulator-6.0-Development/Timer_spec.app
</span><span class='line'><span class="gi">+ cat /tmp/jenkins_output</span>
</span><span class='line'>The Timer view controller
</span><span class='line'> - has a timer label
@@ -890,7 +843,6 @@
</span><span class='line'>Finished: SUCCESS
</span></code></pre></td></tr></table></div></figure>
-
<p>ずいぶん良くなりました。</p>
<p>Jenkins はスクリプトの終了コードを見て、成功なのか失敗なのかを判断しているようです。テストがすべて成功したときだけ SUCCESS としてほしいところです。そこで次の <code>run_spec</code> というファイルを作成してパスが通っているところに配置し、Jenkins で実行するようにしました。</p>
@@ -944,7 +896,6 @@
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
<p>Jenkins の「シェルの実行」には <code>run_spec</code> とだけ記述すれば OK です。これでテストに失敗したときには Jenkins のステータスが赤く表示されるので分かりやすくなりました。</p>
<p>記事を書くまでに設定したのはここまでです。あとは定期的にテストを実行したり、テスト結果をメールで送信したりなどするとより良くなるのではないでしょうか。</p>
@@ -970,12 +921,11 @@
<!-- more -->
-
<h2>きっかけは</h2>
<p>何を検索していてたどり着いたのかは忘れましたが、<a href="http://ja.favstar.fm/users/Psychs/status/3507370903">http://ja.favstar.fm/users/Psychs/status/3507370903</a> というツイートを見かけ、</p>
-<p><img src="http://watson1978.github.com/images/blog/psychs_tweet_nsconnection.png" alt="Psychs 先生のツイート" /></p>
+<p><img src="http://watson1978.github.com/images/blog/psychs_tweet_nsconnection.png" alt="Psychs 先生のツイート"></p>
<p>さすが @Psychs 先生。神!と思った次第です。iOS シミュレータなど Cocoa API を使ったアプリの HTTP 通信は簡単に Proxy を経由するように設定できるわけですね。</p>
@@ -1026,7 +976,6 @@
</span><span class='line'><span class="n">s</span><span class="o">.</span><span class="n">start</span>
</span></code></pre></td></tr></table></div></figure>
-
<p>上記の proxy.rb を実行すると 8080 ポートで Proxy サーバが起動します。</p>
<p>あとはハンドラの処理をテスト内容に応じて追加してあげると良いでしょう。たとえば画像に対しては 404 Not Found を返してあげたい場合には</p>
@@ -1045,14 +994,13 @@
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
<p>といったような処理を追加すると良いでしょう。特定の URL に対するアクセスも同じように簡単に処理できるかと思います。あるいは、sleep を追加して一定時間レスポンスを返さないテストも行えるかと思います。</p>
<h2>プロキシを設定し利用してみよう</h2>
<p>[システム環境設定] の [ネットワーク] でプロキシを設定します。</p>
-<p><img src="http://watson1978.github.com/images/blog/proxy_setting_on_osx.png" alt="プロキシを設定" /></p>
+<p><img src="http://watson1978.github.com/images/blog/proxy_setting_on_osx.png" alt="プロキシを設定"></p>
<p>これで Cocoa API を使用したアプリの通信がプロキシを経由するようになります。</p>
@@ -1082,10 +1030,9 @@
</span><span class='line'><span class="o">-</span> <span class="o">-&gt;</span> <span class="n">http</span><span class="ss">:/</span><span class="o">/</span><span class="n">gspa23</span><span class="o">.</span><span class="n">ls</span><span class="o">.</span><span class="n">apple</span><span class="o">.</span><span class="n">com</span><span class="o">/</span><span class="n">tile?style</span><span class="o">=</span><span class="mi">13</span><span class="o">&amp;</span><span class="n">size</span><span class="o">=</span><span class="mi">2</span><span class="o">&amp;</span><span class="n">scale</span><span class="o">=</span><span class="mi">0</span><span class="o">&amp;</span><span class="n">v</span><span class="o">=</span><span class="mi">46</span><span class="o">&amp;</span><span class="n">z</span><span class="o">=</span><span class="mi">6</span><span class="o">&amp;</span><span class="n">x</span><span class="o">=</span><span class="mi">33</span><span class="o">&amp;</span><span class="n">y</span><span class="o">=</span><span class="mi">21</span><span class="o">&amp;</span><span class="n">lang</span><span class="o">=</span><span class="n">en</span><span class="o">&amp;</span><span class="n">sid</span><span class="o">=</span><span class="mi">120413474228982680818307689923224195391</span><span class="o">&amp;</span><span class="n">tk</span><span class="o">=</span><span class="mi">11</span><span class="n">e206b6e88472f89a46a8358fe131fe</span><span class="o">&amp;</span><span class="n">mapkey</span><span class="o">=</span><span class="mi">1354448060_71</span><span class="n">cded0e981b896e87214a6be0d8e71d</span>
</span></code></pre></td></tr></table></div></figure>
-
<p>この Proxy サーバは iPhone などの実機からも利用することができます。[設定] の [Wi-Fi] からプロキシを設定してください。</p>
-<p><img src="http://watson1978.github.com/images/blog/proxy_setting_on_ios.png" alt="プロキシを設定" /></p>
+<p><img src="http://watson1978.github.com/images/blog/proxy_setting_on_ios.png" alt="プロキシを設定"></p>
<p>テストが終わりましたら、プロキシの設定は元に戻してくださいね。</p>
@@ -1098,7 +1045,6 @@
<ul>
<li><a href="http://jp.rubyist.net/magazine/?0002-WEBrickProxy">WEBrickでプロキシサーバを作って遊ぶ</a></li>
</ul>
-
]]></content>
</entry>
@@ -1116,7 +1062,6 @@ Xcode に付属している Instruments が様々な情報を表示できるの
<!-- more -->
-
<h2>プローブを確認してみる</h2>
<p>DTrace では、アプリに埋め込まれている「プローブ」と呼ばれる計測ポイントを用い、追跡をおこないます。</p>
@@ -1130,7 +1075,6 @@ Xcode に付属している Instruments が様々な情報を表示できるの
</span><span class='line'>$ cd HelloDTrace
</span><span class='line'>$ rake</span></code></pre></td></tr></table></div></figure>
-
<p>別の Terminal ウィンドウで <code>sudo dtrace -l</code> を実行してみます。</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
@@ -1150,7 +1094,6 @@ Xcode に付属している Instruments が様々な情報を表示できるの
</span><span class='line'> 5 lockstat mach_kernel lck_mtx_lock adaptive-spin
</span><span class='line'>...</span></code></pre></td></tr></table></div></figure>
-
<p>各列の説明を簡単にします。</p>
<ul>
@@ -1160,7 +1103,6 @@ Xcode に付属している Instruments が様々な情報を表示できるの
<li><code>NAME</code> は、プローブの機能を表す名前を表します。</li>
</ul>
-
<p>大量に表示されるプローブの一覧から RubyMotion が提供しているものを探し出すのは不可能に近いので <code>grep</code> で検索してみましょう。</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
@@ -1172,7 +1114,6 @@ Xcode に付属している Instruments が様々な情報を表示できるの
</span><span class='line'> 8038 macruby2577 HelloDTrace rb_vm_dispatch method-return
</span><span class='line'> 8039 macruby2577 HelloDTrace _ZL10__vm_raisev [__vm_raise()] raise</span></code></pre></td></tr></table></div></figure>
-
<p>RubyMotion は MacRuby と同様に <code>macruby</code> というプロバイダ名でプローブを提供しています。プローブは <code>method-entry</code>、 <code>method-return</code> と <code>raise</code> の 3 種類あることが分かります。</p>
<h2>プローブ説明</h2>
@@ -1184,7 +1125,6 @@ Xcode に付属している Instruments が様々な情報を表示できるの
<td>raise</td><td>例外発生時</td><td>クラス名</td><td>ソースファイル名</td><td>行番号</td><td>-</td></tr>
</table>
-
<p><code>method-entry</code> プローブが実行されるとき、変数 arg0 にはクラス名、変数 arg1 には メソッド名が格納されています。(ソースファイル名と行番号は正しく格納されていない)</p>
<h2>とりあえず動かしてみよう</h2>
@@ -1230,7 +1170,6 @@ Xcode に付属している Instruments が様々な情報を表示できるの
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
<p>次に以下のような DTrace 用のスクリプト <code>trace.d</code> を用意します。</p>
<figure class='code'><figcaption><span>trace.d </span></figcaption>
@@ -1254,7 +1193,6 @@ Xcode に付属している Instruments が様々な情報を表示できるの
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>
-
<h3>実行してみよう</h3>
<p>まずは RubyMotion アプリを <code>rake</code> コマンドで起動します。</p>
@@ -1266,19 +1204,16 @@ Xcode に付属している Instruments が様々な情報を表示できるの
</pre></td><td class='code'><pre><code class=''><span class='line'>$ ps cux | grep HelloDTrace
</span><span class='line'>watson 5140 0.0 0.3 875476 21148 ?? S 6:04PM 0:00.31 HelloDTrace</span></code></pre></td></tr></table></div></figure>
-
<p>プロセス ID は 5140 でした。</p>
<p>次に DTrace を実行します。<code>dtrace</code> の後に <code>-s</code> オプションで用意した DTrace 用のスクリプト、<code>-p</code> で情報を取得するプロセスの ID を指定します。</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$ sudo dtrace -s trace.d -p 5140</span></code></pre></td></tr></table></div></figure>
-
<p>マウスカーソルを移動するたびに DTrace の実行画面にトレース情報が表示されるかと思います。シミュレータ上でマウスオーバーを検出するためにマウスカーソルのイベントが発生するとやりとりしているようです。(キーボード操作だけで乗り切ると、余計なログが表示されず見やすくなります)</p>
-<p>RubyMotion の REPL で <code>hello_dtrace</code> メソッドを実行してみましょう。シミュレータにはアラートビューが表示され、DTrace を実行している Terminal には以下のように DTrace を起動した後に実行されたメソッドが表示されます。</p>
-
+<p>RubyMotion の REPL で <code>hello_dtrace</code> メソッドを実行してみましょう。シミュレータにはアラートビューが表示され、DTrace を実行している Terminal には以下のように DTrace を起動した後に実行されたメソッドが表示されます。
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
@@ -1296,24 +1231,23 @@ Xcode に付属している Instruments が様々な情報を表示できるの
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
-</pre></td><td class='code'><pre><code class=''><span class='line'> 0 -&gt; rb_vm_dispatch (TopLevel#inspect)
-</span><span class='line'> 0 &lt;- rb_vm_dispatch (TopLevel#inspect)
-</span><span class='line'> 1 -&gt; rb_vm_dispatch (TopLevel#hello_dtrace)
-</span><span class='line'> 1 -&gt; rb_vm_dispatch (Class#now)
-</span><span class='line'> 1 -&gt; rb_vm_dispatch (Class#alloc)
-</span><span class='line'> 1 &lt;- rb_vm_dispatch (Class#alloc)
-</span><span class='line'> 1 -&gt; rb_vm_dispatch (Time#initialize)
-</span><span class='line'> 1 &lt;- rb_vm_dispatch (Time#initialize)
-</span><span class='line'> 1 &lt;- rb_vm_dispatch (Class#now)
-</span><span class='line'> 1 -&gt; rb_vm_dispatch (Time#to_s)
-</span><span class='line'> 1 &lt;- rb_vm_dispatch (Time#to_s)
-</span><span class='line'> 1 -&gt; rb_vm_dispatch (UIAlertView#inspect)
-</span><span class='line'> 1 -&gt; rb_vm_dispatch (UIAlertView#to_s)
-</span><span class='line'> 1 &lt;- rb_vm_dispatch (UIAlertView#to_s)
-</span><span class='line'> 1 &lt;- rb_vm_dispatch (UIAlertView#inspect)
-</span><span class='line'> 3 &lt;- rb_vm_dispatch (TopLevel#hello_dtrace)
-</span><span class='line'>^C</span></code></pre></td></tr></table></div></figure>
-
+</pre></td><td class='code'><pre><code class=''><span class='line'> 0 -&gt; rb<em>vm</em>dispatch (TopLevel#inspect)
+</span><span class='line'> 0 &lt;- rb<em>vm</em>dispatch (TopLevel#inspect)
+</span><span class='line'> 1 -&gt; rb<em>vm</em>dispatch (TopLevel#hello<em>dtrace)
+</span><span class='line'> 1 -&gt; rb</em>vm<em>dispatch (Class#now)
+</span><span class='line'> 1 -&gt; rb</em>vm<em>dispatch (Class#alloc)
+</span><span class='line'> 1 &lt;- rb</em>vm<em>dispatch (Class#alloc)
+</span><span class='line'> 1 -&gt; rb</em>vm<em>dispatch (Time#initialize)
+</span><span class='line'> 1 &lt;- rb</em>vm<em>dispatch (Time#initialize)
+</span><span class='line'> 1 &lt;- rb</em>vm<em>dispatch (Class#now)
+</span><span class='line'> 1 -&gt; rb</em>vm<em>dispatch (Time#to</em>s)
+</span><span class='line'> 1 &lt;- rb<em>vm</em>dispatch (Time#to<em>s)
+</span><span class='line'> 1 -&gt; rb</em>vm<em>dispatch (UIAlertView#inspect)
+</span><span class='line'> 1 -&gt; rb</em>vm<em>dispatch (UIAlertView#to</em>s)
+</span><span class='line'> 1 &lt;- rb<em>vm</em>dispatch (UIAlertView#to<em>s)
+</span><span class='line'> 1 &lt;- rb</em>vm<em>dispatch (UIAlertView#inspect)
+</span><span class='line'> 3 &lt;- rb</em>vm<em>dispatch (TopLevel#hello</em>dtrace)
+</span><span class='line'>^C</span></code></pre></td></tr></table></div></figure></p>
<p>インデントの深さに応じて、メソッドがどのような順序で呼び出されているかが分かります。</p>
@@ -1368,8 +1302,7 @@ Xcode に付属している Instruments が様々な情報を表示できるの
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>
-
-<p><code>/ copyinstr(arg0) == "String" /</code> という記述を追加すると、変数 arg0 が &#8220;String&#8221; と一致するときだけ計測されるようになります。</p>
+<p><code>/ copyinstr(arg0) == &quot;String&quot; /</code> という記述を追加すると、変数 arg0 が &quot;String&quot; と一致するときだけ計測されるようになります。</p>
<p>DTrace で上のスクリプトを実行すると次のように、String クラスのメソッドの実行時間の合計が表示されます。</p>
@@ -1384,7 +1317,6 @@ Xcode に付属している Instruments が様々な情報を表示できるの
</span><span class='line'>String *: 71
</span><span class='line'>String index: 68125</span></code></pre></td></tr></table></div></figure>
-
<p>わざわざアプリにパフォーマンスを計測するためのコードを追加しなくても、どのメソッドの処理が重たいのかが分かります。</p>
<h2>まとめ</h2>
@@ -1399,20 +1331,17 @@ Xcode に付属している Instruments が様々な情報を表示できるの
<li><a href="https://github.com/MacRuby/MacRubySamples/tree/master/DTrace">https://github.com/MacRuby/MacRubySamples/tree/master/DTrace</a></li>
</ul>
-
<p>DTrace の基本が書かれています。</p>
<ul>
<li><a href="http://nippondanji.blogspot.jp/2010/02/ddtrace.html">D言語基礎文法最速マスター(DTraceのほう)</a></li>
</ul>
-
<p>DTrace についてはオラクルのドキュメントが一番詳しいです。</p>
<ul>
<li><a href="http://docs.oracle.com/cd/E19253-01/819-0395/">http://docs.oracle.com/cd/E19253-01/819-0395/</a></li>
</ul>
-
]]></content>
</entry>
@@ -1427,7 +1356,6 @@ Xcode に付属している Instruments が様々な情報を表示できるの
<!-- more -->
-
<p>「RubyMotion をアップデートした後で、シミュレータが起動しなくなりました」と質問があったので見せていただいたら、<code>rake</code> コマンドでシミュレータを起動しようとすると、以下のようなログが表示されたきり、その後アプリが動き出すこともないしシミュレータが前面に表示されることもありません。</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
@@ -1455,15 +1383,13 @@ Xcode に付属している Instruments が様々な情報を表示できるの
</span><span class='line'> Create ./build/iPhoneSimulator-6.0-Development/Hello.dSYM
</span><span class='line'> Simulate ./build/iPhoneSimulator-6.0-Development/Hello.app</span></code></pre></td></tr></table></div></figure>
-
<p>CPU 使用率が跳ね上がることもなく、<code>rake debug=1</code> や <code>rake mode=release</code> といろいろ起動方法を変えても、RubyMotion をダウングレードしても Mac を再起動しても相変わらずシミュレータはうんともすんとも言ってくれません。どうやら tmux の問題らしく、<a href="https://twitter.com/satococoa">@satococoa</a> さんに教えていただいた回避方法は、以下のものです。</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$ brew install reattach-to-user-namespace
</span><span class='line'>$ echo 'set-option -g default-command "reattach-to-user-namespace -l zsh"' &gt;&gt; .tmux.conf</span></code></pre></td></tr></table></div></figure>
-
<p>tmux を使っていると何か問題があるというのは聞いたことがあるのですが、こんな現象だとは初めて知りました。知らないとずっとハマってしまいそうな現象ですね。tmux を使われている方はご注意ください。</p>
]]></content>
</entry>
@@ -1477,68 +1403,63 @@ Xcode に付属している Instruments が様々な情報を表示できるの
<!-- more -->
-
<h2>証明書を作成</h2>
<ol>
<li>「キーチェーンアクセス」を起動します。</li>
-<li>メニューの &#8220;キーチェーンアクセス&#8221; -> &#8220;証明書アシスタント&#8221; -> &#8220;認証局に証明書を要求&#8221; を選択します。</li>
-<li>メールアドレスと名前を記入して、&#8221;ディスクに保存&#8221; を選択し &#8220;続ける&#8221; をクリックします。<code>CertificateSigningRequest.certSigningRequest</code> というファイルが保存されます。(&#8220;CAのメールアドレス&#8221; の欄は未記入で良かったみたいです・・・)<br/>
-<img src="http://watson1978.github.com/images/blog/parse_push/certificate_signing_request.png" alt="Certificate Signing Request" /></li>
+<li>メニューの &quot;キーチェーンアクセス&quot; -&gt; &quot;証明書アシスタント&quot; -&gt; &quot;認証局に証明書を要求&quot; を選択します。</li>
+<li>メールアドレスと名前を記入して、&quot;ディスクに保存&quot; を選択し &quot;続ける&quot; をクリックします。<code>CertificateSigningRequest.certSigningRequest</code> というファイルが保存されます。(&quot;CAのメールアドレス&quot; の欄は未記入で良かったみたいです・・・)<br/>
+<img src="http://watson1978.github.com/images/blog/parse_push/certificate_signing_request.png" alt="Certificate Signing Request"></li>
</ol>
-
<p>次に <a href="https://developer.apple.com/ios/manage/bundles/index.action">iOS Provisioning Portal</a> で App ID の設定をします。</p>
<ol>
-<li>&#8220;App IDs&#8221; というメニューを選択し、&#8221;New App ID&#8221; ボタンをクリックします。</li>
-<li>&#8220;Description&#8221; にアプリの内容、&#8221;Bundle Identifier&#8221; にアプリの識別子を記入します。識別子には <code>*</code> を含めず、アプリ名までしっかり記入する必要があるようです。<br/>
-<img src="http://watson1978.github.com/images/blog/parse_push/app_id.png" alt="App IDs" /></li>
-<li>作成したアプリ ID の &#8220;Configure&#8221; をクリックします。<br/>
-<img src="http://watson1978.github.com/images/blog/parse_push/app_id_configure.png" alt="App IDs" /></li>
-<li>&#8220;Enable for Apple Push Notification service&#8221; のチェックを on にし、&#8221;Development Push SSL Certificate&#8221; の &#8220;Configure&#8221; ボタンをクリックします。<br/>
-<img src="http://watson1978.github.com/images/blog/parse_push/enable_push_notification.png" alt="App IDs" /></li>
-<li>&#8220;Generate a Certificate Signing Request&#8221; というポップアップウィンドウが表示されます。&#8221;Continnue&#8221; ボタンをクリックして次の画面に進みます。</li>
-<li>&#8220;Submit Certificate Signing Request&#8221; 画面が表示されます。ここで、「キーチェーンアクセス」で作成した <code>CertificateSigningRequest.certSigningRequest</code> ファイルを選択し、&#8221;Generate&#8221; ボタンをクリックします。<br/>
-<img src="http://watson1978.github.com/images/blog/parse_push/submit_certificate_signing_request.png" alt="App IDs" /></li>
-<li><p>&#8220;Download &amp; Install 〜&#8221; の画面まで進みます。&#8221;Download&#8221; をクリックして証明書をダウンロードしておきます。<br/>
-<img src="http://watson1978.github.com/images/blog/parse_push/download_install_certificate.png" alt="App IDs" /></p></li>
+<li>&quot;App IDs&quot; というメニューを選択し、&quot;New App ID&quot; ボタンをクリックします。</li>
+<li>&quot;Description&quot; にアプリの内容、&quot;Bundle Identifier&quot; にアプリの識別子を記入します。識別子には <code>*</code> を含めず、アプリ名までしっかり記入する必要があるようです。<br/>
+<img src="http://watson1978.github.com/images/blog/parse_push/app_id.png" alt="App IDs"></li>
+<li>作成したアプリ ID の &quot;Configure&quot; をクリックします。<br/>
+<img src="http://watson1978.github.com/images/blog/parse_push/app_id_configure.png" alt="App IDs"></li>
+<li>&quot;Enable for Apple Push Notification service&quot; のチェックを on にし、&quot;Development Push SSL Certificate&quot; の &quot;Configure&quot; ボタンをクリックします。<br/>
+<img src="http://watson1978.github.com/images/blog/parse_push/enable_push_notification.png" alt="App IDs"></li>
+<li>&quot;Generate a Certificate Signing Request&quot; というポップアップウィンドウが表示されます。&quot;Continnue&quot; ボタンをクリックして次の画面に進みます。</li>
+<li>&quot;Submit Certificate Signing Request&quot; 画面が表示されます。ここで、「キーチェーンアクセス」で作成した <code>CertificateSigningRequest.certSigningRequest</code> ファイルを選択し、&quot;Generate&quot; ボタンをクリックします。<br/>
+<img src="http://watson1978.github.com/images/blog/parse_push/submit_certificate_signing_request.png" alt="App IDs"></li>
+<li><p>&quot;Download &amp; Install 〜&quot; の画面まで進みます。&quot;Download&quot; をクリックして証明書をダウンロードしておきます。<br/>
+<img src="http://watson1978.github.com/images/blog/parse_push/download_install_certificate.png" alt="App IDs"></p></li>
<li><p>上の作業でダウンロードした証明書をダブルクリックして「キーチェーンアクセス」へ登録します。</p></li>
-<li>キーチェーンアクセスで &#8220;ログイン&#8221; 項目の、&#8221;自分の証明書&#8221; を表示すると先ほど登録した証明書があります。右クリックして「書き出す」を選択します。<br/>
-<img src="http://watson1978.github.com/images/blog/parse_push/keychain_export.png" alt="KeyChain Export" /></li>
-<li>&#8220;.p12&#8221; という形式でファイルを保存します。<br/>
-<img src="http://watson1978.github.com/images/blog/parse_push/export_p12.png" alt="KeyChain Export" /></li>
-<li>&#8220;.p12&#8221; 形式のファイルを保存する際にパスワードを求められますが、空欄のままにしておくようです。<br/>
-<img src="http://watson1978.github.com/images/blog/parse_push/export_p12_password.png" alt="KeyChain Export" /></li>
+<li><p>キーチェーンアクセスで &quot;ログイン&quot; 項目の、&quot;自分の証明書&quot; を表示すると先ほど登録した証明書があります。右クリックして「書き出す」を選択します。<br/>
+<img src="http://watson1978.github.com/images/blog/parse_push/keychain_export.png" alt="KeyChain Export"></p></li>
+<li><p>&quot;.p12&quot; という形式でファイルを保存します。<br/>
+<img src="http://watson1978.github.com/images/blog/parse_push/export_p12.png" alt="KeyChain Export"></p></li>
+<li><p>&quot;.p12&quot; 形式のファイルを保存する際にパスワードを求められますが、空欄のままにしておくようです。<br/>
+<img src="http://watson1978.github.com/images/blog/parse_push/export_p12_password.png" alt="KeyChain Export"></p></li>
</ol>
-
<h2>Provisioning Profile を作成</h2>
<p>ここまでの作業ですでに心が折れそうなくらい、設定が面倒くさいですね。Parse がさっぱり出てこないし・・・。</p>
<p><a href="https://developer.apple.com/ios/manage/bundles/index.action">iOS Provisioning Portal</a> へ戻り、Provisioning Profile を作成しましょう。</p>
<ol>
-<li>&#8220;Provisioning&#8221; メニューを選択し、&#8221;New Profile&#8221; ボタンをクリックします。</li>
-<li>わかりやすい &#8220;Profile Name&#8221; を記入し、プッシュ通知するアプリを選択します。<br/>
-<img src="http://watson1978.github.com/images/blog/parse_push/provisioning.png" alt="Provisioning" /></li>
-<li>&#8220;New Profile&#8221; ボタンをクリックした画面に戻り、Provisioning をダウンロードしておきます。<br/>
-<img src="http://watson1978.github.com/images/blog/parse_push/download_provisioning.png" alt="Provisioning" /></li>
+<li>&quot;Provisioning&quot; メニューを選択し、&quot;New Profile&quot; ボタンをクリックします。</li>
+<li>わかりやすい &quot;Profile Name&quot; を記入し、プッシュ通知するアプリを選択します。<br/>
+<img src="http://watson1978.github.com/images/blog/parse_push/provisioning.png" alt="Provisioning"></li>
+<li>&quot;New Profile&quot; ボタンをクリックした画面に戻り、Provisioning をダウンロードしておきます。<br/>
+<img src="http://watson1978.github.com/images/blog/parse_push/download_provisioning.png" alt="Provisioning"></li>
<li>ダウンロードした Provisioning Profile をダブルクリックし Xcode へ登録しておきます。</li>
</ol>
-
<h2>Parse へ .p12 ファイルを登録</h2>
<ol>
<li>Parse の <a href="https://www.parse.com/apps/">Dashboard</a> を開きます。</li>
-<li>プッシュ通知を行うアプリの &#8220;Setting&#8221; 画面を開きます。</li>
-<li>キーチェーンアクセスで作成した &#8220;.p12&#8221; ファイルを登録します。<br/>
-<img src="http://watson1978.github.com/images/blog/parse_push/parse_dashboard.png" alt="Dashboard" /></li>
+<li>プッシュ通知を行うアプリの &quot;Setting&quot; 画面を開きます。</li>
+<li>キーチェーンアクセスで作成した &quot;.p12&quot; ファイルを登録します。<br/>
+<img src="http://watson1978.github.com/images/blog/parse_push/parse_dashboard.png" alt="Dashboard"></li>
</ol>
-
<h2>プッシュ通知を受け付けるアプリを作成</h2>
<h3>Rakefile を編集</h3>
@@ -1559,8 +1480,7 @@ Xcode に付属している Instruments が様々な情報を表示できるの
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
-<p><code>provisioning_profile</code> に設定する Provisioning Profile のパスは Xcode の Organizer で確認することができます。該当する Profile 上で右クリック &#8220;Reveal Profile in Finder&#8221; を選択すると、Finder 上で確認できます。</p>
+<p><code>provisioning_profile</code> に設定する Provisioning Profile のパスは Xcode の Organizer で確認することができます。該当する Profile 上で右クリック &quot;Reveal Profile in Finder&quot; を選択すると、Finder 上で確認できます。</p>
<h3>アプリを作成</h3>
@@ -1636,19 +1556,17 @@ Xcode に付属している Instruments が様々な情報を表示できるの
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
<p>プッシュ通知はシミュレータ上で動作確認できないようなので、デバイスへアプリを転送します。</p>
<figure class='code'><figcaption><span>app</span><a href='http://watson1978.github.com/app_delegate.rb'>link</a></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="err">$</span> <span class="n">rake</span> <span class="n">device</span>
</span></code></pre></td></tr></table></div></figure>
-
-<p>デバイス上でアプリを起動したら、<a href="https://www.parse.com/apps/quickstart_push">Push Quick Start Guide</a> ページの &#8220;Send Push Test&#8221; ボタンをクリックします。</p>
+<p>デバイス上でアプリを起動したら、<a href="https://www.parse.com/apps/quickstart_push">Push Quick Start Guide</a> ページの &quot;Send Push Test&quot; ボタンをクリックします。</p>
<p>正しく動作すると、</p>
-<p><img src="http://watson1978.github.com/images/blog/parse_push/receive_push.png" alt="Push Notification" /></p>
+<p><img src="http://watson1978.github.com/images/blog/parse_push/receive_push.png" alt="Push Notification"></p>
<p>のように、通知を受け取ることができます!</p>
@@ -1663,32 +1581,31 @@ Xcode に付属している Instruments が様々な情報を表示できるの
<id>http://watson1978.github.com/blog/2012/09/19/using-parse</id>
<content type="html"><![CDATA[<p><a href="https://www.parse.com/">Parse</a> は、ユーザ認証やプッシュ通知といったサーバ側の実装が必要となる機能をあらかじめ用意してくれていて、アプリから単に API を呼び出すだけで簡単にそれらの機能を利用できてしまうという、すごく便利なサービスです。</p>
-<p><img src="http://watson1978.github.com/images/blog/parse.png" alt="Parse" /></p>
+<p><img src="http://watson1978.github.com/images/blog/parse.png" alt="Parse"></p>
<!-- more -->
-
<h2>ユーザ登録</h2>
<p>さっそく、ユーザ登録をして Parse を使ってみましょう。「Try it for free」ボタンをクリックすると無料でユーザ登録できます。</p>
-<p><img src="http://watson1978.github.com/images/blog/parse_sign_up.png" alt="sign up" /></p>
+<p><img src="http://watson1978.github.com/images/blog/parse_sign_up.png" alt="sign up"></p>
<p>メールアドレスとパスワードを入力すると、次に Parse を使うアプリ名を聞かれます。後ほど変更することもできるので適当な名前を入力しておきましょう。私は「HelloParse」と安易な名前を入力しました。</p>
-<p><img src="http://watson1978.github.com/images/blog/parse_get_started.png" alt="get started" /></p>
+<p><img src="http://watson1978.github.com/images/blog/parse_get_started.png" alt="get started"></p>
<h2>Parse SDK をダウンロード</h2>
<p><a href="https://www.parse.com/apps/quickstart">Quick Start</a> ページで Parse SDK の簡単な導入方法について説明が書かれていますので、これに従って作業してみましょう。</p>
-<p>「1 Choose your platform」で、&#8221;iOS&#8221; と &#8220;Existing Project&#8221; を選択しておきます。(&#8220;Existing Project&#8221; を選択しておくと、SDK のみをダウンロードしやすいので)。</p>
+<p>「1 Choose your platform」で、&quot;iOS&quot; と &quot;Existing Project&quot; を選択しておきます。(&quot;Existing Project&quot; を選択しておくと、SDK のみをダウンロードしやすいので)。</p>
-<p><img src="http://watson1978.github.com/images/blog/parse_choose_platform.png" alt="Choose your platform" /></p>
+<p><img src="http://watson1978.github.com/images/blog/parse_choose_platform.png" alt="Choose your platform"></p>
<p>「3 Download &amp; install the SDK」で、Parse SDK をダウンロードしておきます。</p>
-<p><img src="http://watson1978.github.com/images/blog/parse_download_sdk.png" alt="Download &amp; install the SDK" /></p>
+<p><img src="http://watson1978.github.com/images/blog/parse_download_sdk.png" alt="Download &amp; install the SDK"></p>
<h2>RubyMotion アプリを作成</h2>
@@ -1713,15 +1630,13 @@ Xcode に付属している Instruments が様々な情報を表示できるの
</span><span class='line'> Create HelloParse/spec
</span><span class='line'> Create HelloParse/spec/main_spec.rb</span></code></pre></td></tr></table></div></figure>
-
<p>先ほどダウンロードした Parse SDK を <code>vendor</code> ディレクトリに配置します。</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$ cd HelloParse
</span><span class='line'>$ mkdir vendor</span></code></pre></td></tr></table></div></figure>
-
<p><code>parse-library-1.1.6.zip</code> を解凍すると <code>Parse.framework</code> というディレクトリが展開されるので、このディレクトリを <code>vendor</code> ディレクトリにコピーします。</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
@@ -1735,7 +1650,6 @@ Xcode に付属している Instruments が様々な情報を表示できるの
</span><span class='line'> ├── Headers -&gt; Versions/Current/Headers
</span><span class='line'>...</span></code></pre></td></tr></table></div></figure>
-
<h3>Rakefile を編集</h3>
<p>アプリで Parse SDK が使われるように <code>Rakefile</code> を編集し設定します。以下のように <code>vendor_project</code>、<code>frameworks</code>、<code>libs</code> を設定します。</p>
@@ -1766,7 +1680,6 @@ Xcode に付属している Instruments が様々な情報を表示できるの
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
<h3>Parse SDK API を使ってみよう</h3>
<figure class='code'><figcaption><span>app</span><a href='http://watson1978.github.com/app_delegate.rb'>link</a></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
@@ -1793,14 +1706,13 @@ Xcode に付属している Instruments が様々な情報を表示できるの
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
<p><code>setApplicationId</code> メソッドで使用している <code>&lt;Application-Id&gt;</code> と <code>&lt;Client-Key&gt;</code> は <a href="https://www.parse.com/apps/quickstart">Quick Start</a> に書かれていたものを使用します。</p>
-<p><img src="http://watson1978.github.com/images/blog/parse_app_id_client_key.png" alt="Application ID &amp; Client Key" /></p>
+<p><img src="http://watson1978.github.com/images/blog/parse_app_id_client_key.png" alt="Application ID &amp; Client Key"></p>
<p><code>rake</code> でアプリを実行してみましょう。Quick Start に設置されていた「Test」というボタンをクリックすると、正しく動作したか確認することができます。</p>
-<p><img src="http://watson1978.github.com/images/blog/parse_test.png" alt="Test" /></p>
+<p><img src="http://watson1978.github.com/images/blog/parse_test.png" alt="Test"></p>
<p>次は Parse SDK を使って Push Notification に挑戦してみたいなと思います。Enjoy!</p>
]]></content>
@@ -1817,7 +1729,6 @@ Xcode に付属している Instruments が様々な情報を表示できるの
<!-- more -->
-
<p>NSNetServiceBrowser と NSNetService というクラスを使って、iOS 側から Web サーバを探して接続するものとなっています。</p>
<figure class='code'><figcaption><span>app</span><a href='http://watson1978.github.com/app_delegate.rb'>link</a></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
@@ -1910,12 +1821,11 @@ Xcode に付属している Instruments が様々な情報を表示できるの
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
<p>Web サーバはどうするかというと、<a href="https://github.com/MacRuby/MacRubySamples/blob/master/Scripts/webrick.rb">https://github.com/MacRuby/MacRubySamples/blob/master/Scripts/webrick.rb</a> のサンプルを利用すると、すでに Bonjour が使われているので簡単ですね〜。</p>
<p>あらかじめ、MacRuby で書かれたサーバを起動しておいて、上記の iOS アプリを実行します。あとは、Bonjour を使って見つかったサーバに接続し UIWebView で表示しています。iPhone で URL を入力するのが面倒なので、そんな手間なしでさくっと Web ページを確認したいときとかに便利・・・かもしれませんね。</p>
-<p><img src="http://watson1978.github.com/images/blog/bonjour.png" alt="Bonjour" /></p>
+<p><img src="http://watson1978.github.com/images/blog/bonjour.png" alt="Bonjour"></p>
]]></content>
</entry>
@@ -1930,26 +1840,25 @@ Xcode に付属している Instruments が様々な情報を表示できるの
<!-- more -->
-
<h2>トラッキング ID を発行する</h2>
<p>Google Analytics の「アカウントの管理」画面で新しいアカウントを追加します。</p>
-<p><img src="http://watson1978.github.com/images/blog/analytics_add_account.png" alt="アカウントの管理" /></p>
+<p><img src="http://watson1978.github.com/images/blog/analytics_add_account.png" alt="アカウントの管理"></p>
<p>次にアカウント名などの情報を記入します。</p>
-<p><img src="http://watson1978.github.com/images/blog/analytics_create_account.png" alt="アカウントの追加" /></p>
+<p><img src="http://watson1978.github.com/images/blog/analytics_create_account.png" alt="アカウントの追加"></p>
-<p>「ウェブサイトのURL」では &#8220;ウェブサイト以外&#8221;、「タイムゾーン」は &#8220;日本&#8221; を選択しておくとよいでしょう。</p>
+<p>「ウェブサイトのURL」では &quot;ウェブサイト以外&quot;、「タイムゾーン」は &quot;日本&quot; を選択しておくとよいでしょう。</p>
-<p>アカウントを作成した後、&#8221;UA-xxxxxxxx-1&#8221; のようなトラッキング ID が発行されます。あとで使用するので控えておいてください。</p>
+<p>アカウントを作成した後、&quot;UA-xxxxxxxx-1&quot; のようなトラッキング ID が発行されます。あとで使用するので控えておいてください。</p>
<h2>Google Analytics SDK for iOS をダウンロード</h2>
<p><a href="https://developers.google.com/analytics/devguides/collection/ios/resources">Google Analytics SDK for iOS</a> から、SDK をダウンロードしておきます。</p>
-<p><img src="http://watson1978.github.com/images/blog/analytics_sdk.png" alt="SDK のダウンロード" /></p>
+<p><img src="http://watson1978.github.com/images/blog/analytics_sdk.png" alt="SDK のダウンロード"></p>
<h2>RubyMotion プロジェクトを作成</h2>
@@ -1958,16 +1867,14 @@ Xcode に付属している Instruments が様々な情報を表示できるの
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$ motion create HelloAnalytics</span></code></pre></td></tr></table></div></figure>
-
-<p>先ほどダウンロードした SDK のアーカイブを展開し、&#8221;Library&#8221; ディレクトリをプロジェクトに追加します。まずプロジェクトに &#8220;vendor&#8221; ディレクトリを作成しましょう。</p>
+<p>先ほどダウンロードした SDK のアーカイブを展開し、&quot;Library&quot; ディレクトリをプロジェクトに追加します。まずプロジェクトに &quot;vendor&quot; ディレクトリを作成しましょう。</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$ cd HelloAnalytics/
</span><span class='line'>$ mkdir vendor</span></code></pre></td></tr></table></div></figure>
-
-<p>作成したディレクトリに SDK の &#8220;Library&#8221; を追加します。以下のようなファイル構成になります。</p>
+<p>作成したディレクトリに SDK の &quot;Library&quot; を追加します。以下のようなファイル構成になります。</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -1982,7 +1889,6 @@ Xcode に付属している Instruments が様々な情報を表示できるの
</span><span class='line'> ├── libGoogleAnalytics.a
</span><span class='line'> └── libGoogleAnalytics_NoThumb.a</span></code></pre></td></tr></table></div></figure>
-
<h2>プロジェクトの設定</h2>
<p>プロジェクトの <code>Rakefile</code> をエディタで開き SDK を使うための設定をします。</p>
@@ -2013,7 +1919,6 @@ Xcode に付属している Instruments が様々な情報を表示できるの
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
<p><code>vendor_project</code> を設定し Google Analytics SDK を利用できるようにします。SDK は CFNetwork.framework と libsqlite3.dylib を使用するようなので、<code>frameworks</code> と <code>libs</code> でそれぞれ設定します。</p>
<p>これでアプリで Google Analytics SDK を使えるようになります!</p>
@@ -2056,12 +1961,11 @@ Xcode に付属している Instruments が様々な情報を表示できるの
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
<p><code>startTrackerWithAccountID</code> メソッドには、先ほど発行されたトラッキング ID を記述します。</p>
<p>アプリを実行すると、計測結果が Google Analytics で確認できるようになります。</p>
-<p><img src="http://watson1978.github.com/images/blog/analytics_result.png" alt="計測結果" /></p>
+<p><img src="http://watson1978.github.com/images/blog/analytics_result.png" alt="計測結果"></p>
<p><a href="https://developers.google.com/analytics/devguides/collection/ios/devguide">https://developers.google.com/analytics/devguides/collection/ios/devguide</a> に SDK の使い方について詳しく書かれていますので、必要なトラッキング処理をアプリに追加しいろいろ計測してみてください!</p>
]]></content>
@@ -2078,23 +1982,18 @@ Xcode に付属している Instruments が様々な情報を表示できるの
今のところ OS X 10.8 環境では iOS 4.3 シミュレータをインストールできないようなので、OS X 10.7 環境が必要となるので注意してください。
</div>
-
-
-
<!-- more -->
-
<h2>iOS 4.3 シミュレータをインストール</h2>
<p>もし、iOS 4.3 シミュレータをお持ちでなければインストールしておきます。Xcode の [Preferences&#8230;] メニューの [Downloads] タブでシミュレータをインストールすることができます。</p>
-<p><img src="http://watson1978.github.com/images/blog/install_ios43_simulator.png" alt="install iOS 4.3 simulator" /></p>
+<p><img src="http://watson1978.github.com/images/blog/install_ios43_simulator.png" alt="install iOS 4.3 simulator"></p>
<div class="note">
OS X 10.7 環境では「iOS 4.3 Simulator」項目があるのですが、OS X 10.8 では表示されずインストールできないようです。
</div>
-
<h2>プロジェクトの設定</h2>
<p>プロジェクトの <code>Rakefile</code> で <code>deployment_target</code> を設定し、アプリケーションのターゲットを iOS 4.3 にします。</p>
@@ -2119,7 +2018,6 @@ OS X 10.7 環境では「iOS 4.3 Simulator」項目があるのですが、OS X
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
<h2>アプリケーションを実行</h2>
<p>単に <code>rake</code> を実行すると iOS 5.1 用のシミュレータが起動しますので、環境変数 <code>target</code> でiOS 4.3 シミュレータを起動するように指定します。</p>
@@ -2128,14 +2026,12 @@ OS X 10.7 環境では「iOS 4.3 Simulator」項目があるのですが、OS X
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="err">$</span> <span class="n">rake</span> <span class="n">target</span><span class="o">=</span><span class="mi">4</span><span class="o">.</span><span class="mi">3</span>
</span></code></pre></td></tr></table></div></figure>
-
<p>ほかの環境変数とあわせて利用できるので、たとえば iPad シミュレータを起動する場合には以下のように実行します。</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="err">$</span> <span class="n">rake</span> <span class="n">target</span><span class="o">=</span><span class="mi">4</span><span class="o">.</span><span class="mi">3</span> <span class="n">device_family</span><span class="o">=</span><span class="n">ipad</span>
</span></code></pre></td></tr></table></div></figure>
-
<p>あとはアプリケーションのコードをひたすら記述するだけですね!</p>
]]></content>
</entry>
@@ -2151,7 +2047,6 @@ OS X 10.7 環境では「iOS 4.3 Simulator」項目があるのですが、OS X
<!-- more -->
-
<h2>1. Sublime Text をインストール</h2>
<p><a href="http://www.sublimetext.com/">公式サイト</a> から Sublime Text をダウンロードしてインストールします。</p>
@@ -2160,25 +2055,24 @@ OS X 10.7 環境では「iOS 4.3 Simulator」項目があるのですが、OS X
<p>Sublime Text は Python で plugin を作成でき、さまざまな機能追加ができるようになっています。Github などを眺めていると便利な plugin がパッケージとしていろいろあります。<a href="http://wbond.net/sublime_packages/package_control">Package Control</a> は、それらパッケージのインストールや不要になった際にはアンインストールしたりと、文字通りパッケージの管理が簡単になります。</p>
-<p>Sublime Text を起動し、[View] -> [Show Console] とメニューを選択し (ショートカット : <kbd>control</kbd> + <kbd>`</kbd>)、コンソールに次の文をコピー&amp;ペーストし <kbd>Enter</kbd> を押下して実行します。</p>
+<p>Sublime Text を起動し、[View] -&gt; [Show Console] とメニューを選択し (ショートカット : <kbd>control</kbd> + <kbd>`</kbd>)、コンソールに次の文をコピー&amp;ペーストし <kbd>Enter</kbd> を押下して実行します。</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()); print 'Please restart Sublime Text to finish installation'</span></code></pre></td></tr></table></div></figure>
-
<p>Sublime Text を再起動すると、Package Control が利用できるようになります。</p>
<h2>3. SublimeRubyMotionBuilder をインストール</h2>
<p>次に、<a href="https://twitter.com/haraken3">@haraken3</a> さんが開発されている <a href="https://github.com/haraken3/SublimeRubyMotionBuilder">SublimeRubyMotionBuilder</a> プラグインを導入します。コード補完や、アプリ開発に便利な機能が追加されます。</p>
-<p>[Tools] -> [Command Palette&#8230;] とメニューを選択し (ショートカット : <kbd>command</kbd> + <kbd>shift</kbd> + <kbd>p</kbd>)、表示されるダイアログに「install package」と入力し実行します。</p>
+<p>[Tools] -&gt; [Command Palette&#8230;] とメニューを選択し (ショートカット : <kbd>command</kbd> + <kbd>shift</kbd> + <kbd>p</kbd>)、表示されるダイアログに「install package」と入力し実行します。</p>
-<p><img src="http://watson1978.github.com/images/blog/sublime-install-package.png" alt="install package dialog" /></p>
+<p><img src="http://watson1978.github.com/images/blog/sublime-install-package.png" alt="install package dialog"></p>
<p>次に、「RubyMotionBuilder」と入力し <kbd>Enter</kbd> を押下するとプラグインがインストールされます。</p>
-<p><img src="http://watson1978.github.com/images/blog/sublime-RubyMotionBuilder.png" alt="RubyMotionBuilder" /></p>
+<p><img src="http://watson1978.github.com/images/blog/sublime-RubyMotionBuilder.png" alt="RubyMotionBuilder"></p>
<p>RubyMotion のコード(*.rb) か Rakefile を開いた状態にしておくと、以下のようなコマンドが使えるようになり、いちいち Terminal に戻ってでビルドしたりする必要がなくなり便利です。</p>
@@ -2203,20 +2097,19 @@ OS X 10.7 環境では「iOS 4.3 Simulator」項目があるのですが、OS X
</table>
-
<h2>4. SublimeLinter をインストール</h2>
<p><a href="http://www.willprater.me/blog/2012/07/24/rubymotion-linting-and-highlighting-with-sublime-text/">RubyMotion Linting and Highlighting With Sublime Text</a> で知ったのですが、<a href="https://github.com/SublimeLinter/SublimeLinter">SublimeLinter</a> を導入すると、アプリをコンパイルする前に文法エラーとなる箇所を教えてくれるようになります。</p>
-<p><img src="http://watson1978.github.com/images/blog/sublime-SublimeLinter.png" alt="SublimeLinter" /></p>
+<p><img src="http://watson1978.github.com/images/blog/sublime-SublimeLinter.png" alt="SublimeLinter"></p>
<p>さっそく、SublimeLinter をインストールしてみましょう(上のサイトに書いてあるとおりですが・・・)。</p>
-<p>[Tools] -> [Command Palette&#8230;] とメニューを選択し (ショートカット : <kbd>command</kbd> + <kbd>shift</kbd> + <kbd>p</kbd>)、表示されるダイアログに「install package」と入力し実行します。「SublimeLinter」と入力し <kbd>Enter</kbd> を押下します。</p>
+<p>[Tools] -&gt; [Command Palette&#8230;] とメニューを選択し (ショートカット : <kbd>command</kbd> + <kbd>shift</kbd> + <kbd>p</kbd>)、表示されるダイアログに「install package」と入力し実行します。「SublimeLinter」と入力し <kbd>Enter</kbd> を押下します。</p>
-<p>つぎに [Preferences] -> [Browse Packages&#8230;] を選択します。</p>
+<p>つぎに [Preferences] -&gt; [Browse Packages&#8230;] を選択します。</p>
-<p><img src="http://watson1978.github.com/images/blog/sublime-browse-package.png" alt="Browse Packages" /></p>
+<p><img src="http://watson1978.github.com/images/blog/sublime-browse-package.png" alt="Browse Packages"></p>
<p>パッケージがインストールされているディレクトリが、Finder で開かれます。 Finder で <code>SublimeLinter/sublimelinter/modules</code> のディレクトリまで行き、<code>ruby_motion.py</code> というファイルを作成し、次の内容をコピー&amp;ペースとします。</p>
@@ -2236,7 +2129,6 @@ OS X 10.7 環境では「iOS 4.3 Simulator」項目があるのですが、OS X
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>
-
<p>これで RubyMotion アプリ開発がもっと楽になるのではないでしょうか〜。 Enjoy!</p>
]]></content>
</entry>
@@ -2250,7 +2142,6 @@ OS X 10.7 環境では「iOS 4.3 Simulator」項目があるのですが、OS X
<!-- more -->
-
<h2>1. Pointer クラスを使用する</h2>
<p>CGGradient オブジェクトを作成する際に使用する関数 <code>CGGradientCreateWithColorComponents</code> は <code>CGFloat</code> 型の配列を受け取ります(変数 <code>components</code>, <code>locations</code> に注目してください)。</p>
@@ -2269,14 +2160,12 @@ OS X 10.7 環境では「iOS 4.3 Simulator」項目があるのですが、OS X
</span><span class='line'><span class="p">);</span>
</span></code></pre></td></tr></table></div></figure>
-
<p>もし引数が Ruby の Array クラスや、Objective-C の NSArray を受け取るなら話は簡単なのですが、ここでは <code>CGFloat</code> 型の配列なので、RubyMotion で用意されている Pointer クラスを使い <code>CGFloat</code> 型の配列と同等のものを作ります。以下のようなコードになります。</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="n">float_array</span> <span class="o">=</span> <span class="no">Pointer</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="ss">:float</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>
-
<h2>2. kCGGradientDrawsXXXX 定数</h2>
<p>CGGradient では <code>kCGGradientDrawsBeforeStartLocation</code> と <code>kCGGradientDrawsAfterEndLocation</code> という定数が用意されています。どちらも小文字から始まる定数です。</p>
@@ -2407,10 +2296,9 @@ OS X 10.7 環境では「iOS 4.3 Simulator」項目があるのですが、OS X
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
<p>次のような View が表示されるはずです。</p>
-<p><img src="http://watson1978.github.com/images/blog/gradient.png" alt="Gradient" /></p>
+<p><img src="http://watson1978.github.com/images/blog/gradient.png" alt="Gradient"></p>
]]></content>
</entry>
View
74 blog/2012/05/03/creating-an-ios-application-using-rubymotion_en/index.html
@@ -9,7 +9,7 @@
<meta name="author" content="Watson">
- <meta name="description" content="In this article I will explain how to create a simple iOS application using RubyMotion. I will call this application &#8220;StopWatch&#8221;, and &hellip;">
+ <meta name="description" content="In this article I will explain how to create a simple iOS application using RubyMotion. I will call this application &quot;StopWatch&quot;, and &hellip;">
<!-- http://t.co/dKP3o1e -->
@@ -103,9 +103,9 @@ <h1 class="entry-title">Creating an iOS Application Using RubyMotion</h1>
</header>
-<div class="entry-content"><p>In this article I will explain how to create a simple iOS application using RubyMotion. I will call this application &#8220;StopWatch&#8221;, and MacRuby version of this application is explained in <a href="https://github.com/MacRuby/MacRuby/wiki/Creating-a-simple-application">&#8220;Creating a simple application&#8221;</a>.</p>
+<div class="entry-content"><p>In this article I will explain how to create a simple iOS application using RubyMotion. I will call this application &quot;StopWatch&quot;, and MacRuby version of this application is explained in <a href="https://github.com/MacRuby/MacRuby/wiki/Creating-a-simple-application">&quot;Creating a simple application&quot;</a>.</p>
-<p>The &#8220;StopWatch&#8221; application has the following features.</p>
+<p>The &quot;StopWatch&quot; application has the following features.</p>
<ul>
<li>This application has the user interface which are start buttion, stop button and label.</li>
@@ -114,14 +114,12 @@ <h1 class="entry-title">Creating an iOS Application Using RubyMotion</h1>
<li>The timer value is displayed in the label.</li>
</ul>
-
<!-- more -->
-
<h2>Creating a New Application</h2>
<p>The command-line interface is created as <code>/usr/bin/motion</code> if you install RubyMotion.
-Runs as following command in Terminal, you may create the application template.</p>
+Runs as following command in Terminal, you may create the application template. </p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -142,20 +140,17 @@ <h1 class="entry-title">Creating an iOS Application Using RubyMotion</h1>
</span><span class='line'> Create StopWatch/spec
</span><span class='line'> Create StopWatch/spec/main_spec.rb</span></code></pre></td></tr></table></div></figure>
+- Rakefile: This file contains the configuration of the project, as well as a default set of tasks.
+- app: This directory contains the Ruby code of the project.
+- resources: This directory contains the resources files of the project, such as images or sounds.
+- spec: This directory contains the specification files of the application.
-<ul>
-<li>Rakefile: This file contains the configuration of the project, as well as a default set of tasks.</li>
-<li>app: This directory contains the Ruby code of the project.</li>
-<li>resources: This directory contains the resources files of the project, such as images or sounds.</li>
-<li>spec: This directory contains the specification files of the application.</li>
-</ul>
-
+You can know detail of the configurations with [Project Management](http://www.rubymotion.com/developer-center/guides/project-management).
-<p>You can know detail of the configurations with <a href="http://www.rubymotion.com/developer-center/guides/project-management">Project Management</a>.</p>
-<h2>Implements the application</h2>
+## Implements the application
-<p>Opens the app/app_delegate.rb with your editor.</p>
+Opens the app/app_delegate.rb with your editor.
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -169,13 +164,13 @@ <h1 class="entry-title">Creating an iOS Application Using RubyMotion</h1>
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
+Implements the code which contains actions or user interface for iOS into this file.
+[UIKit Framework Reference](http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIKit_Framework/_index.html) may help you to implement user interface.
-<p>Implements the code which contains actions or user interface for iOS into this file.
-<a href="http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIKit_Framework/_index.html">UIKit Framework Reference</a> may help you to implement user interface.</p>
-<h3>1. Create the UIWindow object</h3>
+### 1. Create the UIWindow object
-<p>First step, creates the UIWindow object. The UIWindow class defines objects that manage and coordinate the windows an application displays on the screen.</p>
+First step, creates the UIWindow object. The UIWindow class defines objects that manage and coordinate the windows an application displays on the screen.
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -201,13 +196,13 @@ <h1 class="entry-title">Creating an iOS Application Using RubyMotion</h1>
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
+Sets the StopWatchViewController which inherited the UIViewController as rootViewController.
+The UIViewController provides basic functions for view-management.
-<p>Sets the StopWatchViewController which inherited the UIViewController as rootViewController.
-The UIViewController provides basic functions for view-management.</p>
-<h3>2. Implement the StopWatchViewController</h3>
+### 2. Implement the StopWatchViewController
-<p>Prepares the StopWatchViewController as following.</p>
+Prepares the StopWatchViewController as following.
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -219,8 +214,7 @@ <h1 class="entry-title">Creating an iOS Application Using RubyMotion</h1>
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
-<p><code>viewDidLoad</code> method is called after the controller’s view is loaded into memory. Implements the user interface into <code>viewDidLoad</code> method. The UIView is used when lays out the user interface. You may retrive the UIView as following.</p>
+`viewDidLoad` method is called after the controller’s view is loaded into memory. Implements the user interface into `viewDidLoad` method. The UIView is used when lays out the user interface. You may retrive the UIView as following.
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -243,13 +237,13 @@ <h1 class="entry-title">Creating an iOS Application Using RubyMotion</h1>
</span></code></pre></td></tr></table></div></figure>
-<h4>Lays out the user interface</h4>
+#### Lays out the user interface
-<p>Creates the user interface object after retriving the UIView, and you may lay out the user interface that invokes <code>addSubview</code>.</p>
+Creates the user interface object after retriving the UIView, and you may lay out the user interface that invokes `addSubview`.
-<p>Let&#8217;s lay out the start/stop button and label.</p>
+Let&#8217;s lay out the start/stop button and label.
-<h5>Lays out the start button</h5>
+##### Lays out the start button
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -275,8 +269,7 @@ <h1 class="entry-title">Creating an iOS Application Using RubyMotion</h1>
</span><span class='line'><span class="n">view</span><span class="o">.</span><span class="n">addSubview</span><span class="p">(</span><span class="vi">@start</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>
-
-<h5>Lays out the stop button</h5>
+##### Lays out the stop button
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -302,8 +295,7 @@ <h1 class="entry-title">Creating an iOS Application Using RubyMotion</h1>
</span><span class='line'><span class="n">view</span><span class="o">.</span><span class="n">addSubview</span><span class="p">(</span><span class="vi">@stop</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>
-
-<h5>Lays out the label</h5>
+##### Lays out the label
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -320,9 +312,9 @@ <h1 class="entry-title">Creating an iOS Application Using RubyMotion</h1>
</span></code></pre></td></tr></table></div></figure>
-<h4>Implements the action methods</h4>
+#### Implements the action methods
-<p>We can define the <code>startTimer</code> and <code>stopTimer</code> methods as following.</p>
+We can define the `startTimer` and `stopTimer` methods as following.
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -374,8 +366,7 @@ <h1 class="entry-title">Creating an iOS Application Using RubyMotion</h1>
</span><span class='line'> <span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
-<p>The above code creates and schedules a timer in <code>startTimer</code> that will execute the <code>timerHandler</code> method repetitively each 0.1 seconds. The <code>timerHandler</code> displays value into label, and <code>stopTimer</code> stops the timer by <code>@timer.invalidate</code>.</p>
+The above code creates and schedules a timer in `startTimer` that will execute the `timerHandler` method repetitively each 0.1 seconds. The `timerHandler` displays value into label, and `stopTimer` stops the timer by `@timer.invalidate`.
<div class="note">
<strong>** IMPORTANT **</strong>: <br/>
@@ -385,7 +376,6 @@ <h1 class="entry-title">Creating an iOS Application Using RubyMotion</h1>
Refer: <a href="http://www.rubymotion.com/developer-center/guides/runtime#_memory_management">Runtime</a>
</div>
-
<h2>Runs the StopWatch application</h2>
<p>You may run the StopWatch application by <code>rake</code> command in Terminal.</p>
@@ -412,8 +402,7 @@ <h1 class="entry-title">Creating an iOS Application Using RubyMotion</h1>
</span><span class='line'><span class="p">(</span><span class="n">main</span><span class="p">)</span><span class="o">&gt;&gt;</span>
</span></code></pre></td></tr></table></div></figure>
-
-<p><img src="/images/blog/stopwatch.png" alt="StopWatch application" /></p>
+<p><img src="/images/blog/stopwatch.png" alt="StopWatch application"></p>
<h2>Appendix</h2>
@@ -588,7 +577,6 @@ <h1 class="entry-title">Creating an iOS Application Using RubyMotion</h1>
</span><span class='line'> <span class="k">end</span>
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
</div>
@@ -628,7 +616,7 @@ <h1 class="entry-title">Creating an iOS Application Using RubyMotion</h1>
<a href="http://b.hatena.ne.jp/entry/" class="hatena-bookmark-button" data-hatena-bookmark-layout="standard"><img src="http://b.st-hatena.com/images/entry-button/button-only.gif" width="20" height="20" style="border: none;" /></a><script type="text/javascript" src="http://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>
- <a href="http://www.delicious.com/save" class="delicious-bookmark-button" onclick="window.open('http://www.delicious.com/save?v=5&noui&jump=close&url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title), 'delicious','toolbar=no,width=550,height=550'); return false;"><img src="http://www.delicious.com/static/img/delicious.small.gif" height="20" width="20" style="border: none;" alt="Delicious" /></a>
+ <a href="http://www.delicious.com/save" class="delicious-bookmark-button" onclick="window.open('http://www.delicious.com/save?v=5&noui&jump=close&url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title), 'delicious','toolbar=no,width=550,height=550'); return false;"><img src="http://previous.delicious.com/static/img/delicious.small.gif" height="20" width="20" style="border: none;" alt="Delicious" /></a>
<script type="text/javascript" src="http://static.evernote.com/noteit.js"></script>
View
66 blog/2012/05/03/creating-an-ios-application-using-rubymotion_ja/index.html
@@ -114,12 +114,10 @@ <h1 class="entry-title">RubyMotion で簡単な iOS アプリを作ってみよ
<li>タイマーが動作中の値を 0.1 秒刻みでラベルに表示します。</li>
</ul>
-
<p>です。</p>
<!-- more -->
-
<h2>新規アプリを作成する</h2>
<p>RubyMotion をインストールしたときに、<code>/usr/bin/motion</code> というコマンドがインストールされます。このコマンドを使用して、新規アプリのひな形を作成します。Terminal で次のようにコマンドを実行するとひな形が用意されます。</p>
@@ -143,18 +141,14 @@ <h1 class="entry-title">RubyMotion で簡単な iOS アプリを作ってみよ
</span><span class='line'> Create StopWatch/spec
</span><span class='line'> Create StopWatch/spec/main_spec.rb</span></code></pre></td></tr></table></div></figure>
+- Rakefile: アプリ名などの設定に利用します。
+- app: アプリを実装するファイルを置くためのディレクトリです。
+- resources: 音声や画像などのリソースを置くためのディレクトリです。
+- spec: アプリのテストケースを記述したファイルを置くためのディレクトリです。
-<ul>
-<li>Rakefile: アプリ名などの設定に利用します。</li>
-<li>app: アプリを実装するファイルを置くためのディレクトリです。</li>
-<li>resources: 音声や画像などのリソースを置くためのディレクトリです。</li>
-<li>spec: アプリのテストケースを記述したファイルを置くためのディレクトリです。</li>
-</ul>
-
-
-<p>Rakefile で設定できる内容などについては、<a href="http://www.rubymotion.com/developer-center/guides/project-management">Project Management</a> に詳しく書かれていますので、目を通されておくと良いでしょう。</p>
+Rakefile で設定できる内容などについては、[Project Management](http://www.rubymotion.com/developer-center/guides/project-management) に詳しく書かれていますので、目を通されておくと良いでしょう。
-<p><code>motion</code> コマンドの簡単な使い方は <code>motion -h</code> で確認できます。</p>
+`motion` コマンドの簡単な使い方は `motion -h` で確認できます。
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -180,9 +174,9 @@ <h1 class="entry-title">RubyMotion で簡単な iOS アプリを作ってみよ
</span><span class='line'> support Create a support ticket</span></code></pre></td></tr></table></div></figure>
-<h2>アプリを実装する</h2>
+## アプリを実装する
-<p>さっそくアプリを実装していきましょう。app/app_delegate.rb をエディタで開いてみます。</p>
+さっそくアプリを実装していきましょう。app/app_delegate.rb をエディタで開いてみます。
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -196,12 +190,12 @@ <h1 class="entry-title">RubyMotion で簡単な iOS アプリを作ってみよ
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
+このファイルに、[UIKit Framework リファレンス](http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIKit_Framework/_index.html) を参考に UI 部品を配置するためのコードや、アクションを記述していきます。
-<p>このファイルに、<a href="http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIKit_Framework/_index.html">UIKit Framework リファレンス</a> を参考に UI 部品を配置するためのコードや、アクションを記述していきます。</p>
-<h3>1. UIWindow を配置する</h3>
+### 1. UIWindow を配置する
-<p>UIWindow のオブジェクトがないと何もできないといっても良いくらい重要なものです。まず、UIWindow のオブジェクトを用意します。</p>
+UIWindow のオブジェクトがないと何もできないといっても良いくらい重要なものです。まず、UIWindow のオブジェクトを用意します。
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -227,13 +221,13 @@ <h1 class="entry-title">RubyMotion で簡単な iOS アプリを作ってみよ
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
+UIViewController を継承した StopWatchViewController をルートコントローラーに設定しています。
+UIViewController は一画面分のコンテンツを管理したり、表示するための基本な機能を提供してくれます。
-<p>UIViewController を継承した StopWatchViewController をルートコントローラーに設定しています。
-UIViewController は一画面分のコンテンツを管理したり、表示するための基本な機能を提供してくれます。</p>
-<h3>2. StopWatchViewController を用意する</h3>
+### 2. StopWatchViewController を用意する
-<p>StopWatchViewController を以下のように用意します。UIViewController を継承し、<code>viewDidLoad</code> メソッドを用意しておけば良いでしょう。初期化が終わり画面が表示される段階になると <code>viewDidLoad</code> メソッドが呼び出されるので、このメソッドで UI の配置を行います。</p>
+StopWatchViewController を以下のように用意します。UIViewController を継承し、`viewDidLoad` メソッドを用意しておけば良いでしょう。初期化が終わり画面が表示される段階になると `viewDidLoad` メソッドが呼び出されるので、このメソッドで UI の配置を行います。
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -245,8 +239,7 @@ <h1 class="entry-title">RubyMotion で簡単な iOS アプリを作ってみよ
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
-<p><code>viewDidLoad</code> メソッドに、UI 部品を配置するコードを記述していきます。UI 部品の配置は、UIView に対して行います。</p>
+`viewDidLoad` メソッドに、UI 部品を配置するコードを記述していきます。UI 部品の配置は、UIView に対して行います。
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -269,11 +262,11 @@ <h1 class="entry-title">RubyMotion で簡単な iOS アプリを作ってみよ
</span></code></pre></td></tr></table></div></figure>
-<h4>UI 部品の配置</h4>
+#### UI 部品の配置
-<p>上記のように UIView を取得したあと、UI 部品の設定などを行い <code>addSubview</code> を実行すると UI 部品が配置されます。それでは、start ボタン、stop ボタンとラベルを配置してみましょう。</p>
+上記のように UIView を取得したあと、UI 部品の設定などを行い `addSubview` を実行すると UI 部品が配置されます。それでは、start ボタン、stop ボタンとラベルを配置してみましょう。
-<h5>start ボタンを配置</h5>
+##### start ボタンを配置
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -299,8 +292,7 @@ <h1 class="entry-title">RubyMotion で簡単な iOS アプリを作ってみよ
</span><span class='line'><span class="n">view</span><span class="o">.</span><span class="n">addSubview</span><span class="p">(</span><span class="vi">@start</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>
-
-<h5>stop ボタンを配置</h5>
+##### stop ボタンを配置
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -326,8 +318,7 @@ <h1 class="entry-title">RubyMotion で簡単な iOS アプリを作ってみよ
</span><span class='line'><span class="n">view</span><span class="o">.</span><span class="n">addSubview</span><span class="p">(</span><span class="vi">@stop</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>
-
-<h5>ラベルを配置</h5>
+##### ラベルを配置
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -344,9 +335,9 @@ <h1 class="entry-title">RubyMotion で簡単な iOS アプリを作ってみよ
</span></code></pre></td></tr></table></div></figure>
-<h4>アクションメソッドを実装</h4>
+#### アクションメソッドを実装
-<p>start ボタンがクリックされたときには <code>startTimer</code> アクションメソッドが、stop ボタンがクリックされたときには <code>stopTimer</code> アクションメソッドが呼ばれるようにしましたので、それらのアクションメソッドを用意します。</p>
+start ボタンがクリックされたときには `startTimer` アクションメソッドが、stop ボタンがクリックされたときには `stopTimer` アクションメソッドが呼ばれるようにしましたので、それらのアクションメソッドを用意します。
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
@@ -398,10 +389,10 @@ <h1 class="entry-title">RubyMotion で簡単な iOS アプリを作ってみよ
</span><span class='line'> <span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
+`startTimer` では、0.1 秒ごとに `timerHandler` を呼び出すようにタイマーを用意しています。
-<p><code>startTimer</code> では、0.1 秒ごとに <code>timerHandler</code> を呼び出すようにタイマーを用意しています。</p>
+`timerHandler` でタイマーの値をラベルに表示しています。`stopTimer` では `@timer.invalidate` でタイマーを停止しています。
-<p><code>timerHandler</code> でタイマーの値をラベルに表示しています。<code>stopTimer</code> では <code>@timer.invalidate</code> でタイマーを停止しています。</p>
<div class="note">
<strong>**重要**</strong><br/>
@@ -410,7 +401,6 @@ <h1 class="entry-title">RubyMotion で簡単な iOS アプリを作ってみよ
参考: <a href="http://www.rubymotion.com/developer-center/guides/runtime#_memory_management">Runtime</a>
</div>
-
<h2>アプリを実行する</h2>
<p>サンプルアプリを実行したときと同じように、Terminal で <code>rake</code> コマンドを実行してアプリを動かします。</p>
@@ -437,8 +427,7 @@ <h1 class="entry-title">RubyMotion で簡単な iOS アプリを作ってみよ
</span><span class='line'><span class="p">(</span><span class="n">main</span><span class="p">)</span><span class="o">&gt;&gt;</span>
</span></code></pre></td></tr></table></div></figure>
-
-<p><img src="/images/blog/stopwatch.png" alt="StopWatch アプリ" /></p>
+<p><img src="/images/blog/stopwatch.png" alt="StopWatch アプリ"></p>
<h2>付録: コード</h2>
@@ -613,7 +602,6 @@ <h1 class="entry-title">RubyMotion で簡単な iOS アプリを作ってみよ
</span><span class='line'> <span class="k">end</span>
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
-
</div>
@@ -653,7 +641,7 @@ <h1 class="entry-title">RubyMotion で簡単な iOS アプリを作ってみよ
<a href="http://b.hatena.ne.jp/entry/" class="hatena-bookmark-button" data-hatena-bookmark-layout="standard"><img src="http://b.st-hatena.com/images/entry-button/button-only.gif" width="20" height="20" style="border: none;" /></a><script type="text/javascript" src="http://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>
- <a href="http://www.delicious.com/save" class="delicious-bookmark-button" onclick="window.open('http://www.delicious.com/save?v=5&noui&jump=close&url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title), 'delicious','toolbar=no,width=550,height=550'); return false;"><img src="http://www.delicious.com/static/img/delicious.small.gif" height="20" width="20" style="border: none;" alt="Delicious" /></a>
+ <a href="http://www.delicious.com/save" class="delicious-bookmark-button" onclick="window.open('http://www.delicious.com/save?v=5&noui&jump=close&url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title), 'delicious','toolbar=no,width=550,height=550'); return false;"><img src="http://previous.delicious.com/static/img/delicious.small.gif" height="20" width="20" style="border: none;" alt="Delicious" /></a>
<script type="text/javascript" src="http://static.evernote.com/noteit.js"></script>
View
8 blog/2012/05/03/first-step-in-rubymotion_ja/index.html
@@ -107,7 +107,6 @@ <h1 class="entry-title">RubyMotion、はじめの一歩</h1>
<!-- more -->
-
<h2>RubyMotion をインストール</h2>
<p>インストールパッケージをダウンロードしてインストールすると、RubyMotion は /Library/RubyMotion にインストールされます。また、コマンドラインツールとして /usr/bin/motion というシンボリックリンクが作成されます。</p>
@@ -123,7 +122,6 @@ <h1 class="entry-title">RubyMotion、はじめの一歩</h1>
</span><span class='line'>├── data
</span><span class='line'>└── lib</span></code></pre></td></tr></table></div></figure>
-
<p>アンインストール場合には /Library/RubyMotion/ と /usr/bin/motion を削除してください。</p>
<h2>サンプルを動かしてみる</h2>
@@ -161,10 +159,9 @@ <h1 class="entry-title">RubyMotion、はじめの一歩</h1>
</span><span class='line'> Simulate ./build/iPhoneSimulator-5.1-Development/Hello.app
</span><span class='line'>(main)&gt;&gt; </span></code></pre></td></tr></table></div></figure>
-
<p>RubyMotion では Ruby で書かれたコードをコンパイルしてネイティブな実行ファイルを作成します。コンパイルが成功すると iOS シミュレータが起動し hello アプリが実行されます。</p>
-<p><img src="/images/blog/hello.png" alt="hello アプリ" /></p>
+<p><img src="/images/blog/hello.png" alt="hello アプリ"></p>
<p>RubyMotion は、まだ Xcode と連携する機能が無いため、Terminal での操作が基本になります。Rakefile が置かれているディレクトリで <code>rake -T</code> を実行すると、ビルドに使用するコマンドなどを確認できます。</p>
@@ -197,7 +194,6 @@ <h1 class="entry-title">RubyMotion、はじめの一歩</h1>
</span><span class='line'>rake simulator # Run the simulator
</span><span class='line'>rake spec # Run specs</span></code></pre></td></tr></table></div></figure>
-
<p>次回は、実際にアプリを作成してみたいと思います。</p>
</div>
@@ -238,7 +234,7 @@ <h1 class="entry-title">RubyMotion、はじめの一歩</h1>
<a href="http://b.hatena.ne.jp/entry/" class="hatena-bookmark-button" data-hatena-bookmark-layout="standard"><img src="http://b.st-hatena.com/images/entry-button/button-only.gif" width="20" height="20" style="border: none;" /></a><script type="text/javascript" src="http://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>
- <a href="http://www.delicious.com/save" class="delicious-bookmark-button" onclick="window.open('http://www.delicious.com/save?v=5&noui&jump=close&url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title), 'delicious','toolbar=no,width=550,height=550'); return false;"><img src="http://www.delicious.com/static/img/delicious.small.gif" height="20" width="20" style="border: none;" alt="Delicious" /></a>
+ <a href="http://www.delicious.com/save" class="delicious-bookmark-button" onclick="window.open('http://www.delicious.com/save?v=5&noui&jump=close&url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title), 'delicious','toolbar=no,width=550,height=550'); return false;"><img src="http://previous.delicious.com/static/img/delicious.small.gif" height="20" width="20" style="border: none;" alt="Delicious" /></a>
<script type="text/javascript" src="http://static.evernote.com/noteit.js"></script>
View
7 blog/2012/05/08/specs-for-stopwatch-app/index.html
@@ -107,9 +107,6 @@ <h1 class="entry-title">RubyMotion で作成したアプリのテストケース
<!-- more -->
-
-
-
<div><script src='https://gist.github.com/2634522.js'></script>
<noscript><pre><code>describe &quot;Application 'StopWatch'&quot; do
before do
@@ -144,7 +141,6 @@ <h1 class="entry-title">RubyMotion で作成したアプリのテストケース