<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>RubyMotion</title>
    <link>http://www.rubymotion.com</link>
    <description>RSS feed for RubyMotion</description>
    <pubDate>Sun, 06 Dec 2015 04:06:31 +0100</pubDate>
    <item>
      <title>Developing Smartphone Games With Motion Game</title>
      <link>http://www.rubymotion.com/news/2015/12/06/developing-smartphone-games-with-motion-game.html</link>
      <description><![CDATA[(This is a guest post from Nicolas Le Chenic, software developer at Synbioz. Synbioz is a French company doing Web and mobile applications using Ruby.)
]]></description>
      <pubDate>Sun, 06 Dec 2015 04:06:31 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2015/12/06/developing-smartphone-games-with-motion-game.html</guid>
      <content:encoded><![CDATA[<p>(This is a guest post from <a href="https://twitter.com/nicolaslechenic">Nicolas Le Chenic</a>, software developer at <a href="http://www.synbioz.com/">Synbioz</a>. Synbioz is a French company doing Web and mobile applications using Ruby.)</p>

<p>RubyMotion introduced last September a 2D game development platform for iOS and Android called motion-game. Until then creating games was done using the Joybox gem, which hasn&#39;t been maintained for a while. From now on RubyMotion includes a beta version of motion-game which will be maintained, up to date, easy to set up and cross-platform!</p>

<p>In this article we will discover motion-game and I&#39;m pretty sure that you&#39;ll want to try it to build smartphone games!</p>

<h2>Hello world</h2>

<p>First of all you need to install motion-game.</p>
<div class="highlight"><pre><code class="language-" data-lang="">gem install motion-game
</code></pre></div>
<p>As you can see it is really easy. Now we can create our first hello world game.</p>
<div class="highlight"><pre><code class="language-" data-lang="">motion create --template=motion-game hello
cd hello
</code></pre></div>
<p>The project is created with few files which makes it easy to handle.</p>

<p><a href="/news/img/motion-game1/arbo.png"><img src="/news/img/motion-game1/arbo.png" alt="motion-game tree"></a></p>

<p>In this introduction we will have a look at the <code>app</code> folder in which we will develop a minimalistic game.</p>

<p><strong>app/application.rb</strong></p>
<div class="highlight"><pre><code class="language-" data-lang="">class Application &lt; MG::Application
  def start
    MG::Director.shared.run(MainScene.new)
  end
end
</code></pre></div>
<p><strong>app/main_scene.rb</strong></p>
<div class="highlight"><pre><code class="language-" data-lang="">class MainScene &lt; MG::Scene
  def initialize
    label = MG::Text.new("Hello World", "Arial", 96)
    label.anchor_point = [0, 0]
    add label
  end
end
</code></pre></div>
<p>By default, all files in <code>app</code> are loaded by RubyMotion. The entry point and the scene files where the game takes place are named <code>application.rb</code> and<code>main_scene.rb</code> respectively. The application file launches the main scene (a simple &quot;Hello World&quot;) with some basic functionality like setting the font style and the anchor point of a label. Now we can simulate our game on iOS and Android!</p>
<div class="highlight"><pre><code class="language-bash" data-lang="bash">rake ios:simulator
rake android:emulator
</code></pre></div>
<p>Once started you should see &quot;Hello World&quot; appearing.</p>

<p><a href="/news/img/motion-game1/hw1.jpg"><img src="/news/img/motion-game1/hw1.jpg" alt="iPhone emulator with Hello World"></a></p>

<p>As you can see, it is very easy to create an iOS and Android game with one code only! We can carry on by applying other methods on our label.</p>

<p><strong>app/main_scene.rb</strong></p>
<div class="highlight"><pre><code class="language-" data-lang="">  def initialize
    label = MG::Text.new("Hello World", "Arial", 96)
    label.position = [400, 400]
    label.color = [0, 0.6, 0.8]
    label.rotation = -10.0

    add label
  end
</code></pre></div>
<p>The <code>position</code> method allows us to move the label relatively to its center. Then we change the color and apply a rotation.</p>

<p><a href="/news/img/motion-game1/hw2.jpg"><img src="/news/img/motion-game1/hw2.jpg" alt="Hello world after changes"></a></p>

<h2>Synbioz vs Zombie</h2>

<p>We go on by creating a mini game, as an excuse to explore other features. There is already an example of <a href="https://github.com/HipByte/RubyMotionSamples/tree/master/game/FlappyBird">Flappy Bird provided by the RubyMotion team</a> that you should really download.</p>

<p>Our mini game is less elaborated but will allow us to discover interesting methods of the framework.</p>

<h3>The game</h3>

<p>The goal of our game, &quot;Synbioz vs Zombie&quot;, is quite simple. You play a survivor of a team which should dodge a zombie as long as possible. Before you start you will need to <a href="https://github.com/synbioz/introduction_motiongame">retrieve images and audio resources on github</a>.</p>

<h3>First step</h3>

<p>To create our game we will need the following scenes:</p>

<ul>
<li>Survivor choice (<code>survivor_scene.rb</code>)</li>
<li>Main (<code>main_scene.rb</code>)</li>
<li>Game over (<code>game_over_scene.rb</code>)</li>
</ul>

<p>It&#39;s time to create our project!</p>
<div class="highlight"><pre><code class="language-" data-lang="">motion create --template=motion-game synbiozvszombie
cd synbiozvszombie
</code></pre></div>
<p>In the <code>app</code> folder we&#39;ll add a <code>scenes</code> subfolder that will include the three scene files. You&#39;ll have to remove <code>main_scene.rb</code> from the <code>app</code> root to prevent conflicts at runtime.</p>

<h3>Choose your survivor</h3>

<p>The first scene will allow us to select the Synbioz team survivor that you want to embody in the game.</p>

<p><strong>app/application.rb</strong></p>
<div class="highlight"><pre><code class="language-" data-lang="">class Application &lt; MG::Application
  def start
    MG::Director.shared.run(SurvivorScene.new)
  end
end
</code></pre></div>
<p>Now the game begins on the survivor scene.</p>

<p><strong>app/scenes/survivor_scene.rb</strong></p>
<div class="highlight"><pre><code class="language-" data-lang="">class SurvivorScene &lt; MG::Scene
  def initialize
    add_label
  end

  def add_label
    label = MG::Text.new("Choose your survivor", "Arial", 80)
    label.color = [0.7, 0.7, 0.7]
    label.position = [MG::Director.shared.size.width / 2, MG::Director.shared.size.height - 100]

    add label
  end
end
</code></pre></div>
<p>In the first scene, we add a text label. Under this label we will have the opportunity to choose the survivor.</p>

<p><code>MG::Director.shared.size.width</code> allows us to get the screen width. Once halved, the text will be centered on <code>x</code>. Finally we add 100px on the top of the screen to improve the rendering.</p>

<p>Now we add our survivor list :</p>

<p><strong>app/scenes/survivor_scene.rb</strong></p>
<div class="highlight"><pre><code class="language-" data-lang="">def add_survivors
  team_synbioz = ["Martin", "Nico", "Victor", "Jon", "Numa", "Clement", "Theo", "Cedric"]

  team_synbioz.each_with_index do |name, index|
    button = MG::Button.new("#{name}")
    button.font_size = 35
    button.position = [MG::Director.shared.size.width / 2, (MG::Director.shared.size.height - 200) - (index * 50)]
    button.on_touch { MG::Director.shared.replace(MainScene.new(name)) }

    add button
  end
end
</code></pre></div>
<p>We added a button for each member of Synbioz. Once selected, we have to replace the current scene by the main one with <code>MG::Director.shared.replace()</code> where the scene takes the <code>name</code> as a parameter. You should see that :</p>

<p><a href="/news/img/motion-game1/svz1.jpg"><img src="/news/img/motion-game1/svz1.jpg" alt="Choose screen with button list"></a></p>

<h3>Main scene, the real fun begins!</h3>

<p>The main scene will include two elements, a survivor and a zombie. The latter will move randomly on the screen and you&#39;ll have to move the survivor by yourself.</p>

<h3>Resources</h3>

<p>We then need resources. By default, motion-game find the resources in the folder with the name <code>resources</code> in the project root. So you just have to create this folder and add the downloaded resources.</p>

<p><strong>app/scenes/main_scene.rb</strong></p>
<div class="highlight"><pre><code class="language-" data-lang="">  def initialize(name)
    add_zombie
  end

  def add_zombie
    @zombie = MG::Sprite.new("zombie.png")
    @zombie.position = [400, MG::Director.shared.size.height / 2]

    add @zombie
  end
</code></pre></div>
<p>Right now <code>MG::Sprite.new(&quot;image&quot;)</code> gets images on which we can apply some methods. It&#39;s just as easy to play a sound from this folder <code>MG::Audio.play(&quot;song&quot;)</code>.</p>

<p><strong>app/scenes/main_scene.rb</strong></p>
<div class="highlight"><pre><code class="language-" data-lang="">  def initialize(name)
    MG::Audio.play("night.wav", true, 0.5)
    @name = name.downcase

    add_zombie
  end
</code></pre></div>
<p>This song will be played at launch. In order to loop it, you need to set the <code>play</code> second argument to <code>true</code>. Finally <code>0.5</code> is the volume. Next, we import the survivor image stored in the folder <code>resources/survivors</code>. We save the name into the <code>@name</code> instance variable which is useful to display the survivor image dynamically.</p>

<p><strong>app/scenes/main_scene.rb</strong></p>
<div class="highlight"><pre><code class="language-" data-lang="">  def initialize(name)
    MG::Audio.play("night.wav", true, 0.5)
    @name = name.downcase

    add_zombie
    add_survivor
  end

  def add_survivor
    @survivor = MG::Sprite.new("survivors/#{@name}.jpg")
    @survivor.position = [100, MG::Director.shared.size.height / 2]

    add @survivor
  end
</code></pre></div>
<p>Once your choice is made you are redirected to the main scene.</p>

<p><a href="/news/img/motion-game1/svz2.jpg"><img src="/news/img/motion-game1/svz2.jpg" alt="Main scene with Martin and the Zombie"></a></p>

<h3>Physical objects</h3>

<p>We want to launch the game over scene when our characters are in contact. First we will move our survivor to the zombie to see what happens.</p>

<p><strong>app/scenes/main_scene.rb</strong></p>
<div class="highlight"><pre><code class="language-" data-lang="">  def initialize(name)
    MG::Audio.play("night.wav", true, 0.5)
    @name = name.downcase

    add_zombie
    add_survivor
  end

  def add_survivor
    @survivor = MG::Sprite.new("survivors/#{@name}.jpg")
    @survivor.position = [100, MG::Director.shared.size.height / 2]
    @survivor.move_to = ([450, @survivor.position.y], 1)

    add @survivor
  end
</code></pre></div>
<p><a href="/news/img/motion-game1/svz3.jpg"><img src="/news/img/motion-game1/svz3.jpg" alt="Nicolas runs through the zombie"></a></p>

<p>For the moment our survivor runs through the zombie, both behave as images. We want physical contact between images to be possible.</p>

<p><strong>app/scenes/main_scene.rb</strong></p>
<div class="highlight"><pre><code class="language-" data-lang="">  def add_zombie
    @zombie = MG::Sprite.new("zombie.png")
    @zombie.attach_physics_box
    @zombie.position = [400, MG::Director.shared.size.height / 2]

    add @zombie
  end

  def add_survivor
    y_position = MG::Director.shared.size.height / 2

    @survivor = MG::Sprite.new("survivors/#{@name}.jpg")
    @survivor.attach_physics_box
    @survivor.position = [100, y_position]
    @survivor.move_to([450, y_position], 1)

    add @survivor
  end
</code></pre></div>
<p>Click on the image below to see the animation.</p>

<p><a href="/news/img/motion-game1/svz4.gif"><img src="/news/img/motion-game1/svz4.gif" alt="Animation of the collision between Victor and the Zombie"></a></p>

<p>Now we have a collision between the survivor and zombie! We also note that our characters are experiencing gravity which is very interesting for a 2D Mario like game for example.</p>

<p>Our mini game is closer to a Pacman, so we will remove this feature.</p>

<p><strong>app/scenes/main_scene.rb</strong></p>
<div class="highlight"><pre><code class="language-" data-lang="">  def initialize(name)
    self.gravity = [0, 0]

    MG::Audio.play("night.wav", true, 0.5)
    @name = name.downcase

    add_zombie
    add_survivor
  end
</code></pre></div>
<p>Now that our characters behave as expected, the remaining part is to trigger our game over scene on contact. For this we use the <code>contact_mask</code>.</p>

<p><strong>app/scenes/main_scene.rb</strong></p>
<div class="highlight"><pre><code class="language-" data-lang="">  def initialize(name)
    self.gravity = [0, 0]

    MG::Audio.play("night.wav", true, 0.5)
    @name = name.downcase

    add_zombie
    add_survivor

    on_contact_begin do
      MG::Director.shared.replace(GameOverScene.new)
    end
  end

  def add_zombie
    @zombie = MG::Sprite.new("zombie.png")
    @zombie.attach_physics_box
    @zombie.position = [400, MG::Director.shared.size.height / 2]
    @zombie.contact_mask = 1

    add @zombie
  end

  def add_survivor
    y_position = MG::Director.shared.size.height / 2

    @survivor = MG::Sprite.new("survivors/#{@name}.jpg")
    @survivor.attach_physics_box
    @survivor.position = [100, y_position]
    @survivor.contact_mask = 1
    @survivor.move_to([450, y_position], 1)

    add @survivor
  end
</code></pre></div>
<p><strong>app/scenes/game<em>over</em>scene.rb</strong></p>
<div class="highlight"><pre><code class="language-" data-lang="">class GameOverScene &lt; MG::Scene
  def initialize
    add_label
  end

  def add_label
    label = MG::Text.new("Game over...", "Arial", 96)
    label.position = [MG::Director.shared.size.width / 2, MG::Director.shared.size.height / 2]
    add label
  end
end
</code></pre></div>
<p>Now when our survivor touches the zombie, the <code>on_contact_begin</code> block is called and replaces our stage by the game over screen!</p>

<h3>The movements</h3>

<p>Now we want to move the characters. The survivor will move to the position touched on the screen and the zombie will move randomly within the limits of the screen.</p>

<h4>Events movements</h4>

<p>First we will move our survivor. For this we need to get the contact details that will be used in <code>@survivor.move_to([x, y], 1)</code>.</p>

<p><strong>app/scenes/main_scene.rb</strong></p>
<div class="highlight"><pre><code class="language-" data-lang="">def initialize(name)
  self.gravity = [0, 0]

  @name = name.downcase

  add_survivor
  add_zombie

  on_touch_begin do |touch|
    @survivor.move_to([touch.location.x, touch.location.y], 1)
  end

  on_contact_begin do
    MG::Director.shared.replace(GameOverScene.new(@score))
  end
end
</code></pre></div>
<p>The <code>on_touch_begin</code> block allows us to find the coordinates of our finger during the touch event. This will replace the previous <code>move_to</code>.</p>

<h4>Random movements</h4>

<p>With the <code>#update</code> method, motion-game includes an easy-to-implement loop system. You just need to define the <code>update(delta)</code> method that you can easily switch on and off with the <code>start_update</code> and <code>stop_update</code> methods.</p>

<p><strong>app/scenes/main_scene.rb</strong></p>
<div class="highlight"><pre><code class="language-" data-lang="">  def initialize(name)
    self.gravity = [0, 0]

    @name = name.downcase
    @zombie_update_position = 0

    # CODE ...

    start_update
  end

  def update(delta)

    @zombie_update_position += delta

    if @zombie_update_position &gt;= 2.0
      @zombie.move_to([random_position[:x], random_position[:y]], 1)
      @zombie_update_position = 0
    end
  end

  private
  def random_position
    {
      x: Random.new.rand(0..MG::Director.shared.size.width),
      y: Random.new.rand(0..MG::Director.shared.size.height)
    }
  end
</code></pre></div>
<p>First we initialize <code>@zombie_update_position</code> to zero, then we start the loop with <code>start_update</code>. The <code>update</code> method has a <code>delta</code> parameter which is the execution time of the loop. Thus, we can get the current time by incrementing with <code>delta</code>. We use this principle to move the zombie every two seconds. Then we specify some random coordinates that stay within the dimensions of the screen to manage the zombie movement.</p>

<h3>Add some fun</h3>

<p>To add some fun, we will change the scale of the zombie every two seconds, then we will show the survival time on the game over screen.</p>

<p><strong>app/scenes/main_scene.rb</strong></p>
<div class="highlight"><pre><code class="language-" data-lang="">def initialize(name)
  self.gravity = [0, 0]

  @name = name.downcase
  @time = 0
  @zombie_update_position = 0

  add_survivor
  add_zombie

  on_touch_begin do |touch|
    @survivor.move_to([touch.location.x, touch.location.y], 2)
  end

  on_contact_begin do
    MG::Director.shared.replace(GameOverScene.new(@time))
  end

  start_update
end

def add_zombie
  # CODE ...
end

def add_survivor
  # CODE ...
end

def update(delta)

  @time += delta
  @zombie_update_position += delta

  if @zombie_update_position &gt;= 2.0
    @zombie.move_to([random_position[:x], random_position[:y]], 1)
    @zombie.scale += 0.1
    @zombie_update_position = 0
  end
end

private
def random_position
  {
    x: Random.new.rand(0..MG::Director.shared.size.width),
    y: Random.new.rand(0..MG::Director.shared.size.height)
  }
end
</code></pre></div>
<p>We use <code>@time</code> variable to send the score to the game over scene.</p>

<p><strong>app/scenes/game<em>over</em>scene.rb</strong></p>
<div class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="k">class</span> <span class="nc">GameOverScene</span> <span class="o">&lt;</span> <span class="no">MG</span><span class="o">::</span><span class="no">Scene</span>
  <span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="n">score</span><span class="p">)</span>
    <span class="n">add_label</span>
    <span class="n">add_score</span><span class="p">(</span><span class="n">score</span><span class="p">)</span>
  <span class="k">end</span>

  <span class="k">def</span> <span class="nf">add_label</span>
    <span class="n">label</span> <span class="o">=</span> <span class="no">MG</span><span class="o">::</span><span class="no">Text</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="s2">"Game over..."</span><span class="p">,</span> <span class="s2">"Arial"</span><span class="p">,</span> <span class="mi">96</span><span class="p">)</span>
    <span class="n">label</span><span class="p">.</span><span class="nf">position</span> <span class="o">=</span> <span class="p">[</span><span class="no">MG</span><span class="o">::</span><span class="no">Director</span><span class="p">.</span><span class="nf">shared</span><span class="p">.</span><span class="nf">size</span><span class="p">.</span><span class="nf">width</span> <span class="sr">/ 2, MG::Director.shared.size.height /</span> <span class="mi">2</span><span class="p">]</span>
    <span class="n">add</span> <span class="n">label</span>
  <span class="k">end</span>

  <span class="k">def</span> <span class="nf">add_score</span><span class="p">(</span><span class="n">score</span><span class="p">)</span>
    <span class="n">time</span> <span class="o">=</span> <span class="n">score</span><span class="p">.</span><span class="nf">round</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
    <span class="n">score</span> <span class="o">=</span> <span class="no">MG</span><span class="o">::</span><span class="no">Text</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="s2">"You survived </span><span class="si">#{</span><span class="n">time</span><span class="si">}</span><span class="s2">s"</span><span class="p">,</span> <span class="s2">"Arial"</span><span class="p">,</span> <span class="mi">40</span><span class="p">)</span>
    <span class="n">score</span><span class="p">.</span><span class="nf">position</span> <span class="o">=</span> <span class="p">[</span><span class="no">MG</span><span class="o">::</span><span class="no">Director</span><span class="p">.</span><span class="nf">shared</span><span class="p">.</span><span class="nf">size</span><span class="p">.</span><span class="nf">width</span> <span class="sr">/ 2, (MG::Director.shared.size.height /</span> <span class="mi">2</span><span class="p">)</span> <span class="o">-</span> <span class="mi">80</span><span class="p">]</span>

    <span class="n">add</span> <span class="n">score</span>
  <span class="k">end</span>
<span class="k">end</span>
</code></pre></div>
<p><a href="/news/img/motion-game1/svz5.jpg"><img src="/news/img/motion-game1/svz5.jpg" alt="The Zombie move to Jon"></a></p>

<p><a href="/news/img/motion-game1/svz6.jpg"><img src="/news/img/motion-game1/svz6.jpg" alt="Game over scene with survived time"></a></p>

<h2>Conclusion</h2>

<p>With this introduction we had an overview of many motion-game features. If you&#39;re interested in, I would strongly recommend that you <a href="http://www.rubymotion.com/developers/motion-game/">take a look at the documentation</a>. Other articles are to come and will go into more details!</p>
]]></content:encoded>
      <dc:date>2015-12-06T04:06:31+01:00</dc:date>
    </item>
    <item>
      <title>Announcing Rubymotion 4 0 Free Cross Platform Games Watchos 2 0</title>
      <link>http://www.rubymotion.com/news/2015/09/03/announcing-rubymotion-4-0-free-cross-platform-games-watchos-2-0.html</link>
      <description><![CDATA[We are very excited to announce the immediate availability of RubyMotion 4.0. This is the first release of the 4.x series, which will include several important features. Let&#39;s cover a few of these today!
]]></description>
      <pubDate>Thu, 03 Sep 2015 05:06:31 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2015/09/03/announcing-rubymotion-4-0-free-cross-platform-games-watchos-2-0.html</guid>
      <content:encoded><![CDATA[<p>We are very excited to announce the immediate availability of RubyMotion 4.0. This is the first release of the 4.x series, which will include several important features. Let&#39;s cover a few of these today!</p>

<h3>RubyMotion Starter: 100% free</h3>

<p>We are happy to introduce RubyMotion Starter, a fully-featured version of RubyMotion, available for free. <a href="http://rubymotion.com/download">Download it today!</a></p>

<p>RubyMotion Starter comes with full support for iOS and Android development. You can call into the entire set of public APIs, test locally on your machine and your devices, and submit to the respective app stores.</p>

<p>As with the other versions of RubyMotion, Starter will statically compile your Ruby code into optimized machine code, and let you use 3rd-party libraries, with CocoaPods on iOS and Gradle on Android.</p>

<p><img src="/news/img/starter.jpg" alt="starter"/></p>

<p>Applications built with Starter include a RubyMotion-branded splash screen. To remove the splash screen, a paid subscription can be purchased. Also, Starter does not come with support for OS X and watchOS development.</p>

<h3>Cross-platform games</h3>

<p>RubyMotion 4.0 now comes with a brand-new, 100% cross-platform engine to write mobile games. You can now write games for iOS and Android with a single code base and using a <a href="http://rubymotion.com/developers/motion-game">pure-Ruby API</a>.</p>

<p>Here is the traditional Hello World:</p>

<pre class="highlight">
class MainScene < MG::Scene
  def initialize
    label = MG::Label.new("Hello World", "Arial", 96)
    label.anchor_point = [0, 0]
    add label
  end
end

class Application < MG::Application
  def start
    MG::Director.shared.run(MainScene.new)
  end
end
</pre>

<p>(For a more complete sample, check out <a href="https://github.com/HipByte/RubyMotionSamples/tree/master/game/FlappyBird/app/main_scene.rb">Flappy Bird written in 100 lines</a>!)</p>

<p>Our cross-platform game API is fully-featured. It covers audio, sprites, animations, particles, device sensors / events, scene graph / director, UI widgets, and more. It is based on well-tested and solid foundations, such as cocos2d-x and box2d.</p>

<div style="text-align: center">
<a href="http://www.cocos2d-x.org/" style="margin-right: 10px"><img src="/news/img/cocos2d-x.png" alt="cocos2d-x"/></a>
<a href="http://box2d.org" style="margin-left: 10px"><img src="/news/img/box2d.gif" alt="box2d"/></a>
</div>

<p><br></p>

<p>Since the API is based on RubyMotion, games are fully compiled into machine code,  are able to call into public native APIs for iOS and Android, and can use 3rd-party native libraries. Exactly like regular RubyMotion apps.</p>

<p>At the time of writing, the API is distributed free of charge as a gem, named <em>motion-game</em>, and available in <i>beta</i>. The gem requires RubyMotion 4.0.</p>

<pre class="highlight">
$ gem install motion-game
</pre>

<p>After installing the gem, you can create games from the command-line using the <code>motion-game</code> template. </p>

<pre class="highlight">
$ motion create --template=motion-game Hello
$ cd Hello
</pre>

<p>motion-game projects are quite different from traditional RubyMotion projects, in the sense that they are cross-platform. The <code>app</code> directly contains code that will build for both iOS and Android, and the <code>Rakefile</code> exposes all iOS and Android tasks under the respective <code>:ios</code> and `:android: namespaces.</p>

<p>For instance, to build your game for the iOS simulator then the Android emulator, use the following tasks.</p>

<pre class="highlight">
$ rake ios:simulator
$ rake android:emulator
</pre>

<p>That&#39;s it! For more information, check out the following resources:</p>

<ul>
<li><a href="http://rubymotion.com/developers/motion-game">API reference</a></li>
<li><a href="https://github.com/HipByte/RubyMotionSamples/tree/master/game">Samples repository</a></li>
</ul>

<p>We are very excited about motion-game. We are releasing an early preview and hope you will give it a try and report us problems you may find.</p>

<div style="margin-left: 40px;">
<p style="font-style: italic;">
Holy shit! I know what my next game will be written in.
</p>
— Amir Rajan, author of <a href="http://www.newyorker.com/tech/elements/a-dark-room-the-best-selling-game-that-no-one-can-explain">A Dark Room for iPhone</a>
</div>

<h3>watchOS 2.0</h3>

<p>Apple introduced WatchKit in November of last year, allowing developers to write apps for the Apple Watch. (And we supported it <a href="http://www.rubymotion.com/news/2014/12/11/announcing-rubymotion-3.html">a few days later</a>.)</p>

<p>In the first version of WatchKit, apps were actually running on iPhone devices and were not using true native APIs. Apple addressed these limitations when previewing watchOS 2.0 at WWDC.</p>

<p>As of 4.0 RubyMotion now provides support for this new platform. You can create new projects targeting watchOS 2.0, utilize all the native APIs, deploy them to your Apple Watch, and prepare App Store submissions.</p>

<p><img src="/news/img/watchkit-ruby.png" alt="watchkit ruby"/></p>

<p>We have been working hard on this and while the support is still in beta, we would like you to start using it, and report us issues you may find. Please refer to the new <a href="http://rubymotion.com/developers/guides/manuals/cocoa/apple-watch/">Apple Watch Guide</a> on our developer center.</p>

<p>We will be improving the watchOS support over the following months. watchOS 2.0 itself is currently still in developer beta and presumed to be released later this year.</p>
]]></content:encoded>
      <dc:date>2015-09-03T05:06:31+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Rubymine Jetbrains Partnership</title>
      <link>http://www.rubymotion.com/news/2015/09/03/rubymotion-rubymine-jetbrains-partnership.html</link>
      <description><![CDATA[We are happy to announce that we are partnering with JetBrains, the creators of RubyMine, RubyMotion&#39;s most advanced development environment.
]]></description>
      <pubDate>Thu, 03 Sep 2015 03:06:31 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2015/09/03/rubymotion-rubymine-jetbrains-partnership.html</guid>
      <content:encoded><![CDATA[<p>We are happy to announce that we are partnering with JetBrains, the creators of <a href="https://www.jetbrains.com/ruby/rubymotion/">RubyMine</a>, RubyMotion&#39;s most advanced development environment.</p>

<p><img src="/news/img/rubymotion-love-rubymine.png" alt=""/></p>

<p>JetBrains is a long-time RubyMotion supporter. They have provided support for RubyMotion in RubyMine from the beginning, and they have sponsored our annual conference every year it’s been held. We are very thankful for their commitment to our community.</p>

<p>Today, we are announcing that HipByte and JetBrains will be working more closely together on a variety of technical and marketing projects.</p>

<h3>RubyMine collaboration</h3>

<p>The RubyMotion integration in RubyMine has been extracted as a plugin and will be very soon available on GitHub under an Open Source license.</p>

<p>We are committed to help with maintaining the plugin and ensuring that RubyMine is able to make use of all existing and future RubyMotion features.</p>

<p>Additionally, RubyMine will provide a one-click experience to setup a fully working RubyMotion environment.</p>

<h3>Cross-promotional efforts</h3>

<p>Both companies have agreed to start a series of collaborative efforts in order to better promote our respective products.</p>

<div style="margin-left: 40px;">
<p style="font-style: italic;">
When I first tried RubyMotion, I was very excited. As the RubyMine product manager, I hoped RubyMotion would help Ruby developers enter the attractive world of iOS development, and our IDE could help RubyMotion developers to be even more productive. As a developer, I was really hoping that I could create a to-do list app for my iPhone! My hopes were justified and more – since then RubyMotion has started supporting OS X and Android. And even better, today RubyMotion has a free version, which is really great. Our teams have been partners from the very beginning, helping each other make both products better. Now we can proudly announce it officially: this partnership is for good!
<p>— Tatiana Vasilyeva, Product Manager, JetBrains</p>
</div>

<p>We are thrilled to be working with JetBrains on these new projects and very excited about the future of RubyMotion and RubyMine. Stay tuned!</p>
]]></content:encoded>
      <dc:date>2015-09-03T03:06:31+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Codeclimate</title>
      <link>http://www.rubymotion.com/news/2015/06/19/rubymotion-codeclimate.html</link>
      <description><![CDATA[We are happy to announce that we have partnered with Code Climate to bring static analysis tools to all RubyMotion users. As of today, you will be able to analyze RubyMotion projects on codeclimate.com, as well as run custom static analysis for RubyMotion on your command line with their new CLI tool.
]]></description>
      <pubDate>Fri, 19 Jun 2015 03:06:31 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2015/06/19/rubymotion-codeclimate.html</guid>
      <content:encoded><![CDATA[<p>We are happy to announce that we have partnered with <a href="https://codeclimate.com">Code Climate</a> to bring static analysis tools to all RubyMotion users. As of today, you will be able to analyze RubyMotion projects on <a href="https://codeclimate.com">codeclimate.com</a>, as well as run custom static analysis for RubyMotion on your command line with their new CLI tool.</p>

<p><a href="https://codeclimate.com/platform"><img src="/news/img/codeclimate-platform.png"></a></p>

<p>If you are not familiar with Code Climate, it&#39;s a static analysis tool for monitoring the health of your code. It came out of the Ruby community but now supports a whole host of languages and frameworks -- and it&#39;s all open source!</p>

<p>The RubyMotion analysis &quot;engine&quot; for Code Climate lives at the <a href="http://github.com/hipbyte/codeclimate-rubymotion">HipByte/codeclimate-rubymotion</a> repository on GitHub, and is implemented by extending Rubocop to create custom bug risk and quality checks for RubyMotion. It&#39;s easy to get started using the Code Climate CLI with your RubyMotion project. Here&#39;s how: </p>
<div class="highlight"><pre><code class="language-" data-lang="">$ brew tap codeclimate/formulae
$ brew install codeclimate
$ codeclimate init
$ codeclimate engines:install
$ codeclimate engines:enable rubymotion
$ codeclimate analyze
</code></pre></div>
<p>You will then see analysis results for your RubyMotion project. We currently check for some crucial issues in iOS projects that could result in runtime crashes. We will working in the soon future on extending the engine with more rules, adding support for Android projects, and integrating the engine as part of our build system.</p>

<p>If you are interested in contributing to our analysis engine, we would definitely love your help! You can sign up for the Code Climate developer program HERE, or open issues and contribute pull requests on our <a href="http://github.com/hipbyte/codeclimate-rubymotion">GitHub repository</a>.</p>

<p>We love that all RubyMotion users will now be able to take advantage of the best static analysis tooling that the opensource community develops, and we hope you love it too!</p>
]]></content:encoded>
      <dc:date>2015-06-19T03:06:31+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Inspect 2015 Schedule</title>
      <link>http://www.rubymotion.com/news/2015/05/13/rubymotion-inspect-2015-schedule.html</link>
      <description><![CDATA[RubyMotion #inspect, our annual developer conference, will be organized this year the 1-2 July in beautiful Paris, France!
]]></description>
      <pubDate>Wed, 13 May 2015 03:06:31 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2015/05/13/rubymotion-inspect-2015-schedule.html</guid>
      <content:encoded><![CDATA[<p>RubyMotion #inspect, our annual <a href="http://conference.rubymotion.com">developer conference</a>, will be organized this year the 1-2 July in beautiful Paris, France!</p>

<p><a href="http://conference.rubymotion.com"><img src="https://farm9.staticflickr.com/8379/8683287263_caa07f3b08.jpg" width="458" height="500" alt="Paris, you never get tired of..."></a></p>

<p style="font-size: 12px"><a href="https://www.flickr.com/photos/minhocos/8683287263" title="Paris, you never get tired of... by Lima Pix, on Flickr">Photo by Lima Pix on Flickr.</a></p>

<p>The conference will be happening at <a href="http://www.42.fr/42-revolutionary-computer-training-free-and-open-to-all/">Ecole 42</a>, a private software programming school with over 1700 students. 42 is funded by <a href="http://en.wikipedia.org/wiki/Xavier_Niel">Xavier Niel</a>, a French entrepreneur and businessman active in the technology industry in France.</p>

<p>The conference is 2-day, single-track and all talks will be 30-min long. We will be welcoming guests with a breakfast and serving an awesome French lunch. There will be breaks between each talk to give you the opportunith to talk with the speakers and network with the attendees. There will be a Paris Ruby meetup at the end of the first day, and we will be celebrating the conference with a party / drink-up at the end of the second day.</p>

<p>If you haven&#39;t got your ticket already, we still have a few tickets left at the Early Bird pricing (33% discount over the regular rate). <a href="https://eventlama.com/#/events/inspect-3/tickets">Grab your ticket today!</a></p>

<p>Today we are announcing the remaining batch of speakers:</p>

<ul>
<li><p><strong>Jamon Holmgren</strong>, owner of <a href="http://www.clearsightstudio.com/">ClearSight Studio</a> and creator of <a href="https://github.com/clearsightstudio/ProMotion">ProMotion</a>, will continue Todd&#39;s talk on <a href="https://github.com/infinitered/redpotion">RedPotion</a> (the &quot;Rails for RubyMotion for iOS&quot;) with a second part, this time focused on production use and how the integration between the various helpers allows for clean application architecture that makes sense.</p></li>
<li><p><strong>Niels Liebisch</strong>, Managing Director of Optimal Consulting, will discuss a case where his consulting business had to rewrite an existing Objective-C application in RubyMotion to improve the stability and long-term maintenance and share tips, tricks, pitfalls and learnings.</p></li>
<li><p><strong>David Larrabee</strong>, lead engineer at <a href="http://meyouhealth.com/">MeYou Health</a>, will talk about implementing integration testing on RubyMotion apps. He will share his experience testing production apps: what worked and what didn&#39;t.</p></li>
<li><p><strong>Will Raxworthy</strong>, developer at Alphasights, will talk about taking over the world with SceneKit, Apple&#39;s 3D framework that he used at InfiniteRed to develp a <a href="http://infinitered.com/2015/02/10/a-seven-foot-globe-running-on-os-x-and-an-ipad-app-created-using-rubymotion-and-scenekit/">seven-foot 3D highly interactive globe</a> with RubyMotion. He will explain how it was implemented, what was used and tips they picked up along the way.</p></li>
<li><p><strong>Gant Laborde</strong>, co-founder of Iconoclast Labs, will cover the validation of user input in RubyMotion apps and how the <a href="http://rubymotionquery.com/">RMQ</a> gem makes the process easier.</p></li>
<li><p><strong>Mark Rickert</strong>, full-time RubyMotion freelancer, will share his life experience, cutting away his 9-5 job to focus on traveling, living his dreams and working in RubyMotion full time. The talk will focus on what you need to do to prepare, tips for how to engage the RubyMotion community and techniques on how to find clients.</p></li>
</ul>

<p>They will join the previously-announced speakers:</p>

<ul>
<li><p><strong>Laurent Sansonetti</strong>, creator of RubyMotion and founder of HipByte, will cover the current state of the RubyMotion ecosystem and what&#39;s planned for the future of the platform.</p></li>
<li><p><strong>Amir Rajan</strong>, creator of <a href="https://itunes.apple.com/us/app/a-dark-room/id736683061?mt=8">A Dark Room</a> and <a href="https://itunes.apple.com/us/app/the-ensign/id908073488?mt=8">The Ensign</a> for iOS, will talk about his experience writing a RubyMotion app that has been downloaded several million times and been featured as the number 1 paid app in the US App Store for weeks.</p></li>
<li><p><strong>Todd Werth</strong>, co-founder of <a href="http://infinitered.com/">InfiniteRed</a> and creator of <a href="http://rubymotionquery.com/">RMQ</a> (RubyMotionQuery), will talk about <a href="https://github.com/infinitered/redpotion">RedPotion</a>, an effort to build the &quot;Rails for RubyMotion for iOS&quot;, a common set of high-level abstractions to make mobile development easier. Todd will cover the rationale behind the project and build a small app as well.</p></li>
<li><p><strong>Darin Wilson</strong>, software engineer at InfiniteRed, will cover the Android equivalent of RedPotion, conveniently called BluePotion (not yet released at the time of writing). Darin will give an overview of the BluePotion components and demonstrates how the API closely mimics RedPotion, providing a &quot;learn once, write everywhere&quot; approach to native mobile app development. A small app will also be built.</p></li>
<li><p><strong>Boris Bügling</strong>, software engineer at <a href="https://www.contentful.com/">Contentful</a> and Senior VP of Evil at <a href="https://cocoapods.org/">CocoaPods</a>, will provide an introduction on developing <a href="https://developer.apple.com/watchkit/">WatchKit</a> and <a href="http://www.android.com/wear/">Android Wear</a> apps using RubyMotion. We will learn about the differences between both platforms, what kind of possibilities the smartwatches bring to extending your application and how to share some code for your watch app between both iOS and Android versions.</p></li>
<li><p><strong>Paul Sturgess</strong>, programmer at Kyan will talk about his recent experience writing <a href="http://www.titlechallenge.com/">Title Challenge</a>, a football management game written in RubyMotion.</p></li>
<li><p><strong>Rich Kilmer</strong>, CEO of <a href="http://cargosense.com">CargoSense</a>, will talk about how he uses RubyMotion to build an innovative solution to address issues in the logistics market.</p></li>
</ul>

<p>We would like to thank everyone who submitted a talk proposal via our CFP form. Sadly we received too many proposals and we had to make a selection.</p>

<p>A tentative schedule is published on the <a href="http://conference.rubymotion.com">conference website</a>. We are pretty excited about the program! Video games, wearables, community libraries, practical tips... should all be very interesting!</p>

<p>We hope you can join us in Paris. <a href="https://eventlama.com/#/events/inspect-3/tickets">Grab your ticket today!</a></p>

<p>We are also still looking for a small number of sponsors to share in the support of #inspect 2015. This is a great opportunity to show your commitment to the RubyMotion community and also promote your products or services. If you or your company are interested <a href="mailto:info@hipbyte.com">get in touch</a>.</p>
]]></content:encoded>
      <dc:date>2015-05-13T03:06:31+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Success Story Countable</title>
      <link>http://www.rubymotion.com/news/2015/05/07/rubymotion-success-story-countable.html</link>
      <description><![CDATA[
]]></description>
      <pubDate>Thu, 07 May 2015 05:26:31 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2015/05/07/rubymotion-success-story-countable.html</guid>
      <content:encoded><![CDATA[<p><a href="http://www.countable.us"><img width="512" src="/img/cases/countable/hero1.png" alt="Countable Banner image"/></a></p>

<p>After Bart Myers and Peter Arzhintar sold SideReel in 2007, they decided to
apply their experience and knowledge towards an app that enables a powerfully
direct and immediate form of democracy.  <a href="https://www.countable.us">Countable</a> is an app that gives U.S.
Citizens a way to learn about what issues are being discussed in Congress, and
enables them to take immediate action.</p>

<p><br/>
<div class="">
  <iframe width="560" height="315" src="//www.youtube.com/embed/x-tXedSHy6c" frameborder="0" allowfullscreen></iframe>
</div>
<br/></p>

<blockquote>
<p>We endeavor to make Countable the most important app you use. It does
something that has never been done before: give people an easy and portable
way to see what is happening in government, get your voice heard and, in near
real time, make sure your Representatives are listening. Nearly every attempt
that has been made to do this was attempted with a politically savvy insider
in mind as their audience. We endeavor to take the politics out of it and make
it about governing - moving us closer to a direct democracy - where our
representatives become an extension of our will.</p>
</blockquote>

<p><strong>What background did you come from when you started to build Countable?</strong></p>

<p>The Countable team includes folks from both consumer internet and journalistic
backgrounds. We’re not political insiders by any means and were largely trying
to build a product that the average American could use to understand what’s
happening in Congress and give us a way to effectively evaluate our
Representatives.</p>

<p><strong>What can users accomplish with your app?</strong></p>

<p><a href="http://www.countable.us"><img width="512" src="/img/cases/countable/Screens4.png" alt="Countable screen shot"/></a></p>

<p>We built a simple iPhone app that presents key legislation before Congress in an
easy to understand manner - with big pictures, a clear, concise description, a
pro and con argument, and resources to learn more. We give you a single action
to take - vote YEA or NAY on the bill. Once you vote you can send your vote to
your representative with one click and then you can share that you voted easily
to FB or Twitter.</p>

<p>From there you can look at how your Representatives have voted on legislation,
browse legislation by topics or issues that you care about, and generally stay
informed. Users dig it.</p>

<p><strong>Why did you choose RubyMotion?</strong></p>

<p>The team is very comfortable with Ruby, we are using it extensively, and
RubyMotion was really a no brainer as it solved a few key problems for us: rapid
development, little retraining, and a native experience with access to key iOS
functionality like notifications.</p>

<p><strong>How did RubyMotion help accelerate your development?</strong></p>

<p>First and foremost, being able to use the editor of my choice rather than Xcode
while developing this app was HUGE. We did lose autocomplete, but being able to
manipulate text programmatically in Vim sped up development by quite a bit. The
other major win that we got from RubyMotion was to be able to write legible
simple code. Objective-C code always seems to look just like a ridiculous garble
of square brackets. Converting copied Objective-C into Ruby just felt happy. I
would frequently go from a half dozen of complicated nested data manipulations
to 5 clearly labeled simple methods.</p>

<p><strong>What parts of RubyMotion development would you like to see improved?</strong></p>

<p>We had a couple of issues with memory management. The way Objective-C determines
whether or not it can remove an object is based on how many objects are attached
to it not based on whether is even accessible to the current thread. Leaving any
instance variable set on an object would just keep that object around in memory.
We ended up writing a solution that nils out all instance variables when
destroying an object. It would be great if RubyMotion acted a little more like
Ruby here. The other thing we felt needed some work was the logging. If a method
unintentionally called itself, the process would fail silently. It would be
excellent if the process could actually throw a <code>SystemStackError: stack level
too deep</code> exception. We can run the process with debug=1, and get trapped in a
debugger where the fail exists, but even that debugger has a lot of garbage in
its stack trace. Exceptions in general are not actually handled very well. We
tried to send google analytics exception backtraces - locally calling
<code>exception.backtrace</code> worked fine, but on the actual device, it returned nil. It
would be fantastic if the Ruby file backtraces could be returned from a device.</p>

<p><strong>How did you get help when you ran into a stumbling block?</strong></p>

<p>For the most part, Stack Overflow was our friend. The debugger was occasionally
helpful for finding line numbers, but we used a lot of print statements.</p>

<p><strong>Did you take advantage of any third party gems or CocoaPods?</strong></p>

<p>We did, we used <a href="https://github.com/clearsightstudio/ProMotion">ProMotion</a> as our main framework, which did give us a few helper
methods that we liked, but largely felt like it was not entirely well thought
through. Once we pulled in <a href="https://github.com/rubymotion/sugarcube">SugarCube</a>, everything came together really well.
SugarCube is awesome. The animations, colors, gestures, and notifications helped
us write code that felt good. I would still like to spend some time setting up a
framework for our app with a proper event driven system using sugar cube&#39;s
events.</p>

<p><a href="http://www.countable.us"><img width="512" height="512" src="/img/cases/countable/AppIcon.png" alt="Countable App Icon"/></a></p>
]]></content:encoded>
      <dc:date>2015-05-07T05:26:31+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Inspect 2015 New Speakers</title>
      <link>http://www.rubymotion.com/news/2015/04/22/rubymotion-inspect-2015-new-speakers.html</link>
      <description><![CDATA[RubyMotion #inspect, our annual developer conference, will be organized this year the 1-2 July in beautiful Paris, France!
]]></description>
      <pubDate>Wed, 22 Apr 2015 03:06:31 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2015/04/22/rubymotion-inspect-2015-new-speakers.html</guid>
      <content:encoded><![CDATA[<p>RubyMotion #inspect, our annual <a href="http://conference.rubymotion.com">developer conference</a>, will be organized this year the 1-2 July in beautiful Paris, France!</p>

<p>If you haven&#39;t got your ticket already, we still have a few tickets left at the Early Bird pricing (33% discount over the regular rate). <a href="http://conference.rubymotion.com">Grab your ticket today!</a></p>

<p>Today we are announcing 3 new speakers:</p>

<ul>
<li><p><strong>Todd Werth</strong>, co-founder of <a href="http://infinitered.com/">InfiniteRed</a> and creator of <a href="http://rubymotionquery.com/">RMQ</a> (RubyMotionQuery), will talk about <a href="https://github.com/infinitered/redpotion">RedPotion</a>, an effort to build the &quot;Rails for RubyMotion for iOS&quot;, a common set of high-level abstractions to make mobile development easier. Todd will cover the rationale behind the project and build a small app as well.</p></li>
<li><p><strong>Darin Wilson</strong>, software engineer at InfiniteRed, will cover the Android equivalent of RedPotion, conveniently called BluePotion (not yet released at the time of writing). Darin will give an overview of the BluePotion components and demonstrates how the API closely mimics RedPotion, providing a &quot;learn once, write everywhere&quot; approach to native mobile app development. A small app will also be built.</p></li>
<li><p><strong>Boris Bügling</strong>, software engineer at <a href="https://www.contentful.com/">Contentful</a> and Senior VP of Evil at <a href="https://cocoapods.org/">CocoaPods</a>, will provide an introduction on developing <a href="https://developer.apple.com/watchkit/">WatchKit</a> and <a href="http://www.android.com/wear/">Android Wear</a> apps using RubyMotion. We will learn about the differences between both platforms, what kind of possibilities the smartwatches bring to extending your application and how to share some code for your watch app between both iOS and Android versions.</p></li>
</ul>

<p>They will join our existing lineup of 4 speakers:</p>

<ul>
<li><p><strong>Laurent Sansonetti</strong>, creator of RubyMotion and founder of HipByte, will talk about what&#39;s coming next in RubyMotion. You probably don&#39;t want to miss this!</p></li>
<li><p><strong>Amir Rajan</strong>, creator of <a href="https://itunes.apple.com/us/app/a-dark-room/id736683061?mt=8">A Dark Room</a> and <a href="https://itunes.apple.com/us/app/the-ensign/id908073488?mt=8">The Ensign</a> for iOS, will talk about his experience writing a RubyMotion app that has been downloaded several million times and been featured as the number 1 paid app in the US App Store for weeks.</p></li>
<li><p><strong>Paul Sturgess</strong>, programmer at Kyan will talk about his recent experience writing <a href="http://www.titlechallenge.com/">Title Challenge</a>, a football management game written in RubyMotion.</p></li>
<li><p><strong>Rich Kilmer</strong>, CEO of <a href="http://cargosense.com">CargoSense</a>, will talk about how he uses RubyMotion to build an innovative solution to address issues in the logistics market.</p></li>
</ul>

<p>We are still accepting talk proposals, so please feel free to <a href="https://eventlama.com/#/events/inspect-3/cfp">submit one</a>. </p>

<p>We are also still looking for a small number of sponsors to share in the support of #inspect 2015. This is a great opportunity to show your commitment to the RubyMotion community and also promote your products or services. If you or your company are interested <a href="mailto:info@hipbyte.com">get in touch</a>.</p>
]]></content:encoded>
      <dc:date>2015-04-22T03:06:31+02:00</dc:date>
    </item>
    <item>
      <title>New In Rubymotion Android Automatic Setup Rubymine Intel</title>
      <link>http://www.rubymotion.com/news/2015/04/15/new-in-rubymotion-android-automatic-setup-rubymine-intel.html</link>
      <description><![CDATA[Since we launched support for the Android platform in December there has been a lot of development in this area, and we would like to take the opportunity to highlight important changes.
]]></description>
      <pubDate>Wed, 15 Apr 2015 03:06:31 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2015/04/15/new-in-rubymotion-android-automatic-setup-rubymine-intel.html</guid>
      <content:encoded><![CDATA[<p>Since we launched support for the Android platform in December there has been a lot of development in this area, and we would like to take the opportunity to highlight important changes.</p>

<h4>Automatic setup of Android environment</h4>

<p>To get started with RubyMotion for Android, a proper Android environment is needed, and we used to ask users to download and setup numerous components by themselves.</p>

<p>We now provide a single command that will automatically download and setup all the required components for you:</p>

<pre class="highlight">
$ motion android-setup
</pre>

<p>The command will download the Android SDK and NDK, configure RubyMotion to use them, then run the Android UI to let you select versions of Android you want to develop for.</p>

<p>RubyMotion supports all versions of Android covered by the SDK, including the very latest <a href="https://developer.android.com/about/versions/android-5.1.html">API 22</a> (Android 5.1).</p>

<h4>RubyMine supports RubyMotion for Android</h4>

<p><a href="http://blog.jetbrains.com/ruby/2015/02/rubymine-satsuki-eap-is-open"><img src="http://blog.jetbrains.com/ruby/files/2015/02/splashSatsuki.png" alt="rubymine satsuki" width="300"/></a></p>

<p>Our friends at JetBrains are providing RubyMotion for Android support in RubyMine as part of the <a href="http://blog.jetbrains.com/ruby/2015/02/rubymine-satsuki-eap-is-open/">Satsuki Early Access Program</a>.</p>

<p>You can now enjoy intelligent code-completion and toolchain integration when writing Android apps in RubyMine.</p>

<p>These are early-access builds, please keep in touch with JetBrains if you are running into issues.</p>

<h4>Multi-architecture support, Intel, Genymotion</h4>

<p>RubyMotion for Android projects can now be built for multiple architectures instead of one. Previously-supported architectures were <code>armv5te</code> and <code>armv7</code>, and we now support <code>x86</code> (Intel 32-bit) as well.</p>

<p>You can specify the architectures you need by changing the <code>app.archs</code> setting in the <code>Rakefile</code> of your project:</p>

<pre class="highlight">
Motion::Project::App.setup do |app|
  ...
  app.archs = ['armv5s', 'x86']
end
</pre>

<p>Intel support is not enabled by default, but can be added if you want to use a faster emulator. The built-in Android emulator is notoriously slow, but 3rd-party products such as <a href="https://www.genymotion.com">Genymotion</a> provide faster alternatives.</p>

<p><img src="/news/img/genymotion-hello-rm.png" alt="hello world in genymotion" width="300"/></p>

<p>To use Genymotion with RubyMotion for Android projects, you simply need to download it (it&#39;s free for personal use), then create a virtual device, and make sure it is launched. After that, configure your RubyMotion project to build for the <code>x86</code> architecture, and use the default <code>rake</code> task which will talk to the default Android emulator.</p>

<pre class="highlight">
$ rake emulator
$ rake           # shortcut for 'rake emulator'
</pre>

<p>The application will show up immediately in the Genymotion device and the interactive console (REPL) will also be connected to it.</p>

<h4>3rd-party Java dependencies with Gradle</h4>

<p><img src="/news/img/gradle.png" alt="gradle logo" width="300"/></p>

<p><a href="https://gradle.org/">Gradle</a> is an advanced build tool that can be used to manage 3rd-party dependencies in a Java-based project. As it seems to be highly popular in the Android world we decided to abstract this functionality into a RubyMotion gem: <a href="https://github.com/HipByte/motion-gradle">motion-gradle</a>. </p>

<p>motion-gradle lets you easily describe 3rd-party Java dependencies in your app, similar to motion-cocoapods in an iOS project.</p>

<p>In order to use it, you need to install Gradle first (you can do this via homebrew) and make sure the <code>gradle</code> executable is in your <code>$PATH</code>. You also have to add the <code>motion-gradle</code> gem in the <code>Gemfile</code> of your project.</p>

<p>The gem exposes a new API to define dependencies, following is an example:</p>

<pre class="highlight">
Motion::Project::App.setup do |app|
  # ...
  app.gradle do
    dependency 'com.mcxiaoke.volley', :artifact => 'library', :version => '1.0.10'
    dependency 'commons-cli'
    dependency 'ehcache', :version => '1.2.3'
  end
end
</pre>

<p>After that, you can run the <code>gradle:install</code> task which will download the required dependencies from the main Gradle repository and make sure they are properly vendored in the build system of the RubyMotion project:</p>

<pre class="highlight">
$ rake gradle:install
</pre>

<p>After this command, all the Java APIs in these libraries should be available from your Ruby code.</p>

<h4>Build system improvements</h4>

<p>We extended the Rakefile project configuration object with the following settings:</p>

<ul>
<li><p><code>app.manifest</code>: a special object that will be used to create the <code>AndroidManifest.xml</code> file during the build. You can configure the entire manifest from there. More information on the <a href="http://www.rubymotion.com/developers/guides/manuals/android/project-management/#_providing_custom_values">Project Management Guide</a>.</p></li>
<li><p><code>app.optional_features</code>: same as <code>app.features</code> except that they will be exported as optional in the manifest file. This could for instance be used when your app may require camera access, if it is available.</p></li>
</ul>

<pre class="highlight">
app.optional_features << 'android.hardware.camera'
</pre>

<ul>
<li><code>app.support_libraries</code>: a convenience way to specify the Android support libraries to be included in your app, instead of manually vendoring them.</li>
</ul>

<pre class="highlight">
app.support_libraries << 'google-play-services'
app.support_libraries << 'android-support-v4'
</pre>

<ul>
<li><code>app.theme</code>: lets you set the theme of the app. The default value is <code>Theme.Holo</code>.</li>
</ul>

<pre class="highlight">
app.theme = 'Theme.Holo.Light'
</pre>

<p>Also, <a href="http://bundler.io/">Bundler</a> is now integrated in new projects. Dependencies can be added to the <code>Gemfile</code> as usual.</p>

<p>Finally, we improved the build system to make builds faster. Ruby files are now compiled in parallel jobs, exactly as in iOS and OS X projects, and the link phase (when generating the machine code library) was also shortened.</p>

<p>Despite these features and improvements, the Android support of RubyMotion is still in active development, compared to the more stable iOS version. We are fully committed in supporting Android and we will keep releasing builds on a monthly basis, which we have done since we publicly launched it in December.</p>

<p>Interesting in meeting the RubyMotion community and also discovering future directions of the product? Join us the 1st and 2nd July in Paris, France for our annual developer conference. <a href="http://conference.rubymotion.com">Grab your ticket today!</a></p>
]]></content:encoded>
      <dc:date>2015-04-15T03:06:31+02:00</dc:date>
    </item>
    <item>
      <title>Announcing Rubymotion Inspect 2015</title>
      <link>http://www.rubymotion.com/news/2015/03/16/announcing-rubymotion-inspect-2015.html</link>
      <description><![CDATA[We are happy to announce the 3rd edition of our annual developer conference. #inspect 2015 will be organized in Paris, France the 1st and 2nd of July 2015.
]]></description>
      <pubDate>Mon, 16 Mar 2015 02:06:31 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2015/03/16/announcing-rubymotion-inspect-2015.html</guid>
      <content:encoded><![CDATA[<p>We are happy to announce the 3rd edition of our annual developer conference. <a href="http://conference.rubymotion.com">#inspect 2015</a> will be organized in <strong>Paris, France</strong> the 1st and 2nd of July 2015.</p>

<p><a href="http://conference.rubymotion.com"><img src="https://farm9.staticflickr.com/8379/8683287263_caa07f3b08.jpg" width="458" height="500" alt="Paris, you never get tired of..."></a></p>

<p style="font-size: 12px"><a href="https://www.flickr.com/photos/minhocos/8683287263" title="Paris, you never get tired of... by Lima Pix, on Flickr">Photo by Lima Pix on Flickr.</a></p>

<p>The conference will be happening at <a href="http://www.42.fr/42-revolutionary-computer-training-free-and-open-to-all/">Ecole 42</a>, a private software programming school with over 1700 students. 42 is funded by <a href="http://en.wikipedia.org/wiki/Xavier_Niel">Xavier Niel</a>, a French entrepreneur and businessman active in the technology industry in France.</p>

<p>We will be using the same format as before, a <strong>two-days one-track</strong> schedule, and we will be setting up a party at the end of the second day to celebrate.</p>

<p>Today we are pre-announcing 4 speakers:</p>

<ul>
<li><p><strong>Laurent Sansonetti</strong>, creator of RubyMotion and founder of HipByte, will talk about what&#39;s coming next in RubyMotion. You probably don&#39;t want to miss this!</p></li>
<li><p><strong>Amir Rajan</strong>, creator of <a href="https://itunes.apple.com/us/app/a-dark-room/id736683061?mt=8">A Dark Room</a> and <a href="https://itunes.apple.com/us/app/the-ensign/id908073488?mt=8">The Ensign</a> for iOS, will talk about his experience writing a RubyMotion app that has been downloaded several million times and been featured as the number 1 paid app in the US App Store for weeks.</p></li>
<li><p><strong>Paul Sturgess</strong>, programmer at Kyan will talk about his recent experience writing <a href="http://www.titlechallenge.com/">Title Challenge</a>, a football management game written in RubyMotion.</p></li>
<li><p><strong>Rich Kilmer</strong>, CEO of <a href="http://cargosense.com">CargoSense</a>, will talk about how he uses RubyMotion to build an innovative solution to address issues in the logistics market.</p></li>
</ul>

<p>We need more speakers. If you are interested in speaking at the conference please consider submitting a <a href="https://eventlama.com/#/events/inspect-3/cfp">call for paper</a>!</p>

<p>We are also looking for a small number of <strong>sponsors</strong> to share in the support of #inspect 2015. This is a great opportunity to show your commitment to the RubyMotion community and also promote your products or services. If you or your company are interested <a href="mailto:info@hipbyte.com">get in touch</a>.</p>

<p>We are now offering in limited quantity <strong>Early Bird tickets</strong> at <strong>€229</strong> (a <strong>33% discount</strong> over the regular admission ticket). We always sell out the conference, so <a href="http://conference.rubymotion.com">grab your ticket today!</a></p>

<p>To those interested in getting help learning RubyMotion, we will be organizing a <strong>one-day workshop</strong> the day before the conference (30 June) where we will introduce the basics of iOS and Android programming with RubyMotion. You can <a href="https://eventlama.com/#/events/inspect-3/tickets">buy a workshop ticket</a> as well.</p>
]]></content:encoded>
      <dc:date>2015-03-16T02:06:31+01:00</dc:date>
    </item>
    <item>
      <title>Announcing Rubymotion Community Forum</title>
      <link>http://www.rubymotion.com/news/2015/03/11/announcing-rubymotion-community-forum.html</link>
      <description><![CDATA[We are happy to announce the availability of a new place where RubyMotion users can publicly discuss: the RubyMotion Community Forum.
]]></description>
      <pubDate>Wed, 11 Mar 2015 02:06:31 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2015/03/11/announcing-rubymotion-community-forum.html</guid>
      <content:encoded><![CDATA[<p>We are happy to announce the availability of a new place where RubyMotion users can publicly discuss: the <a href="http://community.rubymotion.com">RubyMotion Community Forum</a>.</p>

<p>The forum replaces the Google Group which has been around since we launched, 3 years ago. It was time to switch to a newer alternative offering a better user experience, and we decided to go with a <a href="http://www.discourse.org/">Discourse</a> forum.</p>

<p>We would like to thank <a href="https://twitter.com/willrax">Will Raxworthy</a> of <a href="http://infinitered.com/">InfiniteRed</a> for setting this up.</p>

<p>Please <a href="http://community.rubymotion.com">join us</a> and create an account today!</p>
]]></content:encoded>
      <dc:date>2015-03-11T02:06:31+01:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Success Story Fandor</title>
      <link>http://www.rubymotion.com/news/2015/03/10/rubymotion-success-story-fandor.html</link>
      <description><![CDATA[Fandor wanted to make it easy for people to discover and watch handpicked,
award-winning movies of all lengths and genres, from the world&rsquo;s most
respected filmmakers. They aim to create a global community of film lovers and
makers connected by meaningful and entertaining cinematic experiences as well as
deliver a fair revenue share to filmmakers and distributors.
]]></description>
      <pubDate>Tue, 10 Mar 2015 02:06:31 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2015/03/10/rubymotion-success-story-fandor.html</guid>
      <content:encoded><![CDATA[<p><a href="https://www.fandor.com">Fandor</a> wanted to make it easy for people to discover and watch handpicked,
award-winning movies of all lengths and genres, from the world&rsquo;s most
respected filmmakers. They aim to create a global community of film lovers and
makers connected by meaningful and entertaining cinematic experiences as well as
deliver a fair revenue share to filmmakers and distributors.</p>

<p>Fandor decided to go with RubyMotion to build their iPhone and iPad apps.</p>

<p><a href="http://www.fandor.com"><img src="/img/cases/fandor/iphone-app.png" alt=""/></a></p>

<p><strong>What were the goals for the redesigned Fandor app?</strong></p>

<p>Our film database is full of classic and avant-garde films, so our first version
of this redesign includes features most important for watching these films, as
well as sharing them, saving them for later, and searching our extensive
database.</p>

<p><strong>Why did you choose RubyMotion to build this version?</strong></p>

<p>RubyMotion allowed us to move quickly, and rebuild our app from the ground up in a matter of months with limited resources.</p>

<p><strong>What were the features of RubyMotion that allowed you to build your app so quickly?</strong></p>

<p>First, <em>RubyMotion is Ruby</em>.  Everyone at Fandor comes from the Rails world.
Being able to write in Ruby and use Ruby idioms let us code faster.  We know how
to write beautiful Ruby code.  While learning the iOS SDK, we didn&#39;t have to
simultaneously discover what beauty means in Objective-C (if there is such a
thing).</p>

<p>Second, RubyMotion is <em>developer-environment agnostic</em>.  By using RubyMotion, we
also removed the overhead of learning Xcode.  Our engineering team felt like
Xcode was bloated and confusing.  We each used our own IDE of choice.  I can&#39;t
imagine not using RubyMine - the ease of being able to jump to method or class
definitions makes code reading (of both our own and external libraries)
incredibly easy.</p>

<p><a href="http://www.fandor.com"><img src="/img/cases/fandor/ipad-app.png" alt=""/></a></p>

<p><strong>Using RubyMotion, did you run into any issues integrating native or third party tools?</strong></p>

<p>The only issue we had was with the ARAnalytics Objective-C library - I wanted to
use its method swizzling to centralize our analytics.  We tried a few times to
get it to play nice with us, but there were some confusing low-level Objective-C
integration problems that became too costly to solve.</p>

<p><strong>What native frameworks did you use to build your media player?</strong></p>

<p>We used <code>MPMoviePlayerViewController</code> - it was the most straightforward option
available to us.  There have been some product requests that have come in
recently to change the player functionality, so if those keep coming, we may
explore a more low-level option like AVPlayer.</p>

<p><strong>What were the biggest challenges building your app?</strong></p>

<p>Getting acquainted with the iOS SDK was quite difficult at times - the system
felt significantly more opaque than the open-source Rails world.</p>

<p>Learning how to code idiomatically was also costly.  We threw away a lot of the
code we wrote in the first few weeks.  We sometimes came up with solutions that
didn&#39;t use the hardware effectively or introduced memory leaks.</p>

<p>Additionally, there were a some genuinely difficult programming problems that
came up. Our designers had some pretty ambitious initial designs for the layouts
of the film that were algorithmically intense.</p>

<p><strong>How did you research answers to issues when they came up?</strong></p>

<p>Here are the resources we used, in order of frequency:</p>

<ol>
<li>Stack Overflow</li>
<li>Apple Documentation</li>
<li>Third party blogs / gists</li>
<li>Apple example applications</li>
</ol>

<p>And when all else failed, we used the amazing <a href="http://infinitered.com">Infinite Red</a> consulting company
as a backstop to our own knowledge.</p>

<p><strong>What open source tools would you recommend to other RubyMotion developers?</strong></p>

<p>We used <a href="http://rubymotionquery.com">RMQ</a> extensively in our app, and it made creating layouts
significantly faster.  I recommend it.</p>
]]></content:encoded>
      <dc:date>2015-03-10T02:06:31+01:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Success Story Quicklens</title>
      <link>http://www.rubymotion.com/news/2015/02/05/rubymotion-success-story-quicklens.html</link>
      <description><![CDATA[Pavan Podila started QuickLens to be a handy tool while doing screencasts. It has evolved to be a lot more than just that! QuickLens is a powerful Mac App for UI Designers/Developers. It floats on top of all windows and comes with a suite of tools to magnify areas, sample colors, measure dimensions, check alignments and much more. After some initial feedback from designer and developer friends, Pavan incorporated many more features, driven purely by need.
]]></description>
      <pubDate>Thu, 05 Feb 2015 12:48:21 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2015/02/05/rubymotion-success-story-quicklens.html</guid>
      <content:encoded><![CDATA[<p><a href="https://www.twitter.com/pavanpodila">Pavan Podila</a> started <a href="http://www.quicklensapp.com/">QuickLens</a> to be a handy tool while doing screencasts. It has evolved to be a lot more than just that! QuickLens is a powerful Mac App for UI Designers/Developers. It floats on top of all windows and comes with a suite of tools to magnify areas, sample colors, measure dimensions, check alignments and much more. After some initial feedback from designer and developer friends, Pavan incorporated many more features, driven purely by need.</p>

<p><br/>
<div class="">
  <iframe width="560" height="315" src="//www.youtube.com/embed/JW4MElP3OMI" frameborder="0" allowfullscreen></iframe>
</div>
<br/></p>

<p><strong>What kind of programming were you doing when you started using RubyMotion?</strong></p>

<p>I have been a Front-end developer for 10 years now, starting with Java, then .Net and now focusing purely on Web, iOS and Mac. Over the years, I have also developed good taste in design, so these days I see myself as a Designer/Developer hybrid.</p>

<p><a href="http://www.quicklensapp.com"><img width="512" height="320" src="/img/cases/quicklens/hero1.jpg" alt=""/></a></p>

<p><strong>How did you get started on QuickLens and RubyMotion?</strong></p>

<p>Before RubyMotion announced support for OS X in their 2.0 version, I was coding away in MacRuby and Objective-C. Although MacRuby was great for prototyping, it was lacking the maturity and polish of RubyMotion. When 2.0 came out, it totally changed my world. I immediately jumped on it and was able to build the first version of my app within 3 days! In fact I even <a href="https://twitter.com/pavanpodila/status/336618757281697793">tweeted about it</a> at that time.</p>

<p><a href="http://www.quicklensapp.com"><img width="512" height="320" src="/img/cases/quicklens/hero2.jpg" alt=""/></a></p>

<p>The ride on the RubyMotion train wasn&#39;t always scenic. I had a few memory related issues, API incompatibility with frameworks like Carbon and the occassional regression. But thanks to the fantastic support, all of these were fixed very quickly. Overall I have been very happy with the productivity. Frankly, without RubyMotion, I would have taken much longer to ship 1.0 of QuickLens.</p>

<p><strong>Speaking of support, what did you do when you ran into issues with the compiler?</strong></p>

<p>This has happened a few times, especially early on when RubyMotion just announced support for OS X. I had issues with certain function signatures (esp. those involving blocks) or some weird crash in Cocoa/Carbon API, which was hard to debug. Most often I would hit up <code>motion support</code> and file a ticket. Eloy, Joffrey or Shizuo would generally respond within a day and sometimes file a separate ticket on YouTrack. Sometimes even Laurent would chip in with some work arounds. I also had some trouble with the <code>Pointer</code> class when using with some Carbon API. For example, here is a snippet that took me several days to figure out, with lots of help from Laurent!</p>

<p>This snippet is part of the Carbon API that reads the default keyboard layout. I use it in my custom control for recording Global Hotkeys.</p>
<div class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="n">currentKeyboard</span> <span class="o">=</span> <span class="no">TISCopyCurrentKeyboardInputSource</span><span class="p">()</span>
<span class="n">layoutDataPtr</span> <span class="o">=</span> <span class="no">TISGetInputSourceProperty</span><span class="p">(</span><span class="n">currentKeyboard</span><span class="p">,</span> <span class="no">KTISPropertyUnicodeKeyLayoutData</span><span class="p">)</span>
<span class="n">keyboardLayout</span> <span class="o">=</span> <span class="n">layoutDataPtr</span><span class="p">.</span><span class="nf">to_object</span><span class="p">.</span><span class="nf">bytes</span><span class="p">.</span><span class="nf">cast!</span><span class="p">(</span><span class="no">UCKeyboardLayout</span><span class="p">.</span><span class="nf">type</span><span class="p">)</span>
</code></pre></div>
<p><code>layoutDataPtr</code> is an instance of <code>Pointer</code>. The last line where I apply a chain of methods was quite hard to figure out!</p>

<p><strong>What is it about RubyMotion that makes you feel so productive?</strong></p>

<p>I think its a combination of the command line tools, REPL, the Ruby language and the awesome and vibrant community. I have learnt a lot from the experiences and code shared by folks. Reading the code of libraries such as: Bubblewrap, Promotion, Sugarcube, RubyMotionQuery and many others has been quite illuminating. It has given me enough impetus to structure my own code. I sure want to contribute back in my own little way, hopefully by open-sourcing some of the reusable parts of my app.</p>

<p>I should also mention that the Apple frameworks, especially AppKit, Cocoa, Quartz, QuartzCore are very well designed. With the Ruby language, they become more approachable and easier to use.</p>

<p><strong>What features in Cocoa or Xcode did you feel were difficult in RubyMotion?</strong></p>

<p>As I mentioned earlier, it was the early battles with block based Cocoa APIs and some Carbon APIs. A particular block-based Cocoa API which troubled me was:</p>
<div class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="n">panel</span> <span class="o">=</span> <span class="no">NSOpenPanel</span><span class="p">.</span><span class="nf">openPanel</span>
<span class="n">panel</span><span class="p">.</span><span class="nf">beginSheetModalForWindow</span> <span class="n">window</span><span class="p">,</span> <span class="ss">completionHandler: </span><span class="o">-&gt;</span><span class="p">(</span><span class="n">result</span><span class="p">)</span> <span class="k">do</span>

<span class="k">end</span>
</code></pre></div>
<p>The first time it was a compiler issue not identifying the block signature properly. Then it was fixed in the next RM release and then there was a regression and finally fixed in a later release. It was an interesting roller-coaster ride with that API :-)</p>

<p>Using Interface Builder for designing some of the views and windows was also a bit of challenge. In the end I created an empty XCode project with all the xibs and a simple <code>Stub.h</code> file that had the interfaces for all the Views, Controls, ViewControllers and Windows. Luckily IB picks up changes to the <code>Stub.h</code> in real-time, so the workflow is not that bad.</p>

<p><strong>Are there any tools that you recommend to new RubyMotion developers?</strong></p>

<p>I have personally used the <a href="https://www.jetbrains.com/ruby/">JetBrains RubyMine IDE</a> with great success, so that is definitely recommended. Other than that, I would encourage learning some Objective-C as well, which will help when converting some APIs into Ruby. Once you get comfortable with the RubyMotion toolset, it really comes down to understanding the AppKit, Cocoa and other framework APIs. I have really spent a disproportionate amount of time in the Cocoa and Quartz API docs for this app. RubyMotion is really fun once you get a good grip over the Apple Frameworks! Know Thy API.</p>

<p>Instruments is one other tool that every developer should know well. Effective use of Instruments is the key to identifying and fixing memory leaks and performance issues.</p>

<p><strong>Now that you&#39;ve built the entire app using RubyMotion, would you choose to use it again if you had to start over?</strong></p>

<p>In light of the recent WWDC announcements, it may seem that Swift is a natural choice for new apps. Although the syntax and features are great, it is still very new and has lots of issues with Cocoa APIs. I did some of my own experiments and found it very tedious with all the type-casts for Cocoa/Quartz APIs. That coupled with the crashes and poor editor support in XCode really makes it a frustrating experience. I am sure Apple will improve this over time but as of now, it is pretty bad. Actually it seems worse in contrast to the experience I&#39;ve had with RubyMotion and RubyMine IDE.</p>

<p>Additionally from a language point of view, Ruby seems more suited for UI development than Swift. Add in some meta-programming ideas, and you have a powerful system in your hands.</p>
]]></content:encoded>
      <dc:date>2015-02-05T12:48:21+01:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Success Story Freckle</title>
      <link>http://www.rubymotion.com/news/2015/01/16/rubymotion-success-story-freckle.html</link>
      <description><![CDATA[
]]></description>
      <pubDate>Fri, 16 Jan 2015 12:06:16 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2015/01/16/rubymotion-success-story-freckle.html</guid>
      <content:encoded><![CDATA[<p><a href="http://letsfreckle.com"><img width="264" height="249" src="/img/cases/freckle/hero1.png" alt=""/></a></p>

<p><a href="https://twitter.com/thomasfuchs">Thomas Fuchs</a> began his programming career with a 4MHz behemoth, and is now the proud owner of <a href="http://slash7.com">Slash7</a>, a bootstrapped company that he started with his wife <a href="https://unicornfree.com">Amy Hoy</a>.</p>

<p>They built <a href="https://letsfreckle.com">Freckle</a>, a friendly online time tracking system, and decided to go with RubyMotion to build an OS X app for it.</p>

<p><strong>Can you tell us a little about your company, Slash7?</strong></p>

<p>We’re a proudly bootstrapped mom &amp; pop company (my wife Amy Hoy and I own and run the company). We founded <a href="http://slash7.com">Slash7</a> in 2008 (the same year we got married, and my wife moved internationally!), and financed our build-a-product endeavors by doing high-end consulting for lots of companies you probably have heard of (among them Nokia, Ford, Pepsi, just to name few).</p>

<p>After 2 or 3 years or so of bootstrapping, and then moving internationally again (this time to Philadelphia), we finally could live off the profits from our main product, <a href="https://letsfreckle.com">Freckle</a>. Amy is doing the high-level feature planning, design and marketing of Freckle. I’m mostly down in the trenches and do most programming, lots of details design and I keep the servers running. I also dabble in marketing. We have 3 employees now, so it’s like a real company or something.</p>

<p>My wife also runs a business course for people like us who want to run product-based, sustainable businesses (<a href="http://30x500.com/">30x500.com</a>), and we have a yearly conference on this (<a href="http://baconbiz.com">baconbiz.com</a>).</p>

<p><strong>Tell us about Freckle</strong></p>

<p>Freckle is a web-based SaaS for time tracking and invoicing. We built it based on the pain we experienced as consultants using time tracking software (ugly, clunky, lots of configuration, can’t track unbillable work, etc.) and wanted something that’s friendly, requires zero upfront configuration, is forgiving and fast and stays out of your way when you don’t need it. We’re definitely <em>not</em> passionate about time tracking (if anyone tells you they are, they are lying). We’re passionate about making our customers more awesome, by giving them a tool that helps them make more money and live better lives.</p>

<p><a href="http://letsfreckle.com"><img width="246" height="239" src="/img/cases/freckle/hero2.png" alt=""/></a></p>

<p>Over the years it became clear that we needed to augment it with native apps, for both iOS (most of our customers have iPhones) and Macs (about 60% of our customers are on Macs!).</p>

<p>Freckle is a Rails app, and I’ve been a Rails user since before 1.0 was released (I also was a member of the Rails core team for quite a while back in the day). My open source library <a href="http://script.aculo.us">script.aculo.us</a>, together with Sam Stephenson’s <a href="http://prototypejs.org">Prototype.js</a> formed the backbone of early Ajax/Effects support on Rails.</p>

<p><strong>And the OS X version?</strong></p>

<p>Back to the present, when RubyMotion was released with support to create Mac OS X apps I knew that it would be the right to develop a Menubar Mac App for Freckle, which is something we wanted for a while but never got around to do it. I never could get myself to get into Objective C, and I don’t like working in an IDE either. Long story short, after just a few weeks and maybe 100 hours or so of work, we know have our app in the App Store and our users are loving it and giving it rave reviews. :)</p>

<p><strong>Were there any surprises going with the hybrid native-app / web UI approach?</strong></p>

<p>No biggies, just a few curious decisions in the design of Appkit’s APIs. The most annoying problem is the lack of proper APIs for NSStatusItems on multiple screens. As you might know, Mavericks added support to show the menubar on all attached screens, but they didn’t bother with adding APIs to enable menu items manually—it all magically works but only if the user actually uses the mouse and clicks on the item (Appkit figures out the screen and clones your status item’s window somehow). Because we provide a global keyboard shortcut (something only possible with the old Carbon APIs!), I spent quite some time figuring out how to properly show our app on the right screen, return to the current app when closing it, etc. That actually took up most of the development time.</p>

<p>I also was honestly surprised how buggy the WebView class is, especially with hardware-acellerated compositing. There’s a lot of issues with this especially on Mountain Lion, whereas Mavericks works pretty great. I can see why Yosemite will bring a completely new unified class to use WebKit in applications. This is great news for companies like us who primarily have a web-based app and want to ship great native apps to compliment it.</p>

<p><strong>What is your development cycle when you work on the RubyMotion app?</strong></p>

<p>I use <a href="http://www.sublimetext.com/3">SublimeText 3</a>, the Terminal, and <a href="http://kapeli.com/dash">Dash</a>, there’s not much more to it. :) We did have a beta test phase where we used HockeyApp, which worked great. The combination of RubyMotion and AppKit is very stable, we barely had any crashes that we had to debug. One interesting crash is happening on Yosemite, I’m still investigating that… joy! ;)  I keep several older Macs around as we support 10.7 and up.</p>

<p><strong>How did you find resources to help you build your first Mac app?</strong></p>

<p>A lot of the online resources for Objective-C programming, especially fixing issues with API bugs and omissions are unfortunately pretty crappy (for example on StackOverflow). More Mac and iOS programmers should blog! It’s easy to translate Objective-C example code to RubyMotion (usually shedding 80% of superfluous code in the process) and to adapt code examples from Apple. Apple’s docs are pretty great and normally API calls map to RubyMotion in a straight-forward fashion.</p>

<p>So, please blog more, people! I plan to do a write up of the internals and structure of our menubar app once I get a chance!</p>

<p><strong>Are there any tools or abilities that you would like to see added to RubyMotion</strong></p>

<p>I’d love to see some code analysis tools that warn me about API incompatibilities and things that could be problematic in the App Store. I wouldn’t say no to CodeClimate support!</p>

<p><strong>If you build another app, will you write it in Obj-C, RubyMotion, or Swift, and what influences that decision?</strong></p>

<p>While I like the direction Apple is taking with Swift, it’s not a real replacement for Ruby, which I love. We’re actually working on another application using RubyMotion, a 2.0 of our iPhone app (the current one is just a Cordova wrapper around our mobile website, which works but could be so much better). We’re going a full-hybrid approach, with native navigation but web content, similar to the Basecamp app. I hope to launch that some time this summer!</p>
]]></content:encoded>
      <dc:date>2015-01-16T12:06:16+01:00</dc:date>
    </item>
    <item>
      <title>Announcing Rubymotion 3</title>
      <link>http://www.rubymotion.com/news/2014/12/11/announcing-rubymotion-3.html</link>
      <description><![CDATA[We recently just turned 3 years old, and today we are excited to announce the immediate availability of RubyMotion 3! We worked a lot on this release and we hope you will enjoy it. Let's dive in!

]]></description>
      <pubDate>Thu, 11 Dec 2014 05:26:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2014/12/11/announcing-rubymotion-3.html</guid>
      <content:encoded><![CDATA[<p>We recently just turned 3 years old, and today we are excited to announce the immediate availability of RubyMotion 3! We worked a lot on this release and we hope you will enjoy it. Let's dive in!</p>

<h3>Android Platform</h3>

<p>The RubyMotion Android support that we released in public beta a few weeks ago has been integrated into the stable release.</p>

<img src="/news/img/rm_plus_android.png"/>

<p>If you have been following our pre-release channel you might have seen that we have been doing several updates and following several customers using it. We now believe that the support is good enough to be used by everyone, and we woulc like to encourage that.</p>

<p>As of RubyMotion 3, we support all versions of Android, up to the latest one (5.0 Lollipop). You can call into the entire set of Java APIs for these platforms, and you can also integrate 3rd-party Java libraries.</p>

<p>The interactive console that you know and love from iOS is available when running in the emulator and in the device.</p>

<p>A debugger interface, based on <code>ndk-gdb</code>, is available. You can simply pass the <code>debug=1</code> argument to the <code>rake emulator</code> or <code>rake device</code> tasks. You can set breakpoints, inspect backtraces, variables, and more. This is possile since our compiler generates proper DWARF metadata for your Ruby code.</p>

<pre class="highlight">
$ rake device debug=1
...
(gdb) break main_activity.rb:16
Breakpoint 1 at 0x5ec294d0: file main_activity.rb, line 16.
(gdb) continue
...
</pre>

<p>Finally, a spec framework is available. This is the exact same framework used in iOS and OS X projects, so you should feel at home. Specs can run on both the emulator and the device, using the respective <code>rake spec:emulator</code> and <code>rake spec:device</code> tasks.</p>

<pre class="highlight">
$ cat spec/main_spec.rb 
describe "Main activity" do
  it "has a title" do
    main_activity.title.should == "Hello"
  end
end

$ rake spec:device
...
I/com/yourcompany/hello( 2024): Main activity
I/com/yourcompany/hello( 2024):   - has a title
I/com/yourcompany/hello( 2024): 1 specifications (1 requirements), 0 failures, 0 errors
</pre>

<p>
  For more information about the Android support in RubyMotion, check out the following guides:
  <ul>
    <li><a href="/developers/guides/manuals/android/getting-started">Getting started</a></li>
    <li><a href="/developers/guides/manuals/android/runtime">Runtime</a></li>
    <li><a href="/developers/guides/manuals/android/project-management">Project management</a></li>
    <li><a href="/developers/guides/manuals/android/debugging">Debugging</a></li>
    <li><a href="/developers/guides/manuals/android/testing">Testing</a></li>
  </ul>
</p>

<p>As a side note, now that Android support is in the stable release we recommend that you update your RubyMotion Android projects to point to <em>/Library/RubyMotion/lib</em> (and not <em>/Library/RubyMotionPre/lib</em>).</p>

<h3>WatchKit Apps</h3>

<p>As of 3.0 RubyMotion lets you write Apple Watch apps in Ruby using <a href="https://developer.apple.com/watchkit/">WatchKit</a>.</p>

<img src="/news/img/watchkit-ruby.png"/>

<p>A WatchKit app is linked to an existing iOS app, as an extension. To create a WatchKit app in RubyMotion, you will first need to install the latest build of Xcode 6.2, which comes with iOS 8.2 Beta. Then, simply use the <code>ios-watch-extension</code> template inside an existing iOS project.</p>

<pre class="highlight">
$ motion create --template=ios MyHostApp
$ cd MyHostApp
$ motion create --template=ios-watch-extension MyWatchApp
</pre>

<p>Then, configure the project's <em>Rakefile</em> to include the WatchKit extension:</p>

<pre class="highlight">
Motion::Project::App.setup do |app|
  ...
  app.target "./MyWatchApp", :extension
end
</pre>

<p>Finally, you can run the watch app in the simulator:</p>

<pre class="highlight">
$ rake watch
</pre>

<p>WatchKit support is still in development and will be improved in future updates. For more information about WatchKit, make sure to read <a href="https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/WatchKitProgrammingGuide/">Apple's WatchKit Programming Guide</a>.</p>

<p>Finally, there has been several recent important changes that we didn't cover in our blog.</p>

<h3>iOS 8 Extensions</h3>

<p>iOS 8 introduces extensions, which let apps extend their functionality and become available to users while they are using other apps.</p>

<p>
  RubyMotion lets you create iOS 8 extensions through a myriad of templates:
  <ul>
    <li>ios-action-extension</li>
    <li>ios-custom-keyboard</li>
    <li>ios-document-picker</li>
    <li>ios-file-provider</li>
    <li>ios-photo-editing</li>
    <li>ios-share-extension</li>
    <li>ios-today-extension</li>
    <li>ios-watch-extension</li>
  </ul>
</p>

<p>For more details, check out the <a href="https://github.com/HipByte/RubyMotionSamples/tree/master/ios/ExtensionsAndFrameworks">ExtensionsAndFrameworks</a> project in our samples repository.</p>

<h3>iOS 64-bit</h3>

<p>As you might have heard, the iOS App Store will <a href="https://developer.apple.com/news/?id=10202014a">require apps to be compiled for 64-bit</a> before a submission in February 2015.</p>

<p>RubyMotion supports ARM 64-bit since some time. We recently improved the 64-bit support in both the compiler and the runtime, and as of RubyMotion 3.0, iOS apps will now compile for 64-bit by default.</p>

<p>If you enabled 64-bit in your project <em>Rakefile</em>, you can now safely remove that, since it will build for 64-bit.</p>

<h3>Application Size Reduction</h3>

<p>RubyMotion apps are statically compiled into machine code. If your project has a lot of Ruby files, this can lead to a pretty big binary at the end.</p>

<p>We have been working on reducing the code size of the object files that the compiler generates. In a recent update, the size of RubyMotion executables has been reduced from 30% to 60%, on average.</p>

<p>We are not done yet and we will keep improving the toolchain to generate apps that are as small as possible.</p>  
]]></content:encoded>
      <dc:date>2014-12-11T05:26:00+01:00</dc:date>
    </item>
    <item>
      <title>Announcing New Pricing Plans</title>
      <link>http://www.rubymotion.com/news/2014/12/11/announcing-new-pricing-plans.html</link>
      <description><![CDATA[We had the recent opportunity to talk to several customers about the pricing of RubyMotion. We quickly realized that it was impossible to satisfy the needs of all of our customers with just a single plan.

]]></description>
      <pubDate>Thu, 11 Dec 2014 05:26:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2014/12/11/announcing-new-pricing-plans.html</guid>
      <content:encoded><![CDATA[<p>We had the recent opportunity to talk to several customers about the pricing of RubyMotion. We quickly realized that it was impossible to satisfy the needs of all of our customers with just a single plan.</p>

<p>After a lot of thinking we decided to split our pricing model into three plans. We will go through them now then cover questions you might have at the end.</p>

<h3>Indie</h3>

<p><strong>Indie</strong> is our cheapest plan. It comes with support for all platforms, as well as full software updates. It is cheaper than our previous plan.</p>

<p>Indie customers can access the community forum, a public place where members of the RubyMotion community, including the engineers working on RubyMotion, help each other.</p> 

<h3>Professional</h3>

<p><strong>Professional</strong> is our medium-entry plan. It comes with support for all platforms, software updates, and access to our private ticket system.</p>

<p>Professional customers can contact us directly and privately with a support ticket. We usually reply within 3 business days, and often sooner.</p>

<h3>Enterprise</h3>

<p><strong>Enterprise</strong> is our high-entry plan. It comes with support for all platforms and software updates. Please contact us for a quote.</p>

<p>We provide 1-day reponse time to support enquiries from our Enterprise customers as well as hot fixes through a dedicated software update channel.</p>

<h3>FAQ</h3>

<h4>Platforms Support</h4>

<p>All plans come with support for iOS, Android and OS X. We believe that cross-platform mobile development is very important at this age and we don't want to segment the RubyMotion community.</p>

<h4>Existing Customers</h4>

<p>Existing RubyMotion customers will be moved to the <strong>Pro</strong> plan, and once their subscription expires, will have the opportunity to stay in <strong>Pro</strong> at the discounted rate for an additional year.</p>

<h4>Thank You!</h4>

<p>We would like to grab the chance to thank all of our awesome customers for their continued support. Without it we could not be a fully bootstrapped company.</p>
]]></content:encoded>
      <dc:date>2014-12-11T05:26:00+01:00</dc:date>
    </item>
    <item>
      <title>Rubymotion For Android And Renewals Pricing</title>
      <link>http://www.rubymotion.com/news/2014/09/25/rubymotion-for-android-and-renewals-pricing.html</link>
      <description><![CDATA[Since the introduction of the public beta of RubyMotion for Android last week there have been questions about the future pricing of RubyMotion, and rightfully so. This post will address this in as simple and open a way as possible.

]]></description>
      <pubDate>Thu, 25 Sep 2014 06:26:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2014/09/25/rubymotion-for-android-and-renewals-pricing.html</guid>
      <content:encoded><![CDATA[<p>Since the introduction of the <a href="http://blog.rubymotion.com/2014/09/16/announcing-the-public-beta-of-rubymotion-for.html-android">public beta of RubyMotion for Android</a> last week there have been questions about the future pricing of RubyMotion, and rightfully so. This post will address this in as simple and open a way as possible.</p>

<p><strong>RubyMotion for Android</strong></p>

<p>After long deliberation, the team decided that RubyMotion should be a <em>single</em> product that supports iOS, OS X, and now Android as well. It is our belief that the vast majority of mobile developers have to (or would like to) target both iOS <em>and</em> Android. Therefore it makes more sense to us to provide support for <em>all</em> platforms in a single package over selling multiple separate packages.</p>

<p>Thus, there will be <strong>no</strong> extra charge for the Android version of RubyMotion. Yes, you read that right, 0 extra euros, dollars, or even yen!</p>

<p>With just a one-click purchase, one will be able to write iOS, Android and Mac apps, all using the same toolchain, language and text editor.</p>

<p><strong>Updates and support renewal</strong></p>

<p>In the past, RubyMotion has been a one-time purchase that came with one year of updates &amp; support and it was possible to renew the updates &amp; support at half the price of the full license. However, with several thousand customers, the math makes it so that this is no longer sustainable over the long term.</p>

<p>For one thing, we have been answering many support questions concerning more than just the RubyMotion toolchain. We take pride in being able to do this because we care about our customers, and we want everyone&#8217;s experience building RubyMotion apps to be a good one. As a nice side-effect, this has allowed us to respond to your needs by putting out regular monthly software updates that improve the total experience for all our customers. We believe it is in everyone&#8217;s best interest to keep doing this, but the fact is that we are now increasing our workload by a factor of 2 with the addition of the Android platform.</p>

<p>Therefore, RubyMotion license renewals will now be priced at the same price as a new licenses. This will help us better scale our organization for the development, maintenance, and our support of RubyMotion for everyone going forward into this new bright future.</p>

<p>To summarize, annual charges will be set at $199,-. That&#8217;s only $16.50 a month. We personally spend more than that on coffee ;)</p>

<p>Thank you all for your continued support! Without it we could not be a fully bootstrapped company, free of investors saying what we should do over what we think is important for you, our customers.</p>
]]></content:encoded>
      <dc:date>2014-09-25T06:26:00+02:00</dc:date>
    </item>
    <item>
      <title>Announcing The Public Beta Of Rubymotion For</title>
      <link>http://www.rubymotion.com/news/2014/09/16/announcing-the-public-beta-of-rubymotion-for.html</link>
      <description><![CDATA[We are super excited to announce that RubyMotion for Android is now available in public beta.

]]></description>
      <pubDate>Tue, 16 Sep 2014 15:36:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2014/09/16/announcing-the-public-beta-of-rubymotion-for.html</guid>
      <content:encoded><![CDATA[<p>We are super excited to announce that RubyMotion for Android is now available in public beta.</p>

<p><img src="https://31.media.tumblr.com/633ccddc84dd02c51e23a2203b47a81f/tumblr_inline_nc1m66QvT11roo9mt.png" alt=""/></p>

<p>Since its introduction in May, during our annual developer conference in San Francisco, we have been working extremely hard on RubyMotion for Android, with the goal that it should be usable by early adopters.</p>

<p>While functional and relatively stable, RubyMotion for Android is still not ready for prime time yet. However, we do believe that it can be used by seasoned developers and we hope that we will receive enough feedback to polish the product enough that it can be used by everyone.</p>

<p><strong>Availability</strong></p>

<p>The RubyMotion for Android public beta is <em>free</em> for all customers.</p>

<p><strong>Getting started</strong></p>

<p>After applying the latest software update, you can install the beta by using the following command:</p>

<pre class="highlight">
$ sudo motion update          # make sure you have the latest update
$ sudo motion update --pre    # install the pre-release beta
</pre>

<p>Please follow the <a href="http://www.rubymotion.com/developer-center/guides/getting-started/">Getting Started</a> guide for more information on how to set up a proper Android development environment.</p>

<p><strong>Features</strong></p>

<p>RubyMotion supports the following versions of Android: 1.5, 1.6, 2.1, 2.2, 2.3, 3.0, 3.1, 3.2, 4.0, 4.1, 4.2, 4.3, 4.4 and L (latest).</p>

<p>RubyMotion for Android apps are statically compiled into ARM machine code using our ahead-of-time (AOT) compiler. Both armv5te and armv7 architectures are supported by the compiler.</p>

<p>The RubyMotion for Android runtime features a brand-new implementation of Ruby, based on Java. You get to call into the entire set of Java APIs. Check out the <a href="http://www.rubymotion.com/developer-center/guides/runtime/">Runtime</a> guide for more information. Both Dalvik and ART runtimes are supported.</p>

<p><img src="https://31.media.tumblr.com/51580f369e81085f8ed3872f37df19c5/tumblr_inline_nc1mv3pvBR1roo9mt.png" alt=""/></p>

<p>The command-line interface features a REPL (interactive console) that works on both the Android emulator and a USB-connected device. This works by doing remote JIT compilations from the Mac to ARM.</p>

<p>RubyMotion for Android apps can also vendor third-party Java libraries (jar files) and can be submitted to the Google Play store.</p>

<p>Make sure to check out the <a href="https://github.com/HipByte/RubyMotionSamples/tree/master/android">Android samples</a> from our repository.</p>

<p>Our friends at <a href="https://motioninmotion.tv/">MotionInMotion</a> are working on RubyMotion for Android screencasts. Stay tuned!</p>

<p><strong>Future work</strong></p>

<p>Here are the things we will be doing in the soon future:</p>

<ul><li>Performance work; at this stage all optimizations are disabled and a lot of logging is going on (for debugging purposes). Don&#8217;t try to benchmark it.</li>
<li>The runtime is still missing a lot of builtin Ruby classes and methods.</li>
<li>A Mac computer is required. Some of you guys have been asking for Linux support, if there is enough demand we might consider it.</li>
<li>We will provide builtin support for the other Android APIs (such as Android Wear, Android Car, etc.).</li>
</ul><p><strong>We need your help</strong></p>

<p>RubyMotion for Android is still a beta at this stage. Please give it a try and report bugs to us. Your help will be essential to help us make RubyMotion for Android ready for everyone. Also, please keep in mind that this is a beta, bugs are expected!</p>

<p>Enjoy!</p>
]]></content:encoded>
      <dc:date>2014-09-16T15:36:00+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Inspect 2014 Wrap Up</title>
      <link>http://www.rubymotion.com/news/2014/07/02/rubymotion-inspect-2014-wrap-up.html</link>
      <description><![CDATA[This year&#8217;s RubyMotion conference was immediately followed up with WWDC and then
Google I/O, so we&#8217;ve hardly had a chance to sit back and reflect on all the
exciting news that emerged from #inspect!

]]></description>
      <pubDate>Wed, 02 Jul 2014 07:29:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2014/07/02/rubymotion-inspect-2014-wrap-up.html</guid>
      <content:encoded><![CDATA[<p>This year&#8217;s RubyMotion conference was immediately followed up with WWDC and then
Google I/O, so we&#8217;ve hardly had a chance to sit back and reflect on all the
exciting news that emerged from #inspect!</p>

<p><img src="https://31.media.tumblr.com/a35c546ec884381863b9dd9ae496d0dd/tumblr_inline_n83383mVeL1roo9mt.png" alt=""/></p>

<p><br/></p>

<p><strong>The Fort Mason Center</strong></p>

<p>As much as we enjoyed cramming 150+ people into a tiny room last year, we
decided that maybe a little more leg room wouldn&#8217;t go unappreciated:</p>

<p>This year&#8217;s conference was at the historic <a href="http://www.fortmason.org">Fort Mason Center</a>, near Fisherman&#8217;s
Wharf.  If you need to plan an event in San Francisco, put this one on your
radar.  The view of the marina and Golden Gate Bridge was a very pleasant back
drop.</p>

<p><img src="https://31.media.tumblr.com/d1dfaeb14a4eef094f6f2fded08b009d/tumblr_inline_n8332dLdK21roo9mt.jpg" alt=""/></p>

<p><img src="https://31.media.tumblr.com/bf55e09c7a1caf736a4916a8842b5b24/tumblr_inline_n8332pt68t1roo9mt.jpg" alt=""/></p>

<p><strong>Food and Libations</strong></p>

<p>This year&#8217;s catering was amazing, in keeping with the traditions set at #inspect
2013.  We should all take a moment to thank Todd Werth and Ken Miller from
<a href="http://infinitered.com/">InfiniteRed</a> for organizing the catering, which was provided by <a href="http://www.localmissionmarket.com/">Local Mission Market</a>.</p>

<p>For the after party we invited <a href="http://www.rogue.com">Rogue Brewery</a> to share five of their popular and
most delicious beers, and no one (yes, even Laurent) left disappointed.  Turns
out that tasty food and tasty beer go a long way towards a successful
conference!</p>

<p><strong>Knowledge was Dropped</strong></p>

<p>It&#8217;s fun to play with new gems, but you won&#8217;t get far if you don&#8217;t know what the
operating system is capable of.  This years&#8217; speakers had a ton of information
to share with us.</p>

<p><a href="http://www.mohawkapps.com">Mark Rickert</a> has been sharing great marketing tips in the <a href="http://rubymotiondispatch.com">RubyMotion Dispatch</a>.
He had even more advice for us, including some of his own successes for context.
Wearing the marketing hat doesn&#8217;t need to be painful, and it&#8217;s essential for the
success of your apps. (<a href="http://www.slideshare.net/markrickert/rubymotion-inspect2014-marketing-your-apps">slides</a>, <a href="http://confreaks.com/videos/3819-inspect-i-wrote-a-rubymotion-app-now-what">video</a>)</p>

<iframe width="560" height="315" src="//www.youtube.com/embed/rWeBQEi6z8A" frameborder="0" allowfullscreen></iframe>

<p>We heard about the trials and tribulations of CoreData from <a href="http://book.coredatainmotion.com">Lori Olson</a>.  She
needed to import tens of thousands of records into her app, which it turns out
is no small task!  Core Data can handle it, but handling Core Data is another
matter. (<a href="http://www.slideshare.net/wndxlori/core-data-in-motion">slides</a>, <a href="http://confreaks.com/videos/3829-inspect-coredata-and-rubymotion">video</a>)</p>

<p>To help <em>wrangle</em> that behemoth of a library, Ken Miller created
<a href="https://github.com/infinitered/cdq">CoreDataQuery</a> and <a href="https://github.com/infinitered/ruby-xcdm">ruby-xcdm</a>.  It&#8217;s not just a DSL around CoreData, it
produces the <em>same</em> XML files that are created from Xcode&#8217;s GUI.  This means
that it has feature parity with the traditional Xcode tools, in particular
migrations are supported. (<a href="http://infinitered.com/2014/06/03/inspect-2014-cdq-slides/">slides</a>, <a href="http://confreaks.com/videos/3830-inspect-coredataquery-cdq-in-action">video</a>)</p>

<p><a href="https://twitter.com/FluffyJack">Jack Watson-Hamblin</a> creates the <a href="https://motioninmotion.tv">MotionInMotion</a> screencasts, and he has
some great advice for anyone who wants to learn and help: teach!  It&#8217;s never too
early or late to share what you have learned. (<a href="https://speakerdeck.com/fluffyjack/how-to-make-the-rubymotion-community-better-and-profit">slides</a>, <a href="http://www.confreaks.com/videos/3831-inspect-making-rubymotion-better-structure-gems-and-community">video</a>)</p>

<p>For anyone interested in game development, <a href="http://willrax.com">Will Raxworthy</a> showed us how
<em>incredibly easy</em> it is to build a game with SpriteKit and RubyMotion.  He built
the entire app before our eyes, with gravity and collision detection, all in a
simple to understand object-oriented framework. (<a href="https://speakerdeck.com/willrax/skfun">slides</a>, <a href="http://confreaks.com/videos/3835-inspect-skfun-spritekit-and-rubymotion">video</a>)</p>

<iframe width="560" height="315" src="//www.youtube.com/embed/bj1hJS1lGdU" frameborder="0" allowfullscreen></iframe>

<p><a href="https://twitter.com/kastiglione">Dave Lee</a> is a core contributor to the <a href="https://github.com/ReactiveCocoa">ReactiveCocoa</a> project, which is at the
same time powerful and <em>daunting</em>. Dave showed us what a RAC refactor looks
like, and how you can benefit from the reactive code style. (<a href="http://confreaks.com/videos/3877-inspect-reactive-rubymotion">video</a>)</p>

<p>On the more practical side of things, we watched <a href="https://twitter.com/en_Dal">Dennis Ushakov</a> demo the
RubyMotion features that are baked into RubyMine.  It&#8217;s not just for Rails!
Debugging, refactoring, and code-aware autocomplete are all available.
(<a href="http://confreaks.com/videos/3814-inspect-rubymotion-and-rubymine">video</a>)</p>

<p>There&#8217;s a ton of money to be made in the under-served enterprise arena, and
<a href="http://codefriar.com">Kevin Poorman</a> showed us just how easy it is to make apps that cater to that
community, using SalesForce as an example. (<a href="http://confreaks.com/videos/3837-inspect-connecting-rubymotion-to-enterprise-systems">video</a>)</p>

<p>When <a href="http://www.alexrothenberg.com">Alex Rothenberg</a> started developing in iOS he quickly realized that &#8220;Cocoa
is no Rails&#8221;.  It&#8217;s verbose, obtuse, and also verbose and verbose.  Something
had to be done, and Alex shared ideas about how Ruby paradigms can fit nicely in
Cocoa. (<a href="http://confreaks.com/videos/3832-inspect-don-t-let-the-cocoa-api-crush-your-ruby-code">video</a>)</p>

<p>We heard from <a href="http://www.ivanacostarubio.com">Ivan Acosta-Rubio</a> about his successes (and frustrations!) working
with (and wrestling with) the AVFoundation framework to produce images and
video.  Turns out it&#8217;s easy, once you understand the players.
(<a href="http://confreaks.com/videos/3839-inspect-intro-to-av-foundation">video</a>)</p>

<p>We had a TON of fun watching <a href="http://markvillacampa.com">Mark Villacampa</a> control a tiny robot from his
phone!  Mark discussed the various iOS-to-hardware communication options that
are available. (<a href="http://confreaks.com/videos/3836-inspect-connecting-rubymotion">video</a>)</p>

<p><img src="https://31.media.tumblr.com/18acee7e582d39932cc74bba2b8a9175/tumblr_inline_n833c5sGwT1roo9mt.jpg" alt=""/></p>

<p>Testing junkies were happily sated with <a href="http://imurchie.com">Isaac Murchie</a>'s demo of <a href="http://appium.io">Appium</a>.
It takes iOS testing into the cloud, making it much faster and thorough than
what you can accomplish with good ol&#8217; <code>rake spec</code>.
(<a href="http://www.slideshare.net/imurchie/appium-35243681">slides</a>, <a href="http://confreaks.com/videos/3828-inspect-testing-rubymotion-applications-using-appium">video</a>)</p>

<p>We also heard from three developers who are working on projects that are
experiencing the kind of problem we all hope for: Success!  We heard from Ryan
Romanchuk from <a href="http://frontback.me">Frontback</a>, Daniel Dickison from <a href="http://bandcamp.com">BandCamp</a>, and our own
Colin Gray from <a href="http://jukely.com">Jukely</a>.  With Gant Laborde asking questions (and fielding
questions from the audience), we discussed how we chose RubyMotion, how we test
our apps, and what we do to make sure we&#8217;re shipping solid applications.
(<a href="http://confreaks.com/videos/3818-inspect-rubymotion-in-production">video</a>)</p>

<p><strong>Gems were shared</strong></p>

<p>What a productive year it&#8217;s been for the RubyMotion community!  I don&#8217;t have the
space here to gush over all the gems and features that were featured or released
at #inspect, but here are some that stand out:</p>

<p><a href="http://clayallsopp.com">Clay Allsopp</a> demoed some of the build tools have been created at <a href="http://usepropeller.com">Propeller</a>.
Everything from automated screenshot testing (with diffs!) to command-line based
deployment tools. From start to deploy, you never have to leave the terminal!
Learn about them all at Propeller&#8217;s github organization: <a href="https://github.com/usepropeller">https://github.com/usepropeller</a>
(<a href="https://speakerdeck.com/clayallsopp/building-a-tool-to-build-apps">slides</a>, <a href="http://confreaks.com/videos/3833-inspect-building-apps-that-builds-apps">video</a>)</p>

<iframe width="560" height="315" src="//www.youtube.com/embed/jvs0WF_f0ls" frameborder="0" allowfullscreen></iframe>

<p>From Todd Werth at <a href="http://infinitered.com/">InfiniteRed</a>, the <a href="https://github.com/infinitered/rmq">RMQ library</a> has been expanded to
include a wealth of REPL tools, a grid-based layout engine, and a documentation
website that puts the rest of the WORLD&#8217;S to shame: <a href="http://rubymotionquery.com">http://rubymotionquery.com</a>
(<a href="http://infinitered.com/2014/05/30/inspect-2014-rmq-slides/">slides</a>, <a href="http://confreaks.com/videos/3816-inspect-rubymotionquery-rmq-in-action">video</a>)</p>

<p><a href="http://clearsightstudio.com">Jamon Holmgren</a> has big plans for the 2.0 release of <a href="https://github.com/clearsightstudio/ProMotion">ProMotion</a>: more screens, a modular design, and he hinted at possible Android support! (<a href="https://speakerdeck.com/jamonholmgren/going-pro-from-prototype-to-production-with-promotion">slides</a>, <a href="http://confreaks.com/videos/3813-inspect-going-pro-with-promotion-from-prototype-to-production">video</a>)</p>

<p><a href="http://colinta.com">Colin Gray</a> and Jamon Holmgren have been working on a new layout tool to replace
Teacup called <a href="https://github.com/motion-kit">MotionKit</a>. Its goal is to encourage lighter controllers by
moving layout, styling, and animation code into a new class: the Layout.  The
end result?
(<a href="http://www.slideshare.net/colinta/kill-the-controllers-and-an-introduction-to-motionkit">slides</a>, <a href="http://confreaks.com/videos/3827-inspect-kill-the-controllers">video</a>)</p>

<p>At last year&#8217;s #inspect someone asked <a href="http://austinseraphin.com">Austin Seraphin</a> if &#8220;automated
accessibility testing&#8221; would be possible&#8230; this year it was announced!  The
<a href="https://github.com/austinseraphin/motion-accessibility">motion-accessibility</a> gem has seen huge updates over the course of a year. A
REPL-based browser, automated testing for your specs, and of course a light,
terse DSL that makes it easy to update your app with accessibility in mind.
(<a href="http://confreaks.com/videos/3834-inspect-rubymotion-and-accessibility">video</a>, <a href="http://blog.austinseraphin.com/2014/06/09/inspect-2014/">article</a>)</p>

<p>And joining us from Australia via Skype, <a href="https://twitter.com/nemshilov">Nikolay Nimshelov</a> gave a demo of
his awe-inspiring gem <a href="http://under-os.com">UnderOS</a>, which brings HTML, CSS, and web paradigms to
iOS. It&#8217;s really remarkable! (<a href="http://confreaks.com/videos/3838-inspect-underos-native-ios-for-web-developers">video</a>)</p>

<p><strong>RubyMotion is FAST</strong></p>

<p>When we need to defend our claim that &#8220;RubyMotion is Fast&#8221;, we should thank the
long-time MacRuby and RubyMotion developer Shizuo Fujita (aka Watson).  Watson
optimizes every aspect of the RubyMotion compiler and runtime so that our apps
run just as fast as their Objective-C brethren.  RubyMotion 3.0 has a ton of
performance increases thanks to his work.  He shared the improvements he&#8217;s been
working on, including some benchmarking tools that we can all use to improve
our own code: <a href="https://github.com/Watson1978/motion-benchmark">motion-benchmark</a> and <a href="https://github.com/Watson1978/motion-benchmark-ips">motion-benchmark-ips</a>.</p>

<p><strong>The runner up to the big announcement</strong></p>

<p>We&#8217;re all really excited for the &#8220;big announcement&#8221; this year, but standing tall
and proud in the shadow of that announcement is Eloy Duran&#8217;s new <strong>code-reloading</strong>
tool that had everyone&#8217;s jaw resting firmly on the floor. A save, a quick code
compile, and your updated code is <em>injected</em> into your app while it is still
running in the simulator. Eloy showed us how this feature decreases the time it
takes to style views and try new features. This is going to drastically change
the face of RubyMotion development in iOS.</p>

<p><strong>The big one</strong></p>

<p><img src="https://31.media.tumblr.com/b9470c80092cd537e8fed9017c58d335/tumblr_inline_n8333v710n1roo9mt.jpg" alt=""/></p>

<p>The internet was all a-buzz about this year&#8217;s big announcement: <strong>Android support
is coming to RubyMotion</strong>. It has everything we already enjoy in iOS and OS X:</p>

<ul><li>Compiles to native code, no bridging involved</li>
<li>Native Ruby classes extend existing Java classes</li>
<li>Terminal-based workflow</li>
<li>Rakefile-based project configuration</li>
<li>And best of all: the RubyMotion community ;-)</li>
</ul><p>Laurent demoed some apps that he&#8217;s written that are already running.  They
launched immediately and ran smoothly.  As promised, they have the same
performance characteristics as an app written in Java.  Those sample apps are
available in the <a href="https://github.com/HipByte/RubyMotionSamples/tree/master/android">HipByte&#8217;s github organization</a>.</p>

<p>The entire <a href="http://confreaks.com/videos/3812-inspect-rubymotion-state-of-the-union">State of the Union talk</a>, with Watson, Eloy, and
Laurent is available to watch online.</p>

<iframe width="560" height="315" src="//www.youtube.com/embed/28WqGMNddFk" frameborder="0" allowfullscreen></iframe>

<p><strong>Summary</strong></p>

<p>Last year was all about affirming that RubyMotion isn&#8217;t just some toy that
Rubyists like to play with, it&#8217;s a development tool that is powering complex
consumer apps.  This year showed that not only has that trend continued, but
it&#8217;s grown at an accelerated rate!  We&#8217;re more productive and having more fun
than ever.</p>

<p>We&#8217;re entering the Android arena at a ripe time for the platform: Android L is a
huge step forward in design, and all the new Android platforms (TV, auto,
wearables) are all supported in RubyMotion.</p>

<p>This year is going to be a great year for Android and cross-platform gems!
We&#8217;re very excited to see what you come up with!  See you all at #inspect 2015!</p>

<p><img src="https://31.media.tumblr.com/64211b67d058e1d74947f587019fbfc1/tumblr_inline_n833gdoQHq1roo9mt.jpg" alt=""/></p>
]]></content:encoded>
      <dc:date>2014-07-02T07:29:00+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion 3 0 Sneak Peek Android Support</title>
      <link>http://www.rubymotion.com/news/2014/05/27/rubymotion-3-0-sneak-peek-android-support.html</link>
      <description><![CDATA[It&#8217;s very sunny here in San Francisco, California, and we are super excited to give you a first sneak peek at the next major version of RubyMotion, numbered 3.0, which will be released later this year!

]]></description>
      <pubDate>Tue, 27 May 2014 19:56:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2014/05/27/rubymotion-3-0-sneak-peek-android-support.html</guid>
      <content:encoded><![CDATA[<p>It&#8217;s very sunny here in San Francisco, California, and we are super excited to give you a first sneak peek at the next major version of RubyMotion, numbered 3.0, which will be released later this year!</p>

<p><strong>Android Support</strong></p>

<p>RubyMotion 3.0 features support for a new mobile platform: <a href="http://www.android.com/">Android</a>. You can now write full-fledged Android apps in Ruby instead of Java. If you have a RubyMotion app for iOS or OS X and want to port it to Android, you can even share some of the code! One language, three platforms.</p>

<p><img src="https://31.media.tumblr.com/293faf01c03fc42566080a581399e599/tumblr_inline_n69rv0nslK1roo9mt.png" alt=""/></p>

<p>RubyMotion Android projects are created and managed exactly the same way as RubyMotion iOS and OS X projects. The <tt>&#8212;template=android</tt> argument can be passed to <tt>motion create</tt> to create a new Android project.</p>

<pre class="highlight">
$ motion create --template=android Hello
    Create Hello
    Create Hello/.gitignore
    Create Hello/app/main_activity.rb
    Create Hello/Rakefile
    Create Hello/resources
    Create Hello/assets
$ cd Hello
$ rake
</pre>

<p>The entire project configuration lives in the Rakefile. RubyMotion for Android features a build system driven by Rake tasks, similar to what we already do for the other platforms. You can build and run apps in the Android emulator (<tt>rake emulator</tt>), on your USB-connected Android device (<tt>rake device</tt>), and prepare and sign builds suitable for a Google Play submission (<tt>rake release</tt>).</p>

<p>The <a href="http://developer.android.com/guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a> file (similar to iOS&#8217; Info.plist file) is also generated based on the values in the Rakefile.</p>

<p>You can keep using your favorite editor when working on an Android project in RubyMotion: Eclipse is not required nor used in any part of the process. In addition, ctags-based editors will have auto-completion for Java APIs.</p>

<p>Android projects can also vendor 3rd-party Java libraries, similar to how iOS and OS X projects can vendor 3rd-party Objective-C libraries. If you need a <a href="http://developer.android.com/reference/com/google/android/gms/maps/MapView.html">MapView</a> in your app, integrating the Google Play Services library is just one <tt>app.vendor_project</tt> call away.</p>

<p>In a RubyMotion Android projects, raw resource files can be added to the <tt>assets</tt> directory, while special <a href="http://developer.android.com/guide/topics/resources/index.html">application-level resources</a> can exist in the <tt>resources</tt> directory. The build system will make sure these are properly packaged and identifiable via the <tt>R</tt> class.</p>

<p><strong>Runtime</strong></p>

<p>RubyMotion for Android features a completely new Ruby runtime specifically designed and implemented for Android development. This is a new implementation of the Ruby language, it does not share code with RubyMotion for the Objective-C runtime. We are using the <a href="http://rubyspec.org/">RubySpec</a> project to make sure the runtime behaves as expected.</p>

<pre class="highlight">
class MainActivity &lt; Android::App::Activity
  def onCreate(savedInstanceState)
    super

    text = Android::Widget::TextView.new(self)
    text.text = 'Hello World!'
    self.contentView = text
  end
end
</pre>

<p>The object model of RubyMotion for Android is based on Java. Ruby classes, objects, methods and exceptions are Java classes, objects, methods and exceptions, and vice-versa. No bridge is involved.</p>

<p><img src="https://31.media.tumblr.com/51580f369e81085f8ed3872f37df19c5/tumblr_inline_n69qacCTXg1roo9mt.png" alt=""/></p>

<p>The Ruby builtin classes are also based on core Java classes:</p>

<ul><li>Fixnum is based on <a href="http://developer.android.com/reference/java/lang/Integer.html">java.lang.Integer</a></li>
<li>Float is based on <a href="http://developer.android.com/reference/java/lang/Float.html">java.lang.Float</a></li>
<li>String is based on <a href="http://developer.android.com/reference/java/lang/CharSequence.html">java.lang.CharSequence</a></li>
<li>Array is based on <a href="http://developer.android.com/reference/java/util/ArrayList.html">java.util.ArrayList</a></li>
<li>Hash is based on <a href="http://developer.android.com/reference/java/util/HashMap.html">java.util.HashMap</a></li>
<li>Regexp is based on <a href="http://developer.android.com/reference/java/util/regex/Pattern.html">java.util.regex.Pattern</a></li>
<li>Thread is based on based on <a href="http://developer.android.com/reference/java/lang/Thread.html">java.lang.Thread</a></li>
<li>etc.</li>
</ul><p>This unified runtime approach provides an excellent integration with Java APIs as well as good performance, since objects do not have to be bridged. The runtime uses the Java Native Interface (JNI) in order to integrate with Java, and <a href="http://developer.android.com/reference/packages.html">the entire set of Android APIs</a> is available in Ruby, out of the box.</p>

<p>The memory management is delegated to Dalvik&#8217;s generational and concurrent garbage collector. The runtime creates and destroys global references when needed (such as when an instance variable is set), and the destruction of local references is determined at compile time.</p>

<p>The garbage collector is very efficient; it features a per-thread allocation pool for fast allocations, finalizations can happen on dedicated threads, and cycles are properly handled.</p>

<p><strong>Compiler</strong></p>

<p>RubyMotion Android apps are fully compiled into optimized machine code, exactly like their iOS and OS X counterparts.</p>

<p>We feature an LLVM-based static compiler that will transform Ruby source files into ARM machine code. The generated machine code contains functions that conform to JNI so that they can be inserted into the Java runtime as is.</p>

<p>Since Android does not allow classes to be created at runtime, the compiler will emit <a href="http://source.android.com/devices/tech/dalvik/dex-format.html">DEX byte-code</a> for class interfaces, but mark all methods as defined in native code.</p>

<p>The compiler also emits DWARF metadata, which lets us properly symbolicate exceptions, and also allows us to set source-level breakpoints when attaching a debugger.</p>

<p>The build system links all object files with the RubyMotion runtime in order to create an <a href="https://developer.android.com/tools/sdk/ndk/index.html">NDK</a> shared library.</p>

<p><a href="http://null"></a><img src="https://31.media.tumblr.com/b22617ccb3c5c76c6e38aacdb9b843db/tumblr_inline_n69r6eLGaz1roo9mt.png" alt=""/></p>

<p>RubyMotion Android apps are packaged as <a href="http://en.wikipedia.org/wiki/APK_(file_format)">.apk</a> archives, exactly like Java-written apps. They weight about 500KB by default and start as fast as Java-written apps. All Android API levels are supported.</p>

<p><strong>Samples</strong></p>

<p>We are extremely excited about RubyMotion for Android. We can finally use the same language to develop an application for multiple platforms, and even if platform-specific code (ex. user interface) will have to be written, we do believe that a significant part of the app, such as the backend, can be shared.</p>

<p>We spent the last days working on <a href="https://github.com/HipByte/RubyMotionSamples/tree/master/android">sample code apps</a>.</p>

<p>We also created an application for our conference, which has been submitted and is available in the Google Play store. If you have an Android device, <a href="https://play.google.com/store/apps/details?id=com.hipbyte.inspect2014">check it out!</a> The source code will be published on GitHub right after the conference.</p>

<p><a href="https://play.google.com/store/apps/details?id=com.hipbyte.inspect2014"><img src="https://31.media.tumblr.com/0483be565c2fe4775d2637e29ed10c44/tumblr_inline_n69ut9tAPh1roo9mt.png" alt=""/></a></p>

<p><strong>We Need Your Help</strong></p>

<p>RubyMotion 3.0 is not ready for prime-time yet. We are working hard on improving and polishing it so that it can be delivered to everyone.</p>

<p>The reason we are giving you a sneak peek today is because we can&#8217;t achieve that without you. RubyMotion for Android features a brand-new implementation of Ruby that will require significant testing before it can be as mature as the existing RubyMotion platforms support.</p>

<p>We are looking for volunteers interested in accessing early builds of RubyMotion 3.0, testing the new features and giving us continuous feedback so that we can quickly iterate.</p>

<p>Are you the author of a RubyMotion gem that you think would make sense to exist for Android? Do you have an app in the App Store that you would like to port and submit to the Google Play Store? Are you willing to test early builds of RubyMotion for Android, report bugs and work with us? We need your help.</p>

<p>If you are interested, please <a href="https://docs.google.com/forms/d/1tZq0pZ3O6AyShwcPUDWuPz6BtO8dnc-2hPdngCg_7Pc/viewform?fbzx=-1169792881341191039">fill out this form</a>. We will only approve a small amount of developers for the beta, and we will start seeding the first builds in early July. Thanks a lot!</p>
]]></content:encoded>
      <dc:date>2014-05-27T19:56:00+02:00</dc:date>
    </item>
    <item>
      <title>New In Rubymotion Bigdecimal Better Localization</title>
      <link>http://www.rubymotion.com/news/2014/05/21/new-in-rubymotion-bigdecimal-better-localization.html</link>
      <description><![CDATA[The last RubyMotion releases introduced a couple high-level changes that we would like to cover, before we get to start our second developer conference, next week!

]]></description>
      <pubDate>Wed, 21 May 2014 07:32:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2014/05/21/new-in-rubymotion-bigdecimal-better-localization.html</guid>
      <content:encoded><![CDATA[<p>The last RubyMotion releases introduced a couple high-level changes that we would like to cover, before we get to start our second <a href="http://rubymotion.com/conference">developer conference</a>, next week!</p>

<p><strong>BigDecimal</strong></p>

<p>As of RubyMotion 2.28, the BigDecimal class is introduced, based on top of Cocoa&#8217;s <a href="https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/classes/nsdecimalnumber_class/reference/reference.html">NSDecimalNumber</a> class.</p>

<p>It implements all of <a href="http://www.ruby-doc.org/stdlib-1.9.3/libdoc/bigdecimal/rdoc/BigDecimal.html">CRuby&#8217;s BigDecimal</a> operator methods, and can be passed to Objective-C APIs that expect arguments as NSDecimalNumber objects, NSDecimal structures, or pointers to NSDecimal structures.</p>

<p>NSDecimalNumber objects are therefore not converted to Float objects anymore, and remain intact when passed to and retrieved from Objective-C APIs.</p>

<p>In case your application requires high-precision representations for floating point objects, we recommend using BigDecimal instead of Float.</p>

<pre class="highlight">
(main)&gt; x = BigDecimal.new('0.123456789')
=&gt; 0.123456789
(main)&gt; x + 1
=&gt; 1.123456789
</pre>

<p><strong>Better Localization</strong></p>

<p>The build system has been improved to detect and properly compile <a href="https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/LoadingResources/Strings/Strings.html">strings resource files</a> into the application bundle. This patch was contributed by <a href="https://twitter.com/hboon">Hwee-Boon Yar</a>.</p>

<p>Additionally, the <a href="https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/macro/NSLocalizedString">NSLocalizedString</a>() API and its variants, NSLocalizedStringFromTable(), NSLocalizedStringFromTableInBundle() and NSLocalizedStringWithDefaultValue(), have been added as methods of the Kernel module. Previously they were not available as they are C-level preprocessor macros, and one had to call the NSBundle Objective-C API directly.</p>

<p>String resource files are usually used to localize an application, by providing the translations of user interface strings. A resource file per localization is the norm.</p>
]]></content:encoded>
      <dc:date>2014-05-21T07:32:00+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Inspect 2014 Last Speakers Panel</title>
      <link>http://www.rubymotion.com/news/2014/04/21/rubymotion-inspect-2014-last-speakers-panel.html</link>
      <description><![CDATA[In about a month we will be launching our second annual developer conference, #inspect, the 28th and 29th May in sunny San Francisco, California.

]]></description>
      <pubDate>Mon, 21 Apr 2014 06:48:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2014/04/21/rubymotion-inspect-2014-last-speakers-panel.html</guid>
      <content:encoded><![CDATA[<p>In about a month we will be launching our second annual developer conference, <a href="http://www.rubymotion.com/conference/2014/">#inspect</a>, the 28th and 29th May in sunny San Francisco, California.</p>

<p><br/></p>

<p><a href="http://www.rubymotion.com/conference/2014"><img src="https://31.media.tumblr.com/ce6ced95718b9f583cff62335a020a71/tumblr_inline_n411yfI5GC1roo9mt.png" alt=""/></a></p>

<p><br/></p>

<p>RubyMotion <a href="http://www.rubymotion.com/conference/2014/">#inspect 2014</a> will be a 2-day single track conference, 100% about RubyMotion. We picked an awesome venue, Fort Mason, a former US military post office which offers a scenic view of the famous Golden Gate Bridge.</p>

<p>We are obviously super excited about the conference. Make sure to <a href="https://ti.to/hipbyte/inspect2014">grab a ticket</a> when you can, we are selling those fast.</p>

<p><strong>Last Speakers</strong></p>

<p>We are now revealing the last 6 speakers, in addition to 16&#160;<a href="http://blog.rubymotion.com/2014/04/14/rubymotion-inspect-2014-announcing-more.html-speakers">already-announced</a> speakers:</p>

<ul><li><p><em><a href="https://twitter.com/codefriar">Kevin Poorman</a></em> is a software architect at West Monroe Partners and a certified <a href="http://www.force.com">Force.com</a> developer. He authored several RubyMotion apps, all tied to the Salesforce enterprise resource, and will talk about connecting RubyMotion to enterprise systems.</p></li>
<li><p><em><a href="https://twitter.com/AntiTyping">Andy Pliszka</a></em> works at Pivotal Labs on large iOS projects. He will talk about setting up RubyMotion for Test-Driven Development (TDD) and how to leverage test-first methodology when building RubyMotion projects.</p></li>
<li><p><em><a href="https://twitter.com/ivanacostarubio">Ivan Acosta-Rubio</a></em> writes iOS apps using RubyMotion at Software Criollo. In his talk, Ivan will introduce the AV-Foundation framework and how to capture media on iOS and OS X. Let&#8217;s write some spying tools!</p></li>
<li><p><em><a href="https://twitter.com/imurchie">Isaac Murchie</a></em> works at Sauce Labs and will talk about using tried-and-true Ruby tools, such as RSpec, Cucumber and Capybara, to automate the testing of RubyMotion projects with <a href="http://appium.io/">Appium</a>, in order to deliver robust mobile apps.</p></li>
<li><p><em><a href="https://twitter.com/paulcolton">Paul Colton</a></em> is the co-Founder and CEO of Pixate. Paul will review the <a href="http://www.freestyle.org">Freestyle</a> framework and how it can be used to style RubyMotion apps using just plain CSS.</p></li>
<li><p><em><a href="https://twitter.com/MarkVillacampa">Mark Villacampa</a></em> works for Cabify on their RubyMotion app and is also a hardware enthusiast, hacking 3D printers. Mark will talk about connecting RubyMotion to hardware, walk through all the available options, and giving recommendations for the folks interested to try at home.</p></li>
</ul><p>This ends our speakers selection for this year! If you submitted a proposal and didn&#8217;t get in we are truly sorry. We got a lot of proposals this year and it was tough to make the pick!</p>

<p><strong>Panel</strong></p>

<p>We will be organizing a panel dedicated to RubyMotion apps in production.</p>

<p>The panel will be composed of folks working on high-profile RubyMotion apps, such as <a href="http://blog.rubymotion.com/2013/11/22/rubymotion-success-story-bandcamp.html">Bandcamp</a>, <a href="http://blog.rubymotion.com/2013/03/07/rubymotion-success-story-jukely.html">Jukely</a>, <a href="http://blog.rubymotion.com/2014/04/08/rubymotion-success-story-a-dark-room.html">A Dark Room</a> (which is at the time of this writing, number one in the top-paid category of the US App Store!), and possibly <a href="http://blog.rubymotion.com/2013/09/18/rubymotion-success-story-frontback.html">Frontback</a> and <a href="http://blog.rubymotion.com/2014/02/10/rubymotion-success-story-jimdo.html">Jimdo</a>.</p>

<p>We will discuss their experience, common pitfalls when working on a high-profile RubyMotion app, then take questions from the audience.</p>

<p><strong>Schedule</strong></p>

<p>We published the <a href="http://www.rubymotion.com/conference/2014/#Schedule">schedule of the conference</a>. One keynote, 20 presentations, one panel. As you can see, it&#8217;s fully packed with awesomeness!</p>

<p>We still have tickets available, so if you want to join us, now is the time, <a href="https://ti.to/hipbyte/inspect2014">register today</a>!</p>
]]></content:encoded>
      <dc:date>2014-04-21T06:48:00+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Inspect 2014 Announcing More</title>
      <link>http://www.rubymotion.com/news/2014/04/14/rubymotion-inspect-2014-announcing-more.html</link>
      <description><![CDATA[In a bit more than a month, the 28th and 29th May, we will be launching our second annual developer conference, #inspect, this time in sunny San Francisco, California.

]]></description>
      <pubDate>Mon, 14 Apr 2014 11:35:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2014/04/14/rubymotion-inspect-2014-announcing-more.html</guid>
      <content:encoded><![CDATA[<p>In a bit more than a month, the 28th and 29th May, we will be launching our second annual developer conference, <a href="http://www.rubymotion.com/conference/2014/">#inspect</a>, this time in sunny San Francisco, California.</p>

<p><br/></p>

<p><a href="http://www.rubymotion.com/conference/2014"><img src="https://31.media.tumblr.com/ce6ced95718b9f583cff62335a020a71/tumblr_inline_n411yfI5GC1roo9mt.png" alt=""/></a></p>

<p><br/></p>

<p>RubyMotion <a href="http://www.rubymotion.com/conference/2014/">#inspect 2014</a> will be a 2-day single track conference, 100% about RubyMotion. We picked an awesome venue, Fort Mason, a former US military post office which offers a scenic view of the famous Golden Gate Bridge.</p>

<p>We are obviously super excited about the conference. Make sure to <a href="https://ti.to/hipbyte/inspect2014">grab a ticket</a> when you can, we are selling those fast.</p>

<p><strong>More Speakers</strong></p>

<p>We are happy to reveal four more awesome speakers, in addition to 12&#160;<a href="http://blog.rubymotion.com/2014/04/03/rubymotion-inspect-2014-first-batch-of-speakers.html">already-announced</a> speakers:</p>

<ul><li><p><em><a href="https://twitter.com/AlexRothenberg">Alex Rothenberg</a></em> is a software engineer at McKinsey and the author of the <a href="https://github.com/alexrothenberg/motion-addressbook">motion-addressbook</a> library. He will talk about simplifying the Cocoa APIs and making sure they do not crush your Ruby code.</p></li>
<li><p><em><a href="https://twitter.com/en_Dal">Dennis Ushakov</a></em>, a software engineer at JetBrains, will show off <a href="http://www.jetbrains.com/ruby/">RubyMine</a> and its excellent integration with the RubyMotion toolchain.</p></li>
<li><p><em><a href="https://twitter.com/nemshilov">Nikolay Nemshilov</a></em> is a senior software developer at Ninefold and also the author of <a href="http://under-os.com/">UnderOS</a> (or shortly, uOS), a project that aims to help web-developers to get into native iOS development by reusing knowledge and technologies they already know, which he will present.</p></li>
<li><p><em><a href="https://twitter.com/AustinSeraphin">Austin Seraphin</a></em> is a blind developer and an accessibility expert. Austin was a speaker at #inspect 2013 last year and delivered one of the <a href="http://vimeo.com/69529065">most acclaimed presentations</a>. Since then, he authored the <a href="https://github.com/austinseraphin/motion-accessibility">motion-accessibility</a> gem and will talk about how making RubyMotion apps accessible to the blind.</p></li>
</ul><p>We will be announcing the last batch of speakers soon. If you submitted a talk proposal, we will get back to you as soon as we can. Thanks for your patience!</p>

<p><strong>Student Tickets</strong></p>

<p>Due to the demand we will be offering a <strong>limited batch</strong> of tickets for students to the conference at a highly discounted price.</p>

<p>Students tickets are priced at $149 and require proof of enrollment. Please <a href="mailto:info@hipbyte.com">email us</a> in order to get one. We will update this post once the batch will be gone.</p>

<p><strong>Call for Sponsors</strong></p>

<p>We are still looking for a small number of sponsors to share in the support of #inspect 2014. This is a great opportunity to show your commitment to the RubyMotion community and also promote your products or services. If you or your company are interested <a href="mailto:info@hipbyte.com">get in touch</a>.</p>
]]></content:encoded>
      <dc:date>2014-04-14T11:35:00+02:00</dc:date>
    </item>
    <item>
      <title>A Dark Room</title>
      <link>http://www.rubymotion.com/references/success-stories/a-dark-room</link>
      <description><![CDATA[A Dark Room is a very popular text-based role-playing game. Originally web-based, Amir Rajan ported it to iOS using RubyMotion and very quickly it went viral, reaching the top-paid app position in the US and UK App Stores for several weeks, and now enjoying a five-star rating.
]]></description>
      <pubDate>Tue, 08 Apr 2014 18:36:36 +0200</pubDate>
      <guid>http://www.rubymotion.com/references/success-stories/a-dark-room</guid>
      <content:encoded><![CDATA[<div class="row_fluid block_spac_tb">
  <div class="col_7">
    <img src="/img/cases/a-dark-room/illu.png" class="img_block" />
  </div>
  <div class="col_1" aria-hidden="true">&nbsp;</div>
  <div class="col_7">
    <h2 style="margin-top: 0">Not enjoying Xcode, Amir used RubyMotion instead.</h2>
    <p class="intro">Amir had real-world experience with Xcode and Objective-C, but didn't like it at all.</p>
    <p>Amir also has a Ruby background and went with RubyMotion to build A Dark Room. The command-line interface, the testing framework, the gems libraries and the CocoaPods integration and the freedom to use any text editor contributed to his decision.</p>
  </div>
</div>

<div class="case_secondary_block bg_grey_light">
  <div class="row_fluid">
    <div class="col_7">
      <h3>12,000 lines of Ruby.</h3>
      <p>A Dark Room makes use of the <a href="https://github.com/clearsightstudio/ProMotion">ProMotion</a> and <a href="https://github.com/rubymotion/BubbleWrap">BubbleWrap</a> gems. During its development Amir used all the refactoring techniques of the Ruby language and also ran the built-in spec framework in the background. The project contains about <a href="http://amirrajan.net/12k-lines-of-RM/#/title">12,000 lines of Ruby</a>.</p>
      <p>A Dark Room was also praised as being one of the few games being <a href="http://amirrajan.net/software-development/2013/12/29/if-you-are-reading-this-you-are-not-blind/">accessible to the blind</a>.</p>
      <p>If you want to know more about the story behind this best-selling game, check out the <a href="http://www.newyorker.com/tech/elements/a-dark-room-the-best-selling-game-that-no-one-can-explain">New Yorker Article</a>.</p>
    </div>
    <div class="col_1" aria-hidden="true">&nbsp;</div>
    <div class="col_8">
      <iframe width="560" height="315" src="//www.youtube.com/embed/GzW5yq7fb9Q" frameborder="0" allowfullscreen></iframe>
    </div>
    <div class="col_16">
    </div>
  </div>
</div>
]]></content:encoded>
      <dc:date>2014-04-08T18:36:36+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Success Story A Dark Room</title>
      <link>http://www.rubymotion.com/news/2014/04/08/rubymotion-success-story-a-dark-room.html</link>
      <description><![CDATA[A Dark Room is a very popular text-based role playing game (RPG). Originally web-based, Amir Rajan ported it to iOS using RubyMotion, and very quickly the app went from being the top game in the RPG category to be in the top 5 paid apps in the UK App Store. At the time of this writing it&#8217;s on its way to the top paid category of the US App Store.

]]></description>
      <pubDate>Tue, 08 Apr 2014 08:20:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2014/04/08/rubymotion-success-story-a-dark-room.html</guid>
      <content:encoded><![CDATA[<p><a href="http://amirrajan.net/a-dark-room/">A Dark Room</a> is a very popular text-based role playing game (RPG). Originally web-based, <a href="http://amirrajan.net/">Amir Rajan</a> ported it to iOS using RubyMotion, and very quickly the app went from being the top game in the RPG category to be in the top 5 paid apps in the UK App Store. At the time of this writing it&#8217;s on its way to the top paid category of the US App Store.</p>

<p>The game now enjoys a <a href="https://itunes.apple.com/us/app/a-dark-room/id736683061?mt=8">5-star rating</a> and has been positively covered numerous times in the press.</p>

<p><a href="http://amirrajan.net/a-dark-room/"><img src="https://31.media.tumblr.com/742144a8d59a57c1df8a403845b309e4/tumblr_inline_n3pp0qOYgc1roo9mt.png" alt=""/></a></p>

<p>We sat down with Amir to discuss his experience building this awesome game in RubyMotion.</p>

<hr><p><strong>What is your background, and what brought you to become involved in RubyMotion?</strong></p>

<p>Before I took my sabbatical (I guess you can say I&#8217;ve gone independent now), my entire 8 year development career was all .Net development. I used ruby primarily for build automation during my day time job. Outside of my 9-5, side work I did was primarily Rails and NodeJS. I&#8217;ve contributed quite a bit to the open source .Net community. I&#8217;m a contributor to NSpec (an RSpec clone), SpecWatchr (an auto test tool for NSpec), Oak (a dynamic &#8220;poly fill&#8221; for C# andASP.NET MVC), and Canopy F# (a Web UI automation DSL for Selenium and PhantomJS).</p>

<p>One of my friends told me about RubyMotion. I was immediately interested given that I had an appetite for &#8220;different ways&#8221; (better ways) to approach problems.</p>

<p><strong>Why did you choose to use RubyMotion instead of Xcode and Objective-C?</strong></p>

<p>My first few apps that I built (none of which made it into the App Store) were actually built using Xcode and Objective C. Notably, I built a little budgeting app for myself with a Rails back end. At that time I actually had RubyMotion but wanted to have a solid basis of &#8220;vanilla&#8221; iOS development before making an assessment on RubyMotion.</p>

<p>One thing I saw immediately was the contrast between the work I did on the server side Rails app vs when I went back to Xcode. The hardest things to explain is the &#8220;Ruby mindset&#8221;: light weight environments, concise workflows, editor agnostic, fast feedback loops, simple API&#8217;s&#8230; essentially developer happiness.</p>

<p>As painful as it was to work outside of my souped up VIM environment, I
completed my budgeting app using Xcode and Objective C for the client side. I did not enjoy the experience. Objective C is verbose, the Cocoa API&#8217;s are unintuitive, a lot of ceremony with regards to class definitions. Xcode makes it difficult to work with vendor libraries (try referencing AFNetworking for HTTP communication and Cedar for testing if you don&#8217;t believe me). Interface Builder was frustrating to work with too.</p>

<p>Now that I had my perspective, I worked with RubyMotion instead. The wrappers are wonderful (I primarily used <a href="https://github.com/rubymotion/BubbleWrap">BubbleWrap</a> and <a href="https://github.com/clearsightstudio/ProMotion">Promotion</a>). The rake tasks that come out of the box are great. Testing is first class, MacBacon has an <a href="http://www.rubymotion.com/developer-center/articles/testing/">RSpec style DSL</a> that I know well and enjoy working with. Package management is solid, and I was able to use Objective-C libraries via <a href="http://cocoapods.org">CocoaPods</a>. It just felt like everything was thought through, distilled down, and presented in a form that was immediately familiar to me given my Ruby background (and the &#8220;Ruby mindset&#8221;).</p>

<p><strong>What inspired you to create “A Dark Room”?</strong></p>

<p>A Dark Room is actually a joint venture between myself an <a href="http://blog.doublespeakgames.com/">Michael Townsend</a>. He created the web version of the game. It went viral on <a href="https://news.ycombinator.com/item?id=5961205">Hacker News</a> and I stumbled across it. At this time I was on a sabbatical, and decided that this would be a wonderful project to take on. I absolutely loved the web version of the game, but it wasn&#8217;t touch device compatible. I sent an email to Michael, asking if I could port it to iOS. He said yes! 4 months and <a href="http://amirrajan.net/12k-lines-of-RM">12,000 lines of RubyMotion</a> later, I had a game in the App Store.</p>

<p><strong>How did you begin writing the app, what were your early development stages?</strong></p>

<p>I had some real world experience with Xcode and Objective C. In fact, the first few hours of A Dark Room development was done in in Xcode. I wanted to start fleshing out the engine of the game, and found it rather awkward using OCUnit. I rely heavily on fast feedback loops and incremental evolution. OCUnit did a good job in giving feedback, but fell short when it came to test composition. I refactored often, and what I found was that Objective C and OCUnit just made that an utter chore. I had a copy of RubyMotion, I knew that it had an RSpec style testing framework, and I knew how easy it was to refactor Ruby code. So I
put the Obj C version of A Dark Room aside, and fired up RubyMotion.</p>

<p>I was extremely happy with the default template. Testing was baked in, the rake tasks were already in place to run tests. I created a light weight watchr script to run tests whenever I saved a file&#8230; everything just gelled really well :-)</p>

<p><strong>As the game progressed, how difficult was it to add and remove features from your code base?</strong></p>

<p>Not knowing RubyMotion, I initially stuck to using &#8220;vanilla&#8221; Cocoa apis for all my UI work. It was extremely easy to translate Objective C to Ruby. I was able to use all the resources on Stack Overflow whenever I hit a snag. Eventually, I was juggling a number of views and decided to look at ProMotion and BubbleWrap (which I found via the <a href="http://rubymotion-wrappers.com">RubyMotion Wrappers</a> site). The refactoring was easy. It amounted to deleting code ;-).</p>

<p>As far as the core game engine, I was able to use all the refactoring techniques of Ruby. All the language capabilities &#8220;just worked&#8221;: inheritence, class macros, modules/mixins, &#8220;send&#8221;, blocks, etc. My tests were always running in the background with every change I made.</p>

<p><strong>Your app has been praised as being one of the few games that have are accessible to the blind.  What did you do to make sure your app was accessible?</strong></p>

<p>Accessibility changes were surprisingly simple to make. It&#8217;s amazing how much iOS does for you out of the box. Most of the first part of the game was already playable via VoiceOver. I ended up using an existing Objective-C open source library called <a href="https://github.com/splinesoft/SSAccessibility">SSAccessibility</a> (it did all the hard work with regards to queueing multiple messages). I used CocoaPods to install the library, updated my Rakefile, and was up and running. The key take away here is that I was able to leverage the existing Objective-C ecosystem. Here is a <a href="http://amirrajan.net/software-development/2013/12/29/if-you-are-reading-this-you-are-not-blind">write up</a> of all the quirks with regards to making accessible apps.</p>

<p><strong>What were some of your greatest, happiest moments during development?</strong></p>

<p>Shipping. It&#8217;s hard to believe that the code base was over 12,000 lines. I was happy to get this mammoth out the door.</p>

<p><strong>Were there times that the RubyMotion toolchain was a source of frustration?  And how did you get those issues resolved?</strong></p>

<p>I had a couple of instances where RubyMotion would throw a runtime exception without a backtrace (stacktrace). It was always related to the initial load of the app&#8217;s UIViews. I&#8217;d use git bisect to zero in on what line caused the error. It was tedious work at times.</p>

<p><strong>Will you continue to use the RubyMotion compiler on future projects?</strong></p>

<p>Absolutely. Without hesitation. Idiomatic Ruby wrappers on top of iOS,
frictionless workflows, and the &#8220;it just works&#8221; culture that Ruby fosters,
trumps any hesitation I once had. On top of that, I now have a fairly large app to serve as a testament to the platform.</p>
]]></content:encoded>
      <dc:date>2014-04-08T08:20:00+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Inspect 2014 First Batch Of Speakers</title>
      <link>http://www.rubymotion.com/news/2014/04/03/rubymotion-inspect-2014-first-batch-of-speakers.html</link>
      <description><![CDATA[In a bit less than two months we will be launching our second annual developer conference, the 28th and 29th May in sunny San Francisco, California!

]]></description>
      <pubDate>Thu, 03 Apr 2014 07:16:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2014/04/03/rubymotion-inspect-2014-first-batch-of-speakers.html</guid>
      <content:encoded><![CDATA[<p>In a bit less than two months we will be launching our <a href="http://www.rubymotion.com/conference/2014/">second annual developer conference</a>, the 28th and 29th May in sunny San Francisco, California!</p>

<p>(Yes, that&#8217;s the week before <a href="https://developer.apple.com/wwdc/">WWDC</a>!)</p>

<p><br/><a href="http://www.rubymotion.com/conference/2014"><img src="https://31.media.tumblr.com/ce6ced95718b9f583cff62335a020a71/tumblr_inline_n3gcscJVBq1roo9mt.png" alt=""/></a>
<br/></p>

<p>RubyMotion #inspect 2014 will be a 2-day single track conference, 100% about RubyMotion. We picked an awesome venue, <a href="http://en.wikipedia.org/wiki/Fort_Mason">Fort Mason</a>, a former US military post office which offers a scenic view of the famous Golden Gate Bridge.</p>

<p><strong>First Batch of Speakers</strong></p>

<p>We closed our call for presentations and are now working on finalizing the schedule. In the meantime, we already pre-selected some of the speakers  and it is our pleasure to list them here!</p>

<ul><li><p><em><a href="https://twitter.com/lrz">Laurent Sansonetti</a></em>, <em><a href="https://twitter.com/watson1978">Shizuo Fujita</a></em> and <em><a href="https://twitter.com/alloy">Eloy Durán</a></em> from HipByte will share a keynote talk in which they will talk about what&#8217;s coming next for RubyMotion (we think you will like it!).</p></li>
<li><p><em><a href="https://twitter.com/clayallsopp">Clay Allsopp</a></em>, author of the Pragmatic Programmers&#8217; <a href="http://pragprog.com/book/carubym/rubymotion">RubyMotion book</a> and numerous libraries will talk about building build tools that build tools to build apps. Sounds crazy and interesting!</p></li>
<li><p><em><a href="https://twitter.com/RubyMotionTV">Jack Watson-Hamblin</a></em>, creator of <a href="https://motioninmotion.tv/">MotionInMotion</a>, the popular weekly screencast, will talk about the RubyMotion community and what we can do to make it better.</p></li>
<li><p><em><a href="https://twitter.com/wndxlori">Lori Olson</a></em>, author of a <a href="http://book.coredatainmotion.com/">RubyMotion book about Core Data</a>, will share her experience in solving real problems using Core Data in RubyMotion apps.</p></li>
<li><p><em><a href="https://twitter.com/twerth">Todd Werth</a></em>, co-founder of InfiniteRed and author of the popular <a href="http://infinitered.com/rmq/">RubyMotionQuery</a> (RMQ) library will talk about what&#8217;s new in RMQ. Todd is also co-organizing the event!</p></li>
<li><p><em><a href="https://twitter.com/jamonholmgren">Jamon Holmgren</a></em>, owner of ClearSight Studio and author of the popular <a href="https://github.com/clearsightstudio/ProMotion">ProMotion</a> framework, will talk about going from a prototype to a production app.</p></li>
<li><p><em><a href="https://twitter.com/markrickert">Mark Rickert</a></em>, owner of Mohawk Apps, is the author of numerous RubyMotion apps, <a href="http://blog.markrickert.me/why-i-open-source-all-my-rubymotion-ios-apps">all of which are open-source</a>. Mark also has a lot of experience marketing apps and will teach us a few tricks on how to promote an app in the App Store and through other channels.</p></li>
<li><p><em><a href="https://twitter.com/seriousken">Ken Miller</a></em>, co-founder of InfiniteRed, is the author of <a href="https://github.com/infinitered/cdq">CoreDataQuery</a> (CDQ), a library which aims at making Core Data easier to use. Ken will talk about CDQ and what&#8217;s new.</p></li>
<li><p><em><a href="https://twitter.com/kastiglione">Dave Lee</a></em> is a contributor to <a href="https://github.com/ReactiveCocoa/ReactiveCocoa">ReactiveCocoa</a>, a framework that provides <a href="http://en.wikipedia.org/wiki/Functional_reactive_programming">Functional Reactive Programming</a> to Cocoa apps. Dave will talk about integrating ReactiveCocoa in RubyMotion.</p></li>
<li><p><em><a href="https://twitter.com/willrax">Will Raxworthy</a></em>, author of <a href="http://blog.willrax.com/">numerous blog posts</a> about RubyMotion, will talk about 2D game development, using the new SpriteKit framework and integrating with native game controllers, and eventually write a Flappy Bird clone!</p></li>
</ul><p>We will be announcing more speakers soon. If you submitted a talk proposal, we will get back to you as soon as can. Thanks for your patience!</p>

<p><strong>Lodging Information</strong></p>

<p>The conference is located between the <a href="http://en.wikipedia.org/wiki/Fisherman's_Wharf,_San_Francisco">Fisherman&#8217;s Wharf</a> and the <a href="http://en.wikipedia.org/wiki/Marina_District,_San_Francisco">Marina</a> district. Both are within easy walking distance and both have public transportation.</p>

<p>The Wharf has many places to stay because it&#8217;s a tourist location. There are a lot of tourist-area places to eat too. You won&#8217;t see a lot of San Franciscans in this area, but there is a lot going on and it is fun.</p>

<p>The Marina is a local neighborhood, but there are a lot of motels/hotels on Lombard street. The Marina is cheaper than the Wharf.</p>

<p>There are plenty of other neighborhoods to stay in too. The <a href="http://en.wikipedia.org/wiki/Mission_District,_San_Francisco">Mission</a> district  is where a lot of tech workers live and is an Uber car-ride away. <a href="http://en.wikipedia.org/wiki/Union_Square,_San_Francisco">Union Square</a> is a popular location and is a MUNI 30 bus away (or Uber). <a href="http://en.wikipedia.org/wiki/South_of_Market,_San_Francisco">SOMA</a> and Market Street are where many of the startups are.</p>

<p>Check out the <a href="http://www.rubymotion.com/conference/2014/index.html#WhereToStay">lodging section</a> of the conference website for more information and also pointers to places we recommend.</p>

<p><strong>Sponsors</strong></p>

<p>We are delighted to announce that <strong><a href="http://www.pixate.com">Pixate</a></strong> will be our lead (gold) sponsor this year!</p>

<p><a href="http://www.pixate.com/"><img src="https://31.media.tumblr.com/f1f099272b2899dab1d74ca7edfd1a2c/tumblr_inline_n3gjpuwdIo1roo9mt.png" alt=""/></a></p>

<p><a href="http://www.pixate.com">Pixate</a> was founded in the summer of 2012 as a Y-Combinator company with the goal of enabling designers and developers to quickly and easily create beautiful, native mobile applications. Their flagship product, <a href="http://www.pixate.com/">Pixate Freestyle</a>, enables the styling of native mobile applications using CSS.</p>

<p>A few words from our silver sponsors:</p>

<p><a href="http://terriblelabs.com"><img src="https://31.media.tumblr.com/07f44c30a25c0126c8e37a640db651b0/tumblr_inline_n3gjyaRHdT1roo9mt.png" alt=""/></a></p>

<p><a href="http://terriblelabs.com/">Terrible Labs</a> is a design and development shop in Boston.  They use RubyMotion to build all of their clients&#8217; iOS applications.  They have also used RubyMotion to build their own product, <a href="http://ticketzen.com/">TicketZen</a>, the easiest way to pay parking tickets.</p>

<p><a href="http://www.jetbrains.com/ruby/"><img src="https://31.media.tumblr.com/0f32cb6bfa55ab2ef68676f596fcd81e/tumblr_inline_n3gk03fDcc1roo9mt.png" alt=""/></a></p>

<p><a href="http://www.jetbrains.com/ruby">RubyMine</a>, the most powerful Ruby IDE, provides smart coding assistance and advanced testing and debugging features for all types of Ruby projects and cutting-edge technologies, including RubyMotion.</p>

<p>We would like to thank Pixate, Terrible Labs and RubyMine for helping us organizing this awesome event.</p>

<p>We are still looking for a small number of sponsors to share in the support of #inspect 2014. This is a great opportunity to show your commitment to the RubyMotion community and also promote your products or services. If you or your company are interested <a href="mailto:info@hipbyte.com">get in touch</a>.</p>
]]></content:encoded>
      <dc:date>2014-04-03T07:16:00+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Raises Millions Becomes Free</title>
      <link>http://www.rubymotion.com/news/2014/04/01/rubymotion-raises-millions-becomes-free.html</link>
      <description><![CDATA[Update: We hope that you folks enjoyed our April Fools prank! We are of course still 100% bootstrapped. We also still intend to grow organically thanks to your continuous support!

]]></description>
      <pubDate>Tue, 01 Apr 2014 07:10:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2014/04/01/rubymotion-raises-millions-becomes-free.html</guid>
      <content:encoded><![CDATA[<p><strong>Update</strong>: We hope that you folks enjoyed our April Fools prank! We are of course still 100% bootstrapped. We also still intend to grow organically thanks to your continuous support!</p>

<p>(Personal thanks to Josh Ballanco for having had the idea of RubyMotionCoin and MotionInflater.)</p>

<hr><p>We are delighted to announce on this 1st April 2014 that we just closed a multi-million dollar funding transaction with Agile Ventures and Extreme Capital, two top-tier investing firms of Silicon Valley.</p>

<p>This is our first series A round of funding and we are extremely excited about the future of RubyMotion. Make sure to read the coverage on TechCrunch (to be published later today). You can also check a picture of our <a href="http://3.bp.blogspot.com/-s1L5OYrSrEA/UIUdeXChALI/AAAAAAAAB58/YjeLrVz62Dg/s1600/tumblr_llkgp9W28m1qhwmnpo1_500.jpg">new board of directors</a> and observe the synergy already at work.</p>

<p>We have been bootstrapping RubyMotion since its inception and were profitable by charging our awesome customers (from here on out referred to as <i>users</i>), but we think it&#8217;s now time to shift into the next gear.</p>

<p>Our goal is to grow RubyMotion faster into a 100-people company serving millions of users and bringing you folks tons of innovation. The entire team will also relocate into the San Francisco Bay Area (including Eloy&#8217;s new boat which presents a set of interesting logistic challenges).</p>

<p>We are of course still committed to a <a href="https://signalvnoise.com/posts/3107-99-problems-but-money-aint-one">long-term vision</a>. Unlike the majority of VC firms, our new partners Agile Venture and Extreme Capital are there for the long run and will definitely not require an exit in the next four years. (At least they said so during our meetings.)</p>

<p><strong>Free, Smart Suggestions</strong></p>

<p>Thanks to this funding round we no longer need to get money from you folks, so RubyMotion will become totally free. Awesome isn&#8217;t it?</p>

<p>We will also ship with a new feature called <b>Smart Suggestions™</b> (patent pending). The RubyMotion build system will now show you suggestions of services you might want to use by scanning your project&#8217;s source code, sending us a copy, and getting back a list of relevant services. (Please note that the connection to our server is totally secure by using the same cryptography algorithms used in banks, so you should feel safe.)</p>

<p>Here is an example of what a future project build session might look like.</p>

<pre class="highlight">
  Compile app/person.rb
  !!! It looks like you are creating a regular expressions on line 42.
      RegexBuilder™ is a new revolutionary tool that makes building
      regular expressions easier.
      Would you like to know more? [Yy]
[...]
</pre>

<p>We believe that <strong>Smart Suggestions™</strong> will significantly increase your productivity, so we are enabling it by default for all users. Please contact our sales team if you would like to disable <strong>Smart Suggestions™</strong>.</p>

<p><strong>Future Plans</strong></p>

<p>Very soon we will be introducing <strong>RubyMotionCoin</strong>, a new virtual currency that is mined as a byproduct of the Xcode build system. If you include a CocoaPod in your app that contains Objective-C++ code using templates, your mining rate doubles.</p>

<p>Finally, we will be releasing <strong>MotionInflater</strong> later this year, a system that will automatically convert your RubyMotion code to Objective-C, ensuring that your app gains the approval of important people and allowing you to experience the inflated ego that can only come from shipping a <i>real</i> iOS app.</p>
]]></content:encoded>
      <dc:date>2014-04-01T07:10:00+02:00</dc:date>
    </item>
    <item>
      <title>New In Rubymotion New Cli Weakref Zeroing</title>
      <link>http://www.rubymotion.com/news/2014/03/04/new-in-rubymotion-new-cli-weakref-zeroing.html</link>
      <description><![CDATA[We shipped quite a few releases since the beginning of the year. Let&#8217;s dig into the new major features.

]]></description>
      <pubDate>Tue, 04 Mar 2014 06:27:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2014/03/04/new-in-rubymotion-new-cli-weakref-zeroing.html</guid>
      <content:encoded><![CDATA[<p>We shipped quite a few releases since the beginning of the year. Let&#8217;s dig into the new major features.</p>

<p><strong>New Command-Line Interface</strong></p>

<p>The <tt>motion</tt> command-line interface has been fully rewritten using the <a href="https://github.com/CocoaPods/CLAide">CLAide</a> project.</p>

<pre class="highlight">
$ motion 
RubyMotion lets you develop native iOS and OS X applications using the awesome Ruby language.

Commands:

    * account          Access account details.
    * activate         Activate software license.
    * changelog        View the changelog.
    * create           Create a new project.
    * device-console   Print iOS device logs
    * ri               Display API reference.
    * support          Create a support ticket.
    * update           Update the software.

Options:

    --version   Show the version of RubyMotion
    --no-ansi   Show output without ANSI codes
    --verbose   Show more debugging information
    --help      Show help banner of specified command
</pre>

<p>The new codebase allows better output and more elaborated argument handling. It will also allow us to extend the interface more easily in the future.</p>

<p><strong>WeakRef Zeroing</strong></p>

<p>In previous builds, trying to send a message to a <tt>WeakRef</tt> object whose internal reference was prematurely destroyed was causing a crash at runtime, since it was attempting to send a message to an invalid object address.</p>

<p>Now, the internal reference of <tt>WeakRef</tt> objects will properly be zeroed when it is destroyed. Sending a <tt>WeakRef</tt> object a message whose internal reference has been zeroed will cause a <tt>WeakRefError</tt> exception at runtime, matching exactly the behavior of CRuby&#8217;s <em>weakref.rb</em> standard library.</p>

<p>The <tt>WeakRef#weakref_alive?</tt> method was also added and will return <em>false</em> in case the internal reference has been zeroed.</p>

<pre class="highlight">
autorelease_pool do
  @ref = WeakRef.new(Object.new)
end
@ref.weakref_alive? #=&gt; false
@ref.description    #=&gt; WeakRefError: Invalid Reference - probably recycled
</pre>

<p><strong>Background Fetch Testing</strong></p>

<p>iOS 7 introduced the notion of <a href="https://developer.apple.com/library/ios/documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW56">background fetch</a> which for example allows your application to check a remote web API if there is any updated content and, if so, fetch it, all while being in a suspended state.</p>

<p>To perform a background fetch iOS will launch your application using the <tt>application:performFetchWithCompletionHandler:</tt> method. You can now simulate this on the iOS Simulator by setting the <tt>background_fetch</tt> environment variable, as show below.</p>

<pre class="highlight">
$ rake background_fetch=1
</pre>

<p>Note that while your application is in the background you will not be able to REPL until you activate the application again.</p>

<p><strong>Object Subscripting</strong></p>

<p>As of clang 3.1 Objective-C developers are able to add support for the new <a href="http://clang.llvm.org/docs/ObjectiveCLiterals.html">Objective-C literal syntax</a> on their own classes by implementing a set of methods.</p>

<p>RubyMotion will now properly handle objects from these classes and allow you to send the <tt>#[]</tt> and <tt>#[]=</tt> messages on them as convenience shortcuts.</p>

<p>As an example, let&#8217;s take a fictional <tt>SubscriptingExample</tt> Objective-C class:</p>

<pre class="highlight">
@implementation SubscriptingExample

- (id)objectAtIndexedSubscript:(NSUInteger)index;
{
  ...
}

- (void)setObject:(id)object atIndexedSubscript:(NSUInteger)index;
{
  ...
}

- (id)objectForKeyedSubscript:(id)key;
{
  ...
}

- (void)setObject:(id)object forKeyedSubscript:(id)key;
{
  ...
}

@end
</pre>

<p>The following class can now be used from Ruby code using convenience shortcuts.</p>

<pre class="highlight">
obj = SubscriptingExample.new
obj['one'] = 1
puts obj['one']
...
</pre>

<p><strong>Performance Improvements</strong></p>

<p>As you could see from the release notes our goal of improving the overall performance of RubyMotion apps is continuing steadily.</p>

<p>Runtime primitives (such as the method dispatcher) are faster by 25%. Builtin classes methods have also been optimized, sometimes by a 2x factor. Some of our users reported very positive feedback from their testers.</p>

<p>As mentioned in our previous report, we are still working on a benchmark suite for RubyMotion. Its goal is to let us identify performance problems as well as catching performance regressions. It is still at this time a work in progress and we still intend to publish it once it&#8217;s complete.</p>

<p><strong>Jim Weirich</strong></p>

<p><a href="http://en.wikipedia.org/wiki/Jim_Weirich"><img src="https://31.media.tumblr.com/88175659bc54a0a6721af51593b4404b/tumblr_inline_n1x71miGZ11roo9mt.jpg" alt=""/></a></p>

<p><a href="http://en.wikipedia.org/wiki/Jim_Weirich">Jim</a> was one of the very early RubyMotion users. He believed in the project and gave us the motivation we needed to keep working on it and launch it.</p>

<p>As the author of Rake, it goes without saying that RubyMotion would not exist without him.</p>

<p>You can watch Jim <a href="https://www.youtube.com/watch?v=z7E1zx9j31M">speaking about RubyMotion</a> at the local Cincinnati Cocoa user group. In this video, Jim demonstrates his legendary joie de vivre as well as his excellent teaching skills.</p>

<p>You can also check out Jim teaching the <a href="http://pragprog.com/screencasts/v-jwsceasy/source-control-made-easy">use of source code control</a> (you do use SCC on your RubyMotion apps, right?) for the Pragmatic Programmers, who have kindly agreed to donate the full proceeds of the screencast to Jim’s family.</p>

<p>Jim passed away the 19th February 2014. He will be deeply missed.  Rest in peace, Jim.</p>
]]></content:encoded>
      <dc:date>2014-03-04T06:27:00+01:00</dc:date>
    </item>
    <item>
      <title>Jukely</title>
      <link>http://www.rubymotion.com/companies/2014/02/11/jukely.html</link>
      <description><![CDATA[Bora Celik and Andrew Cornett created Jukely for music lovers to get hand-picked recommendations for local live music concerts and to discover new music.

They used RubyMotion to create a visually stunning app that has already hit 5 stars in the app store!
]]></description>
      <pubDate>Tue, 11 Feb 2014 17:36:36 +0100</pubDate>
      <guid>http://www.rubymotion.com/companies/2014/02/11/jukely.html</guid>
      <content:encoded><![CDATA[<h4>Primus natis chapter title</h4>

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas nec volutpat diam. Nullam mollis bibendum odio sit amet pharetra. Integer tristique, justo eu accumsan vulputate, justo metus scelerisque ligula, sit amet porttitor odio lectus non velit.</p>

<p>Nulla mattis, enim id luctus molestie, magna orci iaculis justo, aliquet bibendum nisi dolor sit amet ipsum. Donec eu ornare sem. Sed rhoncus, eros nec convallis mattis, nibh neque dapibus lacus, ut semper leo augue non ipsum. Integer fermentum aliquam arcu, non</p>
]]></content:encoded>
      <dc:date>2014-02-11T17:36:36+01:00</dc:date>
    </item>
    <item>
      <title>Welcome to Jekyll!</title>
      <link>http://www.rubymotion.com/about/2014/02/11/welcome-to-jekyll.html</link>
      <description><![CDATA[You&#39;ll find this post in your _posts directory - edit this post and re-build (or run with the -w switch) to see your changes!
To add new posts, simply add a file in the _posts directory that follows the convention: YYYY-MM-DD-name-of-post.ext.
]]></description>
      <pubDate>Tue, 11 Feb 2014 16:10:42 +0100</pubDate>
      <guid>http://www.rubymotion.com/about/2014/02/11/welcome-to-jekyll.html</guid>
      <content:encoded><![CDATA[<p>You&#39;ll find this post in your <code>_posts</code> directory - edit this post and re-build (or run with the <code>-w</code> switch) to see your changes!
To add new posts, simply add a file in the <code>_posts</code> directory that follows the convention: YYYY-MM-DD-name-of-post.ext.</p>

<p>Jekyll also offers powerful support for code snippets:</p>

<div class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="k">def</span> <span class="nf">print_hi</span><span class="p">(</span><span class="nb">name</span><span class="p">)</span>
  <span class="nb">puts</span> <span class="s2">"Hi, </span><span class="si">#{</span><span class="nb">name</span><span class="si">}</span><span class="s2">"</span>
<span class="k">end</span>
<span class="n">print_hi</span><span class="p">(</span><span class="s1">'Tom'</span><span class="p">)</span>
<span class="c1">#=&gt; prints 'Hi, Tom' to STDOUT.</span></code></pre></div>
]]></content:encoded>
      <dc:date>2014-02-11T16:10:42+01:00</dc:date>
    </item>
    <item>
      <title>Jimdo</title>
      <link>http://www.rubymotion.com/references/success-stories/jimdo</link>
      <description><![CDATA[Jimdo is a website creation and hosting service based in Germany since 2007. Their motto is Pages to the People! and they have helped people build over 10 million websites.

Their iPhone and iPad apps are written in RubyMotion and have been selected as "Best of 2013" by Apple!
]]></description>
      <pubDate>Mon, 10 Feb 2014 17:36:36 +0100</pubDate>
      <guid>http://www.rubymotion.com/references/success-stories/jimdo</guid>
      <content:encoded><![CDATA[<div class="row_fluid block_spac_tb">
  <div class="col_7">
    <img src="/img/cases/jimdo/illu.png" class="img_block" />
  </div>
  <div class="col_1" aria-hidden="true">&nbsp;</div>
  <div class="col_7">
    <h2>RubyMotion empowered us to learn iOS in a very short time.</h2>
    <p class="intro">After spending time with Appcelerator Titanium, Jimdo realized it was slow, lacked flexibility and was lagging months behind Apple SDK releases.</p>
    <p>Jimdo decided to switch to RubyMotion to write their iPhone and iPad apps. They were able to get native performance and also access the entire set of iOS APIs, including those from the latest SDK version.</p>
    <p>New to Ruby and iOS, they found RubyMotion to be easy to learn. And their designers can now write code too!</p>
  </div>
</div>

<div class="case_secondary_block bg_grey_light">
  <div class="row_fluid">
    <div class="col_7">
      <h3>Behind the curtains.</h3>
      <p class="">Jimdo for iOS is a gorgeous app that makes use of the whole spectrum of iOS technologies. There is almost no UIKit element that is not implemened and customized.</p>
      <p class="">The Jimdo team use the <a href="https://github.com/colinta/teacup">Teacup</a> library for designing the user interface of the app. Teacup makes it easy to properly decouple the UI code from the views or controllers and customize elements for different iOS versions and platforms.</p>
      <p class="">Fans of testing, they have a suite of acceptance tests, using Frank and Cucumber, and a suite of functional tests, using RubyMotion's builtin framework.</p>
    </div>
    <div class="col_1" aria-hidden="true">&nbsp;</div>
    <div class="col_8">
      <iframe src="//player.vimeo.com/video/71247568?title=0&amp;byline=0&amp;portrait=0" width="600" height="340" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
    </div>
    <div class="col_16">
    </div>
  </div>
</div>
]]></content:encoded>
      <dc:date>2014-02-10T17:36:36+01:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Success Story Jimdo</title>
      <link>http://www.rubymotion.com/news/2014/02/10/rubymotion-success-story-jimdo.html</link>
      <description><![CDATA[Jimdo is a web site creation and hosting service based in Hamburg, Germany since 2007. Their motto is Pages to the People! and since last year they provide an iOS app for iPhone and iPad that integrates with their service.

]]></description>
      <pubDate>Mon, 10 Feb 2014 12:39:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2014/02/10/rubymotion-success-story-jimdo.html</guid>
      <content:encoded><![CDATA[<p><a href="http://www.jimdo.com/">Jimdo</a> is a web site creation and hosting service based in Hamburg, Germany since 2007. Their motto is <em>Pages to the People!</em> and since last year they <a href="http://www.jimdo.com/mobile/">provide an iOS app</a> for iPhone and iPad that integrates with their service.</p>

<p>The app was recognized as <em>Best of 2013</em> by Apple and is fully developed with RubyMotion! We sat down with <a href="https://twitter.com/ctews">Christoffer Tews</a>, one of the folks at Jimdo responsible for the app.</p>

<iframe src="//player.vimeo.com/video/71247568?title=0&amp;byline=0&amp;portrait=0" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>

<p><strong>Can you tell us a bit about you?</strong></p>

<p>My name is Christoffer Tews. I started at Jimdo ~2 years ago with a student job during my Master of  Science in eCommerce . I wanted to do something in the mobile development because my bachelor thesis had been about implementing an iOS shopping app with Appcelerator Titanium and the whole mobile development is just exciting.</p>

<p>So I came to Jimdo and started to work as a student on the very first day on the iOS app of Jimdo with <a href="http://de.linkedin.com/in/markfrawley">Mark Frawley</a> (Developer) and <a href="http://janschlie.de/">Jan Schlie</a> (Designer). The team grows up to 10 people later. While doing my masters thesis (building a usability framework for iOS) I decided to join Jimdo as a full time employee, because I loved the product especially the iOS app and the dev team around it. And I still freaking love it! ;)</p>

<p><strong>What is Jimdo the company?</strong></p>

<p>Jimdo is the easiest way to create a website. With a simple, intuitive interface, Jimdo enables anyone to create a unique website with a blog and online store. Our motto—Pages to the People!—sums up our mission: Put the power of website creation into everyone&#8217;s hands. Whether you want to start a business, promote your music, or simply share photos with your friends and family, you can create your home on the web with Jimdo.</p>

<p>Since it was <a href="http://www.jimdo.com/about-1/">founded in Hamburg in 2007</a> by young entrepreneurs Christian Springub, Fridtjof Detzner, and Matthias Henze, Jimdo has grown tremendously. We&#8217;ve helped people build more than 10 million websites and Jimdo is now available in 12 languages. Our team of 170 people come from 15 different countries and work in 4 offices worldwide.</p>

<p>If you want to know how much fun it is to work at Jimdo just <a href="http://www.jimdo.com/about-1/working-at-jimdo">look at this page</a>.</p>

<p><img src="https://31.media.tumblr.com/7af0039fdf4a44e5fb376825232cda83/tumblr_inline_n0slynjhtg1roo9mt.png" alt=""/></p>

<p><strong>What did you make with RubyMotion?</strong></p>

<p><a href="http://www.jimdo.com/mobile/">Our iOS app</a> allows users to build a complete webpage for themselves or their business on directly from their mobile device. It’s not like other apps, where you can just edit some parts of your website and maybe don’t even see your site because of a „special user interface“ to edit the content.</p>

<p>With the iOS app of Jimdo you can edit the website simply by touching an element on your website e.g. a headline, some text. You can also structure your entire site’s content with our simple, gesture-driven in-app navigation editor.</p>

<p><strong>What role does the Jimdo iOS app play in your business, and related to that: why did you decide to build the app?</strong></p>

<p>So from the business point of view it has two primary goals. First, it is a value-added service to the existing Jimdo web service, allowing our users to easily update their site with rich media and text while away from their desktop. Secondly it serves as a new platform for organic discovery of our brand, a way for new and different demographics to discover us. We offer the iOS app for free - it doesn’t matter if you are using the Jimdo Free package or the Pro/Business package. The only difference between the packages is, that Pro or Business users will get some extra features in the app that are not available for Jimdo Free users, e.g. Statistics (page views, visitors, etc.), extended Shop features etc. These extra services will grow with the time and we will also always enhance the core app features for Free users to stay true to our core value <em>Pages To The People!</em>.</p>

<p><strong>Given your experience using Appcelerator Titanium, why did your team choose RubyMotion to build the Jimdo app?</strong></p>

<p>So we must admit that we chose Titanium Appcelerator in the beginning (before RubyMotion was released), because Jimdo is a web product with lots of front end web development experience and it seemed a good choice to build a cross-platform app which we could re-use instead of building a native app for just one platform.</p>

<p>However, after about 2 months we regretted choosing Titanium. It was sometimes slow, not very flexible (there were issues customizing TableViewCells and other native UIKit components without writing Objective-C). The support for newer iOS SDK features always lagged months behind Apple releases, and so it impeded our ability to quickly new version-specific features. In short it became clear that building a high- performance app with a huge amount of (UI)-customization wasn&#8217;t clearly feasible with Titanium.</p>

<p>Apart from that, developing a complex hybrid app with Javascript was clearly no fun at all. In particular, some things that bothered us were: Lack of proper namespaces, classes, accidental global declaration, minor syntax errors passing without warning, undefined variables discovered at runtime etc.</p>

<p>After a new evaluation of possible alternatives we found the freshly distributed RubyMotion framework. We were a little bit afraid of choosing a brand new framework especially because we wasted 2 month of development at this point, but it’s implementation of the Ruby language is directly based on the Cocoa APIs and data types. Therefore, and because it is compiled ahead of time, it’s performance is much closer to standard Objective-C. Also, the possibility to vendor in Objective-C (3rd party) libraries with one line of code, was and is, just awesome. Also at this point ARC wasn&#8217;t completely released yet and the built-in garbage collection from RubyMotion made our code very terse in comparison to Objective-C.</p>

<p>Even our UI-Designer started to write code. We built our UI without using Storyboard, our entire UI is built with a mix of reusable procedural code and Teacup stylesheets.</p>

<p><img src="https://31.media.tumblr.com/4c0c99c69e4ddc6c1ff64d3595e80044/tumblr_inline_n0sm4b8P4s1roo9mt.png" alt=""/></p>

<p><strong>What technologies from iOS did you use, and did you have any issue accessing those in RubyMotion?</strong></p>

<p>That is kind of a tough question, because we really use the whole spectrum of iOS technologies. I think there is almost no UI element that we haven’t implemented and customized in our app.</p>

<p>We make heavy use of RubyMotion’s excellent support for Objective-C Categories, which makes implementing delegate protocols very simple. In terms of Apple Frameworks, we use CoreData for non-sensitive data, and Keychain Services to save sensitive data securely on the phone. We also completely redesigned our app to adhere to iOS 7 design guidelines, which includes blurred background images, transparency, flat UI where it makes sense.</p>

<p>We’d like to extend our thanks to the RubyMotion team here for supporting the iOS 7 APIs since its beta stages and for the constant (weekly) updates to fix bugs. We only faced limitations when we tried to (ab)use the Runtime class of Objective-C for meta=programming patterns like method swizzling but this could be solved by writing our own wrapper in Obj-C and vendor it in.</p>

<p>Apart from that we really weren’t confronted with many bugs in RubyMotion and even when there were, our mails and pull requests were answered promptly and the fixes were usually implemented in the next weekly update. We wonder if Laurent gets much sleep because his response time answering emails was never longer than 15 minutes whatever time it was ;) Thanks for that!</p>

<p><strong>What gems, CocoaPods, and other libraries did you use, and which did you find the most useful?</strong></p>

<p>First of all: Teacup! It is just great for designing the UI, decouple the code from the views or controllers and makes it easy to customize elements for different iOS versions.</p>

<p>And we use the following Pods and libraries: <a href="https://github.com/soffes/sskeychain">SSKeychain</a>, <a href="https://github.com/AFNetworking/AFNetworking">AFNetworking</a>, <a href="https://www.adjust.io/">AdjustIO</a>, <a href="http://thrift.apache.org/">Thrift</a>, <a href="https://www.crittercism.com/">Crittercism</a>, <a href="https://github.com/tonymillion/Reachability">Reachability</a>, <a href="https://developers.google.com/analytics/devguides/collection/ios/">Google Analytics</a>, and much more&#8230;</p>

<p><strong>What did you learn from writing this app in RubyMotion that you will remember the next time you need to write an app?</strong></p>

<p>We had a lot of learnings there. Some were about code quality and trying to use patterns like MVC correctly in Cocoa. Others were about how to create useful, maintainable automated tests. We decided very early to establish automated tests but our focus was more on Acceptance Tests written in Cucumber format with the Frank Framework. This was and is still a good solution to our needs but an actual test run take almost 1 hour.</p>

<p>So we decided to increase our unit test coverage with the inbuilt “rake spec” <a href="http://www.rubymotion.com/developer-center/articles/testing/">MacBacon framework</a> that ships with RubyMotion. These tests of which we have several hundred already only take a couple of seconds to execute which gives us more immediate feedback.</p>

<p>One of our learnings so far is, start writing unit tests for your iOS app as soon as possible and as much as possible - it really makes you think about your class/module interfaces and encourages you to decouple views, controllers and methods so as to be more testable. It just makes your code better and more solid. You also don’t start to panic on your next upcoming release, if there’s a bug, because you can just test it.</p>

<p><img src="https://31.media.tumblr.com/187fe2a7a9e071456b8e0e7a271ccc28/tumblr_inline_n0sm6xamnK1roo9mt.png" alt=""/></p>

<p><strong>Would you recommend RubyMotion to other developers who are going to start learning iOS app development?</strong></p>

<p>Definitely yes! As mentioned in the intro, we started of with 3 people on the mobile team. All 3 of us hadn’t much experience with Obj-C or Ruby. RubyMotion empowered us to learn both in a very short time. Learning Ruby is quite easy, even combined with learning the iOS Cocoa APIs, it has a flatter learning curve than adding Objective-C into the mix.</p>

<p>From my personal point of view I would even say if you want to learn writing native iOS apps, RubyMotion is the fastest, most technically solid way to do it. I personally also recommend it to academic courses which are usually of a 2-3 month duration (one semester) - a period where it’s hard to additionally learn Obj-C and write a good working prototype in parallel.</p>

<p><strong>When you needed to find out an answer to a tricky problem, how did you get the help and answers you needed?</strong></p>

<p>The support at the <a href="https://groups.google.com/d/forum/rubymotion%E2%80%8E">RubyMotion Google Group</a> is really good and the response time there is also fast (max. 12h until first response). As some of us had already met Laurent at the <a href="http://www.bubbleconf.com/">BubbleConf</a> in Amsterdam, we just sent him emails directly, but we try to do it only when it really gets technically deep into the RubyMotion implementation or if we have found some curious bugs. I’m pretty sure he thinks “Arrr! This Jimdo dudes again” ;), but as mentioned, his responses were fast and he’s still polite. He doesn’t send standard phrases like “Please open a support ticket at…”, even if maybe he should sometimes to stay sane. Also Colin is really active and helpful in the Google Group.</p>

<p>For a company of this small size, with what I imagine is a huge customer base, HipByte is really responsive. Thanks again for that!</p>
]]></content:encoded>
      <dc:date>2014-02-10T12:39:00+01:00</dc:date>
    </item>
    <item>
      <title>Announcing Rubymotion Inspect 2014</title>
      <link>http://www.rubymotion.com/news/2014/02/06/announcing-rubymotion-inspect-2014.html</link>
      <description><![CDATA[We are super excited to announce our second annual developer conference, #inspect 2014. The event will happen on May 28th and 29th, in lovely San Francisco, California, and is co-organized with our friends at InfiniteRed.

]]></description>
      <pubDate>Thu, 06 Feb 2014 07:49:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2014/02/06/announcing-rubymotion-inspect-2014.html</guid>
      <content:encoded><![CDATA[<p>We are super excited to announce our second annual developer conference, <a href="http://rubymotion.com/conference/2014">#inspect 2014</a>. The event will happen on <strong>May 28th and 29th</strong>, in lovely <strong>San Francisco, California</strong>, and is co-organized with our friends at <a href="http://infinitered.com/">InfiniteRed</a>.</p>

<p><br/><a href="http://rubymotion.com/conference/2014"><img src="https://31.media.tumblr.com/ce6ced95718b9f583cff62335a020a71/tumblr_inline_n0kqziNAw11roo9mt.png" alt=""/></a>
<br/></p>

<p>RubyMotion #inspect is our <strong>official conference</strong>. It is organized for and by the RubyMotion community and aims at covering all the technologies that surround the RubyMotion ecosystem. This is the place where RubyMotion enthusiasts can finally meet face-to-face to chat, connect, hack together and learn what’s happening in the community.</p>

<p>Last year #inspect was organized in Brussels, Belgium. We definitely <a href="http://blog.rubymotion.com/2013/04/21/rubymotion-inspect-2013-wrap-up.html">had a blast</a>. Many guests told us it was the best conference they ever attended. This year we will change a few things and try to innovate with the conference format.</p>

<p><a href="http://rubymotion.com/conference/2014"><img src="https://31.media.tumblr.com/acda7aa0a31f17ae447ef5f253d3080e/tumblr_inline_n0kr9mPEmV1roo9mt.jpg" alt=""/></a></p>

<p>We booked an awesome venue for the event, <strong>Fort Mason</strong>, a National Historic Landmark right in the Marina district of San Francisco. We will be scheduling at least 16 talks as well as workshops, informal panels, and more activities. Like last year, we will also deliver awesome food and celebrate the end of the event with a great party.</p>

<p>We already <strong>pre-selected 8 awesome speakers</strong>. If you would like to speak at the conference we definitely want to <a href="https://docs.google.com/forms/d/1nPvYaGapvllqeLKxuInGI98zzyj-s6orLpr6tx14ofA/viewform">hear from you</a>.</p>

<p><a href="https://ti.to/hipbyte/inspect2014">Early-bird tickets are available</a>, at <strong>25% off</strong> the regular admission price, in limited quantity. Don&#8217;t wait too long. Like last year, the conference is designed to be small and intimate, and will likely sell out before the event.</p>

<p>To those interested, we will also be running a <strong>2-day training</strong> right before the conference. It will be a shorter version of our official training program and will be delivered by core RubyMotion engineers. We conveniently provide a <a href="https://ti.to/hipbyte/inspect2014">Training+Conference</a> ticket.</p>

<p>Finally, we are looking for a small number of <strong>sponsors</strong> to share in the support of #inspect 2014. This is a great opportunity to show your commitment to the RubyMotion community and also promote your products or services. If you or your company are interested <a href="mailto:info@hipbyte.com">get in touch</a>.</p>

<p>We will be posting more information about the event very soon. Stay tuned and see you in San Francisco!</p>
]]></content:encoded>
      <dc:date>2014-02-06T07:49:00+01:00</dc:date>
    </item>
    <item>
      <title>New In Rubymotion Device Crash Reports Pretty</title>
      <link>http://www.rubymotion.com/news/2013/12/29/new-in-rubymotion-device-crash-reports-pretty.html</link>
      <description><![CDATA[Our last release of the year, featuring a few major changes. Let&#8217;s dive in!

]]></description>
      <pubDate>Sun, 29 Dec 2013 14:37:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2013/12/29/new-in-rubymotion-device-crash-reports-pretty.html</guid>
      <content:encoded><![CDATA[<p>Our last release of the year, featuring a few major changes. Let&#8217;s dive in!</p>

<p><strong>Device Crash Reports</strong></p>

<p>It is an unfortunate reality that applications crash. This is even more so the case during development cycles.</p>

<p>Until today, the best way to deal with device crash reports during development was to use the Xcode organizer. As a lot of you already know, the user experience was far from ideal and symbolication did not always work as expected.</p>

<p>As of RubyMotion 2.18 we are happy to introduce a long-awaited Rake task to deal with device crash reports: <tt>rake crashlog:device</tt>.</p>

<p>The task will:</p>

<ol><li>Connect to your development device</li>
<li>Retrieve all crash reports generated by your app</li>
<li>Symbolicate them using the <tt>.dSYM</tt> bundle created by our build system</li>
<li>Save the final reports on your file system</li>
<li>Open the last generated report in Console.app</li>
</ol><p>Let us show you an example. We create a new RubyMotion project and slightly change the application delegate method to trigger one of those UIKit-level exceptions which will crash the process hard.</p>

<pre class="highlight">
class AppDelegate
  def application(application, didFinishLaunchingWithOptions:launchOptions)
    NSArray.arrayWithArray(42)
  end
end
</pre>

<p>As expected, running the app on the device causes a crash.</p>

<pre class="highlight">
$ rake device
[...]
    Deploy ./build/iPhoneOS-7.0-Development/foo.ipa
*** Application is running on the device, use ^C to quit.
Dec 29 21:01:49  foo[936] <error>: -[__NSCFNumber count]: unrecognized selector sent to instance 0x17da1190
Dec 29 21:01:49  foo[936] <error>: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber count]: unrecognized selector sent to instance 0x17da1190'
</error></error></pre>

<p>Since this is a lower-level exception happening on the device the terminal output does not contain its full backtrace. We could easily get it by connecting a debugger, but let&#8217;s use another way! Since the application crashes a report was generated on the device. We can use the new <tt>rake crashlog:device</tt> to retrieve that report and see what happened.</p>

<pre class="highlight">
$ rake crashlog:device
New crash report: /Users/lrz/Library/Logs/RubyMotion Device/foo_2013-12-29-210200_lrzs-iPhone.crash
</pre>

<p>The command saved a new crash report file and opened it in Console.app. This is what we can see (some of the lines have been trimmed out for better readability):</p>

<pre class="highlight">
Last Exception Backtrace:
0   CoreFoundation                  0x2f013e7e __exceptionPreprocess + 126
1   libobjc.A.dylib                 0x393706c2 objc_exception_throw + 34
2   CoreFoundation                  0x2f0177b2 -[NSObject(NSObject) doesNotRecognizeSelector:] + 198
3   CoreFoundation                  0x2f0160aa ___forwarding___ + 702
4   CoreFoundation                  0x2ef64dc4 __forwarding_prep_0___ + 20
5   CoreFoundation                  0x2ef4d70c +[NSArray arrayWithArray:] + 40
[...]
<b>9   foo                              0x00097008 rb_scope__application:didFinishLaunchingWithOptions:__ (app_delegate.rb:3)</b>
[...]
</pre>

<p>As we can see, the last frame from our application (highlighted here) in this exception backtrace was in the <i>app_delegate.rb</i> file, line 3, which coincides perfectly with our wrong <tt>arrayWithArray:</tt> call.</p>

<p>Just by typing one command in the terminal we were able to determine what went wrong on the device. Pretty cool, isn&#8217;t it?</p>

<p><strong>Pretty Vendor Build Output</strong></p>

<p>The RubyMotion build system invokes the <tt>xcodebuild</tt> tool in order to build Xcode-based projects. If your project uses CocoaPods or manually vendors Xcode-based libraries you already know that the build terminal output can be messy sometimes.</p>

<p>As of RubyMotion 2.18 the build output of Xcode-based projects will be consistent with the rest of the build. Here is an example of the new output of a project that uses CocoaPods.</p>

<pre class="highlight">
     Build ./vendor/Pods/Pods.xcodeproj [SORelativeDateTransformer - Release]
   Compile ./vendor/Pods/Pods-SORelativeDateTransformer-dummy.m
   Compile ./vendor/Pods/SORelativeDateTransformer/SORelativeDateTransformer/
           SORelativeDateTransformer.m
      Link ./vendor/Pods/.build/libPods-SORelativeDateTransformer.a
     Build ./vendor/Pods/Pods.xcodeproj [Pods - Release]
   Compile ./vendor/Pods/Pods-dummy.m
      Link ./vendor/Pods/.build/libPods.a
</pre>

<p>This feature would not have been possible without integrating the awesome <a href="https://github.com/mneorr/XCPretty">XCPretty</a> project, created by <a href="http://twitter.com/mneorr">Marin Usalj</a> and <a href="https://twitter.com/kattrali">Delisa Mason</a>.</p>

<p><strong>Proc#weak!</strong></p>

<p>Since RubyMotion relies entirely on the underlying iOS&#8217; retain count memory model, creating cyclic references is unfortunately possible.</p>

<p>In order to help developers avoid the creation of retain cycles, in the past we introduced the <a href="http://blog.rubymotion.com/2013/05/08/rubymotion-goes-2-0-and-gets-os-x-support.html-templates">WeakRef class</a> which can be used to create weak-references in Ruby and also a <a href="http://blog.rubymotion.com/2013/07/23/new-in-rubymotion-blocks-rewrite-retain-cycle.html">cycle detector</a> that can resolve basic cyclic references at runtime.</p>

<p>Sadly it was still possible to easily create cyclic references using blocks. Let us explain why.</p>

<p>A block in RubyMotion keep a strong reference to the object it was created from, bound as <tt>self</tt>, which prevents said object from being destroyed before the block can send messages to it.</p>

<pre class="highlight">
class Test
  def foo
    lambda { bar }
  end
  def bar
    p :here
  end
end

o = Test.new
b = o.foo
o = nil
b.call
</pre>

<p>In this case, the <tt>Test</tt> object will remain alive until the <tt>Proc</tt> object dies.</p>

<p>This behavior has the side effect of easily creating cyclic references.</p>

<pre class="highlight">
class MyController &lt; UIViewController
  def viewDidLoad
    @b = lambda {}
  end
end
</pre>

<p>In the snippet above, the <tt>Proc</tt> object keeps a reference to the  <tt>MyController</tt> object, and vice-versa, resulting in a cyclic reference. Because the cyclic detector is at this point not able to detect cycles outside autorelease pool contexts, both objects will leak.</p>

<p>This is where <tt>Proc#weak!</tt> can come handy. This method makes sure the given <tt>Proc</tt> object does not keep a strong reference to its <tt>self</tt> binding anymore.</p>

<p>The method always returns a reference to the receiver and can be safely called multiple times. The snippet above can be rewritten to prevent a cycle:</p>

<pre class="highlight">
class MyController &lt; UIViewController
  def viewDidLoad
    @b = lambda {}.weak!
  end
end
</pre>

<p>Now, <tt>MyController</tt> will still keep a strong reference to our <tt>Proc</tt> object, but the later will not. <tt>MyController</tt> can then be safely destroyed when it is no longer needed, along with the <tt>Proc</tt> object.</p>

<p>We believe that the addition of <tt>Proc#weak!</tt> was the last remaining piece to help RubyMotion developers prevent cycles in their apps. Some popular libraries (such as <a href="https://github.com/rubymotion/BubbleWrap">BubbleWrap</a>) and high-profile apps (such as <a href="http://blog.rubymotion.com/2013/11/22/rubymotion-success-story-bandcamp.html">Bandcamp</a>) are already successfully using it.</p>

<p><strong>Performance</strong></p>

<p>As you might have already seen from the previous build release notes, we have been working on performance improvements for the past few weeks.</p>

<p>We have been internally building an intensive performance suite. Our objective is to run it periodically against previous versions of RubyMotion in order to catch performance regressions. We are also running the suite against CRuby 2.0 with the goal of providing better performance results in every possible scenario.</p>

<p>This is a long process and we are not done yet, but we will publish the suite and the data online as soon as we have something we are pleased with.</p>

<p>In the meantime, if your app or library is experiencing performance issues, please let us know via a support ticket, attach some code and we will add it to the suite!</p>
]]></content:encoded>
      <dc:date>2013-12-29T14:37:00+01:00</dc:date>
    </item>
    <item>
      <title>Bandcamp</title>
      <link>http://www.rubymotion.com/references/success-stories/bandcamp</link>
      <description><![CDATA[Bandcamp is an online music store, as well as a platform for artist promotion, that caters mainly to independent artists.

Bandcamp recently launched their gorgeous new iPhone application and it has been written with RubyMotion!
]]></description>
      <pubDate>Fri, 22 Nov 2013 17:36:36 +0100</pubDate>
      <guid>http://www.rubymotion.com/references/success-stories/bandcamp</guid>
      <content:encoded><![CDATA[<div class="row_fluid block_spac_tb">
  <div class="col_7">
    <img src="/img/cases/bandcamp/illu.png" class="img_block" />
  </div>
  <div class="col_1" aria-hidden="true">&nbsp;</div>
  <div class="col_7">
    <h2>From Rails to RubyMotion.</h2>
    <p class="intro">The Bandcamp site is written in Rails, so all the engineers know Ruby. When they planned to write a native iPhone app for their platform, Bandcamp's head of engineering naturally suggested using RubyMotion.</p>
    <p>Using the same language made it easier for the other engineers to jump in the project.</p>
    <p>They still had to get familiar with iOS, but the learning curve was smoother, since the language wasn't getting in the way. Adding new features was painless, and when they look through the code, all the syntax is all straight up Ruby.</p>
  </div>
</div>

<div class="case_secondary_block bg_grey_light">
  <div class="row_fluid">
    <div class="col_7">
      <h3>Behind the curtains.</h3>
      <p>Bandcamp for iOS features a gorgeous user interface and a very reactive user experience, as you would certainly expect from a native app. Music is streamed and played as you tap, and the app makes use of iOS multitasking to keep playing in the background.</p>
      <p>The app uses SQLite through the <a href="https://github.com/ccgus/fmdb">FMDB</a> library for backend storage. Also, for historical reasons, a small part of the app is written in C. Because RubyMotion can easily integrate C-level code, it was as easy as pie.</p>
      <p>Since Bandcamp uses Ruby for both the iOS and the server-side apps, they were also able to share some of the code, such as a thread-safe in-memory cache class.</p>
    </div>
    <div class="col_1" aria-hidden="true">&nbsp;</div>
    <div class="col_7">
      <img src="/img/cases/bandcamp/illu2.gif" alt="bandcamp demo animated gif"></img>
    </div>
  </div>
</div>
]]></content:encoded>
      <dc:date>2013-11-22T17:36:36+01:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Success Story Bandcamp</title>
      <link>http://www.rubymotion.com/news/2013/11/22/rubymotion-success-story-bandcamp.html</link>
      <description><![CDATA[Bandcamp is an online music store, as well as a platform for artist promotion, that caters mainly to independent artists. Artists on Bandcamp have a customizable microsite with the albums they upload. All tracks can be played for free on the website and some artists offer free music downloads.

]]></description>
      <pubDate>Fri, 22 Nov 2013 07:31:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2013/11/22/rubymotion-success-story-bandcamp.html</guid>
      <content:encoded><![CDATA[<p><a href="http://bandcamp.com/">Bandcamp</a> is an online music store, as well as a platform for artist promotion, that caters mainly to independent artists. Artists on Bandcamp have a customizable microsite with the albums they upload. All tracks can be played for free on the website and some artists offer free music downloads.</p>

<p><a href="http://bandcamp.com/"><img src="https://31.media.tumblr.com/01721dc13e9a11093651b9bb6759640d/tumblr_inline_mxp1a55LTH1roo9mt.jpg" alt=""/></a></p>

<p>Bandcamp recently launched their <a href="http://blog.bandcamp.com/2013/10/25/its-over/">new iPhone application</a> and it has been written with RubyMotion. We sat down with Daniel Dickison to talk about his recent experience using Ruby to build an iOS app.</p>

<p><strong>So Daniel, you&#8217;re at Bandcamp, what&#8217;s your role over there?</strong></p>

<p>I am a programmer and sort of, the way we do things is all the engineers do a little bit of everything. We&#8217;re not too specialized, but obviously I&#8217;ve been working on the mobile app, so that&#8217;s been my thing for the better part of this year.</p>

<p><strong>It&#8217;s been a solo endeavor?</strong></p>

<p>Mostly, although definitely wasn&#8217;t totally solo. We have two dedicated designers on the team.  So the designers did the design and I did most of the coding.  Though a couple other people helped out during the process.</p>

<p><strong>Tell me a little about Bandcamp, what kind of a company is it?</strong></p>

<p>We do music.  It&#8217;s a music platform for mainly independent artists and also
labels.  So it&#8217;s a platform for people to put their music up and distribute it
and get paid directly from fans for buying music.  That&#8217;s sort of the main thing we do.</p>

<p><strong>Is it a pretty big startup?</strong></p>

<p>I don&#8217;t have much of a sense of whether we&#8217;re big relatively.  I don&#8217;t have
much of a context.  Let&#8217;s see I think we&#8217;re something about 15 employees now. We just celebrated our 5th anniversary, 5th birthday of Bandcamp was just a couple weeks ago, so we had a special blog post.</p>

<p><strong>That&#8217;s right!  With very cool ASCII art.</strong></p>

<p>Oh yeah that&#8217;s Moni, our designer, he&#8217;s the ASCII art master.</p>

<p><strong>Oh very cool!</strong></p>

<p>He does a lot of ASCII art stuff in the group IRC that we&#8217;re always on.</p>

<p><strong>It&#8217;s one of those things you&#8217;d expect to be a lost art, and instead it
proliferates.</strong></p>

<p>Mmhmm. It&#8217;s kinda fun, I don&#8217;t know how people make those, but I&#8217;m always impressed when it&#8217;s animated.</p>

<p><strong>I&#8217;m wondering more about the &#8220;Bandcamp platform&#8221;.  Is that to say that people build applications using your platform, or is it that you can build multiple applications with?</strong></p>

<p>Oh I meant platform, not in the technical sense, but as artists using the
site to promote their own music.  We don&#8217;t set prices, artists basically control their own Bandcamp page.  They can give music away for free, or for pay, name your price is like &#8220;the big thing&#8221; these days.</p>

<p><strong>So the web application has been around for five years?</strong></p>

<p>Yes, that&#8217;s basically what it was, exclusively, until the app.  And the app itself is a compliment to the site.</p>

<p><strong>What led to the mobile app?  What was lacking?</strong></p>

<p>There&#8217;s really, the one big thing was, when fans buy music on Bandcamp,
before the app, you would basically get a download for the music, whether it&#8217;s a track or an album.  If you wanted to listen to it on your phone you would have to download it on your computer, then load it onto itunes, then sync that to your iphone, which works, but is 5 steps more than we want people to have to do just to listen to what they bought on their phone.</p>

<p>So the big idea is if you buy something on the site, then you should be able to seamlessly listen to it on your phone, which is the first and main problem that we wanted to solve on the app.</p>

<p><strong>Gotcha, so you wanted a way to download directly to the device and play it, pretty much be one action.</strong></p>

<p>Yup!</p>

<p><strong>What led to the decision to use RubyMotion for the iOS app?</strong></p>

<p>That&#8217;s an interesting story!  So the site&#8217;s written almost all in Ruby, on
the server side, so all the engineers here know Ruby.  Personally I&#8217;ve done some iOS development, so I would have gone with Objective-C and written it that way, but Joe, who is head of engineering, I think he was familiar with <a href="http://macruby.org/">MacRuby</a> from before, so he heard about RubyMotion and suggested it, and the big plus is that it&#8217;s a lot easier for other engineers to jump on the project.  It&#8217;s a different API but the language is what we&#8217;re all used to doing on the server side already. So really that&#8217;s the big reason.</p>

<p><strong>Has anyone else reviewed your iOS code?</strong></p>

<p>Yeah, so actually after v1 went out, we&#8217;re working on new features, we
actually have another guy that&#8217;s doing iOS stuff almost full time now for
features, and Joe was another one who spent a good chunk of time working on the iOS app.</p>

<p><strong>How was it, introducing them to the organization of the code, and where things go, what was that learning curve like for them, for the new developer?</strong></p>

<p>I&#8217;d say, there&#8217;s still a learning curve, because the UIKit stuff, it&#8217;s a
pretty big API to wrap your head around, but it definitely seems like it&#8217;s a lot easier to add new features.  We look through the code and the syntax is all straight up Ruby.</p>

<p><strong>So the language isn&#8217;t getting in the way.</strong></p>

<p>Yeah, kind of an interesting aside, back when we were still prototyping the
app, I had an idea to do the UI as a Web view.  If that had panned out, it
would&#8217;ve been really cool because the backend code would&#8217;ve been all Ruby without a lot of the UIKit layers.  It would&#8217;ve been very straight up server type code on the backend with Ruby, and the frontend would&#8217;ve been HTML/Javascript.  We didn&#8217;t end up going that way in the end, because it worked pretty well, especially on iOS, it works really well, but it didn&#8217;t work that well on Android.  You lose most of the gains of doing it cross-platform anyways.</p>

<p><strong>Gotcha.  Let&#8217;s talk more about early prototyping.  Were you able to use
RubyMotion to your advantage there?</strong></p>

<p>I think so, a lot of simple things get <em>really</em> simple.  I&#8217;m thinking the
basic whether you&#8217;re matching regular expressions with strings, or iterating your arrays or working with hashes, that stuff is so much less verbose, doing it in RubyMotion.  And the other, I guess it&#8217;s both a pro and con, is not having to work in Xcode.  I use <a href="http://www.sublimetext.com/">Sublime Text</a> myself, but it&#8217;s nice being able to drop right in to the editor you already have customized and not having to have this gigantic IDE.  Although, it&#8217;s not so bad and definitely getting better.</p>

<p><strong>Actually for a while I was using Sublime Text and switching to Xcode to
compile, I would switch back and forth.  But it is a difference.  For me, Xcode doesn&#8217;t become part of my work flow as well.  I can integrate iterm and Sublime Text, I can have them talk to each other very easily.</strong></p>

<p>I feel like if you want to use Xcode to the full extent, you have to let
Xcode be the world.  Use storyboards, do everything in Xcode because
everything&#8217;s integrated well.</p>

<p><strong>What kind of RubyMotion tools were helpful, like what&#8217;s your workflow look like?</strong></p>

<p>We didn&#8217;t use a lot of <a href="http://cocoapods.org/">CocoaPods</a> or anything like that, this was a decision I made early on, because I&#8217;m familiar with Ruby and I&#8217;m familiar with UIKit and Foundation and all that, a lot of the nice Ruby wrappers I just wanted to write myself, just for maintainability, because you guys are iterating pretty quickly, and iOS SDK&#8217;s change, not as drastically but you do kinda have to stay on your toes to keep up to date with new APIs that come out, and get deprecated.  So it seemed like it might be a good idea just to do it all in our own custom code that we have a good understanding of and can easily change if we need to update it for various things.</p>

<p>My workflow is basically a terminal window open that&#8217;s firing off rake every time I need to compile, and a Sublime Text window and <a href="http://kapeli.com/dash">Dash</a> is awesome for documentation because when you don&#8217;t have the Xcode, I dunno what you call it, the assistant window, and option-click to get documentation, it&#8217;s super super useful to have Dash.</p>

<p><strong>I would agree that&#8217;s the thing that I would love to see implemented, is
autocompletion.  I guess <a href="http://www.jetbrains.com/ruby/">RubyMine</a> has a very good one but I haven&#8217;t seen one for Sublime Text.  I don&#8217;t know how&#8217;d you do that anyway, that analysis.</strong></p>

<p>Yeah, maybe this exists already but it&#8217;s probably possible to just hook up a
key binding to take whatever string your cursor&#8217;s currently in and hand that off to Dash.  Which I should probably look into, that would be pretty useful.</p>

<p><strong>What I would love is if I started to type UIControl and then I could choose
StateNormal, and it would flow off my fingers. Though, for that specific example I use SugarCube of course, it has helpers for that.</strong></p>

<p>I noticed recently that the <a href="https://github.com/RubyMotionJP/SublimeRubyMotionBuilder">Sublime Text plugin for RubyMotion</a> recently
updated for Sublime Text 3, I haven&#8217;t installed that yet, I should probably
check that out because I think a lot of it would just be having autocompletion for a lot of the constants.</p>

<p><strong>Do you use any gems or CocoaPods?</strong></p>

<p>No we don&#8217;t actually, we do use some third party libraries, which are pure
Objective-C.  <a href="https://github.com/ccgus/fmdb">FMDB</a> is Objective-C wrapper around Sqlite, and <a href="https://developer.apple.com/Library/ios/samplecode/Reachability/Introduction/Intro.html">Reachability</a> wrapper, just real simple Objective-C stuff.  We wrote some Objective-C ourselves. There&#8217;s a few parts, there&#8217;s an audio player, one of the main features we have, that we wanted, is to play a track we just bought, streaming, from the server, but we also wanted it to be cached for subsequent plays.  It turns out you can&#8217;t do that with the built-in <a href="https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVPlayer_Class/Reference/Reference.html">AVPlayer API</a>.  It&#8217;ll stream, but it won&#8217;t give you the data to cache it at the same time.  So we wrote a little audio player, using the audio queue API. So that&#8217;s a C API.  It may have been possible doing it in Ruby, but it was just easier just to drop into pure Objective-C and C.  So we have that.</p>

<p><strong>You expose that with Objective-C classes?</strong></p>

<p>Yeah it&#8217;s basically an Objective-C wrapper around the C API.  It basically
takes a file and we can play audio from a file as it&#8217;s being written out from
the server. So that&#8217;s a low level thing we had to write in Objective-C.</p>

<p><img src="http://bandcampblog.files.wordpress.com/2013/10/bandcamp-app-demo.gif?w=400&amp;h=297" alt="bandcamp gif"/></p>

<p><strong>Another thing that RubyMotion contributes to is the ability to organize code differently than you would in Objective-C, I wondered if you had any thoughts on that.</strong></p>

<p>Yeah, actually that&#8217;s kind of interesting, I hadn&#8217;t thought too much about
it&#8230; not having .h files for everything is quicker when you&#8217;re writing code,
you can just start pounding out code without having to switch back and forth, making sure your header and your exposed APIs, and worrying about that stuff. So it&#8217;s definitely faster, I think.</p>

<p><strong>Any other metaprogramming techniques that you rely on?</strong></p>

<p>Oh yeah let&#8217;s see, I think there were some.  There&#8217;s some utility base
classes that, depending on whether <a href="http://testflightapp.com/">TestFlight</a> SDK is defined or not, if it isn&#8217;t it&#8217;ll stub it out with a dummy class that pretends like TestFlight SDK is there. There&#8217;s definitely little funky Ruby meta-programming stuff that we can do that we throw in there.</p>

<p><strong>Were there any issues with RubyMotion things that hung you up?</strong></p>

<p>There&#8217;s definitely one thing that was a huge time sink which was the memory management, especially with blocks and multi threading.  I filed some bugs with you guys about this, and a lot of it got sorted out.</p>

<p><strong>Any feature requests, things you&#8217;d like to see, in terms of RubyMotion?</strong></p>

<p>Let&#8217;s see&#8230; that&#8217;s a good question I mean the profiling one would have been a huge one but you guys <a href="http://blog.rubymotion.com/2013/11/01/new-in-rubymotion-mavericks-eval-for-os-x.html">got it already</a>, that would&#8217;ve been one.  You know it&#8217;s actually pretty solid.  I think once you guys get this retain cycle and memory management stuff solid, I think that would make it, without question a solid platform to develop in.</p>

<p><strong>Great!  Any questions for our side?</strong></p>

<p>I&#8217;m curious, are you guys a distributed team?</p>

<p><strong>Yeah we&#8217;re all over!  I&#8217;m in Denver, I pretty much step in for the
interviews, for community projects, kind of poke around the mailing list as much as I can.  Most of the team is in Europe, though we&#8217;ve got Watson in Japan, in Tokyo.  So he and Laurent have been the main, core developers, though Eloy Duran is also entered into that world.</strong></p>

<p>We&#8217;re also distributed, it&#8217;s interesting to hear about other teams that do
that.  We do a daily Google Hangout meeting to give status, to keep up to date, I was wondering if you do stuff like that?</p>

<p><strong>Nothing so formal, we are always in <a href="http://hipchat.com">HipChat</a>, and it&#8217;s actually kinda fun because the sun never sets on the HipByte chat, because it transfers from Japan to America to Europe, and there&#8217;s this perfect 8 hour difference between each one, it just depends on who&#8217;s awake.  There&#8217;s always at least one person to hand it off.</strong></p>

<p>I think we&#8217;re pretty close to that! We have a guy in Australia who keeps the
lights on when everyone else is out, and then a guy in Oxford, and the rest of us are scattered around the Americas.  It&#8217;s pretty good for us, too, because if there is an emergency, there&#8217;s usually someone around there&#8217;s usually someone around to take care of it.</p>

<p><strong>We don&#8217;t get to take advantage of that, there&#8217;s usually not compiler
emergencies, like there is on the web.</strong></p>

<p>Haha emergencies accumulate a little more slowly.</p>

<p><strong>A little, yeah, and you can always fall back to a previous compiler version, usually that resolves it for the short term. Well Daniel I don&#8217;t have any more questions for you, I really appreciate you taking this time.  And I hope you continue to make apps using RubyMotion.</strong></p>

<p>Oh yeah we&#8217;re in it for the long haul with this app.  You&#8217;ll definitely hear
from us, I&#8217;m sure.</p>

<p><strong>Great, congratulations again on shipping!</strong></p>

<p>Thanks!  Have a good one!</p>
]]></content:encoded>
      <dc:date>2013-11-22T07:31:00+01:00</dc:date>
    </item>
    <item>
      <title>New Rubymotion Screencasts Motioninmotion</title>
      <link>http://www.rubymotion.com/news/2013/11/12/new-rubymotion-screencasts-motioninmotion.html</link>
      <description><![CDATA[(This is a guest post from Jack Watson-Hamblin (aka @FluffyJack), creator of MotionInMotion.)

]]></description>
      <pubDate>Tue, 12 Nov 2013 05:51:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2013/11/12/new-rubymotion-screencasts-motioninmotion.html</guid>
      <content:encoded><![CDATA[<p><em>(This is a guest post from Jack Watson-Hamblin (aka <a href="https://twitter.com/FluffyJack">@FluffyJack</a>), creator of MotionInMotion.)</em></p>

<p><a href="http://motioninmotion.tv">MotionInMotion</a> is launching very soon, and will be one of the screencasts of choice for many to expand their skills and keep them up to date.</p>

<p>I&#8217;ve been working away at getting ready to launch this as a new regularly released screencast for RubyMotion. To make sure I was creating good content you would be interested in, I got together 20 people for an early access group, and I&#8217;ve been getting great feedback from them as they&#8217;ve enjoyed the screencasts.</p>

<p>I’ve put together a pre-launch episode about <a href="https://twitter.com/qrush">Nick Quaranto’s</a> <a href="https://github.com/qrush/motion-layout">motion-layout wrapper</a>, and how I use it to take control of <a href="https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/VisualFormatLanguage/VisualFormatLanguage.html">Auto Layout</a> and quickly get it working in my iOS apps.</p>

<p>Everyone that sign’s up to the launch list on the <a href="http://upcoming.motioninmotion.tv/">coming soon page</a>, will get a 20% lifetime discount on their subscription when they subscribe in the first week after launch.</p>

<p>Enjoy!</p>

<iframe src="http://fast.wistia.net/embed/iframe/m0mjzryw2b" allowtransparency="true" frameborder="0" scrolling="no" class="wistia_embed" name="wistia_embed" allowfullscreen mozallowfullscreen webkitallowfullscreen oallowfullscreen msallowfullscreen width="650" height="394"></iframe>
]]></content:encoded>
      <dc:date>2013-11-12T05:51:00+01:00</dc:date>
    </item>
    <item>
      <title>New In Rubymotion Mavericks Eval For Os X</title>
      <link>http://www.rubymotion.com/news/2013/11/01/new-in-rubymotion-mavericks-eval-for-os-x.html</link>
      <description><![CDATA[New functionality arrived in RubyMotion, let&#8217;s cover what&#8217;s new!

]]></description>
      <pubDate>Fri, 01 Nov 2013 07:34:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2013/11/01/new-in-rubymotion-mavericks-eval-for-os-x.html</guid>
      <content:encoded><![CDATA[<p>New functionality arrived in RubyMotion, let&#8217;s cover what&#8217;s new!</p>

<p><strong>OS X 10.9 Mavericks</strong></p>

<p>RubyMotion is now fully compatible with OS X&#8217;s latest release, <a href="http://www.apple.com/osx/">Mavericks</a>. The iOS toolchain works on Mavericks and you can also create Mavericks OS X apps with it.</p>

<p>In case you have been waiting for the green light to update: feel free to do so now! Make sure you also grab the latest Xcode from the App Store and install the command-line tools.</p>

<p>The RubyMotion toolchain still supports 10.6 Snow Leopard but we highly recommend upgrading to a newer version of OS X at this point.</p>

<p><strong>#eval for OS X</strong></p>

<p>Originally, RubyMotion was iOS-only and the <tt>#eval</tt> method was not implemented by design, as we did not want RubyMotion apps to interpret/compile code at runtime on iOS devices.</p>

<p>Now, RubyMotion can be used to make OS X apps and Macs do not have the same constrains as iOS devices. Therefore, we are making <tt>#eval</tt> optionally functional for OS X projects.</p>

<p>In order to enable #eval for your OS X project, you can set the <tt>app.eval_support</tt> variable to true in your <em>Rakefile</em>.</p>

<pre class="highlight">
Motion::Project::App.setup do |app|
  ...
  app.eval_support = true
end
</pre>

<p>Enabling #eval will copy the RubyMotion JIT compiler inside your application&#8217;s bundle, increasing its size by 28MB.</p>

<p>Please note that <tt>#eval</tt> support for OS X is experimental and is not properly optimized in terms of runtime speed and memory usage, so use it carefully and report us any problem you find!</p>

<p><strong>Instruments</strong></p>

<p>The RubyMotion build system now exposes a set of Rake tasks to profile your project with Apple&#8217;s <a href="https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/Introduction/Introduction.html">Instruments</a> application. Symbols metadata (such as source file/line) are also integrated.</p>

<p>On iOS, the <tt>rake profile:simulator</tt> and <tt>rake profile:device</tt> tasks can be used to attach Instruments to either your application running in the iOS simulator or in your iOS device. By default, rake profile will target the simulator.</p>

<pre class="highlight">
$ rake profile # same as profile:simulator
$ rake profile:device
</pre>

<p>On OS X, the rake profile task will attach Instruments to a development build of your OS X project.</p>

<p>All tasks will profile a development build of your project, making it easy to get going and not have to deal with code-signing. However, before submitting your application to the App Store we recommend you profile a release build instead. For this you can use the <tt>rake profile:release</tt> task for OS X apps or set the <tt>mode</tt> environment variable to <em>release</em> for iOS apps:</p>

<pre class="highlight">
$ rake profile mode=release
</pre>

<p>When Instruments.app starts you will have the ability to select a template that should be used for the profiling session. The <em>Allocations</em> template can be used to measure memory allocations and the <em>Time Profiler</em> template will sample the runtime activity of your process.</p>

<p>In case you would like to configure the template that should be used from the command-line, you can set a value for the <tt>template</tt> environment variable.</p>

<pre class="highlight">
$ rake profile template="Time Profiler"
</pre>

<p><strong>Xcode Asset Catalogs</strong></p>

<p>Since RubyMotion 2.11 we have introduced support for <a href="https://developer.apple.com/library/ios/recipes/xcode_help-image_catalog-1.0/Recipe.html">Xcode Asset Catalogs</a>.</p>

<p>These allow you to manage your image assets without having to name your image assets with the many filename modifiers required to support the various devices (e.g. <em>@2x</em>, <em>~ipad</em>, etc). When an asset catalog is placed in the <em>resources</em> directory of your project, RubyMotion will automatically compile it into your application and you can simply reference the assets by their base names.</p>

<p>Currently RubyMotion supports general image sets and application icon image sets, launch image set support is still forthcoming.</p>
]]></content:encoded>
      <dc:date>2013-11-01T07:34:00+01:00</dc:date>
    </item>
    <item>
      <title>Eloy Duran Joins The Rubymotion Team</title>
      <link>http://www.rubymotion.com/news/2013/09/29/eloy-duran-joins-the-rubymotion-team.html</link>
      <description><![CDATA[We are extremely honored to announce a new and very special addition to our team. Eloy Durán has accepted to join us at HipByte as our 3rd full-time developer!

]]></description>
      <pubDate>Sun, 29 Sep 2013 16:48:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2013/09/29/eloy-duran-joins-the-rubymotion-team.html</guid>
      <content:encoded><![CDATA[<p>We are extremely honored to announce a new and very special addition to our team. <a href="http://twitter.com/alloy">Eloy Durán</a> has accepted to join us at HipByte as our 3rd full-time developer!</p>

<p><a href="http://twitter.com/alloy"><img src="http://media.tumblr.com/dd949846201bae1a90c960668286751e/tumblr_inline_mtwnl5S1p31roo9mt.png" alt=""/></a></p>

<p>Many of you may already be familiar with Eloy. He is the creator and one of the maintainers of <a href="http://cocoapods.org/">CocoaPods</a>, the best way to manage library dependencies in Cocoa projects. A long time Ruby and Cocoa-ist, Eloy joined the <a href="http://rubycocoa.sourceforge.net/">RubyCocoa</a> project in 2006 and later on the <a href="http://macruby.org/">MacRuby</a> project in 2008. Eloy then got to work with RubyMotion since it was still under heavy development and he also contributed its <a href="http://blog.rubymotion.com/2012/07/04/functional-view-and-controller-testing-with.html-rubymotion">functional testing framework</a>.</p>

<p>When he does not make computers do things, Eloy likes to make music, play video games and gesticulate. He lives with his lovely wife and cat and dog on a <a href="http://courses.nus.edu.sg/course/ecswong/trip/prinsengracht.jpg">canal houseboat</a> in beautiful Amsterdam, the Netherlands.</p>

<p>Getting Eloy on the team is a special milestone for us, as we have personally worked with him for a very long time. He was naturally one of the best candidates we could think of to join us on this journey and we have no doubts he will be a great addition. Eloy will be contributing full-time to the RubyMotion toolchain by working on the existing feature-set as well as some new functionality that we have in the pipeline.</p>

<p>As you may already know, CocoaPods is a crucial piece of infrastructure in the RubyMotion ecosystem, as it provides a convenient bridge to the open source Cocoa community. We are therefore also happy to mention that Eloy will get to work on CocoaPods on company time. HipByte however does not intend to change the way CocoaPods is developed and CocoaPods will remain an open source <a href="https://github.com/CocoaPods/CocoaPods/graphs/contributors">community project</a>.</p>

<p>Eloy comes to us after a 5 years tenure at <a href="http://www.fngtps.com/">Fingertips</a>, a design and development consulting agency that does not need to be introduced and that we <a href="http://www.fngtps.com/services#laurent">highly recommend</a>.</p>

<p>HipByte is deliberately 100% bootstrapped without outside funding and our revenues are growing every month, thanks to your support and the licenses you have purchased. The direct result is that we get to grow the team organically while strengthening our commitment that we are really here for the long term.</p>
]]></content:encoded>
      <dc:date>2013-09-29T16:48:00+02:00</dc:date>
    </item>
    <item>
      <title>Frontback</title>
      <link>http://www.rubymotion.com/references/success-stories/frontback</link>
      <description><![CDATA[Frontback is a fun new camera app. Take a photo with the front camera, another with the back camera, and share them both in a single image.

The app was lovingly built using RubyMotion, got excellent coverage in the press, and was selected by Apple as one of their "Best New Apps!".
]]></description>
      <pubDate>Wed, 18 Sep 2013 18:36:36 +0200</pubDate>
      <guid>http://www.rubymotion.com/references/success-stories/frontback</guid>
      <content:encoded><![CDATA[<div class="row_fluid block_spac_tb">
  <div class="col_7">
    <img src="/img/cases/frontback/illu.png" class="img_block" />
  </div>
  <div class="col_1" aria-hidden="true">&nbsp;</div>
  <div class="col_7">
    <h2>It was very clear that I was going to build Frontback with RubyMotion.</h2>
    <p class="intro">Melvyn Hills didn't find it possible to build Frontback using Web technologies. A native app was needed. He didn't know iOS, but he knew Ruby, so he gave RubyMotion a try.</p>
    <p>After a few days, Melvyn enjoyed RubyMotion so much. It was so easy to get on tracks simply by reading the iOS APIs documentation. With a Web-frontend background, he felt at home. Not having to use Xcode was also a big win.</p>
  </div>
</div>

<div class="case_secondary_block bg_grey_light">
  <div class="row_fluid">
    <div class="col_7">
      <h3>Behind the curtains.</h3>
      <p>With over one million downloads, Frontback is one of the most deployed RubyMotion app. They got a lot of press, and thanks to Ruby's concise syntax and dynamism, they were able to keep adding new features and refactoring the code base at peace. </p>
      <p>Frontback uses the <a href="https://github.com/rubymotion/BubbleWrap">BubbleWrap</a> wrapper to implement a lot of iOS concepts, such as HTTP, Pub/Sub, JSON, location and timers, as well as a lot of Objective-C libraries via the <a href="http://cocoapods.org">CocoaPods</a> package management system.</p>
      <p>The team uses <a href="http://www.jetbrains.com/ruby/specials/rubymotion_ide.jsp">RubyMine</a> to debug the code, and <a href="http://revealapp.com/">Reveal</a> to debug the user interface.</p>
    </div>
    <div class="col_1" aria-hidden="true">&nbsp;</div>
    <div class="col_7">
      <object id="bloomberg_video" data='http://www.bloomberg.com/video/embed/xZLkMHJVSBiShPtPjopYmg?height=360&width=560' width=560 height=360 style='overflow:hidden;'></object>
    </div>
    <script type="text/javascript">
      (function() {
        $(".vjs-control-bar").show();
      })();
    </script>
  </div>
</div>
]]></content:encoded>
      <dc:date>2013-09-18T18:36:36+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Success Story Frontback</title>
      <link>http://www.rubymotion.com/news/2013/09/18/rubymotion-success-story-frontback.html</link>
      <description><![CDATA[Frontback was launched in early August and distinguished itself immediately among a sea of camera apps.  Frontback is unique in that it includes the photographer in all the photos.

]]></description>
      <pubDate>Wed, 18 Sep 2013 11:37:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2013/09/18/rubymotion-success-story-frontback.html</guid>
      <content:encoded><![CDATA[<p><a href="http://frontback.me/">Frontback</a> was launched in early August and distinguished itself immediately among a sea of camera apps.  Frontback is unique in that it includes the photographer in all the photos.</p>

<p>Frontback got an excellent coverage in the tech press since its launch: <a href="http://techcrunch.com/2013/09/01/five-forces-fueling-frontbacks-fame/">TechCrunch</a>, <a href="http://www.theverge.com/2013/7/22/4544982/frontback-app-for-iphone">The Verge</a>, <a href="http://news.cnet.com/8301-1023_3-57599798-93/with-frontback-there-are-two-sides-to-every-iphone-photo/">CNET</a>, <a href="http://thenextweb.com/apps/2013/09/18/frontback-update-adds-tap-to-focus-image-flipping-and-lets-you-explore-without-an-account/">The Next Web</a>, and many more. It was also featured on <a href="http://www.bloomberg.com/video/-frontback-the-fast-growing-photo-app-xZLkMHJVSBiShPtPjopYmg.html">Bloomberg TV</a> and users of the app include Twitter creator <a href="https://twitter.com/jack/status/367749118308802561/photo/1">Jack Dorsey</a> and prime minister of Belgium <a href="https://scontent-b-ams.xx.fbcdn.net/hphotos-prn2/1238880_508361429239833_628222612_n.jpg">Elio Di Rupo</a>.</p>

<p><a href="http://frontback.me"><img src="http://media.tumblr.com/afc3e20f279c961f6e4e20dc45a10127/tumblr_inline_mtccwskafO1roo9mt.png" alt=""/></a></p>

<p>The app is excellent, and was lovingly built using RubyMotion.  We had a chance to hear how its creator, <a href="https://twitter.com/melvynhills">Melvyn Hills</a>, created the app. Melvyn lives in Brussels. He helped create <a href="http://checkthis.com">Checkthis</a> using Ruby-on-Rails, Slim, CoffeeScript, and Sass after leaving the world of Flash/ActionScript. Like many programmers, he got his start on a programmable calculator (a CASIO, if you must know).</p>

<p><strong>What was the inspiration to create Frontback?</strong></p>

<p>3 months ago, <a href="https://twitter.com/fredd">Frédéric</a> did a post on Checkthis app with two pics, one with the front camera &amp; one with the back, with only a &#8220;Front Back&#8221; title. On that weekend there were dozens of other &#8220;Front Back&#8221; posts, and a lot still afterwards. This made us think about a simpler product for just that purpose: me &amp; what I see, right now. The Selfie with an excuse.</p>

<p>You take the first picture in front of you in the first top half of the screen,
then one at the back of your phone: you. Then you select your current location, choose where to share it and that&#8217;s it. By connecting your 3rd party social networks, you auto-follow all your friends on Frontback and can browse a feed with their frontback posts and some staff-picks.</p>

<p><strong>What made you decide to use RubyMotion?</strong></p>

<p>We wanted to build a quick prototype, so I first did a bit of research about
whether it was doable with Web technologies on iOS… but no :) I already had heard a lot about RubyMotion through Yannick Schutz &amp; Laurent Sansonetti and even went to the awesome #inspect conference in Brussels, and I have a bit of experience with Ruby (none with Obj-C/iOS) so I thought about giving RubyMotion a shot. After a few days, I enjoyed it so much, it was so easy to get on tracks simply by reading the iOS APIs docs, it was very clear for me that I was going to build the whole app with RubyMotion. I really felt at home with my AS3 &amp; CoffeeScript background.</p>

<p><strong>So you came to iOS development from a frontend-web background.  What were some of your early challenges?</strong></p>

<p>The main challenge I had to deal with was memory/cache management &amp; performance for many pictures. Our app consists mainly of an infinite feed of full-screen pictures. I had to deal with async infinite loading, image download &amp; decompression in a background thread to keep iOS users happy with their beloved 60fps smooth scrolling they&#8217;re so used to. I finally ended up using BubbleWrap HTTP module with a custom NSCache wrapper with disk caching fallback. At first I used a UITableView, but I needed more than two cells (automatically handled by UITableView) so I used a paginated UIScrollView with a custom cell-pooling technique.</p>

<p><strong>Once you had a better grasp of the framework, what helped you be the most productive?</strong></p>

<p>Other than Apple&#8217;s iOS documentation &amp; StackOverflow, <a href="https://github.com/rubymotion/BubbleWrap">BubbleWrap</a> was a great help for many things such as HTTP, Pub/Sub, JSON, Location, timers,…</p>

<p><a href="https://twitter.com/mattt">Mattt Thompson</a>'s libs and blog helped a lot too. AFNetworking (but later switched to BubbleWrap), AFUrbanAirshipClient, &#8230;</p>

<p>Reveal app is a great tool to debug your views. And <a href="http://cocoapods.org/">CocoaPods</a> is awesome, I used much more pods than gems actually.</p>

<p><strong>What would you say to someone who was trying to choose between RubyMotion and traditional iOS development?</strong></p>

<p>With RubyMotion, it&#8217;s easier to get on board. Every line you write is needed application logic, nothing more. It&#8217;s cleaner &amp; easier to read &amp; write, especially if you come from a Ruby/Python/CoffeeScript background. The fact you don&#8217;t have to use XCode is a big win. For debugging, however, it&#8217;s a bit more difficult. Dealing with GDB isn&#8217;t easy. I&#8217;m trying <a href="http://www.jetbrains.com/ruby/">RubyMine</a> right now, it seems to help.</p>

<p><strong>What lessons did you learn from building Frontback?  In other words, what will you do differently when you go to build your next app?</strong></p>

<p>I&#8217;m quite happy with our codebase &amp; overall quality of the app. I&#8217;d probably abstract some of basic &amp; repeating functionalities. I&#8217;d also might use some view layout/styling abstraction like Teacup. I didn&#8217;t use it this time because I wanted to first really understand how layout &amp; view management works on iOS. Our app is visually simple &amp; has a clean flat design, so it wasn&#8217;t too much of a hassle to code by hand.</p>

<p><strong>If you had one request for the HipByte team, what would it be?</strong></p>

<p>Write a thorough article about threads &amp; GCD with RubyMotion. And another about memory management: how to properly cache stuff, release objects &amp; handle memory leaks. These are the most difficult topics I think, coming from a web development background.</p>

<p><a href="http://www.bloomberg.com/video/-frontback-the-fast-growing-photo-app-xZLkMHJVSBiShPtPjopYmg.html"><img src="http://media.tumblr.com/e00bd95fde6fd7daa8309fe32b06e91a/tumblr_inline_mtbwvgng551roo9mt.png" alt=""/></a></p>

<p><strong>The new version of your app brings lots of new features.  It was even featured in <a href="http://www.bloomberg.com/video/-frontback-the-fast-growing-photo-app-xZLkMHJVSBiShPtPjopYmg.html">Bloomberg TV</a>!  How difficult was it to add these features to an existing code base?  Did you have to plan for these features, or was it easy to add them on as needed?</strong></p>

<p>Yes indeed, the app is getting some pretty good coverage and momentum right now. The new version brings many new features to add a real social layer: likers view, profile view, followers/following view, friends finder and a single post view, all navigable from one to another.</p>

<p>We didn&#8217;t plan everything from the beginning, as we first observed our user base usage of the app before deciding what was the next features we wanted to add. We didn&#8217;t encounter any problem for adding those features into the existing codebase, which was already quite well decoupled and structured. The nice thing I like about Ruby, compared to Obj-C, is that the codebase remains smaller and cleaner: no header file for each implementation (half the number of files!), smaller lines, methods and classes. This makes code refactoring much easier.</p>

<p>The biggest change I had to do was to handle global navigation throughout the app: how the UINavigationControllers handle the horizontal browsing, combined with the different sections that can be presented modally. I ended up with a pretty nice base class for my UIViewControllers with some simple methods to navigate everywhere in the app, using global notifications transparently under the hood.</p>
]]></content:encoded>
      <dc:date>2013-09-18T11:37:00+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Training In Mexico City</title>
      <link>http://www.rubymotion.com/news/2013/09/16/rubymotion-training-in-mexico-city.html</link>
      <description><![CDATA[(This is a guest post for Norberto Ortigoza, RubyMotion training instructor)

]]></description>
      <pubDate>Mon, 16 Sep 2013 13:08:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2013/09/16/rubymotion-training-in-mexico-city.html</guid>
      <content:encoded><![CDATA[<p><em>(This is a guest post for Norberto Ortigoza, RubyMotion training instructor)</em></p>

<p>Hi everyone! We are again preparing a great class for you! This time, it will take place in Mexico City between the 25th and 29th November 2013. More information on <a href="https://cocoaheadsmx.stagehq.com/events/2484">this page</a>.</p>

<p><a href="https://cocoaheadsmx.stagehq.com/events/2484"><img src="http://media.tumblr.com/1e07c82e173a1c4b60e32e796424b382/tumblr_inline_mt8av3ag3X1roo9mt.jpg" alt=""/></a></p>

<p>It is our <a href="http://www.rubymotion.com/support/training/">classic 5 day class</a>, but we have been working on improving it and synchronizing the material with the latest versions of RubyMotion and iOS. Laurent and Norberto will be the instructors.</p>

<p>We are going to give the class in English and Spanish (Laurent has been working very hard to improve his Spanish). Non-Spanish speakers are therefore very welcome to the class.</p>

<p>The weather in November in Mexico City is great, the temperature is normally at 21C / 70F.</p>

<p>The cost of the course includes:</p>

<ol><li>Breakfast</li>
<li>A Rubymotion training license</li>
<li>An assistant certificate</li>
</ol><p>You can <a href="https://cocoaheadsmx.stagehq.com/events/2484">purchase a seat</a> today. At the time of this writing the class is already half full, so hurry up! We are also running a discounted price until the end of October.</p>

<p>If you have any question feel free to <a href="mailto:training@rubymotion.com">drop us an email</a>. We can also assist you if you need help and tips to travel to Mexico.</p>

<p>This RubyMotion training would not be possible without our awesome sponsor, <a href="http://www.diverza.com/">Diverza</a>.</p>

<p><a href="http://www.diverza.com/"><img src="http://media.tumblr.com/c01f2502955f2b6e7bddc57d482b2c29/tumblr_inline_mwo9cd20881roo9mt.png" alt=""/></a></p>

<p>See you there!</p>
]]></content:encoded>
      <dc:date>2013-09-16T13:08:00+02:00</dc:date>
    </item>
    <item>
      <title>New In Rubymotion Faster Builds 64 Bit Ios Ios</title>
      <link>http://www.rubymotion.com/news/2013/09/12/new-in-rubymotion-faster-builds-64-bit-ios-ios.html</link>
      <description><![CDATA[RubyMotion 2.8 is available, featuring a few significant changes.

]]></description>
      <pubDate>Thu, 12 Sep 2013 07:41:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2013/09/12/new-in-rubymotion-faster-builds-64-bit-ios-ios.html</guid>
      <content:encoded><![CDATA[<p>RubyMotion 2.8 is available, featuring a few significant changes.</p>

<p><strong>Faster Builds</strong></p>

<p>As the RubyMotion ecosystem matures, projects tend to include more and more libraries. Some of you guys have been experiencing long build times, especially on lightweight hardware.</p>

<p>As of RubyMotion 2.8, the compiler has been significantly improved to reduce build time by a <strong>factor of 3</strong> on average. A lot of internal changes have been introduced to improve performance and the compiler also emits straight assembly, which helps eliminate one compilation phase.</p>

<p><img src="http://media.tumblr.com/d88ae195aab14171e359d00e8db58289/tumblr_inline_mt0iqqPoNV1qz4rgp.png" alt=""/></p>

<p>We also ported the compiler to the latest stable version of LLVM, version 3.3, which was released in late June of this year. This version matches the one Apple uses inside Xcode, and it is also relatively faster than the older version that we were using previously.</p>

<p>The iOS build system will also target the lowest device architecture possible in development mode, so that <tt>rake device</tt> does not have to create a fat binary.</p>

<p><strong>64-bit iOS</strong></p>

<p>You may have heard that iOS is going 64-bit! The new <a href="http://www.apple.com/iphone-5s/">iPhone 5s</a> will feature an impressive 64-bit ARM architecture. The iOS 7.0 SDK has also been accordingly updated with 64-bit libraries.</p>

<p>RubyMotion 2.8 is able to create 64-bit binaries for both the simulator and the iPhone 5S, respectively targeting the x86_64 and arm64 architectures.</p>

<p>64-bit iOS executables should have greater performance compared to 32-bit ones. The range of Fixnums and Float immediate objects is doubled, allowing the runtime to not allocate extra memory when creating large numeric types. Also, the compiler can now make use of <a href="http://llvm.org/docs/ExceptionHandling.html#itanium-abi-zero-cost-exception-handling">zero-cost Itanium/C++ exceptions</a> to implement Ruby exceptions, allowing handlers to have a zero runtime cost during the normal execution of the app.</p>

<p>Given the fact that iOS 64-bit has just been announced 2 days ago and that a lot of 3rd-party libraries may not have been updated yet, RubyMotion will not compile 64-bit apps by default. If you&#8217;re interested in doing so, you can add the following lines in your Rakefile.</p>

<pre class="highlight">
app.archs['iPhoneOS'] &lt;&lt; 'arm64'
app.archs['iPhoneSimulator'] &lt;&lt; 'x86_64'
</pre>

<p>It&#8217;s pretty experimental, so give it a try and let us know if you experience anything weird!</p>

<p><strong>iOS 7.0 GM</strong></p>

<p>RubyMotion supported every beta version of iOS 7.0 as they were being released. Two days ago, Apple finally announced that iOS 7.0 will be available to everyone on September 18th, and provided a last SDK build, the <em>gold master</em>.</p>

<p>RubyMotion 2.8 provides support for <a href="https://developer.apple.com/ios7/">iOS 7.0 GM</a>. You can finally go ahead and submit your iOS 7.0 apps!</p>
]]></content:encoded>
      <dc:date>2013-09-12T07:41:00+02:00</dc:date>
    </item>
    <item>
      <title>New In Rubymotion Versioning Bundler Run On</title>
      <link>http://www.rubymotion.com/news/2013/08/26/new-in-rubymotion-versioning-bundler-run-on.html</link>
      <description><![CDATA[RubyMotion 2.7 is now available, featuring a lot of changes. Let&#8217;s go with the major ones.

]]></description>
      <pubDate>Mon, 26 Aug 2013 08:34:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2013/08/26/new-in-rubymotion-versioning-bundler-run-on.html</guid>
      <content:encoded><![CDATA[<p>RubyMotion 2.7 is now available, featuring a lot of changes. Let&#8217;s go with the major ones.</p>

<p><strong>Versioning</strong></p>

<p>RubyMotion now offers a way to let you save older versions of RubyMotion on your computer. Older versions of RubyMotion can be used on a per-app basis. This can be useful when you want one of your apps to target a specific version of RubyMotion, because it hasn&#8217;t been well tested with newer versions or because of a known issue in newer builds.</p>

<p>To save an older version of RubyMotion, you can pass the <tt>&#8212;cache-version</tt> flag to the <tt>motion update</tt> command.</p>

<p>As an example, let&#8217;s say we have an app that must target RubyMotion 2.6. First, we retrieve that specific version of RubyMotion.</p>

<pre class="highlight">
$ sudo motion update --cache-version=2.6
Connecting to the server...
Downloading software update...
######################################################################## 100.0%
Saving current RubyMotion version...
Installing software update...
Restoring current RubyMotion version...
RubyMotion 2.6 installed as /Library/RubyMotion2.6. To use it in a project, edit the Rakefile to point to /Library/RubyMotion2.6/lib instead of /Library/RubyMotion/lib.
</pre>

<p>As you can see, we now have RubyMotion 2.6 in <em>/Library/RubyMotion2.6</em>. We can now edit the <em>Rakefile</em> of our app to point to that version. You should see the following line at the top of the file.</p>

<pre class="highlight">
$:.unshift("/Library/RubyMotion/lib")
</pre>

<p>We can change it to the following, and we are done.</p>

<pre class="highlight">
$:.unshift("/Library/RubyMotion2.6/lib")
</pre>

<p>When you no longer need to keep RubyMotion 2.6 around, you can simply delete the <em>/Library/RubyMotion2.6</em> directory.</p>

<p><strong>Bundler</strong></p>

<p>New iOS and OS X RubyMotion projects now automatically integrate with <a href="http://bundler.io/">Bundler</a>, which had not been the case before. Projects will now include a <em>Gemfile</em> that you can edit to add your dependencies, and the <em>Rakefile</em> will require and initialize Bundler.</p>

<p>After running a <a href="http://strawpoll.me/317845/r">quick poll</a> on Twitter we realized that the vast majority of our users wanted this integration. For those who are not using Bundler, don&#8217;t worry, new projects will keep working as before if you do not have the Bundler gem installed in your Ruby distribution.</p>

<p><strong>Run on Device</strong></p>

<p>The <tt>rake device</tt> task has been improved to run the application as soon as it is installed. Logs printed by the app (using the <tt>NSLog</tt> function) will also appear in the terminal.</p>

<pre class="highlight">
$ rake device
    Deploy ./build/iPhoneOS-7.0-Development/Timer.ipa
*** Application is running on the device, use ^C to quit.
Aug 26 15:27:36 lrzs-iPhone Timer[1493] <warning>: user clicked start
Aug 26 15:27:38 lrzs-iPhone Timer[1493] <warning>: user clicked stop
[...]
</warning></warning></pre>

<p>The app will quit as soon as you press <tt>^C</tt>.</p>

<p>In case you do not want to run the app after installation, you can set the <tt>install_only</tt> option to any value.</p>

<pre class="highlight">
$ rake device install_only=1
</pre>

<p>Before this change the only way to run the app on the device was to attach a debugger (passing the <tt>debug=1</tt> option), which wasn&#8217;t a great user experience.</p>

<p><strong>Device Console</strong></p>

<p>The <tt>motion device:console</tt> command has been added, which will open the logs on the USB-connected device and print them in real-time.</p>

<p>All messages from the device will be printed, including those from other apps or the system itself. This command can be useful when investigating an environmental issue with your application, as you get to see what&#8217;s happening on the device.</p>

<p><strong>Better iOS 7 Support</strong></p>

<p>RubyMotion 2.7 comes with better support for iOS 7. First, we synchronized the toolchain with the latest Xcode 5 and iOS 7 beta builds.</p>

<p>The mouse-over functionality in the REPL that lets you select views has been implemented in the Retina simulator, which is the default when targeting iOS 7. Note that it will work only if the simulator has a 50% scale (use <em>command+3</em> to enable this).</p>

<p>Attaching the LLDB debugger, which is the default and only provided debugger as of Xcode 5, is now working on apps running on the device. The <tt>rake device debug=1</tt> task will work as expected on iOS 7 devices, the only exception being that we will attach lldb and not gdb. This feature, while being functional, is still under development as there are some performance issues when communicating with the device debug server.</p>

<p>The build system has been improved to recognize and handle SpriteKit texture atlas files. Please check the relevant documentation in the Apple developer center to know more.</p>

<p>Finally, we changed the compiler to work around a possible regression in the iOS 7 runtime which was appearing when using certain APIs from MapKit.</p>
]]></content:encoded>
      <dc:date>2013-08-26T08:34:00+02:00</dc:date>
    </item>
    <item>
      <title>Bubbleconf Discount For Rubymotion Users</title>
      <link>http://www.rubymotion.com/news/2013/08/08/bubbleconf-discount-for-rubymotion-users.html</link>
      <description><![CDATA[TL;DR: BubbleConf, an inspiring tech conference on design, development and experience sharing by field experts at a fraction of the cost of comparable conferences. It will be held on September 27th in the impressive Beurs van Berlage, in the beautiful city of Amsterdam, Netherlands. RubyMotion customers can get a nice discount: file a support ticket and get your special URL to buy your tickets today, for €160 instead of €220!

]]></description>
      <pubDate>Thu, 08 Aug 2013 12:50:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2013/08/08/bubbleconf-discount-for-rubymotion-users.html</guid>
      <content:encoded><![CDATA[<p><em>TL;DR: <a href="http://www.bubbleconf.com/">BubbleConf</a>, an inspiring tech conference on design, development and experience sharing by field experts at a fraction of the cost of comparable conferences. It will be held on September 27th in the impressive <a href="http://www.beursvanberlage.nl/">Beurs van Berlage</a>, in the beautiful city of Amsterdam, Netherlands. RubyMotion customers can get a nice discount: file a support ticket and get your special URL to buy your tickets today, for €160 instead of €220!</em></p>

<p><br/></p>

<p><a href="http://www.bubbleconf.com"><img src="http://media.tumblr.com/e9f9cb298484066fa7deb94042f968b9/tumblr_inline_mr82cvC2Ip1qz4rgp.png" alt=""/></a></p>

<p><br/></p>

<p>After the successful first edition of BubbleConf in 2012 also in 2013&#160;<a href="http://www.phusion.nl/">Phusion</a> and <a href="http://www.nedap.com/">Nedap</a> are organizing this inspiring tech conference. BubbleConf is a conference for tech startups by tech startups. Although Nedap is a publicly traded tech company they have managed to keep the startup culture deeply embedded in their DNA.</p>

<p>“How is this conf going to be any different from the other million confs currently out there?” you might be wondering. Well for one, BubbleConf is dedicated to covering a wide range of topics instead of committing to a single one. They are topics that the organization believes are essential for today’s tech startups ranging from design, development to even the legal aspects of having a startup. Needless to say, a select number of speakers that are considered experts in their field have been selected to share their war stories with you.</p>

<p><a href="http://www.bubbleconf.com/"><img src="http://www.beursvanberlage.nl/assets/Algemeen/Zalen/Effectenbeurszaal/Yakult-Zaal-overzicht.jpg" alt="BubbleConf venue1"/></a></p>

<p>The folks behind BubbleConf went all out in securing some of the best speakers in the business for the 2013 edition of their conference. <a href="http://www.zedshaw.com/">Zed Shaw</a>, the prolific programmer who gave up coding for various enterprises to work on teaching people to code, will once again take the stage at BubbleConf. This will be his last talk however as he will be retiring from speaking at tech conferences after BubbleConf 2013. His “Learn Code The Hard Way” Series have been read by over a million people from all over the world. Designers will be delighted to learn that <a href="http://dribbble.com">Dribbble</a> founders <a href="http://www.simplebits.com/">Dan Cederholm</a> and <a href="http://www.thornett.com/">Rich Thornett</a> will be speaking at BubbleConf about arguably the hottest design community currently out there. They will share their thoughts on bootstrapping, design and pretty much anything you want to ask them in a Q&amp;A session. Apple Design Award winners Koen Bok and Jorn van Dijk, also known as the founders of <a href="http://www.madebysofa.com/">Sofa</a>, will also be there. Next to these interesting speakers there will also be founders and prolific folks from companies such as <a href="https://github.com/">GitHub</a>, <a href="https://www.facebook.com/">Facebook</a> and so forth to speak at BubbleConf.</p>

<p>Tickets are limited, so if you want to be a part of this awesome event you should get your tickets quickly. This year, we were able to organize special ticket prices for existing RubyMotion customers. You pay only <strong>€160</strong>,- instead of €220,- (all prices are VAT included). If you want to go to BubbleConf with this nice discount, you can file a support ticket. The RubyMotion support team will send you a special URL where you can purchase discounted tickets.</p>

<p><a href="http://www.bubbleconf.com/"><img src="http://www.beursvanberlage.nl/assets/Uploads/MG5694-2.jpg" alt="BubbleConf venue2"/></a></p>

<p>BubbleConf aims to bring as many talented people together as possible from a variety of fields. This not only holds true for the speakers, but also for the attendees. Who knows, you might be able to find your designer or developer co-founder there as well! In fact, the organization is once again planning on encouraging people to team up by providing the stage to a select number of lightning talks as well. And a beautiful stage it is indeed.</p>
]]></content:encoded>
      <dc:date>2013-08-08T12:50:00+02:00</dc:date>
    </item>
    <item>
      <title>Create An Asteroids Game For Ios In 15 Minutes</title>
      <link>http://www.rubymotion.com/news/2013/08/05/create-an-asteroids-game-for-ios-in-15-minutes.html</link>
      <description><![CDATA[This is a guest post from Juan Jose Karam, author of the Joybox gaming framework.

]]></description>
      <pubDate>Mon, 05 Aug 2013 19:10:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2013/08/05/create-an-asteroids-game-for-ios-in-15-minutes.html</guid>
      <content:encoded><![CDATA[<p><em>This is a guest post from <a href="https://twitter.com/juankaram">Juan Jose Karam</a>, author of the Joybox gaming framework.</em></p>

<p>The idea behind <a href="http://joybox.io">Joybox</a> has always been to help you focus on the things that matter while creating a game, such as the <strong>game play</strong> or the <strong>game mechanics</strong>, instead of dealing with collisions logic or ray casts. At the time it was introduced I knew that for this to become a reality, a good documentation had to be created.</p>

<p>We are launching today a <a href="http://joybox.io">totally new website</a> with complete documentation, examples and learning tracks. Today, Joybox 1.1.0 is also released with a lot of new features like the Physics Debug Draw, support for Tile Maps and Physics Sprite Actions. You can read more about it in the <a href="http://joybox.io/version-history/joybox-1-1-0/">Joybox 1.1.0 release announcement</a>.</p>

<p>The following article is a preview of the <em>easy-mode</em> learning track. It will step-by-step guide you through the basics of game development as you build your first game!</p>

<h2>Joybox Asteroids</h2>

<p><img src="http://www.rubymotion.com/images/joybox-asteroids/game.png" alt=""/></p>

<p>The game we will be building is a remake of the <a href="https://en.wikipedia.org/wiki/Asteroids_(video_game)">Asteroids</a> video game created in 1979 by Atari. However, it will have its particular differences that you will notice as we move forward.</p>

<p>I assume that you have already installed Joybox on your computer. If this is not the case you can visit the <a href="http://joybox.io/get-started/">Getting Started</a> guide on our website.</p>

<h2>Creating a new Joybox project</h2>

<p>Lets start by creating a new Joybox project. Note that we are using the<tt>joybox-ios</tt> project template.</p>

<pre class="highlight">
$ motion create --template=joybox-ios asteroids
</pre>

<p>You can then copy the following <a href="http://joybox.io/downloads/asteroids/assets.zip">sprites</a> into the resources folder. Since we are building an iPad game, we have to add the following lines into the <em>Rakefile</em>.</p>

<pre class="highlight">
app.name = 'Asteroids'
app.interface_orientations = [:landscape_left]
app.device_family = [:ipad]
app.icons = ['icon.png', 'icon@2x.png']
app.prerendered_icon = true
</pre>

<h2>Creating the game layer</h2>

<p>Now we are ready to start developing our game! The first thing we need to do is create a <tt>Layer</tt> subclass, in which all the actions will happen. To accomplish this let&#8217;s create a new file named <em>game_layer.rb</em> into the <em>app</em> folder, and write the following into it:</p>

<pre class="highlight">
class GameLayer &lt; Joybox::Core::Layer
  scene

  def on_enter
    background = Sprite.new file_name: 'background.png',
        position: Screen.center
    self &lt;&lt; background

    @rocket = Sprite.new file_name: 'rocket.png', position: Screen.center,
        alive: true
    self &lt;&lt; @rocket
  end
end
</pre>

<p>In this code we are creating a new subclass of <tt>Layer</tt>, named <tt>GameLayer</tt>. In it we define the <tt>on_enter</tt> method which be called when our new layer is presented on the screen, which is a perfect timing for adding two sprites. The first sprite will be the background image of the game, and the other one the user&#8217;s rocket.</p>

<p>As you may notice the rocket sprite is being created with another option: <tt>alive</tt>. This is a custom value - you can pass custom parameters to <tt>Sprite#initialize</tt> and they will be stored along with the object. This value will help us determine if the rocket has collided with an asteroid or not.</p>

<h2>Creating the director</h2>

<p>The next step is tell the director to present our layer. You can think of the director object as the person who directs the making of a films: it manages everything that happens in the game: from what is being presented on the screen, to the game loop, a concept that we will explain a little further.</p>

<p>You can open the <em>app_delegate.rb</em> file and add the following lines:</p>

<pre class="highlight">
def application(application, didFinishLaunchingWithOptions:launchOptions)

  @director = Joybox::Configuration.setup do
    director display_stats: true
  end

  @navigation_controller =
      UINavigationController.alloc.initWithRootViewController(@director)
  @navigation_controller.navigationBarHidden = true

  @window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
  @window.setRootViewController(@navigation_controller)
  @window.makeKeyAndVisible

  # This line tells the director to present our Layer when the game starts
  @director &lt;&lt; GameLayer.scene
  true
end
</pre>

<p>What you are seeing in this method is all the necessary configuration needed for our game to run. For the purpose of this tutorial we won&#8217;t be focusing much on it, but if you are curious you can look at the <a href="http://joybox.io/documentation/director">director page</a> on our documentation section.</p>

<h2>First run!</h2>

<p>Now, let&#8217;s run the project for the first time! You should see the following on your iOS Simulator:</p>

<p><img src="http://www.rubymotion.com/images/joybox-asteroids/first_run.png" alt=""/></p>

<h2>Controlling the Rocket</h2>

<p>The basic idea of the game consists of the following points:</p>

<ul><li>A lot of asteroids will fly through the screen in different directions, from different locations.</li>
<li>The user controls a rocket and should dodge the asteroids using his/her finger to move the rocket.</li>
<li>When an asteroid hits the rocket the game should be over.</li>
</ul><p>Let&#8217;s start with the number two of the list: moving the rocket around when the user touches the screen. For this we need to add the following code into our <em>game_layer.rb</em> file:</p>

<pre class="highlight">
class GameLayer &lt; Joybox::Core::Layer
  scene

  def on_enter
    background = Sprite.new file_name: 'background.png',
        position: Screen.center
    self &lt;&lt; background

    @rocket = Sprite.new file_name: 'rocket.png', position: Screen.center, 
        alive: true
    self &lt;&lt; @rocket

    # The following block will be called when the user touches the screen
    on_touches_began do |touches, event|
      # We retrieve the touch location and assign it to the rocket position
      touch = touches.any_object
      @rocket.position = touch.location
    end
  end
end
</pre>

<p>In this code we are updating the position of the rocket based on the touch location generated by the user, but if you run it you will notice that something weird is happening:</p>

<p><img src="http://www.rubymotion.com/images/joybox-asteroids/error.png" alt=""/></p>

<p>Oops! The rocket moves instantaneously and it does look like it is being teleported instead of naturally moving. To fix this we can introduce a <tt>Move</tt> action to update its position:</p>

<pre class="highlight">
on_touches_began do |touches, event|
  touch = touches.any_object
  # The move action will update the rocket position frame by frame until it
  # arrives at the desired location
  @rocket.run_action Move.to position: touch.location
end
</pre>

<p>If we run the game again the rocket should now move through the screen instead of being teleported.</p>

<h2>Asteroid rain!</h2>

<p>Now is time to focus on the first point of the game: make those asteroids fly through the screen. This is the biggest part of the tutorial and is divided into two main characteristics:</p>

<ul><li>Define where the asteroid should be spawned and where they should be moved to.</li>
<li>Maintain a constant number of asteroids flying on the screen: not too many, because it will make the game impossible to play, and not too few, because it will not be challenging at all.</li>
</ul><h2>Creating asteroids</h2>

<p>Let&#8217;s begin with the first part, which is defining an asteroid starting and ending position. For this, it is better to isolate that part of the code in another class named <tt>AsteroidSprite</tt> which should be a subclass of <tt>Sprite</tt>. Let&#8217;s add the following into a new file named <em>asteroid_sprite.rb</em>:</p>

<pre class="highlight">
class AsteroidSprite &lt; Joybox::Core::Sprite
  def initialize
  end
end
</pre>

<p>Now if you look at our resources folder, you should see four graphic files for ou asteroids (they are numbered from 1 to 4).  They are different in size and shape, in order to add a bit of complexity into the game while keeping it simple. It will not be practical to have four different classes of asteroids to manage only a different image, so it is better to implement a more simple solution inside the <tt>initialize</tt> method:</p>

<pre class="highlight">
def initialize
  @random = Random.new

  # We define what kind of asteroid by using a random number
  kind = @random.rand(1..4)
  # We can now get the appropriate image
  file_name = "asteroid_#{kind}.png"
end
</pre>

<p>Well, that should be it! Using a random number to retrieve the image takes the multi-class problem away. Now we can think about the starting and ending positions of our sprite.</p>

<p>We can use a random number to get a starting position as well, but they would spawn everywhere (like teleporting). We need the asteroids to spawn outside the screen and move to the other side, for this first we need to know on which side of the screen they should appear:</p>

<pre class="highlight">
def initialize
  @random = Random.new

  kind = @random.rand(1..4)
  file_name = "asteroid_#{kind}.png"

  # Using a random number we can define in which side of the screen
  # it should appear. 1 for left, 2 for top, 3 for right and 4 for bottom.
  screen_side = @random.rand(1..4)
end
</pre>

<p>Now we can create a method that will generate the exact initial position of the asteroid based on the side of the screen:</p>

<pre class="highlight">
# This is the maximum size of any of our asteroids, because their images are
# rectangles only one value is needed.
# We need this value to make sure that the asteroid will not appear on the edge
# of the screen.
MaximumSize = 96.0

def initial_position(screen_side)
  case screen_side
  when 1
    # In case it spawns on the Left:
    # The X axis should be outside of the screen
    # The Y axis can be any point inside the height
    [-MaximumSize, @random.rand(1..Screen.height)]
  when 2
    # In case it spawns on the Top:
    # The X axis can be any point inside the width
    # The Y axis must be higher than the screen height
    [@random.rand(1..Screen.width), Screen.height + MaximumSize]
  when 3
    # In case it spawns on the Right:
    # The X axis must be greater than the entire screen width
    # The Y axis can by any value inside the total height
    [Screen.width + MaximumSize, @random.rand(1..Screen.height)]
  else
    # In case it spawns on the Bottom:
    # The X axis can be any value of the screen width
    # The Y axis should be lower than the total height
    [@random.rand(1..Screen.width), -MaximumSize]
  end
end
</pre>

<p>Using the <tt>initial_position</tt> method we can obtain the first location point of the asteroid according to the side of the screen it should be spawned. Please take notice that the code can be greatly optimized, but we will keep it simple to make to easier to follow.</p>

<p>Now, we need to do the same logic for the final location point. Wait! Why don&#8217;t we just add the entire width or height? Well! If we do that then the asteroids will only fly in straight paths, which will reduce the difficulty and make them look like they are on rails instead of flying naturally. It&#8217;s better to take a similar approach as for the initial position:</p>

<pre class="highlight">
def final_position(screen_side)
  case screen_side
  when 1
    # In case it spawns on the Left:
    # The X axis must be bigger than the total width
    # The Y axis can be any point inside the height
    [Screen.width + MaximumSize, @random.rand(1..Screen.height)]
  when 2
    # In case it spawns on the Top:
    # The X axis can be any point inside the width
    # The Y axis must be lower than the initial screen height
    [@random.rand(1..Screen.width), -MaximumSize]
  when 3
    # In case it spawns on the Right:
    # The X axis must be lower than the start of the width
    # The Y axis can by any value inside the total height
    [-MaximumSize, @random.rand(1..Screen.height)]
  else
    # In case it spawns on the Bottom:
    # The X axis can be any value of the screen width
    # The Y axis should be higher than the total height
    [@random.rand(1..Screen.width), Screen.height + MaximumSize]
  end
end
</pre>

<p>As well as for the <tt>initial_position</tt> method, this code can be optimized but we will keep it this way for simplicity sake.</p>

<p>Now that we can obtain an initial and ending position for our asteroid, let&#8217;s use these methods to initialize the sprite:</p>

<pre class="highlight">
# We will need access the final position later on our GameLayer
attr_accessor :end_position

def initialize
  @random = Random.new

  kind = @random.rand(1..4)
  file_name = "asteroid_#{kind}.png"

  screen_side = @random.rand(1..4)
  # Let's create the start and end position for our asteroid
  start_position = initial_position(screen_side)
  @end_position = final_position(screen_side)

  # Initialize the Sprite using the asteroids file image and the start position
  # This is the same as do Sprite.new file_name:, position:
  super file_name: file_name, position: start_position
end
</pre>

<p>The code will first generate the starting and ending point for the asteroid, and more importantly it will initialize the sprite using the appropriate graphic file which was obtained by using the kind of asteroid.</p>

<p>After doing this, we can now say the code in the <tt>AsteroidSprite</tt> class is complete!</p>

<h2>Launching asteroids</h2>

<p>Now it&#8217;s time to launch these asteroids through the space! But if you remember, there is a condition we need to meet: maintain a constant number of them on the screen.</p>

<p>The easier way to do this is to check at certain intervals of time if they are enough of them on the screen, or we need to launch more. The concept of the <strong>Game Loop</strong> was created for such scenarios. It will make periodic calls to our classes (in this case the <tt>GameLayer</tt>) so we can update the logic of the game. To make sense, let&#8217;s implement it in the <em>game_layer.rb</em> file:</p>

<pre class="highlight">
# Class GameLayer
def on_enter

  ...

  # The game loop will call the following block every time it passes, regularly
  # sixty times per second.
  schedule_update do |dt|
    # The following method is not implemented yet
    launch_asteroids
  end
end
</pre>

<p>If we take a look at the previous code: We are calling the <tt>schedule_update</tt> method with a block, this will set up the <strong>Game Loop</strong> for the layer. The block we are passing will get called every time the game loop runs, which means that the <tt>launch_asteroids</tt> method will be called a lot of times, allowing us to validate the number of asteroids on the screen.</p>

<p>Now it&#8217;s time to implement the <tt>launch_asteroids</tt> method:</p>

<pre class="highlight">
# Defines the max. number of asteroids that can be on the screen at the same time.
MaximumAsteroids = 10

def launch_asteroids
  # In the following array we will contain the asteroids
  @asteroids ||= Array.new

  # Checks if we need to launch more asteroids
  if @asteroids.size &lt;= MaximumAsteroids
    missing_asteroids = MaximumAsteroids - @asteroids.size

    # Let's create a new asteroid for each missing one
    missing_asteroids.times do
      # Create a new instance of our AsteroidSprite class
      asteroid = AsteroidSprite.new

      # Like the rocket, we move the asteroid using the Move class
      asteroid.run_action Move.to position: asteroid.end_position,
          duration: 4.0

      # Add it to the array and the layer to present it on screen
      self &lt;&lt; asteroid
      @asteroids &lt;&lt; asteroid
    end
  end
end
</pre>

<p>What we are doing here is first checking if more asteroids are required, if so we create a new instance of our <tt>AsteroidSprite</tt> class. Then we add it to the layer so it can be rendered and to the array so we can keep control of how many asteroids we have.</p>

<p>Also, we move the asteroid through the screen using the <tt>Move</tt> action, as you remember this is needed because we don&#8217;t want the movement to be instantaneous.</p>

<p>Finally we can run our project!</p>

<p><img src="http://www.rubymotion.com/images/joybox-asteroids/launching_asteroids.png" alt=""/></p>

<p>Yeah, it works! But… the asteroids only appear once!</p>

<p>To fix this, we need to determine when the asteroid movement is finished so that we can remove it from the array. We can use two more actions to perform this. The first one is named <tt>Callback</tt> and its function is to call a block, and the other one is <tt>Sequence</tt>, which will help us to run first the move action, and when it finishes, the callback action.</p>

<p>Let&#8217;s update the <em>launch_asteroids</em> method accordingly:</p>

<pre class="highlight">
def launch_asteroids
  @asteroids ||= Array.new

  if @asteroids.size &lt;= MaximumAsteroids
    missing_asteroids = MaximumAsteroids - @asteroids.size

    missing_asteroids.times do
      asteroid = AsteroidSprite.new

      # First we need to create the Move action
      move_action = Move.to position: asteroid.end_position, duration: 4.0

      # Second using the Callback action we create a block that will remove the
      # asteroid from the array. As you may notice the block will receive as
      # parameter the sprite that run the action
      callback_action = Callback.with { |asteroid| @asteroids.delete asteroid }

      # Finally we run both actions in sequence first the Move action and then
      # the Callback one.
      asteroid.run_action Sequence.with actions: [move_action, callback_action]

      self &lt;&lt; asteroid
      @asteroids &lt;&lt; asteroid
    end
  end
end
</pre>

<p>Finally, if we run it this time the asteroids should appear over and over again! Yeepee!</p>

<h2>Crashing the rocket</h2>

<p>We are almost there, it&#8217;s now time to implement the third and final point: detect when the rocket crashes with an asteroid. The <strong>Game Loop</strong> will help us here too, we can create a method to check if the rocket&#8217;s bounds are being intersected by any of the asteroids bounds.</p>

<p>To begin with the collision detection we should update the game loop block as following:</p>

<pre class="highlight">
# Class GameLayer
# Method on_enter
schedule_update do |dt|
  launch_asteroids

  # The following method is not implemented yet
  # We only need to call this method if the Rocket is still alive, its value
  # was defined when the @rocket sprite was created
  check_for_collisions if @rocket[:alive]
end
</pre>

<p>Final step! We need to implement the <tt>check_for_collisions</tt> method, that will check if the bounds of the rocket intersects with the bounds of any asteroid. In order to get the bounds of a sprite, we will use the <tt>bounding_box</tt> method, which will return the minimum box that can contain the sprite image.</p>

<p>Let&#8217;s add the following method to the <strong>game_layer.rb</strong> file:</p>

<pre class="highlight">
def check_for_collisions
  # Iterate through every asteroid in the screen
  @asteroids.each do |asteroid|
    # Check if it's bounding box intersects with the rocket
    if CGRectIntersectsRect(asteroid.bounding_box, @rocket.bounding_box)
      # If true finish the game
      # First stop the movement on all of the asteroids
      @asteroids.each(&amp;:stop_all_actions)

      # Set the alive property of the rocket to false, this to avoid that the
      # collision is checked again
      @rocket[:alive] = false
      # Give the rocket a nice retro blink!
      @rocket.run_action Blink.with times: 20, duration: 3.0
      break
    end
  end
end
</pre>

<p>In this method, we first check if any of the asteroids are intersecting with the rocket, and if we find one, we stop the movement on all asteroids and give a little feedback to the user using the <tt>Blink</tt> action. It&#8217;s our way to show that the game is over.</p>

<p>The game is now complete! Let&#8217;s run it.</p>

<iframe src="http://player.vimeo.com/video/71488517" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>

<p>We hope you enjoyed this tutorial! You can download the full code <a href="http://joybox.io/downloads/asteroids/asteroids.zip">here</a>.</p>

<h2>Let&#8217;s improve the game!</h2>

<p>As you may have noticed they are lots of things that can be improved in the game, some of them will be added in the Easy Level on the Joybox site. But until that time, you are welcome to experiment, polish or create your own version of the game!</p>

<h2>RubyMotion + games = happiness</h2>

<p>Using Ruby for creating games is a great experience, but what makes it amazing is the ability to deploy them to great platforms. Thanks to the RubyMotion team for making it possible!</p>
]]></content:encoded>
      <dc:date>2013-08-05T19:10:00+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Success Story Temple</title>
      <link>http://www.rubymotion.com/news/2013/07/24/rubymotion-success-story-temple.html</link>
      <description><![CDATA[Temple is a new approach to monitoring and logging your fitness and daily routine. Instead of focusing on mundane details - which many people don&#8217;t want to bother entering in - Temple takes a UI-first approach to entering workout and food information. 

]]></description>
      <pubDate>Wed, 24 Jul 2013 11:08:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2013/07/24/rubymotion-success-story-temple.html</guid>
      <content:encoded><![CDATA[<p><a href="http://thetempleapp.com/">Temple</a> is a new approach to monitoring and logging your fitness and daily routine. Instead of focusing on mundane details - which many people don&#8217;t want to bother entering in - Temple takes a UI-first approach to entering workout and food information. </p>

<p><a href="http://thetempleapp.com/"><img src="http://www.rubymotion.com/images/temple_gif_with_titles_01.gif" alt="temple" style="padding-top: 10px; padding-bottom: 10px"/></a></p>

<p>Temple is the brainchild of <a href="http://toddwerth.com">Todd Werth</a> and <a href="http://seriousken.com">Ken Miller</a>, of InfiniteRed. We decided to sit down with them to learn more about their story.</p>

<p><b>Can you tell us a little bit about your startup, InfiniteRed?</b></p>

<p><a href="http://infinitered.com/">InfiniteRed</a> is located in San Francisco and was founded by Todd Werth and Ken Miller in April of 2013. We had worked together in the past and discovered that we saw eye-to-eye on software design and philosophy, and decided to create a company that was based on an honest relationship with the people who use our software. We&#8217;re trying hard to avoid outside investment or advertising, at least as our main priority, because those things tend to take away from giving the customer&#8217;s experience top billing.</p>

<p>We&#8217;re thrilled to have a real app, <a href="https://itunes.apple.com/us/app/temple-one-tap-health-fitness/id661535754?mt=8">in the App Store</a>, that real people are paying money for, that&#8217;s almost 100% Ruby!</p>

<p><b>Temple definitely embodies that philosophy; it&#8217;s unlike any fitness app I&#8217;ve seen before!</b></p>

<p>We&#8217;re incredibly proud of Temple, but believe me, it&#8217;s just the beginning. We have more product ideas, as well as some open source contributions to announce in the near future. We also take on select clients from time to time, so if you have an idea, feel free to <a href="http://infinitered.com/contact-us/">drop us a line</a>.</p>

<p><b>What are your backgrounds? Are you designers-turned-developers? The other way around?</b></p>

<p><b>Todd Werth</b>:  I&#8217;m fairly unusual in that I&#8217;m both a graphic designer and a programmer. I&#8217;ve been in San Francisco building products professionally for 16 years. Earlier in my career I was a consultant doing hard-core architecture and programming in everything from Delphi, to Java, to c++.</p>

<p>I then moved into the startup world and focused on UX, design, and front-end, which suits me best. When I write a low-level library, I create a logo first, which is kind of absurd if you think about it, but art and engineering are different shades of the same color to me.</p>

<p><b>Ken Miller</b>: Professionally I&#8217;ve been around since the Dot Com boom in the late nineties, doing mostly backend Java and Ruby and leading teams for the last 10 years, but I&#8217;ve been into computers practically my whole life. </p>

<p>My dad is a scientist turned programmer, and my mom is a scientist turned artist, so I guess I just merged all that into a love of making beautiful software. And for me that means both how it&#8217;s designed&#8212;how it looks and how it works&#8212;but also the quality of the code itself. As a backend guy, that&#8217;s where I have most input, and that&#8217;s why I&#8217;m so mad for Ruby: its combination of expressiveness and a sort of practical humility is unlike any other language I&#8217;ve tried, and I&#8217;m the kind of guy who learns new languages as a hobby. I was an early adopter of Rails, but obviously mobile is a huge part of the future, so when RubyMotion came out, I was ecstatic. </p>

<p><b>What was the inspiration behind building Temple?</b></p>

<p><b>TW</b>: I&#8217;m into health and fitness, and I couldn&#8217;t find an app that I liked. Most were too complicated [KM: I cook a lot, and I&#8217;d end up weighing my broccoli], or had poor design, so I thought up the basic idea of Temple, then Ken and I designed and built it.</p>

<p>The concept is simple, when you do something during the day which is health or fitness related, just tap the portion that&#8217;s closest.  So if you eat a banana, tap &#8220;snack&#8221;.  If you drink a tall glass of iced tea, tap &#8220;bottle&#8221;.  What you give up in precision, you get back in sustainability and consistency.  Then you can track your progress over time. We start our customers out with Fitness, Fluids, and Fuel, but it&#8217;s completely customizable, so you can use Temple for any goal you have.</p>

<p><b>Why did you choose to use RubyMotion over traditional iOS development tools?</b></p>

<p>We both like Ruby a lot, but more than that, it&#8217;s that we&#8217;re both pretty die-hard fans of a console-based workflow.  We&#8217;d rather grow the language to express what we want than rely on an IDE, and we just fell in love with the workflow.  Being able to tweak values from the console and see them live is amazingly powerful, much more so than drawing a static, lifeless version in Interface Builder.  </p>

<p><b>What aspect of building your app was the most challenging, and what was the most enjoyable? </b></p>

<p>Most challenging for us was just that we were learning a whole new platform almost from scratch, and there&#8217;s a fair bit of learning curve there.  Core Data in particular gave me fits at first, but I like it now.  </p>

<p>The most enjoyable&#8230; There&#8217;s the point where the whole system starts to &#8220;click&#8221; and you can start riffing, refactoring, teasing out the shared structure, and turning that learning into libraries that will let us, and hopefully others, go faster next time. That&#8217;s the real joy of programming for me. But now that the app is out, the positive reactions from users is really what keeps us going.</p>

<p><b>Were there some open source tools that helped you build your app quickly?</b></p>

<p><b>KM</b>: Does <a href="http://www.vim.org/">Vim</a> count?  I&#8217;ve been using it for 20 years, so it&#8217;s pretty baked into my fingers at this point.  <a href="https://github.com/rubymotion/BubbleWrap">BubbleWrap</a> and <a href="https://github.com/rubymotion/teacup">Teacup</a> got heavy use.  We had some performance issues with Teacup, especially startup time, but in terms of its basic mode of interaction, keeping sets of inheritable properties and having fine-grained control over your views, I can&#8217;t imagine making an app any other way now.  </p>

<p>We&#8217;re actually working on a couple of our own, to be announced shortly.  <br/><br/><b>TW</b>: Like Ken said, Vim would be #1. When I&#8217;m not in Photoshop or Omnigraffle, I&#8217;m in Vim.  In Temple we used Teacup, Bubblewrap, and <a href="https://github.com/tkadauke/motion-support">MotionSupport</a>, which all worked well for us. I started developing RMQ (RubyMotion Query - to be announced) in Temple, it&#8217;s using about half of it at this time. In the future, for front-end stuff we&#8217;ll be using RMQ.</p>

<p><b>What advice do you have for people who are building apps today?</b></p>

<p>Start small and get something you can stand behind as quickly as possible. Promoting it is going to be at least as hard as writing it in most cases, assuming you&#8217;re going it alone, and you want to get started on that as soon as you can before you invest more time in coding.  That&#8217;s part of the beauty of RubyMotion.  We&#8217;re able to move so fast that we can cut down the time from idea to execution and then test it in the market as soon as possible. </p>

<p><b>What tools would you like to see added to the RubyMotion toolchain?</b></p>

<p><b>KM</b>: Integration with Instruments would be nice.  So rake profile:simulator would bring the app up connected to Instruments from launch.  </p>

<p><b>TW</b>: I love RubyMotion, however I&#8217;d love to have full integration testing built in. Also, exception reporting has sometimes been less than helpful, so we&#8217;re excited to see the <a href="http://blog.rubymotion.com/2013/07/23/new-in-rubymotion-blocks-rewrite-retain-cycle.html">changes in 2.5</a>.</p>

<p><b>Thanks guys!</b></p>
]]></content:encoded>
      <dc:date>2013-07-24T11:08:00+02:00</dc:date>
    </item>
    <item>
      <title>Second And Last Batch Of Rubymotion Inspect</title>
      <link>http://www.rubymotion.com/news/2013/07/24/second-and-last-batch-of-rubymotion-inspect.html</link>
      <description><![CDATA[We finally finished processing and uploading the videos of the remaining 10 presentations of #inspect 2013, our insanely great conference that happened in March.

]]></description>
      <pubDate>Wed, 24 Jul 2013 10:30:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2013/07/24/second-and-last-batch-of-rubymotion-inspect.html</guid>
      <content:encoded><![CDATA[<p>We finally finished processing and uploading the videos of the remaining 10 presentations of #inspect 2013, our insanely great conference that happened in March.</p>

<p>You can <a href="http://vimeo.com/groups/199097">watch them all</a>. If you have time to only view one, may we suggest watching Juan Karam announcing the awesome <a href="http://joybox.io">Joybox</a> framework?</p>

<p><iframe src="http://player.vimeo.com/video/70539976?autoplay=0&amp;api=1" width="500" height="366" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></p>
]]></content:encoded>
      <dc:date>2013-07-24T10:30:00+02:00</dc:date>
    </item>
    <item>
      <title>New In Rubymotion Blocks Rewrite Retain Cycle</title>
      <link>http://www.rubymotion.com/news/2013/07/23/new-in-rubymotion-blocks-rewrite-retain-cycle.html</link>
      <description><![CDATA[At HipByte we thrive to provide a mobile platform that developers can use to write full-fledged, rock-solid apps while being as productive as possible. We have an ambitious, long-term vision for RubyMotion and great features in the pipeline for this year.

]]></description>
      <pubDate>Tue, 23 Jul 2013 07:06:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2013/07/23/new-in-rubymotion-blocks-rewrite-retain-cycle.html</guid>
      <content:encoded><![CDATA[<p>At HipByte we thrive to provide a mobile platform that developers can use to write full-fledged, rock-solid apps while being as productive as possible. We have an ambitious, long-term vision for RubyMotion and great features in the pipeline for this year.</p>

<p>In making it possible for you to use Ruby to write great iOS applications, we were faced with a number of constraints imposed by limitations of the iOS runtime. As a result, when we launched RubyMotion there were a number of edge cases that developers had to be careful about in order to avoid leaking memory or running into memory related crashes.</p>

<p>As part of our efforts to constantly improve RubyMotion and provide the best possible platform for iOS development, we are happy to announce RubyMotion 2.5 which should resolve a large number of these edge cases. The end result is that you can now build your iOS apps with the confidence that they will work right the first time and won&#8217;t waste resources.</p>

<p><b>Blocks Rewrite</b></p>

<p>Blocks in Ruby are everywhere. Blocks can be created on the fly, for example for a method iterator callback, or transformed into a object of the <tt>Proc</tt>, for later use. Variables defined in a block can refer to local variables and change their content; we call them dynamic variables.</p>

<p>The initial implementation of blocks in RubyMotion came from <a href="http://macruby.org/">MacRuby</a>, a project we created several years ago. The main idea behind the implementation was to map dynamic variables as pointers to the stack, and automatically relocate them into heap memory when the block would escape the scope of the current method. Also, because the Objective-C garbage collector had a slow memory allocator, we were heavily caching the block structures, which made invalidating dynamic variables later harder and also recursively calling into existing blocks.</p>

<p>RubyMotion shipped with this implementation and presented right away an important limitation; block variables, including <tt>self</tt>, would not be retained by the block structure. Calling a block that escaped the scope of the method it was created from would cause a crash if it was using a dynamic variable. The known workaround was to use instance variables instead, which always created a strong reference.</p>

<p>Now this is history. As of RubyMotion 2.5, <i>blocks have been completely rewritten</i>. Dynamic variables are always allocated as heap memory and the block keeps a strong reference to all of them, including <tt>self</tt>. The block data structure and the <tt>Proc</tt> class are now internally the same data structure, an object that is properly reclaimed by the iOS runtime when no longer used. Blocks created on the fly are not cached anymore. Local (non-dynamic) variables are still allocated on the stack and potentially optimized into registers.</p>

<pre class="highlight">
def sum(x, y)
  lambda { x + y } # `x' and `y' are now hosted inside the Proc object.
end

sum.call(40, 2)
</pre>

<p>Another major issue is that passing a <tt>Proc</tt> object to an iOS API expecting a <a href="http://en.wikipedia.org/wiki/Blocks_(C_language_extension)">C-level block</a> would cause the object to leak. It was due to the fact that the C-level blocks created by the runtime would keep a strong reference to the <tt>Proc</tt> object and never be destroyed.</p>

<p>As of RubyMotion 2.5, C-level blocks are now created by the compiler on the stack. They do not keep a strong reference to the <tt>Proc</tt> object, and they implement the copy/dispose helpers as defined in the <a href="http://clang.llvm.org/docs/Block-ABI-Apple.html#objective-c-extensions-to-blocks">Blocks specification</a> to properly transfer the ownership of the <tt>Proc</tt> object when needed.</p>

<pre class="highlight">
class MyObserver
  def initialize
    @obs = {}
  end

  def register(name, &amp;b)
    @obs[name] = NSNotificationCenter.defaultCenter.addObserverForName(name,
        object:nil, queue:nil, usingBlock:b)
    # `b' is now retained.
  end

  def unregister(name)
    NSNotificationCenter.defaultCenter.removeObserver(@obs.delete(name))
    # `b' is now released.
  end
end
</pre>
<p><b>Retain Cycle Detection</b></p>

<p>RubyMotion exclusively relies on the existing retain-count-based memory management system implemented in the iOS runtime. It is the exact same mechanism used by Objective-C applications. Each object starts with a retain count of 1, and its value is properly incremented and decremented when a reference to it is created and destroyed.</p>

<p>The main problem with this system is that cyclic references are possible. A cyclic reference is a set of objects where the last object references the first.</p>

<p>Objects that are part of a cyclic reference graph are never released and leak memory. Detecting and debugging cyclic references in code can also be a challenging task, especially when the graph is large. Ruby, as a very expressive programming language, also makes it quite easy to create cyclic references.</p>

<p>The RubyMotion runtime has been improved to <i>detect and break basic cyclic references</i>. We implemented a simple algorithm that should be able to handle most circular references present in real-world apps, without introducing a significant performance or memory usage penalty.</p>

<pre class="highlight">
# An example of a cyclic reference now detected by the runtime.
# MyController -&gt; Array (@events) -&gt; Proc (self) -&gt; MyController

class MyController &lt; UIViewController
  def action
    register_event { do_something }
  end

  def register_event(&amp;b)
    (@events ||= []) &lt;&lt; b
  end
end
</pre>

<p>In order to preserve acceptable performance, we added limitations to the cycle detector. Only objects instantiated from Ruby classes are scanned for cyclic references. An object is only scanned for cycles when the autorelease pool it was created from is drained. The runtime will not keep track of the object after that point. Only <tt>Array</tt>, <tt>Hash</tt> and <tt>Proc</tt> objects present in the graph are visited. For performance reasons, we limited the number of iterations; a cyclic reference containing more than 20 objects will not be released.</p>

<p>The cycle detector is enabled by default in RubyMotion 2.5. We ran the test suite of pretty much every RubyMotion project and library we could find and did not identify any problem. We also seeded the build to some of our developers who reported very positive feedback. However, in the event that your app doesn&#8217;t work anymore due to the cycle detector, you can disable it by setting the <tt>ARR_CYCLES_DISABLE</tt> environment variable to any value.</p>

<p><b>Better Crash Reporting</b></p>

<p>Your app will eventually crash. It has to be expected. What&#8217;s important is to properly investigate the cause of the crash and make sure it doesn&#8217;t happen anymore. We took the opportunity to improve the crash reporting story in RubyMotion 2.5.</p>

<p>The <tt>Exception</tt> class is now a subclass of <tt>NSException</tt> and properly implements its builtin methods, such as <tt>name</tt>, <tt>reason</tt>, <tt>callStackReturnAddresses</tt> and <tt>callStackSymbols</tt> (simulator only). Thanks to this change, crash reporting tools can now analyze crashes from RubyMotion apps due to uncaught exceptions without any additional logic.</p>

<p>We also removed unnecessary exception handlers created by the build system and the runtime so that an uncaught exception will crash the process as naturally as possible.</p>

<p>Finally, we introduced the <tt>rake crashlog</tt> task that you can use to open the latest crash report file that was generated by the system.</p>

<hr><p>Thanks to these changes, RubyMotion apps should now be more solid and use less resources. We hope that you will enjoy these changes. We would also like to thank Joe Noon (Localini) and Matt Massicotte (Crashlytics) for their help during the development of this release.</p>
]]></content:encoded>
      <dc:date>2013-07-23T07:06:00+02:00</dc:date>
    </item>
    <item>
      <title>First Batch Of Inspect 2013 Videos Available</title>
      <link>http://www.rubymotion.com/news/2013/07/09/first-batch-of-inspect-2013-videos-available.html</link>
      <description><![CDATA[It took a bit of time, but we just finished processing and editing the videos of the first 10 presentations of #inspect 2013, our awesome conference that happened just a few months ago.

]]></description>
      <pubDate>Tue, 09 Jul 2013 10:51:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2013/07/09/first-batch-of-inspect-2013-videos-available.html</guid>
      <content:encoded><![CDATA[<p>It took a bit of time, but we just finished processing and editing the videos of the first 10 presentations of #inspect 2013, our <a href="http://blog.rubymotion.com/2013/04/21/rubymotion-inspect-2013-wrap-up.html">awesome conference</a> that happened just a few months ago.</p>

<p>You can <a href="https://vimeo.com/groups/199097">watch them all</a>, and if you have time to only watch one of them, may we suggest <i>Accessibility and RubyMotion</i> by Austin Seraphin?</p>

<br/><iframe src="http://player.vimeo.com/video/69529065" width="500" height="366" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
]]></content:encoded>
      <dc:date>2013-07-09T10:51:00+02:00</dc:date>
    </item>
    <item>
      <title>Motionphrase Next Level Localization For</title>
      <link>http://www.rubymotion.com/news/2013/06/12/motionphrase-next-level-localization-for.html</link>
      <description><![CDATA[(This is a guest post from Manuel Boy, lead developer of PhraseApp)

]]></description>
      <pubDate>Wed, 12 Jun 2013 11:59:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2013/06/12/motionphrase-next-level-localization-for.html</guid>
      <content:encoded><![CDATA[<p><em>(This is a guest post from <a href="https://github.com/docstun/">Manuel Boy</a>, lead developer of <a href="https://phraseapp.com">PhraseApp</a>)</em></p>

<iframe width="420" height="315" src="http://www.youtube.com/embed/nFB4Sgum4ds" frameborder="0" allowfullscreen></iframe>

<p>As the team behind <a href="https://phraseapp.com">PhraseApp</a> we work really hard to make internationalization of web and mobile applications less painful. Especially when building iOS apps developers typically spend a lot of time managing localization files, entering new translations and sending translations back and forth. At the same time, localizing an app becomes more and more essential for the success of a mobile software project as translated user interfaces increase the reach and customer satisfaction of those apps.</p>

<p><strong>Multi-language iOS apps</strong></p>

<p><a href="https://developer.apple.com/internationalization/">Localizing an iOS application</a> sounds simple: Just replace all occurences of <code>NSString</code> with <code>NSLocalizedString</code>, copy all translations into text files (or let some tool generate them for you) and keep all of your <code>Localizable.strings</code> files in order.</p>

<p>But this can get quite tedious and difficult when you are dealing with larger apps, lots of languages and frequent updates. After all, no developer likes managing translations in text files, constantly changing texts and translations for their clients or dealing with corrupted files caused by a missing semicolon. Instead they would like to focus on the actual development of beautiful user interfaces and the app&#8217;s business logic.</p>

<p>This is where <a href="https://phraseapp.com">PhraseApp</a> shines. Clients, translators and managers edit their translations in the web-based editor. And developers just get their valid translation files directly from the API via a command line tool. Happy Developers!</p>

<p><strong>Adding the gem</strong></p>

<p>To get started, you need to <a href="https://phraseapp.com/signup">sign up for a (free) account with PhraseApp</a>. A wizard will guide you through the first steps of the registration process. You can skip the wizard after you have selected the locales for your project since we will add all translation resources later without any effort at all. Instead, grab the auth token from the PhraseApp project you have just created. You find your auth token on the project overview page.</p>

<p>Next, add the <code>motion-phrase</code> gem to your project using bundler:</p>

<pre class="highlight"><code>gem 'motion-phrase'
</code></pre>

<p>or manually:</p>

<pre class="highlight"><code>$ gem install motion-phrase
</code></pre>

<p>and require it in your Rakefile.</p>

<p><strong>Initializing your project</strong></p>

<p>Now, let&#8217;s tell PhraseApp a little bit about the app we&#8217;re building. With a simple rake task we will tell PhraseApp that we want to connect our RubyMotion project to the service:</p>

<pre class="highlight"><code>$ rake phrase:init AUTH_TOKEN=YOUR_AUTH_TOKEN
</code></pre>

<p>Let&#8217;s add the auth token to the app&#8217;s Rakefile as well and enable the service in development mode only:</p>

<pre class="highlight"><code>Motion::Project::App.setup do |app|
  app.name = "MyApplication"

  app.development do
    app.phrase do
      app.phrase.enabled = true
      app.phrase.auth_token = "YOUR_AUTH_TOKEN"
    end
  end
end
</code></pre>

<p><strong>Strings go global!</strong></p>

<p>We have to tell the strings in our app that they should be translatable into other languages. Fortunately, this can easily be done by calling the <code>#.__</code> method on the <code>String</code>/<code>NSString</code> class that is implemented by motion-phrase:</p>

<pre class="highlight"><code>"Hello World"
</code></pre>

<p>now becomes:</p>

<pre class="highlight"><code>"Hello World".__
</code></pre>

<p>Call that method on every string in your app that requires to be localized.</p>

<p><strong>Talking to PhraseApp</strong></p>

<p>When you start your app in the simulator motion-phrase automatically sends all strings (and all translations that are found in your <code>Localizable.strings</code> files) to PhraseApp. All you have to do is to browse the views that contain localizable strings. As soon as they are accessed, PhraseApp knows about them and allows your team to translate them within the web editor.</p>

<p>When all of your translations are completed in PhraseApp it&#8217;s time to bundle them with your app. You can fetch all translations from the API and store them in our RubyMotion project simply by using the following rake command:</p>

<pre class="highlight"><code>$ rake phrase:pull
</code></pre>

<p>It will download valid localization files and create a <code>LANGUAGE-NAME.lproj</code> folder for each locale that contains a Localizable.strings file with all the translations you have stored in PhraseApp.</p>

<p>If you already own completed translation files, it would be a good idea to tell PhraseApp about them:</p>

<pre class="highlight"><code>$ rake phrase:push
</code></pre>

<p>This will upload all <code>Localizable.strings</code> files inside your <code>resources</code> folder to your PhraseApp project. A good way to get started quickly if you already have some translations in your project that you want to keep.</p>

<p>Your app is now officially localized ;-)</p>

<p><strong>More Information</strong></p>

<p>Read some more detailed instructions in the <a href="https://github.com/phrase/motion-phrase#readme">README</a>.</p>

<p><strong>About PhraseApp</strong></p>

<p><a href="https://phraseapp.com">PhraseApp</a> speeds up the translation of web- and mobile applications. The cloud-service is developed by the engineers of <a href="http://www.dynport.de">Dynport GmbH</a>, located in Hamburg, Germany.</p>

<p>PhraseApp is free for small and open source projects.</p>

<p><img src="http://assets.phraseapp.com.s3.amazonaws.com/media/press/downloads/images/phraseapp_workflow_chart_20130326.png" alt="image"/></p>
]]></content:encoded>
      <dc:date>2013-06-12T11:59:00+02:00</dc:date>
    </item>
    <item>
      <title>Showkit Now Supports Rubymotion</title>
      <link>http://www.rubymotion.com/news/2013/05/23/showkit-now-supports-rubymotion.html</link>
      <description><![CDATA[ShowKit is an SDK for mobile devices to enable audio/video conferencing and screen/gesture sharing. Check out the demo video!

]]></description>
      <pubDate>Thu, 23 May 2013 13:24:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2013/05/23/showkit-now-supports-rubymotion.html</guid>
      <content:encoded><![CDATA[<p><a href="http://www.showkit.com/">ShowKit</a> is an SDK for mobile devices to enable audio/video conferencing and screen/gesture sharing. Check out the demo video!</p>

<iframe src="http://player.vimeo.com/video/65406591" width="500" height="281" frameborder="0"></iframe>

<p>We are glad to report that ShowKit&#8217;s newest release <a href="http://blog.showkit.com/post/51081909535/showkits-newest-release-includes-a-much-requested">now supports RubyMotion</a>! Embedding the ShowKit SDK into your RubyMotion app is as easy as vendoring it, you can refer to the <a href="http://www.showkit.com/docs#ios_rubymotion">documentation</a> for instructions.</p>
]]></content:encoded>
      <dc:date>2013-05-23T13:24:00+02:00</dc:date>
    </item>
    <item>
      <title>Motionbundler Good Old Fashioned Requirements For</title>
      <link>http://www.rubymotion.com/news/2013/05/21/motionbundler-good-old-fashioned-requirements-for.html</link>
      <description><![CDATA[(This is a guest post from Paul Engel, creator and maintainer of MotionBundler)

]]></description>
      <pubDate>Tue, 21 May 2013 07:37:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2013/05/21/motionbundler-good-old-fashioned-requirements-for.html</guid>
      <content:encoded><![CDATA[<p><i>(This is a guest post from <a href="https://twitter.com/archan937">Paul Engel</a>, creator and maintainer of <a href="https://github.com/archan937/motion-bundler">MotionBundler</a>)</i></p>

<p>When I started writing my first RubyMotion application, I almost immediately wanted to use a Ruby gem to accomplish a certain goal. After setting up my Gemfile, running bundle and rake in the Terminal, I soon discovered that it wasn&#8217;t possible to just require any random gem I wanted to: it had to be aware of it being required in a RubyMotion app.</p>

<p>Suddenly, my next open source project became a fact. I wanted to create a gem which allowed you to require any Ruby gem in a RubyMotion application. My first attempt was the <a href="https://github.com/archan937/lock-o-motion">LockOMotion</a> project. It gets the job done but it wasn&#8217;t test-driven enough and the code wasn&#8217;t well structured. Enter <a href="https://github.com/archan937/motion-bundler">MotionBundler</a>, a complete rewrite with a <a href="https://travis-ci.org/archan937/motion-bundler">100% test-coverage</a>.</p>

<p>I am a big fan of using and writing libraries and gems that are as unobtrusive as possible. I did not want to force the developer to follow special conventions (e.g. using another method than <code>require</code> to load up code). And MotionBundler does just that.</p>

<p><b>Setup and Usage</b></p>

<p>MotionBundler is intended to be easy in installation and usage. You need to setup your <i>Gemfile</i> by separating RubyMotion-aware Ruby gems from the ones that are not. Put the RubyMotion-unaware gems in the <code>:motion</code> Bundler group, as shown here.</p>

<pre class="highlight">
source "http://rubygems.org"

# RubyMotion aware gems
gem "motion-bundler"

# RubyMotion unaware gems
<b>group :motion do
  gem "slot_machine"
end</b>
</pre>

Then, simply add <code>MotionBundler.setup</code> at the end of your <i>Rakefile</i>.

<pre class="highlight">
[...]
require "motion/project"

# Require and prepare Bundler
require "bundler"
Bundler.require

Motion::Project::App.setup do |app|
  # Use `rake config' to see complete project settings.
  app.name = "SampleApp"
end

# Track and specify files and their mutual dependencies within the :motion 
# Bundler group
<b>MotionBundler.setup</b>
</pre>

<p>Finally, you can just run the <code>bundle</code> command then the default <code>rake</code> task to build and run the application. And that&#8217;s all about it!</p>

<p><b>Requiring non-Gem Sources</b></p>

<p>Just like a regular Ruby project, you are now able to require source files. It can either be a relative path on the file system or a Ruby standard library source file. As an example, let&#8217;s require the <i>cgi</i> Ruby standard library file and use the <code>CGI.escape_html</code> method in a RubyMotion controller.</p>

<pre class="highlight">
require "cgi"

class AppController &lt; UIViewController
  def viewDidLoad
    puts CGI.escape_html('foo "bar" ')
  end
end
</pre>

<p>Looks familiar, right?</p>

<p><b>How Does MotionBundler Work?</b></p>

<p>MotionBundler traces <code>require</code>, <code>require_relative</code>, <code>load</code> and <code>autoload</code> method calls in your code when invoking <code>MotionBundler.setup</code>. All four methods eventually are delegated to the <code>require</code> method which MotionBundler <a href="https://github.com/archan937/motion-bundler/blob/master/lib/motion-bundler/require/tracer/hooks.rb#L28">hooks into</a>. MotionBundler calls <code><a href="https://github.com/archan937/motion-bundler/blob/master/lib/motion-bundler/require/tracer/log.rb#L30">MotionBundler::Require::Tracer::Log#register</a></code> which traces the calling Ruby source and registers the source file being loaded.</p>

<p>When <code>MotionBundler.setup</code> invokes <code>Bundler.require :motion</code>, all required files and their mutual dependencies are registered. Aside from the Ruby gems defined in the <code>:motion</code> Bundler group, MotionBundler also uses <code>Ripper::SexpBuilder</code> to scan for require statements (like <a href="https://github.com/clayallsopp/motion-require">motion-require</a> does) in the Ruby sources defined in <code>./app/**/*.rb</code> so it can trace requirements using <code>MotionBundler::Require::Tracer::Log</code>.</p>

<p><b>Console Warnings</b></p>

<p>When I was writing LockOMotion it was very difficult to debug certain errors. I have been able to override certain core methods to print warnings which contain useful debug information.</p>

<p>These are only printed in the iOS simulator console. When running from the device, MotionBundler does not interfere when an error gets raised. As an example, let&#8217;s check out a warning printed in the console when dealing with a runtime <code>require</code> statement.</p>

<pre class="highlight">
[...]
<b>   Warning Called `require "base64"`
           Add within setup block: app.require "base64"</b>
2013-05-21 13:45:26.851 SampleApp[17300:c07] app_controller.rb:48:in `viewDidLoad': uninitialized constant AppController::Base64 (NameError)
    from app_delegate.rb:5:in `application:didFinishLaunchingWithOptions:'
2013-05-21 13:45:26.855 SampleApp[17300:c07] *** Terminating app due to uncaught exception 'NameError', reason: 'app_controller.rb:48:in `viewDidLoad': uninitialized constant AppController::Base64 (NameError)
    from app_delegate.rb:5:in `application:didFinishLaunchingWithOptions:'
[...]
</pre>

<p>Here, the <i>base64</i> file is missing from the build system. You can fix that problem by adding the following code in the <i>Rakefile</i>.</p>

<pre class="highlight">
MotionBundler.setup do |app|
  app.require "base64"
end
</pre>

<p><b>RubyMotion Runtime Limitations</b></p>

<p>Unfortunately, you still cannot just require every file that works within a <i>regular</i> Ruby environment. You cannot require C extensions and you cannot evaluate Ruby code passed in a String (e.g. the <code>eval</code> method). This is why MotionBundler cannot ensure that you can require every Ruby gem out there. They have to be <i>RubyMotion friendly</i>, for example like <a href="https://github.com/archan937/slot_machine">SlotMachine</a>.</p>

<p>But as a last resort, MotionBundler offers you to possibility to mock source requirements by loading drop-in replacements written in pure Ruby.</p>

<p><b>Mocking Sources</b></p>

<p>Let&#8217;s say you want to use a Ruby gem which requires the <i>stringio</i> extension. Because <i>stringio</i> is a Ruby C extension, and that RubyMotion doesn&#8217;t support Ruby C extensions, that Ruby gem will not load up in RubyMotion. However, as mentioned earlier, MotionBundler offers a possibility to bypass this problem by mocking the library.</p>

<p>Instead of requiring the <i>stringio.bundle file</i>, MotionBundler is able to mock it with <a href="https://github.com/archan937/motion-bundler/blob/master/lib/motion-bundler/mocks/mac_ruby-0.12/stringio.rb">a pure Ruby implementation</a> of it, taken from <a href="https://github.com/MacRuby/MacRuby/blob/master/lib/stringio.rb">MacRuby</a>. At the moment, MotionBundler also mocks <a href="https://github.com/archan937/motion-bundler/blob/master/lib/motion-bundler/mocks/mac_ruby-0.12/strscan.rb">strscan</a>, <a href="https://github.com/archan937/motion-bundler/blob/master/lib/motion-bundler/mocks/zliby-0.0.5/zlib.rb">zlib</a> and <a href="https://github.com/archan937/motion-bundler/blob/master/lib/motion-bundler/mocks/httparty.rb">httparty</a> (only its basic features).</p>

<p>Aside from mocks being defined within the MotionBundler gem, you can also define your own mocks within your RubyMotion application. Just add a directory called mocks within the root directory of the application and put the <i>mock sources</i> in it. The relative path of the mock source within that directory ensures a certain Ruby file being mocked during compile time.</p>

<p>Let&#8217;s say the root directory of your RubyMotion application is <i>~/Sources/sample_app</i>. If you want to mock <code>require "yaml"</code>, create a file at <i>~/Sources/sample_app/mocks/yaml.rb</i> containing the mock code. If you want to mock <code>require "net/http"</code>, create a file at <i>~/Sources/sample_app/mocks/net/http.rb</i>.</p>
<p>You aren&#8217;t supposed to mock entire Ruby gems of course, that would be crazy. But you would rather mock fundamental Ruby standard library sources (like <i>stringio.bundle</i>) so you don&#8217;t have to dismiss a certain Ruby gem for use in your RubyMotion app on forehand.</p>

<p><b>Please Try MotionBundler!</b></p>

<p>MotionBundler is available on <a href="https://github.com/archan937/motion-bundler">Github</a>. The repository provides a sample application. You can clone the repository, navigate to the sample application directory, run <code>bundle</code> followed by <code>rake</code>. Please check out MotionBundler! Pull requests, remarks or requests are very welcome! You can also contact me <a href="https://twitter.com/archan937">on Twitter</a> :-)</p>

<p>Finally, I would like to say thanks to <a href="https://twitter.com/lrz">Laurent</a>, <a href="https://twitter.com/qrush">Nick Quaranto</a> and <a href="https://twitter.com/kastiglione">Dave Lee</a> for giving me some feedback and suggestions.</p>

<p>You can discuss this post on the <a href="https://groups.google.com/forum/?fromgroups&amp;nomobile=true#!topic/rubymotion/xlZhsPChZiU">RubyMotion google group</a>.</p>

<p><i><a href="https://twitter.com/archan937">Paul Engel</a> is a software developer living in beautiful Amsterdam, Netherlands.</i></p>
]]></content:encoded>
      <dc:date>2013-05-21T07:37:00+02:00</dc:date>
    </item>
    <item>
      <title>Introducing Promotion A Full Featured Rubymotion</title>
      <link>http://www.rubymotion.com/news/2013/05/15/introducing-promotion-a-full-featured-rubymotion.html</link>
      <description><![CDATA[(This is a guest post from Jamon Holmgren, creator and maintainer of ProMotion)

]]></description>
      <pubDate>Wed, 15 May 2013 17:50:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2013/05/15/introducing-promotion-a-full-featured-rubymotion.html</guid>
      <content:encoded><![CDATA[<p><em>(This is a guest post from Jamon Holmgren, creator and maintainer of <a href="https://github.com/clearsightstudio/ProMotion">ProMotion</a>)</em></p>

<p>Last August I started working on a new RubyMotion app. I quickly realized that one of UIKit’s most frequent pain points is working with <code>UINavigationControllers</code>, <code>UITabBarControllers</code>, and <code>UIViewControllers</code> — it just took too many lines of code to move around in my app. That led to the idea behind ProMotion: abstracting the screen and navigation handling in a Ruby-like way.</p>

<p>It has been a great experience building it and I’m going to show you how ProMotion could make your next iOS project a lot easier (with lots of code examples!). The source is also available on <a href="https://github.com/jamonholmgren/promotion-demo">GitHub</a>.</p>

<b>Screens: Ruby-like UIViewControllers</b>

<p>ProMotion subclasses <code>UIViewController</code> and <code>UITableViewController</code> to provide a ton of new functionality and abstraction and calls them <code>ProMotion::Screen</code>. (<a href="https://github.com/clearsightstudio/ProMotion#using-your-own-uiviewcontroller">You can also use ProMotion</a> with <a href="https://github.com/clayallsopp/formotion">Formotion</a> or your own <code>UIViewController</code>).</p>

<p><em>Note: from now on I’ll refer to <code>ProMotion</code> by its shortcut alias, <code>PM</code>.</em></p>

<pre class="highlight">
class HomeScreen &lt; PM::Screen
  title "Home"
end
</pre>

<p>Pretty simple. What about <code>viewWillAppear:animated</code> and other Obj-C methods? We implement simpler versions of those for your use:</p>

<pre class="highlight">
def on_init
# Fires right after the screen is initialized
end

def on_load
# Fires just before a screen is added to a view for the first time.
end

def will_appear
# Fires every time the screen will appear
end

def on_appear
# Fires just after the screen appears somewhere (after animations are complete)
end

def will_disappear
# Fires just before the screen will disappear
end

def on_disappear
# Fires after the screen is fully hidden
end
</pre>

<b>Invisible UINavigationControllers</b>

<p>When you create a screen you can pass in attributes. One of these is <code>nav_bar: true</code> which creates a <code>UINavigationController</code> and pushes the screen onto it. You don’t have to manage the navigation controller at all.</p>

<pre class="highlight">
open HomeScreen.new(nav_bar: true)
</pre>

<p>Within that screen you can open other screens and they’ll be pushed onto the UINavigationController automatically.</p>

<pre class="highlight">
open SecondaryScreen
</pre>

<p>If you pass in a class instead of an instance, ProMotion will instantiate it for you.</p>

<b>Easy TabBarControllers</b>

<p>Opening and managing a <code>UITabBarController</code> is a pain in Objective-C. ProMotion makes it very simple and natural.</p>

<pre class="highlight">
class AppDelegate &lt; PM::Delegate
  def on_load(app, options)
    open_tab_bar HomeScreen, AboutScreen, ContactScreen, HelpScreen
  end
end

# in app/screens/home_screen.rb

class HomeScreen &lt; PM::Screen
  def open_another_tab
    # Switches to the AboutScreen created above if its tab title is “About”.
    open_tab “About”
  end

  def open_new_screen_in_another_tab
    # Programmatically switches to the HelpScreen
    # and pushes the SecondaryScreen onto its UINavigationController.
    open SecondaryScreen, in_tab: “Help”
  end
end
</pre>

<b>Smart SplitViewControllers</b>

<p>Split view controllers are as easy as tab bars.</p>

<pre class="highlight">
open_split_screen MenuScreen, DetailScreen
</pre>

<p><img src="http://media.tumblr.com/fdf24b0a4ae8a53c28d118ecc0466281/tumblr_inline_mmw9cdnIGU1qz4rgp.png" alt="open split screen"/></p>

<p>From the left-hand part of the split screen it’s easy to open a child screen in the right. Just add <code>in_detail: true</code> to the <code>open</code> command:</p>

<pre class="highlight">
open SomeDetailScreen, in_detail: true
</pre>

<p>This is ignored if there isn’t a split screen so it’s ideal for use in universal apps.</p>

<b>Effortless Table Screens</b>

<p>You can easily build list views (“tables”) in ProMotion. <a href="https://github.com/clayallsopp/formotion">Formotion</a> is excellent for building forms, but sometimes you just want a menu or list of information. That’s where ProMotion’s built-in <code>TableScreen</code> works well.</p>

<pre class="highlight">
class HelpScreen &lt; PM::GroupedTableScreen
  title "Help"

  def table_data
    @help_table_data ||= [{
      title: "Get Help",
      cells: [{
        title: "Email us", action: :email_us
      }]
    }]
  end

  def email_us
    mailto_link = NSURL.URLWithString("mailto:jamon@clearsightstudio.com")
    UIApplication.sharedApplication.openURL(mailto_link)
  end
end
</pre>

<p>When the <i>Email us</i> cell is tapped, ProMotion fires the <code>email_us</code> method.</p>

<p><img src="http://media.tumblr.com/347b94ac65eee3b1435ba96cb349e819/tumblr_inline_mmw9e93T931qz4rgp.png" alt="table screen"/></p>

<p>For plain tables, you can add <code>searchable</code> and <code>refreshable</code> easily:</p>

<pre class="highlight">
class StatesScreen &lt; PM::TableScreen
  title “States”
  searchable
  refreshable

  def table_data
    # list of states
  end

  def on_refresh
    # refresh your data here, usually async
    some_async_call do
      # update your data
      stop_refreshing
      update_table_data
    end
  end
end
</pre>

<p><img src="http://media.tumblr.com/3a4f86e187c181f11511c3917b9a37a8/tumblr_inline_mmw9lkvAlz1qz4rgp.png" alt="searchable, refreshable list of states"/></p>

<b>Styling with Style</b>

<p>Everybody has their favorite iOS styling system and ProMotion works beautifully with all of them. <a href="http://www.pixate.com/">Pixate</a>, <a href="https://github.com/tombenner/nui">NUI</a>, and of course <a href="https://github.com/rubymotion/teacup">RubyMotion’s Teacup</a> are all very good choices.</p>

<p>For those who want a simple, Teacup-lite styling system, ProMotion comes with one built-in.</p>

<pre class="highlight">
set_attributes self.view,
  background_color: UIColor.grayColor

add UILabel.alloc.initWithFrame([[10, 10], [300, 45]]),
  text: “Welcome to ProMotion!”,
  resize: [ :left, :right, :top ],
  background_color: UIColor.clearColor,
  text_color: UIColor.whiteColor,
  shadow_color: UIColor.blackColor,
  number_of_lines: 0,
  text_alignment: UITextAlignmentCenter,
  font: UIFont.boldSystemFontOfSize(18.0)
</pre>

<p>This <code>UILabel</code> is added to the view and all the attributes are set. Snake case is converted to camel case automatically when appropriate. There are also some nice helpers like the <code>resize</code> setting for <code>UIViewAutoresizingMasks</code>.</p>

<p><img src="http://media.tumblr.com/270d8c5d7f213fcc1f9978afb358284c/tumblr_inline_mmw9sbCgUR1qz4rgp.png" alt="image"/></p>

<b>Perfect for Production</b>

<p>ProMotion is <a href="https://github.com/clearsightstudio/ProMotion#apps-built-with-promotion">already being used</a> in production apps around the world and is becoming quite stable. It’s likely that version 1.0 will be coming soon without major changes to the API.</p>

<p>Without RubyMotion, it’s very unlikely that a system like ProMotion would exist. There’s nothing like it in the Objective-C world and the community is a lot different there. It’s a testament to the RubyMotion community as well as Laurent and his team for making this possible.</p>

<p>This is just an intro to ProMotion — head over to the <a href="https://github.com/clearsightstudio/ProMotion">GitHub repo</a> to learn more. I hope you take a look at it for your next project!</p>

<p><em>Jamon Holmgren (<a href="http://twitter.com/jamonholmgren">@jamonholmgren</a>) is the owner of <a href="http://www.clearsightstudio.com/">ClearSight Studio</a>, a mobile app and web development studio located near Portland, OR.</em></p>
]]></content:encoded>
      <dc:date>2013-05-15T17:50:00+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Goes 2 0 And Gets Os X Support</title>
      <link>http://www.rubymotion.com/news/2013/05/08/rubymotion-goes-2-0-and-gets-os-x-support.html</link>
      <description><![CDATA[It has been exactly a year since we launched RubyMotion. Yep, this is right, RubyMotion is one year old!


]]></description>
      <pubDate>Wed, 08 May 2013 13:36:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2013/05/08/rubymotion-goes-2-0-and-gets-os-x-support.html</guid>
      <content:encoded><![CDATA[<p>It has been exactly a year since we launched RubyMotion. Yep, this is right, RubyMotion is one year old!</p>
<p><img alt="image" src="http://media.tumblr.com/4b46c55e1e3a801dcd2d70b2e53cfc82/tumblr_inline_mmj3f1gtpZ1qz4rgp.png"/></p>

<p>We released over the year a total of 35 software updates fixing countless bugs reported by our beloved users. That&#8217;s almost 3 updates per month on average!</p>
<p>We shipped significant features such as creating static libraries, debugging support (on both simulator and device), API reference documentation browser, automatic file dependencies, and more. <span>We also shipped support for iOS 6.0 and the new iPhone 5 architecture right after their announcements.</span></p>
<p>We did not expect the RubyMotion community to grow that fast. In just one year, we got <a href="http://rubymotion-wrappers.com">exhaustive wrappers</a>, <a href="http://motioncasts.tv/">professional screencasts</a>, a <a href="http://pragprog.com/book/carubym/rubymotion">couple</a> <a href="http://www.packtpub.com/rubymotion-ios-develoment-essentials/book">books</a>, and we even organized <a href="http://blog.rubymotion.com/2013/04/21/rubymotion-inspect-2013-wrap-up.html">our very own conference</a>!</p>
<p><span>We now believe it is time to focus on the second phase of our roadmap, which will essentially consist of introducing new innovative features on top of our toolchain as well as targeting other platforms.</span></p>
<p>Today, we are shipping our first 2.x release. We still have quite a bit of road to clear up our roadmap but we believe we are on the right path.</p>
<p><strong>OS X Support</strong></p>
<p>RubyMotion is now supporting Mac application development. You can create OS X apps using the same toolchain you already know. We ported our static compiler, command-line interface and interactive shell (REPL) for OS X application development!</p>
<p><img alt="image" src="http://media.tumblr.com/6a8b2b9d52b6ead27c98739d9bbedb35/tumblr_inline_mmhqghwWMg1qz4rgp.png"/></p>

<p>RubyMotion OS X apps are statically compiled to Intel 32-bit and 64-bit architectures, include our custom ARC-inspired memory management system, weight less than two megabytes and do not require any 3rd-party dependency to run.</p>
<p>The build system also supports OS X v10.7 and v10.8 as deployment targets and includes an <em>archive</em> Rake task for distribution. 3rd-party projects can be vendored using the updated <a href="https://github.com/HipByte/motion-cocoapods">motion-cocoapods</a> gem.</p>
<p><span>The documentation in our </span><span></span><a href="http://rubymotion.com/developer-center">developer center</a><span> has been updated for OS X. </span><span>We have also been adding a few OS X samples to our</span><span> </span><a href="https://github.com/HipByte/RubyMotionSamples">sample code repository</a><span>, check them out! We will be adding more samples soon, feel free to contribute some too.</span></p>
<p><span>Finally, we are also happy to report that popular RubyMotion libraries such as <a href="https://github.com/rubymotion/BubbleWrap">Bubblewrap</a>, <a href="https://github.com/rubymotion/Teacup">Teacup</a> and <a href="https://github.com/rubymotion/Joybox">Joybox</a> have been ported to OS X. We hope that other libraries will also be gradually ported to this new platform.</span></p>
<p><a href="https://github.com/CurveBeryl/Joybox-Examples"><span><img alt="image" src="http://media.tumblr.com/4e47f57de8fc8bacf019491db2752334/tumblr_inline_mmhqtbPXiX1qz4rgp.png"/></span></a></p>
<p><span>As you may know, RubyMotion is an improved version of </span><a href="http://macruby.org">MacRuby</a><span>, an implementation of Ruby for the Mac that we started in 2006 at Apple. </span></p>
<p><span>A lot of MacRuby enthusiasts supported us when we launched RubyMotion a year ago, and RubyMotion OS X support has been a consistent feature request over the year, since day 1.</span></p>
<p><span>Today, </span><span>OS X support ships to all RubyMotion customers, <em>for free</em>. This is our birthday gift to you guys, thanks for your support!</span></p>
<p class="p1"><strong>Project Templates</strong></p>
<p><span>RubyMotion now exposes functionality to let users chose a template when creating a new project, by passing a value to the <em>&#8212;template</em> argument of the <em>motion create</em> command.</span></p>
<p><span>RubyMotion comes with 3 builtin templates: <em>ios</em> (the default one), <em>osx</em> and <em>gem</em>, which will respectively create a RubyMotion iOS, OS X or RubyGem project.</span></p>
<p><span>For example, to create a new OS X project named Hello:</span></p>
<pre class="highlight">$ motion create --template=osx Hello<br/>    Create Hello
    Create Hello/app/app_delegate.rb
    Create Hello/app/menu.rb
    Create Hello/Rakefile
    Create Hello/resources/Credits.rtf
    Create Hello/spec/main_spec.rb</pre>
<p><span> 3rd-party templates can also be installed into the <em>~/Library/RubyMotion/template</em> directory. </span></p>
<p><span>We expect certain RubyMotion gems to make use of the system to provide richer project templates that include specific integration code. As an example, the Joybox team is looking into making a template that includes a game skeletton.</span></p>
<p><strong><span>Command-Line Plugins</span></strong></p>
<p><span>Similarly to the template system, RubyMotion now exposes a way to add new commands to the <em>motion</em> command-line tool, using plugins.</span></p>
<p><span>Builtin commands, such as <em>create</em>, <em>update</em>, <em>support</em> and<em> ri</em>, have been extracted as plugins. </span><span>3rd-party commands can also be installed into the </span><em>~/Library/RubyMotion/command</em><span> directory.</span></p>
<p><span>RubyMotion gems can now extend the <em>motion</em> command with their own actions, for example custom code generators.</span></p>
<p><strong><span>Common Build Directory</span></strong></p>
<p>The build system has been improved to use a common build directory when compiling external project files (ex. gems). </p>
<p>This makes build times faster as gems will not be recompiled every time the project configuration changes, or when multiple RubyMotion projects are using the same gem.</p>
<p><strong><span>Weak References</span></strong></p>
<p><span>RubyMotion now exposes a way to let users create weak references. </span><span>For convenience reasons, we implemented the <em>WeakRef</em> class which is also present in the standard Ruby library. </span></p>
<p><span>Weak references can be used in order to prevent cyclic references. A good example is implementing the delegate pattern.</span></p>
<pre class="highlight">class MyController
  def initialize(delegate)
    @delegate = WeakRef.new(delegate)
  end

  def do_something
    # ...
    @delegate.did_something
  end
end
</pre>
<p><span>Objects passed to <em>WeakRef.new</em> will not be retained, and any message sent to a <em>WeakRef</em> object will be forwarded to the passed object.</span></p>
<p>For performance reasons, <em>WeakRef</em> objects are recognized early by the method dispatcher. The <em>WeakRef</em> class in RubyMotion cannot be subclassed.</p>
<p>We expect the RubyMotion memory management system to be able to deal with cyclic references in the future. In this case, the <em>WeakRef</em> class will be replaced by a no-op.</p>
]]></content:encoded>
      <dc:date>2013-05-08T13:36:00+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Inspect 2013 Wrap Up</title>
      <link>http://www.rubymotion.com/news/2013/04/21/rubymotion-inspect-2013-wrap-up.html</link>
      <description><![CDATA[Just a few weeks ago the first RubyMotion conference was happening in our home town of Brussels, Belgium! And guess what, it was pretty awesome!
It was the first conference we ever organized. We would like to share our experience in this post as well as cover what happened!
The Venue

We wanted the first conference to be friendly, diverse and exclusive. We initially fixed the maximum number of attendees to 100 because we knew that over this limit it would have been difficult for everyone to meet up and chat. We eventually raised the limit to 130. Despite the fact that the majority of RubyMotion users are located in the United States, we also knew that we wanted the conference to happen in Belgium, for practical reasons.
It took us quite a bit of time to find the conference venue. We visited a few venues but they didn&#8217;t really match what we had in mind. We wanted the venue to be special, unusual, and at the same time professional and prestigious. We also wanted the venue to be in the historical center of Brussels, because the area is full of hotels, restaurants, bars, and tourist attractions. Organizing the conference in a hotel near the airport was therefore out of the question.  
The Grand Place is Brussels&#8217; main square and also the center of its historical center. We started looking around for potential venues and we eventually figured out it was possible to rent a house on the Grand Place itself! We quickly jumped on the opportunity.
We got 130 visitors from every continent. A lot of different accents were heard, making the event very diverse. Most of the attendees were visiting Belgium for the first time, so they got to taste our awesome beers and chocolates!
The Schedule

The conference featured a single track over 2 days. We pre-selected 10 speakers for the announcement and opened a call-for-papers. We originally wanted 18 presentations.
Pre-selecting as many speakers was probably a mistake because we received close to 80 talk proposals. We didn&#8217;t expect to receive as many talk proposals and it was very tough to decide on the remaining selection. We had to reject a lot of very interesting talks.
We eventually decided to go with 20 presentations, which means we had to fit 10 talks each day, and still leave enough room for breaks and lunch. We took over the challenge and eventually managed to finish the conference on time!

We decided not to print the schedule on paper and preferred to have an iOS app instead. We teamed with the awesome folks at Epic, who already made the conference website, to create an iPhone app for the conference. The app was obviously written in RubyMotion, using the Teacup and Sugarcube libraries. You can find the full source code on GitHub.
The Food

Offering delicious food was extremely important to us. We did not want to give away dry sandwiches that you can find in most conferences.
We welcomed visitors with fresh pastries (cooked onsite), coffee, tea and juices. Each attendee also received chocolates from Benoit Nihant's Haute Couture selection. Benoit is one of the remaining true chocolatiers of Belgium.
For lunch, our attendees had access to a full Belgian buffet which included cured meats, steak tartare, duck, various salads, fresh vegetables, salted waffles and more. A huge assortiment of homemade deserts was also available, including chocolate mousse, fruit tarts, tiramisu, and more. And we of course served beer!
Most attendees told us they had the best conference food experience ever.
The Shirt


]]></description>
      <pubDate>Sun, 21 Apr 2013 15:28:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2013/04/21/rubymotion-inspect-2013-wrap-up.html</guid>
      <content:encoded><![CDATA[<p>Just a few weeks ago the <a href="http://www.rubymotion.com/conference">first RubyMotion conference</a> was happening in our home town of Brussels, Belgium! And guess what, it was pretty awesome!</p>
<p>It was the first conference we ever organized. We would like to share our experience in this post as well as cover what happened!</p>
<hr><p><strong>The Venue</strong></p>
<p><a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"><img alt="the grand'place" src="http://farm9.staticflickr.com/8397/8669087616_e3ee416ae3.jpg"/></a></p>
<p><span>We wanted the first conference to be friendly, diverse and exclusive. We initially fixed the maximum number of attendees to 100 because we knew that over this limit it would have been difficult for everyone to meet up and chat. We eventually raised the limit to 130. Despite the fact that the majority of RubyMotion users are located in the United States, we also knew that we wanted the conference to happen in Belgium, for practical reasons.</span></p>
<p>It took us quite a bit of time to find the conference venue. <span>We visited a few venues but they didn&#8217;t really match what we had in mind. We wanted the venue to be special, unusual, and at the same time professional and prestigious. </span><span>We also wanted the venue to be in the historical center of Brussels, because the area is full of hotels, restaurants, bars, and tourist attractions. Organizing the conference in a hotel near the airport was therefore out of the question.  </span></p>
<p><span>The <a href="http://en.wikipedia.org/wiki/Grand_Place">Grand Place</a> is Brussels&#8217; main square and also the center of its historical center. We started looking around for potential venues and we eventually figured out it was possible to rent a house on the Grand Place itself! We quickly jumped on the opportunity.</span></p>
<p><span>We got 130 visitors from every continent. A lot of different accents were heard, making the event very diverse. Most of the attendees were visiting Belgium for the first time, so they got to taste our awesome beers and chocolates!</span></p>
<hr><p><strong>The Schedule</strong></p>
<p><a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"><img alt="conference room" src="http://farm9.staticflickr.com/8396/8669094132_86cf539d06.jpg"/></a></p>
<p><span>The conference featured a single track over 2 days. We pre-selected 10 speakers for the announcement and opened a call-for-papers. We originally wanted 18 presentations.</span></p>
<p><span>Pre-selecting as many speakers was probably a mistake because we received close to 80 talk proposals. We didn&#8217;t expect to receive as many talk proposals and it was very tough to decide on the remaining selection. We had to reject a lot of very interesting talks.</span></p>
<p><span>We eventually decided to go with 20 presentations, which means we had to fit 10 talks each day, and still leave enough room for breaks and lunch. We took over the challenge and</span><span> eventually managed to finish the conference on time!</span></p>
<p><span><a href="https://itunes.apple.com/us/app/rubymotion-inspect-2013/id622542872?mt=8"><img alt="image" src="http://media.tumblr.com/ca86e5adee05570923ee7503b634c405/tumblr_inline_mlnin1HgrJ1qz4rgp.jpg"/></a></span></p>
<p>We decided not to print the schedule on paper and preferred to have an iOS app instead. We teamed with the awesome folks at <a href="http://epic.net/">Epic</a>, who already made the conference website, to create <a href="https://itunes.apple.com/us/app/rubymotion-inspect-2013/id622542872?mt=8">an iPhone app for the conference</a>. <span>The app was obviously written in RubyMotion, using the </span><a href="https://github.com/rubymotion/teacup">Teacup</a><span> and </span><a href="https://github.com/rubymotion/sugarcube">Sugarcube</a><span> libraries. You can find the </span><a href="https://github.com/epicagency/rubymotion-inspect">full source code</a><span> on GitHub.</span></p>
<hr><p><strong>The Food</strong></p>
<p><a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"><img alt="the conference food" src="http://farm9.staticflickr.com/8390/8669438934_d86e3d7e4d.jpg"/></a></p>
<p>Offering delicious food was extremely important to us. We did not want to give away dry sandwiches that you can find in most conferences.</p>
<p>We welcomed visitors with fresh pastries (cooked onsite), coffee, tea and juices. Each attendee also received chocolates from <a href="http://www.benoitnihant.be/">Benoit Nihant</a>'s Haute Couture selection. Benoit is one of the remaining <em>true chocolatiers</em> of Belgium.</p>
<p>For lunch, our attendees had access to a full Belgian buffet which included cured meats, steak tartare, duck, various salads, fresh vegetables, salted waffles and more. A huge assortiment of homemade deserts was also available, including chocolate mousse, fruit tarts, tiramisu, and more. And we of course served beer!</p>
<p>Most attendees told us they had the best conference food experience ever.</p>
<hr><p><strong>The Shirt</strong></p>
<p><a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"><img alt="image" src="http://media.tumblr.com/24de39342c060f4c0e1f07934faed011/tumblr_inline_mlnm198BvV1qz4rgp.jpg"/></a></p>

<p>We designed the conference shirts by ourselves. We didn&#8217;t want to go with a traditional &#8220;conference name + date&#8221; shirt, so we iterated quite a bit on the design.</p>
<p>We finally ended up choosing to represent a coat of arms. The logo we went with features two wyverns (an homage to the <a href="http://www.llvm.org">LLVM project</a>) supporting the existing RubyMotion logo on a white shield, crowned with a sparkling ruby.</p>
<p>The motto is written on a white ruban and reads <span>"#inspect RubyMotion 2013".</span></p>
<hr><p><strong>The Presentations, 1st Day</strong></p>
<p><a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"><img alt="rich talking" src="http://farm9.staticflickr.com/8388/8669153626_213247cfc8.jpg"/></a></p>
<p><span><em>A Brave New World: Learning iOS for the Ruby Refugee</em>, by <strong>Nick Quaranto</strong> (<a href="https://speakerdeck.com/qrush/rubymotion-the-sleeper-has-awakened">slides available</a>). Nick covered his experience using RubyMotion to write a couple sample projects (which eventually turned into the official Basecamp iPhone app) and talked about the <a href="https://github.com/qrush/motion-settings-bundle">motion-settings-bundle</a> and <a href="https://github.com/qrush/motion-layout">motion-autolayout</a> gems he extracted in the process. </span><span>We later recorded an <a href="http://blog.rubymotion.com/2013/04/09/rubymotion-success-story-basecamp-for-iphone.html">interview with Nick</a> that you can also check out. </span></p>
<p><em>Behaviour Driven Motion using Calabash</em>, by <strong>Karl Krukow</strong> (<a href="https://speakerdeck.com/krukow/rubymotion-number-inspect2013-behavior-driver-motion-using-calabash">slides available</a>). Karl introduced the Calabash framework and how you can write acceptance tests for RubyMotion apps with it, using the <a href="https://github.com/calabash/motion-calabash">motion-calabash</a> gem. (Note: A few days later it was announced that LessPainful, Karl&#8217;s company, was <a href="http://techcrunch.com/2013/04/16/xamarin-launches-test-cloud-automated-mobile-ui-testing-platform-acquires-mobile-test-company-lesspainful/">acquired by Xamarin</a>.)</p>
<p><em>Controlling the Real World with RubyMotion</em>, by <strong>Rich Kilmer</strong> (<a href="https://speakerdeck.com/richkilmer/bluetooth-le-number-inspect-2013-brussels-belgium-28-march-2013">slides available</a>). Rich talked about the history of bluetooth, starting from the first specification up to the bluetooth4 standard, and described the APIs that you can use to interface from RubyMotion. And before you ask, yes, Rich was <a href="http://isrichkilmerwearingwhitepants.com/">wearing white pants</a>.</p>
<p><em>Elevate your Intent</em>, by <strong>Matt Green</strong> (<a href="https://speakerdeck.com/mattgreen/elevate-your-intent">slides available</a>). Matt talked about the complexity that can rise when designing iOS apps and offered a solution through his <a href="https://github.com/mattgreen/elevate">elevate gem</a> that we recommend checking out.</p>
<p><em>Accessibility and RubyMotion</em>, by <strong>Austin Seraphin</strong> (<a href="http://www.slideshare.net/AdrianoMartino/ruby-motion-andiosaccessibility">slides available</a>). Austin, a blind developer, talked about accessibility and how RubyMotion makes it easier for blind people to develop apps. <span>Undoubtedly one of the most acclaimed talks of the conference. Austin also covered his trip to the conference in 3 blog posts that we highly recommend: <a href="http://behindthecurtain.us/2013/04/15/an-unexpected-journey/">An Unexpected Journey</a>, <a href="http://behindthecurtain.us/2013/04/17/inspect-2013/">#inspect 2013</a>, and <a href="http://behindthecurtain.us/2013/04/19/the-journey-home/">The Journey Home</a>.</span></p>
<p><a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"><img alt="austin talking" src="http://farm9.staticflickr.com/8386/8669145480_4a5ca23a7f.jpg"/></a></p>
<p><em>CoreData For The Curious Rubyist</em>, by <strong>Jonathan Penn</strong> (<a href="http://cocoamanifest.net/features/2013-03-core-data-in-motion.pdf">slides available</a>). Jonathan introduced CoreData, Apple&#8217;s framework for data persistence. He covered what CoreData is, when to use it, and the builtin framework classes you will have to deal with when integrating it in your app. <a href="https://github.com/jonathanpenn/core-data-journal-sample">Demo code available</a>.</p>
<p><em>The Life and Times of an Object</em>, by <strong>Joshua Ballanco</strong>. Josh started with a simple app that was crashing and investigated the crash using low-level tools such as gdb and malloc-history. Eventually, it turned out that the bug was in the RubyMotion runtime!</p>
<p><em>Concurrency in RubyMotion: Use the Multicore Luke!</em>, by <strong>Mateus Armando</strong> (<a href="https://speakerdeck.com/seanlilmateus/concurrency-patterns-in-rubymotion">slides available</a>). Mateus talked about how it is necessary to use concurrency and the various approaches to it, such as <span>GCD and NSOperationQueue.</span></p>
<p><em>Get More From RubyMotion with RubyMine</em>, by <strong>Dennis Ushakov</strong>. Dennis didn&#8217;t have any slides, he simply started developing a RubyMotion app straight within <a href="http://jetbrains.com/ruby">RubyMine</a> and demo&#8217;ed the excellent RubyMotion integration we (HipByte and JetBrains) have been working on together, featuring smart auto-completion, debugging on simulator and device, refactoring, documentation viewer, and more.</p>
<p><em>Crafting iOS Dev Tools in Redcar</em>, by <strong>Delisa Mason</strong> (<a href="https://speakerdeck.com/kattrali/crafting-ios-dev-tools-in-redcar-the-ruby-editor">slides available</a>). Delisa talked about Redcar, an open-source editor written in Ruby, and introduced its very extensible plugin infrastructure. She eventually showed how she managed to <a href="https://github.com/kattrali/redcar-rubymotion">integrate RubyMotion in Redcar</a>.</p>
<hr><p><strong>The Presentations, 2nd Day</strong></p>
<p><a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"><img alt="mattt talking" src="http://farm9.staticflickr.com/8405/8669129582_e15ddae294.jpg"/></a></p>
<p><em>NSRevolution: How Ruby hackers built the new Objective-C Open Source community</em>, by <strong>Mattt Thompson</strong> (<a href="https://speakerdeck.com/mattt/nsrevolution-how-ruby-hackers-built-the-new-objective-c-open-source-community">slides available</a>). Mattt talked about the influence of the Ruby community on the younger iOS community. </p>
<p><em>More Than You Need to Know About CocoaPods</em>, by <strong>Eloy Duran</strong> (<a href="http://www.slideshare.net/alloy020/ruby-motion-inspect-2013-without-notes-18676749">slides available</a> + <a href="http://t.co/b7uk8llnHb">video 1</a> and <a href="http://t.co/66oHxZD87x">video 2</a>). Our hero Eloy talked about <a href="http://cocoapods.org/">CocoaPods</a>, the missing package manager for Objective-C libraries, and also featured a sneak-peak at their sister project, <a href="http://cocoadocs.org">CocoaDocs</a>.</p>
<p><em>Wrapping iOS in RubyMotion</em>, by <strong>Clay Allsopp</strong> (<a href="https://speakerdeck.com/clayallsopp/wrapping-ios-with-rubymotion">slides available</a>). Clay covered various techniques you can use to create elegant and nice Ruby wrappers on top of iOS API patterns, such as callbacks, delegates and enumerations.</p>
<p><em>Goodbye IB, Hello Teacup</em>, by <strong>Colin Gray</strong> (<a href="https://github.com/colinta/goodbye-xcode">slides available</a> + <a href="http://media.colinta.com/goodbye-xcode.mp4">video</a>). Colin started talking about Teacup, a library to style user interfaces, and eventually announced <a href="https://github.com/colinta/motion-xray">motion-xray</a>, a powerful iOS inspector running inside RubyMotion apps that can be opened using a device gesture.</p>
<p><em>Using BubbleWrap to Quickly Build RubyMotion Apps</em>, by <strong>Marin Usalj</strong> (<a href="https://speakerdeck.com/mneorr/bubblewrap">slides available</a>). Marin gave a nice overview of the <a href="https://github.com/rubymotion/BubbleWrap">Bubblewrap</a> project, which aims at becoming the ActiveSupport of RubyMotion.</p>
<p><a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"><img alt="juan speaking" src="http://farm9.staticflickr.com/8399/8669443586_96461aef04.jpg"/></a></p>
<p><em>Mixing CoffeeScript in RubyMotion apps</em>, by <strong>Michael Erasmus</strong> (<a href="https://github.com/michael-erasmus/inspect-talk">slides available</a>). Michael talked about his experience building a cross-platform mobile app where CoffeeScript was used to build the common logic.</p>
<p><em>Building Interactive Data Visualization Charts</em>, by <strong>Amit Kumar</strong> (<a href="https://speakerdeck.com/toamitkumar/rubymotion-building-interactive-data-visualization-charts">slides available</a>). Amit talked about the various libraries one can use to integrate interactive charts in an iOS app, and eventually announced the <a href="https://github.com/toamitkumar/motion-plot">motion-plot</a> gem, a nice RubyMotion wrapper sitting on top of the <span>CorePlot framework.</span></p>
<p><em>Cocos2D, an Easier Way</em>, by <strong>Juan Karam</strong> (<a href="https://speakerdeck.com/curveberyl/cocos2d-an-easier-way">slides available</a>). Juan talked about his gaming experience, basic game programming concepts, and eventually announced <a href="https://github.com/rubymotion/Joybox">Joybox</a>, a RubyMotion gaming library integrating the popular Cocos2D and Box2D frameworks. He even wrote a simple game during his talk!</p>
<p><em>Let’s Move with CoreMotion</em>, by <strong>Akshat Paul</strong> and <strong>Abhishek Nalwaya</strong> (<a href="https://speakerdeck.com/akshatpaul/lets-move-with-core-motion-rubymotion-conference-number-inspect-2013">slides available</a>). The inseparable friends gave a speedy talk about CoreMotion, Apple&#8217;s framework for motion sensors integration. They talked about the core builtin classes and how you can use them from RubyMotion.</p>
<p><em>RubyMotion: Past, Present and Future</em>, by <strong>Laurent Sansonetti</strong>. Laurent gave the final conference presentation. He talked about what made him create RubyMotion, the current state of the project, and what the future holds.</p>
<hr><p><strong>The Party</strong></p>
<p><a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"><img alt="the party!" src="http://farm9.staticflickr.com/8390/8668345025_04c35275da.jpg"/></a></p>
<p><span>We concluded this wonderful conference with an awesome party! </span></p>
<p><span>Our friends at </span><a href="http://www.github.com">GitHub</a><span> graciously sponsored the party. We booked the entire Hoppy Loft room of the </span><a href="http://en.wikipedia.org/wiki/D%C3%A9lirium_Caf%C3%A9">Delirium Cafe</a><span>, one of Brussels&#8217; legendary pubs, which features thousands of different beers.</span></p>
<p><a href="http://www.github.com"><img alt="image" src="http://media.tumblr.com/ec3e3346a18918cc098c42ed51f99fac/tumblr_inline_mlnt9nj3tY1qz4rgp.png"/></a></p>
<p><span>Conference attendees were able to taste quite a lot of delicious Belgian beers. We ended the party at around 4AM!</span></p>
<hr><p><strong>The Sponsors</strong></p>
<p>RubyMotion #inspect 2013 would not have been possible without the support of our great sponsors.</p>
<p><a href="http://www.heroku.com"><img alt="image" src="http://media.tumblr.com/4050afe267a44087cd28c3d22f8573e1/tumblr_inline_mlnpepNp7y1qz4rgp.png"/></a></p>
<p><span>Our lead gold sponsor. </span><a href="http://www.heroku.com"><strong>Heroku</strong></a><span> is the first and best multi-language cloud application platform, or platform-as-a-service. Heroku allows developers to deploy, scale, and manage their apps without needing to think about servers or systems administration. Over one million applications have been deployed to Heroku.</span></p>
<p><a href="http://www.jetbrains.com/ruby"><img alt="image" src="http://media.tumblr.com/694921db2f2261057f7852e1b9e43a0d/tumblr_inline_mlnpjsSra31qz4rgp.png"/></a></p>
<p>One of our silver sponsors. <a href="http://www.jetbrains.com/ruby"><strong>JetBrains</strong></a> is a world leader in smart development tools that help software developers simplify their challenging tasks and automate the routine ones. <a href="http://www.jetbrains.com/ruby">RubyMine</a>, the most powerful Ruby IDE, provides smart coding assistance and advanced testing and debugging features for all types of Ruby projects and cutting-edge technologies, including RubyMotion.</p>
<p><a href="http://www.cyrusinnovation.com"><img alt="image" src="http://media.tumblr.com/02db05a4742170754d9b413971374842/tumblr_inline_mlnpruXA8N1qz4rgp.png"/></a></p>
<p>One of our silver sponsors. Here at <strong><a href="http://www.cyrusinnovation.com/expertise/rubymotion/">Cyrus</a></strong>, our team of forward-thinking developers are continuously expanding their skillsets to incorporate the latest tools in software development. With RubyMotion, Cyrus is once again at the forefront of innovation helping our clients cut down both development time and costs.</p>
<p><a href="http://www.nedap.com/"><img alt="image" src="http://media.tumblr.com/4eb4232536c6dfcd7bcbb16e5c3d179c/tumblr_inline_mlnpzvkdQm1qz4rgp.png"/></a></p>
<p><span>One of our silver sponsors.</span><strong> <a href="http://www.nedap.com/">Nedap</a></strong><span> is a manufacturer of intelligent technological solutions for relevant themes. Sufficient food for a growing population, clean drinking water throughout the world, smart networks for sustainable energy are just a couple of examples of themes Nedap is working on.</span></p>
<p><a href="http://boxcar.io/"><img alt="image" src="http://media.tumblr.com/402b6cef3f496dfc379935b2f5aa7a2c/tumblr_inline_mlnq7eFL5C1qz4rgp.png"/></a></p>
<p><span>One of our silver sponsors. </span><a href="http://boxcar.io/"><strong>Boxcar</strong></a><span> is a push notification service. Boxcar provides real time push notifications for the services you love.</span></p>
<p><a href="http://pragmaticstudio.com/"><img alt="image" src="http://media.tumblr.com/c4ce176d97abdbd7d4c6787e04db48e4/tumblr_inline_mlnqlepcuQ1qz4rgp.png"/></a></p>
<p>One of our bronze sponsors. At <a href="http://pragmaticstudio.com/"><strong>The Pragmatic Studio</strong></a>, we help programmers continually improve their skills and their careers through hands-on training courses.</p>
<p><a href="http://belighted.com/en"><img alt="image" src="http://media.tumblr.com/96a17bbc023b66b8f50eff05ca3267ad/tumblr_inline_mlnqfnjuc11qz4rgp.png"/></a></p>
<p><span>One of our bronze sponsors. Founded in 2008, </span><a href="http://belighted.com/en"><strong>Belighted</strong></a><span> is a leader in the use of Ruby on Rails technologies and agile methodologies.</span><span> </span></p>
<hr><p><span><strong>Summary</strong></span></p>
<p><a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137"><img alt="the helpers team" src="http://farm9.staticflickr.com/8406/8669091146_708a334c53.jpg"/></a></p>
<p>Organizing a conference is hard. But we believe we did a pretty good job on this one! Nothing catastrophic happened, people enjoyed the event, the Wi-Fi didn&#8217;t work, and budget-wise we should break-even.<span> </span></p>
<p>RubyMotion #inspect 2013 would not have been possible without our helpers team: <a href="http://twitter.com/pinuxette">Stephanie Sansonetti</a>, <a href="https://twitter.com/matrixise">Stephane Wirtel</a>, <a href="https://twitter.com/yann_ck">Yannick Schutz</a>, <a href="https://twitter.com/franckverrot">Franck Verrot</a> and <a href="https://twitter.com/mlainez">Marc Lainez</a>.</p>
<p>We published the <a href="http://www.flickr.com/photos/hipbyte/sets/72157633292996137">official photos of the conference</a>, check them out! Also, all presentations have been recorded, we will let you know once they are available.</p>
<p>Finally, we would like to announce that <em>there will be a RubyMotion #inspect 2014</em> <em>conference</em>. We can already tell you it will happen on the other side of the Atlantic ocean and that it will be <em>even more epic</em>.</p>
<p>Stay thirsty, my friends!</p>
]]></content:encoded>
      <dc:date>2013-04-21T15:28:00+02:00</dc:date>
    </item>
    <item>
      <title>Algolia Search Adds Rubymotion Support</title>
      <link>http://www.rubymotion.com/news/2013/04/16/algolia-search-adds-rubymotion-support.html</link>
      <description><![CDATA[Algolia Search is a product that lets you implement real-time instant search in your app, with features like type-ahead search, typo-tolerance, instant visual feedback and geosearch.
We are glad to report that they just announced that they will support RubyMotion!
We worked together with the folks at Algolia on a RubyMotion integration gem that lets you easily integrate their offline SDK.
The Algolia folks also graciously agreed to donate 5&#160;White Label licenses (custom branding) to the firsts to email hey@algolia.com. Hurry up!

]]></description>
      <pubDate>Tue, 16 Apr 2013 11:13:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2013/04/16/algolia-search-adds-rubymotion-support.html</guid>
      <content:encoded><![CDATA[<p><a href="http://www.algolia.com/">Algolia Search</a> is a product that lets you implement real-time instant search in your app, with features like type-ahead search, typo-tolerance, instant visual feedback and geosearch.</p>
<p>We are glad to report that they just announced that they will <a href="http://blog.algolia.com/algolia-search-is-now-available-for-rubymotion/">support RubyMotion</a>!</p>
<p><span>We worked together with the folks at Algolia on a </span><span><a href="https://github.com/algolia/motion-algolia-search">RubyMotion integration gem</a><span> that lets you easily integrate their offline SDK.</span></span></p>
<p><span><span>The Algolia folks also graciously agreed to donate 5&#160;<em>White Label</em> licenses (custom branding) to the firsts to email <a href="mailto:hey@algolia.com">hey@algolia.com</a>. Hurry up!</span></span></p>

<p><iframe frameborder="0" height="281" src="http://player.vimeo.com/video/60997827?title=0&amp;byline=0&amp;portrait=0" width="500"></iframe></p>
]]></content:encoded>
      <dc:date>2013-04-16T11:13:00+02:00</dc:date>
    </item>
    <item>
      <title>Announcing Motionmeetup Monthly Online Rubymotion</title>
      <link>http://www.rubymotion.com/news/2013/04/12/announcing-motionmeetup-monthly-online-rubymotion.html</link>
      <description><![CDATA[(This is a guest post from Gant Laborde)
While RubyMotion continues to build momentum, it’s obvious that not everyone can attend such endeavors as RubyMotion #inspect or the public RubyMotion training in the San Francisco Bay Area. Fear not! From the community of RubyMotion developers we’re happy to announce a new monthly online meetup for everyone, worldwide, called MotionMeetup.


]]></description>
      <pubDate>Fri, 12 Apr 2013 15:45:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2013/04/12/announcing-motionmeetup-monthly-online-rubymotion.html</guid>
      <content:encoded><![CDATA[<p><em>(This is a guest post from <a href="https://twitter.com/GantLaborde">Gant Laborde</a>)</em></p>
<p>While RubyMotion continues to build momentum, it’s obvious that not everyone can attend such endeavors as <a href="http://rubymotion.com/conference">RubyMotion #inspect</a> or the <a href="http://rubymotion-sfbay-training-2013.eventbrite.com/#">public RubyMotion training in the San Francisco Bay Area</a>. Fear not! From the community of RubyMotion developers we’re happy to announce a new monthly online meetup for everyone, worldwide, called <a href="http://meetup.rubymotion.com/">MotionMeetup</a>.</p>
<p><a href="http://meetup.rubymotion.com/"><img alt="image" src="http://media.tumblr.com/9004d4e3da09ce77e2776547ea949a7a/tumblr_inline_ml5w360d4h1qz4rgp.png"/></a></p>

<p>This online meetup will spotlight a developer from the <a href="https://github.com/rubymotion">RubyMotion community</a> or general RubyMotion ecosystem to interview and interact with the community.</p>
<p>Meetups will, as of now, occur once a month and consist of at least 30 minutes of live discussion via video conference. The discussions will cover a wide array of topics generally consisting of each spotlighted guest’s projects all the way to their opinions and philosophies.</p>
<p>You’ll also be able to ask your own questions in the #rubymotion IRC channel on <a href="http://freenode.net/">freenode</a> and interact with featured guests and fellow developers while the video conference is going on.</p>
<p><span>If you would like to be notified on updates please fill out the sign up form at <a href="http://meetup.rubymotion.com/">MotionMeetup</a>. If you’re interested in being a featured guest for a future meetup or would like to see a topic addressed, please contact the coordinators of MotionMeetup, the good people at <a href="http://iconoclastlabs.com/#home_contact">Iconoclast Labs</a>.</span></p>
]]></content:encoded>
      <dc:date>2013-04-12T15:45:00+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Success Story Basecamp For Iphone</title>
      <link>http://www.rubymotion.com/news/2013/04/09/rubymotion-success-story-basecamp-for-iphone.html</link>
      <description><![CDATA[37signals released last month an official iPhone app for Basecamp, their flagship project management software. It is the first iOS app developed completely in-house at 37signals.
As you may have already heard, the Basecamp app is written in RubyMotion. Since Nick Quaranto was speaking at our conference last week, we decided to take advantage of the opportunity to record a quick interview with him about the experience. Check out the video and the transcript below! 

You just announced the motion-layout gem tonight, has it been a long time coming?
(Laughs). Kind of. When we wrote the Basecamp app at 37signals we didn&#8217;t really use Interface Builder at all.
There is a new API in iOS6+ that provides auto layout for views, and specifically there is an ASCII-art style format string. It&#8217;s really weird that Apple let programmers design ASCII-art languages. So, the gem wraps that kind of verbose API that Apple provides.
So I guess it&#8217;s kind of been a long time coming, it has been 2-3 months in the making, it&#8217;s really not complicated, it&#8217;s just a little gem.
Speaking of the Basecamp app, when did that get started? When did you put that into your bosses&#8217; ears? 
That&#8217;s kind of an evolution. I started using RubyMotion in June, and RubyMotion came out in May. I basically got that month – I was very lucky to get a whole month to just work on iOS.
I hadn&#8217;t done any iOS work before, I had only done Ruby and Rails, and before that, I had a Microsoft background. (Laughs)
You don&#8217;t have to admit that here (Laughs) 
I feel bad now. (Laughs)
Anyway, the first app we worked on was kind of a prototype. It was to learn how iOS apps worked. That got rejected, we ended up not going forward with that.
How was that initial learning experience? 
Good! I feel like I really got a lot from that whole month. I learned how to make an app, how to ship it on TestFlight, I learned gestures and how hard it is to write an app, images and all sorts of other stuff. The different layouts, and how things are supposed to work.
We didn&#8217;t go forward with that very specific idea, because we were kind of prototyping the idea, but we kind of merged together two ideas that were coming forward. I had an idea: in that little prototype app we used HTML inside a small part of the app, and it felt very native, and at the same time we were working on web views for Basecamp, so that if you were on Safari on iOS, or Android, or any other browser you could see your stuff in Basecamp, so we kind of decided that, wow this is really native, it felt very native on the phone even if it was HTML.
We had all these views, and we kind of combined these two into an app. It wasn&#8217;t Basecamp at the start, we actually started just by solving specific problems, for example just to get an update on your phone when something was happening on your projects.
The app was focused on that at first, then we realized it kind of stinks that this is all you have, and we wanted to jump between things in your projects, and see all your TODOs, or all your files, so it kind of evolved from there and eventually it became the Basecamp app. We didn&#8217;t start by saying “we are going to make a Basecamp app”, it was more started like we have these problems when we&#8217;re on the run with Basecamp, and we want to fix those.

What did your RubyMotion toolbox and workflow look like? 
Pretty normal, we do use a mix of Cocoapods and gems, we use some URL caching, there is just a few others&#8230; date formatter stuff that we use as well.
On the Ruby side we use Bubblewrap which is a great resource for anyone that&#8217;s starting with RubyMotion, just for iOS development in general, it saves a ton of time.
There are a few gems that I extracted along the path like motion-layout, I also have another one to make settings-bundles, called motion-settings-bundle. So it&#8217;s kind of a mix of both, and I think that it&#8217;s very healthy that we can get all of these great libraries from the Objective-C world and use new Ruby stuff as well.
You are a very seasoned Rails and Ruby developer, what were the challenges working with RubyMotion? And Laurent won&#8217;t hear this. (Laughs) 
(Laughs). I didn&#8217;t have any big problems with RubyMotion, the challenges were mostly iOS, and I think that&#8217;s&#8230; you can&#8217;t get around it, you have to learn the Apple APIs, you have to deal with that, you have to understand the patterns that are in Objective-C in Ruby, and that was a big source of conflict for me, because there is a conflict between the style we see in Ruby and the style in Objective-C, and they kind of butt heads all the time.
So I think that that was the hardest part for me, understanding and internalizing the patterns that are in Objective-C and all over Cocoa and libraries, such as delegates, the list goes on an on, like constants and enums, the list doesn&#8217;t end, you have to know all these things, you have to be fluent in both to be useful, but I did it (Laughs).
So I think it&#8217;s definitely possible to come from basically zero iOS knowledge and do an app with RubyMotion.
Is there anything that you learned along the way – I am sure there are some things! – so when you start you next app, what are the things you learned that will make you start quicker? 
I am going to start testing more (Laughs). I need to admit that I didn&#8217;t do any good job at all and we are definitely going to fix that, because the Basecamp app is something that we care about and we need it to last for years. So that&#8217;s a big thing I wished I looked into sooner.
Another thing&#8230; I always learn this lesson again and again: test on the device sooner! Obviously if you are making a mobile app you should be, but it&#8217;s very easy to be tricked thinking that the simulator is the real thing, when it&#8217;s not. There are performance problems that you see on the device that aren&#8217;t in the simulator, and I feel like I got reminded of this on a weekly basis.
Was there anything from the conference that just finished that you were excited about? You mentioned testing&#8230; 
Yeah there were lots of great testing talks, a lot of crazy things came out, people really showed stuff I was impressed by.
One of the later talks was about Cocos2d, which is a game wrapper called Joybox, and it&#8217;s really neat, the guy basically made an Angry Birds clone in like 10 minutes in front of us, it was kind of crazy!
There was a testing talk about Calabash, which is really neat. Despite using Cucumber (and I have written a lot of Cucumber code), so I understand how difficult it is and how people&#8217;s opinions vary on it, but the coolest thing was that internally you had this nice API to do testing. You could drag things, you could look inside of web views, which is a big deal for us, you can do all sorts of stuff, and it&#8217;s backed by cucumber but beneath it is this cool Ruby thing that I need to look into!
I was really impressed by the quality level of talks and the stuff people showed off.
If you were starting your next app, how would you convince your boss to use RubyMotion?
Well, that&#8217;s really a good question. (Laughs)
Luckily I didn&#8217;t have to do too much convincing. Showing them how much easier it is is always a good thing, like the before and after, here is how it is in Objective-C, and here is the much-improved-less-verbose version in Ruby.
Another thing, that I think is the biggest win, especially for people that are coming from Ruby and Rails background, that if you&#8217;ve already got a team of people who know Ruby on Rails, the jump is a lot smaller to this new brave world, right, because you can leverage all of the toolchain that they know, they can use whatever they have been using in Rails, it&#8217;s the same language, there are maybe a very little differences but it&#8217;s still Ruby, you get all of the awesomeness that is Ruby, but you can&#8217;t get around learning the iOS APIs.
So I guess that if you are coming from a Ruby and Rails side, that&#8217;s it. If you&#8217;re coming from an iOS team I guess it&#8217;s probably a bit of a harder sell. Since personally I don&#8217;t have experience with that it&#8217;s harder to speak on, but I hope that if you are an iOS developer looking at RubyMotion you get a solid look at the code, like the comparison, how much easier it would be, and especially all the new things that are coming along that help you make a RubyMotion app, and that you can&#8217;t really use in Objective-C. So I hope that you give that a look if you&#8217;re trying to convince your boss.
Are there any tools, any tricks that you would like to see come down the pipeline? 
It would be really nice if every-gem-ever worked, that&#8217;s very unrealistic, but I like Ruby gems a lot, so it would be very cool, it&#8217;s also a hard problem and it&#8217;s definitely been an MVP-style thing for the RubyMotion team. Just the fact that already we can make these really awesome things without having the bulk of Ruby gems available is a really good sign.
Besides that, Laurent mentioned code reloading in the roadmap, if that worked that would be a huge win. I went through a lot of links with one of the first prototype apps I made, to completely reproduce my web workflow, to the point where I remapped shake device in the simulator to Command+R, to get a reload, so if there is a better workflow for that, where you can basically say, here is what you&#8217;re used to, and here is the awesome new way of doing this, that supports the same thing, because I run rake and reload my app countless times, I should&#8217;ve kept a count, that would make a huge difference, that would make me a lot faster. Because you don&#8217;t have to wait! It&#8217;s just there. That would be huge.
Thank you Nick!


]]></description>
      <pubDate>Tue, 09 Apr 2013 11:27:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2013/04/09/rubymotion-success-story-basecamp-for-iphone.html</guid>
      <content:encoded><![CDATA[<p>37signals released last month an <a href="http://37signals.com/svn/posts/3430-launch-the-official-basecamp-iphone-app">official iPhone app for Basecamp</a>, their flagship project management software. It is the first iOS app developed completely in-house at 37signals.</p>
<p>As you may have already heard, the Basecamp app is <a href="http://37signals.com/svn/posts/3432-why-i-loved-building-basecamp-for-iphone-in-rubymotion">written in RubyMotion</a>. <span>Since <a href="http://quaran.to/">Nick Quaranto</a> was speaking at our conference last week, we decided to take advantage of the opportunity to record a quick interview with him about the experience. Check out the video and the transcript below! </span></p>
<p><iframe frameborder="0" height="381" src="http://player.vimeo.com/video/63651521" width="500"></iframe></p>
<p><strong>You just announced the <a href="https://github.com/qrush/motion-layout">motion-layout</a> gem tonight, has it been a long time coming?</strong></p>
<p>(Laughs). Kind of. When we wrote the Basecamp app at 37signals we didn&#8217;t really use Interface Builder at all.</p>
<p>There is a new API in iOS6+ that provides auto layout for views, and specifically there is an ASCII-art style format string. It&#8217;s really weird that Apple let programmers design ASCII-art languages. So, the gem wraps that kind of verbose API that Apple provides.</p>
<p>So I guess it&#8217;s kind of been a long time coming, it has been 2-3 months in the making, it&#8217;s really not complicated, it&#8217;s just a little gem.</p>
<p><strong>Speaking of the Basecamp app, when did that get started? When did you put that into your bosses&#8217; ears? </strong></p>
<p>That&#8217;s kind of an evolution. I started using RubyMotion in June, and RubyMotion came out in May. I basically got that month – I was very lucky to get <a href="http://37signals.com/svn/posts/3186-workplace-experiments-a-month-to-yourself">a whole month</a> to just work on iOS.</p>
<p>I hadn&#8217;t done any iOS work before, I had only done Ruby and Rails, and before that, I had a Microsoft background. (Laughs)</p>
<p><strong>You don&#8217;t have to admit that here (Laughs) </strong></p>
<p>I feel bad now. (Laughs)</p>
<p>Anyway, the first app we worked on was kind of a prototype. It was to learn how iOS apps worked. That got rejected, we ended up not going forward with that.</p>
<p><strong>How was that initial learning experience? </strong></p>
<p>Good! I feel like I really got a lot from that whole month. I learned how to make an app, how to <a href="https://github.com/HipByte/motion-testflight">ship it on TestFlight</a>, I learned gestures and how hard it is to write an app, images and all sorts of other stuff. The different layouts, and how things are supposed to work.</p>
<p>We didn&#8217;t go forward with that very specific idea, because we were kind of prototyping the idea, but we kind of merged together two ideas that were coming forward. I had an idea: in that little prototype app we used HTML inside a small part of the app, and it felt very native, and at the same time we were working on web views for Basecamp, so that if you were on Safari on iOS, or Android, or any other browser you could see your stuff in Basecamp, so we kind of decided that, wow this is really native, it felt very native on the phone even if it was HTML.</p>
<p>We had all these views, and we kind of combined these two into an app. It wasn&#8217;t Basecamp at the start, we actually started just by solving specific problems, for example just to get an update on your phone when something was happening on your projects.</p>
<p>The app was focused on that at first, then we realized it kind of stinks that this is all you have, and we wanted to jump between things in your projects, and see all your TODOs, or all your files, so it kind of evolved from there and eventually it became the Basecamp app. We didn&#8217;t start by saying “we are going to make a Basecamp app”, it was more started like we have these problems when we&#8217;re on the run with Basecamp, and we want to fix those.</p>
<p><a href="http://basecamp.com/mobile"><img alt="image" src="http://media.tumblr.com/a0d0b6c7ea4fcd3d8e8a9dc6e94b8cff/tumblr_inline_ml1714vcil1qz4rgp.jpg"/></a></p>
<p><strong>What did your RubyMotion toolbox and workflow look like? </strong></p>
<p>Pretty normal, we do use a mix of <a href="http://cocoapods.org/">Cocoapods</a> and gems, we use some URL caching, there is just a few others&#8230; date formatter stuff that we use as well.</p>
<p>On the Ruby side we use <a href="https://github.com/rubymotion/BubbleWrap">Bubblewrap</a> which is a great resource for anyone that&#8217;s starting with RubyMotion, just for iOS development in general, it saves a ton of time.</p>
<p>There are a few gems that I extracted along the path like <a href="https://github.com/qrush/motion-layout">motion-layout</a>, I also have another one to make settings-bundles, called <a href="https://github.com/qrush/motion-settings-bundle">motion-settings-bundle</a>. So it&#8217;s kind of a mix of both, and I think that it&#8217;s very healthy that we can get all of these great libraries from the Objective-C world and use new Ruby stuff as well.</p>
<p><strong>You are a very seasoned Rails and Ruby developer, what were the challenges working with RubyMotion? And Laurent won&#8217;t hear this. (Laughs) </strong></p>
<p>(Laughs). I didn&#8217;t have any big problems with RubyMotion, the challenges were mostly iOS, and I think that&#8217;s&#8230; you can&#8217;t get around it, you have to learn the Apple APIs, you have to deal with that, you have to understand the patterns that are in Objective-C in Ruby, and that was a big source of conflict for me, because there is a conflict between the style we see in Ruby and the style in Objective-C, and they kind of butt heads all the time.</p>
<p>So I think that that was the hardest part for me, understanding and internalizing the patterns that are in Objective-C and all over Cocoa and libraries, such as delegates, the list goes on an on, like constants and enums, the list doesn&#8217;t end, you have to know all these things, you have to be fluent in both to be useful, but I did it (Laughs).</p>
<p>So I think it&#8217;s definitely possible to come from basically zero iOS knowledge and do an app with RubyMotion.</p>
<p><strong>Is there anything that you learned along the way – I am sure there are some things! – so when you start you next app, what are the things you learned that will make you start quicker? </strong></p>
<p>I am going to start testing more (Laughs). <span>I need to admit that I didn&#8217;t do any good job at all and we are definitely going to fix that, because the Basecamp app is something that we care about and we need it to last for years. So that&#8217;s a big thing I wished I looked into sooner.</span></p>
<p>Another thing&#8230; I always learn this lesson again and again: test on the device sooner! Obviously if you are making a mobile app you should be, but it&#8217;s very easy to be tricked thinking that the simulator is the real thing, when it&#8217;s not. There are performance problems that you see on the device that aren&#8217;t in the simulator, and I feel like I got reminded of this on a weekly basis.</p>
<p><strong>Was there anything from the conference that just finished that you were excited about? You mentioned testing&#8230; </strong></p>
<p>Yeah there were lots of great testing talks, a lot of crazy things came out, people really showed stuff I was impressed by.</p>
<p>One of the later talks was about Cocos2d, which is a game wrapper called <a href="https://github.com/rubymotion/joybox">Joybox</a>, and it&#8217;s really neat, the guy basically made an Angry Birds clone in like 10 minutes in front of us, it was kind of crazy!</p>
<p>There was a testing talk about <a href="https://github.com/calabash/motion-calabash">Calabash</a>, which is really neat. Despite using <a href="http://cukes.info/">Cucumber</a> (and I have written a lot of Cucumber code), so I understand how difficult it is and how people&#8217;s opinions vary on it, but the coolest thing was that internally you had this nice API to do testing. You could drag things, you could look inside of web views, which is a big deal for us, you can do all sorts of stuff, and it&#8217;s backed by cucumber but beneath it is this cool Ruby thing that I need to look into!</p>
<p>I was really impressed by the quality level of talks and the stuff people showed off.</p>
<p><strong>If you were starting your next app, how would you convince your boss to use RubyMotion?</strong></p>
<p>Well, that&#8217;s really a good question. (Laughs)</p>
<p>Luckily I didn&#8217;t have to do too much convincing. Showing them how much easier it is is always a good thing, like the before and after, here is how it is in Objective-C, and here is the much-improved-less-verbose version in Ruby.</p>
<p>Another thing, that I think is the biggest win, especially for people that are coming from Ruby and Rails background, that if you&#8217;ve already got a team of people who know Ruby on Rails, the jump is a lot smaller to this new brave world, right, because you can leverage all of the toolchain that they know, they can use whatever they have been using in Rails, it&#8217;s the same language, there are maybe a very little differences but it&#8217;s still Ruby, you get all of the awesomeness that is Ruby, but you can&#8217;t get around learning the iOS APIs.</p>
<p>So I guess that if you are coming from a Ruby and Rails side, that&#8217;s it. If you&#8217;re coming from an iOS team I guess it&#8217;s probably a bit of a harder sell. Since personally I don&#8217;t have experience with that it&#8217;s harder to speak on, but I hope that if you are an iOS developer looking at RubyMotion you get a solid look at the code, like the comparison, how much easier it would be, and especially <a href="http://rubymotion-wrappers.com/">all the new things</a> that are coming along that help you make a RubyMotion app, and that you can&#8217;t really use in Objective-C. So I hope that you give that a look if you&#8217;re trying to convince your boss.</p>
<p><strong>Are there any tools, any tricks that you would like to see come down the pipeline? </strong></p>
<p>It would be really nice if every-gem-ever worked, that&#8217;s very unrealistic, but I like Ruby gems a lot, so it would be very cool, it&#8217;s also a hard problem and it&#8217;s definitely been an MVP-style thing for the RubyMotion team. Just the fact that already we can make these really awesome things without having the bulk of Ruby gems available is a really good sign.</p>
<p>Besides that, Laurent mentioned code reloading in the roadmap, if that worked that would be a huge win. I went through a lot of links with one of the first prototype apps I made, to completely reproduce my web workflow, to the point where I remapped <em>shake device</em> in the simulator to <em>Command+R</em>, to get a reload, so if there is a better workflow for that, where you can basically say, here is what you&#8217;re used to, and here is the awesome new way of doing this, that supports the same thing, because I run rake and reload my app countless times, I should&#8217;ve kept a count, that would make a huge difference, that would make me a lot faster. Because you don&#8217;t have to wait! It&#8217;s just there. That would be huge.</p>
<p><strong>Thank you Nick!</strong></p>
]]></content:encoded>
      <dc:date>2013-04-09T11:27:00+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Success Story Inktera</title>
      <link>http://www.rubymotion.com/news/2013/03/19/rubymotion-success-story-inktera.html</link>
      <description><![CDATA[Page Foundry created Inktera as a platform for authors, publishers and booksellers to take control of their online presence. More than just an ebook store, Inktera links the website, blogs, Facebook and Twitter profiles, and more - allowing you to build native Apple iOS and Android apps in just a few minutes!


]]></description>
      <pubDate>Tue, 19 Mar 2013 09:56:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2013/03/19/rubymotion-success-story-inktera.html</guid>
      <content:encoded><![CDATA[<p><a href="http://www.pagefoundry.com/">Page Foundry</a> created <a href="https://www.inktera.com/">Inktera</a> as a platform for authors, publishers and booksellers to take control of their online presence. More than just an ebook store, Inktera links the website, blogs, Facebook and Twitter profiles, and more - allowing you to build native Apple iOS and Android apps in just a few minutes!</p>
<p><img alt="image" src="http://media.tumblr.com/faf61764f566152847877b635156f86f/tumblr_inline_mjxe4fbmfx1qz4rgp.png"/></p>

<p>We sat down with <span>Dan McFarland</span><span> to talk about Inktera and their experience using RubyMotion. </span></p>
<p><strong>What is Page Foundry&#8217;s goal?</strong></p>
<p>Page Foundry was founded with a very simple vision: Deliver the most robust <span>digital content platform available. Page Foundry has been able to empower global </span><span>organizations like <a href="http://www.asus.com">ASUS</a>, local businesses (authors, publishers and local </span><span>booksellers) and others to connect with their customers in really meaningful </span><span>ways.</span></p>
<p><strong>How does the Inktera platform accomplish this?</strong></p>
<p>The vision for the Inktera platform was very simple: help businesses acquire <span>customers by offering a suite of branded digital content services that extend </span><span>our customer&#8217;s brands, services and core values. The platform has evolved into a </span><span>very robust offering that includes the ability to quickly and easily launch </span><span>ebookstore apps. By quickly and easily we&#8217;re talking days - possibly even hours </span><span>in some cases - not weeks or months.</span></p>
<p><strong>What unique features does Inktera provide?</strong></p>
<p>The app is completely unique in that it offers in-app purchasing for ebooks. No <span>apps, other than Apple&#8217;s own iBooks app, offer this feature. The Inktera iOS app </span><span>connects directly to the Inktera cloud which manages the reader&#8217;s library, </span><span>stores their bookmarks, notes, and personalization features.</span></p>
<p><span>The framework for the Inktera iOS app is completely customizable by Page Foundry </span><span>customers via the Inktera platform. They can add social media features, select </span><span>which types of books to offer, set featured items, etc.</span></p>
<p><strong>How do you apply the different interface customizations on the device?</strong></p>
<p>The only real difference we consider is iPad vs iPhone with the use of <code>UISplitViewController</code> in the former. BubbleWrap&#8217;s <code>Device.ipad?</code> is the only convenience method we use for the detection. All layouts are done programmatically without NIBs.</p>
<p>We made use of <a href="https://github.com/RefuX/LayoutManagers-Fork">LayoutManagers-Fork</a> to get over an initial learning curve and because we were familiar with Android&#8217;s LinearLayouts. After understanding iOS&#8217;s views more, we used it because it was a similar way to lay interface objects out without trying (or having) to use DSL&#8217;s for them.</p>
<p><strong>What RubyMotion tools did you take advantage of? (gems? editors?)</strong></p>
<p>We have been using <a href="http://www.jetbrains.com/ruby/">RubyMine</a> since version 4.0. The latest 5.0 version finally added code completion of iOS core methods/selectors/constants which saves us one trip to Xcode&#8217;s Docs. We made a decision to not over do gem usage to avoid using something we couldn&#8217;t understand/appreciate. Our gem list is:</p>
<pre class="highlight"><code>gem 'cocoapods'
gem 'motion-cocoapods'
gem 'bubble-wrap'
gem 'motion-testflight'
</code></pre>
<p><a href="https://github.com/rubymotion/sugarcube">SugarCube</a> and <a href="https://github.com/rubymotion/teacup">TeaCup</a> look very interesting and we&#8217;ll probably incorporate them now that we have our first app under our belts.</p>
<p><strong>How did RubyMotion speed up your development?</strong></p>
<p>After checking our SCM, our project went from first RubyMotion check-in to Ready for Sale in 10 man weeks. Considering we had no prior iOS, C, Objective-C experience, we project this would not have been possible without RubyMotion or a significant amount more in human resource / development investment dollars.</p>
<p>RubyMotion was not easier than Android mainly due to our prior experience with Java. Android ADT makes creating flexible layouts very intuitive and storing the layouts in XML makes understanding structures easier. That said, the RubyMotion and iOS networking libraries with caching blow Android out of the water. RubyMotion also makes doing network on the main thread almost impossible so keeping the application responsive was a non-issue. RubyMotion certainly makes iOS development easier if the developers have Ruby experience. For Java developers Android is hard to beat. $199.99 to avoid writing method calls like arrays is priceless.</p>
<p><strong>How does the iOS app integrate with the rest of the Inktera platform?</strong></p>
<p>The iOS app integrates through a private Restful API. All networking between the two uses <a href="https://github.com/pokeb/asi-http-request/tree">ASIHTTPRequest</a>.</p>
<p><strong>What was the biggest challenge during development?</strong></p>
<p>There&#8217;s a tie for the biggest challenge. The first challenge was the integration of <a href="http://www.datalogics.com/products/rmsdk/">Adobe&#8217;s RMSDK</a>. The RMSDK project is composed of a dozen other projects and has a very specific build process. The first weeks were spent getting RubyMotion to be able to call into all of RMSDK. This is not a trivial task. The second challenge was memory management. The team was constantly stumbling on situations where retain cycles were getting created by trivial and routine code. Saving things in instance vars helped, but then we had to remember to unset them.</p>
<p><strong>What is it like using RubyMotion on an application so complex?</strong></p>
<p>Overall, we could not have built what we built without RubyMotion given our time constraints and desired investment. We are a Ruby shop so being able to stay in that mind set and leverage existing skills was critical to expediting the process. RubyMotion doesn&#8217;t magically remove crash logs or the need to understand iOS concepts, but having readable code that we could write from REPL console helped the project grow with confidence.</p>
]]></content:encoded>
      <dc:date>2013-03-19T09:56:00+01:00</dc:date>
    </item>
    <item>
      <title>Announcing A Rubymotion Training In San Francisco</title>
      <link>http://www.rubymotion.com/news/2013/03/14/announcing-a-rubymotion-training-in-san-francisco.html</link>
      <description><![CDATA[We are excited to announce that we will be giving a public RubyMotion training in the San Francisco Bay Area the 8-12 July of this year.
This is a 5-day class that will teach you everything you need to know about iOS and RubyMotion, from the very basic concepts to advanced topics. Experience with iOS is absolutely not required.
At the end of the training you should be able to start writing full-fledged apps for iPhone or iPad in Ruby.
This is a hands-on training. You will get to write a few iOS applications during the course. You will also be given printed material and access to a dedicated forum where you can discuss with the instructors and other students.
The full program can be read from our training page.
You can purchase a seat for the training today. If you have any question or need any help don&#8217;t hesitate to contact us. See you in San Francisco!


]]></description>
      <pubDate>Thu, 14 Mar 2013 09:55:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2013/03/14/announcing-a-rubymotion-training-in-san-francisco.html</guid>
      <content:encoded><![CDATA[<p><span>We are excited to announce that we will be giving a public <a href="http://rubymotion-sfbay-training-2013.eventbrite.com/#">RubyMotion training in the San Francisco Bay Area</a> the 8-12 July of this year.</span></p>
<p><span>This is a <strong>5-day class</strong> that will teach you everything you need to know about iOS and RubyMotion, from the very basic concepts to advanced topics. Experience with iOS is absolutely not required.</span></p>
<p><span>At the end of the training you should be able to start writing full-fledged apps for iPhone or iPad in Ruby.</span></p>
<p><span>This is a <strong>hands-on training</strong>. You will get to write a few iOS applications during the course. You will also be given printed material and access to a dedicated forum where you can discuss with the instructors and other students.</span></p>
<p><span>The full program can be read from our <a href="http://www.rubymotion.com/support/training/">training page</a>.</span></p>
<p><span>You can <a href="http://rubymotion-sfbay-training-2013.eventbrite.com/#">purchase a seat</a> for the training today. If you have any question or need any help don&#8217;t hesitate to <a href="mailto:info@hipbyte.com">contact us</a>. See you in San Francisco!</span></p>
]]></content:encoded>
      <dc:date>2013-03-14T09:55:00+01:00</dc:date>
    </item>
    <item>
      <title>Jukely</title>
      <link>http://www.rubymotion.com/references/success-stories/jukely</link>
      <description><![CDATA[Jukely was created by Bora Celik and Andrew Cornett for music lovers to get hand-picked recommendations for local live music concerts and to discover new music.

They used RubyMotion to create a visually stunning app that has already hit 5 stars in the app store!
]]></description>
      <pubDate>Thu, 07 Mar 2013 17:36:36 +0100</pubDate>
      <guid>http://www.rubymotion.com/references/success-stories/jukely</guid>
      <content:encoded><![CDATA[<div class="row_fluid block_spac_tb">
  <div class="col_7">
    <img src="/img/cases/jukely/illu.png" class="img_block" />
  </div>
  <div class="col_1" aria-hidden="true">&nbsp;</div>
  <div class="col_7">
    <h2>With RubyMotion, it was love at first sight!</h2>
    <p class="intro">Bora Celik was intimidated by Apple's development toolchain, Objective-C and Xcode. He felt like he had to write a lot of code to do simple things and any potential app idea he had was getting crushed.</p>
    <p>He built a RubyMotion app the day it was released. The elegance of Ruby, the fact that he could keep using Textmate, and his enthusiasm for building native iOS apps convinced him to use RubyMotion to build Jukely.</p>
  </div>
</div>

<div class="case_secondary_block bg_grey_light">
  <div class="row_fluid">
    <div class="col_7">
      <h3>Behind the curtains.</h3>
      <p>With iOS 7, the team at Jukely decided to rewrite the whole user interface in order to adopt its new design language. Since RubyMotion supported iOS 7 the same day it was announced, it wasn't an issue. Jukely 2.0 features a gorgeous new user interface.</p>
      <p>Under the hood, Jukely uses <a href="http://parse.com">Parse</a> as a remote database and <a href="http://stripe.com">Stripe</a> to scan credit cards. They were able to easily integrate with these services easily since RubyMotion allows 3rd-party libraries to be included in a project.</p>
    </div>
    <div class="col_1" aria-hidden="true">&nbsp;</div>
    <div class="col_8">
      <iframe src="//player.vimeo.com/video/78056577?title=0&amp;byline=0&amp;portrait=0" width="600" height="340" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
    </div>
    <div class="col_16">
    </div>
  </div>
</div>
]]></content:encoded>
      <dc:date>2013-03-07T17:36:36+01:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Success Story Jukely</title>
      <link>http://www.rubymotion.com/news/2013/03/07/rubymotion-success-story-jukely.html</link>
      <description><![CDATA[Bora Celik and Andrew Cornett created Jukely for music lovers to get hand-picked recommendations for local live music concerts and to discover new music. They used RubyMotion to create a visually stunning app that has already hit 5 stars in the app store!

We sat down with Bora to talk about his experience using RubyMotion.
First, please tell us a little bit about your app, Jukely
Jukely is the brainchild of me and Andrew Cornett, my co-founder, who&#8217;s one of the first designers and employees at Kickstarter. He had a hand in the design and development of the Kickstarter web and iPhone apps since the beginning days. We had hit it off as hacking partners years ago, worked on a bunch of music hack day stuff and other music related projects. We&#8217;re both heavily into live music, especially in the discovery and notification space. We love discovering new bands and making spontaneous decisions about what shows to see. We don&#8217;t like planning for shows months in advance. We feel like there is a beautiful and loved brand missing in the world of live music. We want to be it.
What&#8217;s your background in programming?
I&#8217;m an engineer turned architect turned product manager turned back into engineer, all the while a concert organizer as my second persona. I started with VB6 then .NET, J2EE then stopped programming for a long time while I went to the dark side, management. Discovered Ruby in 2007 and fell in love with it. I&#8217;ve been hacking on music related projects ever since.
What convinced you to use RubyMotion?
I took an iOS class last year and got completely intimidated by Objective-C. It felt like I had to write a lot of code to do simple things and in my mind&#8217;s eye any potential app idea I would want to work on was getting crushed before I could even take it seriously. When RubyMotion came out, I said heck yes! and started developing a sample app on the first day it was released. Given the elegance of Ruby and my enthusiasm for building native iOS apps, it was love at first sight.
What value does the user get out from using Jukely?
Jukely is your personal concierge for live music shows. It is powered by curation and music taste algorithms. We learn what our members like and what their friends like, make recommendations when there is a high match, and have the ability to put them on the guest list if they want to go.
How do you collect and combine the user&#8217;s music preferences?
We currently allow people to connect their Facebook, Spotify, Rdio, Soundcloud, Last.fm and Hype Machine accounts. I spent the summer writing a recommendation algorithm in Ruby. We have tons of workers that run on Heroku to sync people&#8217;s and their friends&#8217; music listens across different music services. Then we have our own sauce that decides how shows should be recommended.
How did you integrate the server-side API using RubyMotion?
I used BubbleWrap for JSON calls to our Ruby back-end API. Also the Parse framework for reading and saving data to Parse.
What does your RubyMotion toolbox look like?
Editor: Textmate
Pods: Mixpanel, Reachability
Frameworks: Parse for database, HockeySDK for crash management, CardIO + Stripe for scanning credit cards and processing them, PassSlot for PassKit integration to create passes for shows.
My favorite has to be Parse as using it allowed us to skip writing our own code to do things like loading and saving things using background processing, signup, login, Facebook/Twitter integrations, push notifications, file uploads, as well as having image loading in tables working smoothly out of the box.
What feature of RubyMotion was the most helpful?
I would say being able to use Textmate, writing Ruby, Terminal based workflow and automated memory management were really awesome.
What was the biggest hurdle during development?
Mysterious crashes are my biggest nightmare. Being still new to iOS development, I still don&#8217;t have a full grasp on how to nail down and fix crashes that don&#8217;t identify themselves easily and only happen occasionally. Getting push notifications working was a major major pain. The steps you have to go through, my dear, and if you make one small mistake the notification is not delivered and you have no clue where you went wrong. I think I shed a few real tears when they finally ended up working.
When you hit a serious snag, where do you go with support questions?
I&#8217;ve definitely used the RubyMotion Google Group numerous times as the community there is really great. Also I&#8217;ve found increasingly more answers on Stack Overflow. As a fallback I used the support for RubyMotion and it has been very helpful.
What feature of the app was the most fun to build?
Once I learned how to do animations I introduced them in a few places. Those were really fun. Fade in loading image loading was quite pleasant and I still really like seeing those fade in transition images in the app. Also there was a lot of joy when I got the audio and video playback working using the MPMoviePlayerController class.


]]></description>
      <pubDate>Thu, 07 Mar 2013 15:57:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2013/03/07/rubymotion-success-story-jukely.html</guid>
      <content:encoded><![CDATA[<p><a href="http://twitter.com/xBora">Bora Celik</a> and <a href="http://dribbble.com/amotion">Andrew Cornett</a> created <a href="http://www.jukely.com">Jukely</a> for music lovers to get hand-picked recommendations for local live music concerts and to discover new music. They used RubyMotion to create a visually stunning app that has already hit <a href="https://itunes.apple.com/us/app/jukely/id590428284?mt=8&amp;ls=1">5 stars in the app store</a>!</p>
<p><iframe frameborder="0" height="281" src="http://player.vimeo.com/video/51345163" width="500"></iframe></p>
<p>We sat down with Bora to talk about his experience using RubyMotion.</p>
<p><strong>First, please tell us a little bit about your app, Jukely</strong></p>
<p><a href="http://jukely.com/">Jukely</a> is the brainchild of me and Andrew Cornett, my co-founder, who&#8217;s one of the first designers and employees at <a href="http://www.kickstarter.com/">Kickstarter</a>. He had a hand in the design and development of the Kickstarter web and iPhone apps since the beginning days. We had hit it off as hacking partners years ago, worked on a bunch of music hack day stuff and other music related projects. We&#8217;re both heavily into live music, especially in the discovery and notification space. We love discovering new bands and making spontaneous decisions about what shows to see. We don&#8217;t like planning for shows months in advance. We feel like there is a beautiful and loved brand missing in the world of live music. We want to be it.</p>
<p><strong>What&#8217;s your background in programming?</strong></p>
<p>I&#8217;m an engineer turned architect turned product manager turned back into engineer, all the while a concert organizer as my second persona. I started with VB6 then .NET, J2EE then stopped programming for a long time while I went to the dark side, management. Discovered Ruby in 2007 and fell in love with it. I&#8217;ve been hacking on music related projects ever since.</p>
<p><strong>What convinced you to use RubyMotion?</strong></p>
<p>I took an iOS class last year and got completely intimidated by Objective-C. It felt like I had to write a lot of code to do simple things and in my mind&#8217;s eye any potential app idea I would want to work on was getting crushed before I could even take it seriously. When <a href="http://rubymotion.com">RubyMotion</a> came out, I said heck yes! and started developing a sample app on the first day it was released. Given the elegance of Ruby and my enthusiasm for building native iOS apps, it was love at first sight.</p>
<p><strong>What value does the user get out from using Jukely?</strong></p>
<p>Jukely is your personal concierge for live music shows. It is powered by curation and music taste algorithms. We learn what our members like and what their friends like, make recommendations when there is a high match, and have the ability to put them on the guest list if they want to go.</p>
<p><strong>How do you collect and combine the user&#8217;s music preferences?</strong></p>
<p>We currently allow people to connect their Facebook, Spotify, Rdio, Soundcloud, Last.fm and Hype Machine accounts. I spent the summer writing a recommendation algorithm in Ruby. We have tons of workers that run on <a href="http://www.heroku.com/">Heroku</a> to sync people&#8217;s and their friends&#8217; music listens across different music services. Then we have our own sauce that decides how shows should be recommended.</p>
<p><strong>How did you integrate the server-side API using RubyMotion?</strong></p>
<p>I used <a href="https://github.com/rubymotion/BubbleWrap">BubbleWrap</a> for JSON calls to our Ruby back-end API. Also the <a href="https://www.parse.com/apps/quickstart">Parse</a> framework for reading and saving data to Parse.</p>
<p><strong>What does your RubyMotion toolbox look like?</strong></p>
<p>Editor: <a href="http://macromates.com/">Textmate</a></p>
<p>Pods: <a href="https://github.com/mixpanel/mixpanel-iphone">Mixpanel</a>, <a href="http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html">Reachability</a></p>
<p>Frameworks: <a href="http://www.parse.com">Parse</a> for database, <a href="http://hockeyapp.net/">HockeySDK</a> for crash management, <a href="https://www.card.io/">CardIO</a> + <a href="http://stripe.com/">Stripe</a> for scanning credit cards and processing them, <a href="http://www.passslot.com/">PassSlot</a> for PassKit integration to create passes for shows.</p>
<p>My favorite has to be Parse as using it allowed us to skip writing our own code to do things like loading and saving things using background processing, signup, login, Facebook/Twitter integrations, push notifications, file uploads, as well as having image loading in tables working smoothly out of the box.</p>
<p><strong>What feature of RubyMotion was the most helpful?</strong></p>
<p>I would say being able to use Textmate, writing Ruby, Terminal based workflow and automated memory management were really awesome.</p>
<p><strong>What was the biggest hurdle during development?</strong></p>
<p>Mysterious crashes are my biggest nightmare. Being still new to iOS development, I still don&#8217;t have a full grasp on how to nail down and fix crashes that don&#8217;t identify themselves easily and only happen occasionally. Getting push notifications working was a major major pain. The steps you have to go through, my dear, and if you make one small mistake the notification is not delivered and you have no clue where you went wrong. I think I shed a few real tears when they finally ended up working.</p>
<p><strong>When you hit a serious snag, where do you go with support questions?</strong></p>
<p>I&#8217;ve definitely used the <a href="http://groups.google.com/group/rubymotion">RubyMotion Google Group</a> numerous times as the community there is really great. Also I&#8217;ve found increasingly more answers on <a href="http://stackoverflow.com/questions/tagged/rubymotion">Stack Overflow</a>. As a fallback I used the support for RubyMotion and it has been very helpful.</p>
<p><strong>What feature of the app was the most fun to build?</strong></p>
<p>Once I learned how to do animations I introduced them in a few places. Those were really fun. Fade in loading image loading was quite pleasant and I still really like seeing those fade in transition images in the app. Also there was a lot of joy when I got the audio and video playback working using the <a href="http://developer.apple.com/library/ios/#documentation/mediaplayer/reference/MPMoviePlayerController_Class/Reference/Reference.html">MPMoviePlayerController</a> class.</p>
]]></content:encoded>
      <dc:date>2013-03-07T15:57:00+01:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Inspect 2013 Conference Sold Out</title>
      <link>http://www.rubymotion.com/news/2013/03/07/rubymotion-inspect-2013-conference-sold-out.html</link>
      <description><![CDATA[We are happy to announce that RubyMotion #inspect 2013 is sold out! We expect a little over 130 folks to join us in Brussels, Belgium in just about 3 weeks!
We may have some tickets left in case of cancelations. Let us know if you want us to notify you in this case.
Last Speakers
We are finally announcing our last speakers:
Rich Kilmer, which we don&#8217;t have to present, will be talking about his new project that involves RubyMotion and Bluetooth LE sensors, probably wearing white pants.
Akshat Paul and Abhishek Nalwaya will be joining us from sunny Gurgaon, India to talk about CoreMotion and how you can make intuitive apps with it. They both work for McKinsey &amp; Company and are also working on an upcoming RubyMotion book.
We are super excited to have a total of 20 great speakers for our first conference.
If you sent a talk proposal and didn&#8217;t make it we are very sorry. We received 5 times the number of proposals we expected and it was very tough to make the selection!
Schedule
A tentative version of the schedule is now available online on the conference website.
We are also working with the nice folks at Epic on a much better way to present you the schedule during the conference, stay tuned.
New Sponsors
Heroku agreed to join us as the lead sponsor of the conference!
Finally, the big party on Friday will be covered by a secret sponsor that we will unveil in the next few days!


]]></description>
      <pubDate>Thu, 07 Mar 2013 10:26:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2013/03/07/rubymotion-inspect-2013-conference-sold-out.html</guid>
      <content:encoded><![CDATA[<p><span>We are happy to announce that </span><a href="http://rubymotion.com/conference">RubyMotion #inspect 2013</a><span> is sold out! We expect a little over 130 folks to join us in Brussels, Belgium in just about 3 weeks!</span></p>
<p>We may have some tickets left in case of cancelations. <a href="mailto:info@hipbyte.com">Let us know</a> if you want us to notify you in this case.</p>
<p><strong>Last Speakers</strong></p>
<p>We are finally announcing our last speakers:</p>
<ul><li><em>Rich Kilmer</em>, which we don&#8217;t have to present, will be talking about his new project that involves RubyMotion and Bluetooth LE sensors, probably <a href="http://isrichkilmerwearingwhitepants.com/">wearing white pants</a>.</li>
</ul><ul><li><em>Akshat Paul</em> and <em>Abhishek Nalwaya</em> will be joining us from sunny Gurgaon, India to talk about <a href="http://developer.apple.com/library/ios/#documentation/CoreMotion/Reference/CoreMotion_Reference/_index.html">CoreMotion</a> and how you can make intuitive apps with it. They both work for McKinsey &amp; Company and are also working on an upcoming RubyMotion book.</li>
</ul><p>We are super excited to have a total of 20 great speakers for our first conference.</p>
<p>If you sent a talk proposal and didn&#8217;t make it we are very sorry. We received 5 times the number of proposals we expected and it was very tough to make the selection!</p>
<p><strong>Schedule</strong></p>
<p>A tentative version of the schedule is now available online on the <a href="http://www.rubymotion.com/conference/#schedule">conference website</a>.</p>
<p>We are also working with the nice folks at <a href="http://epic.net/">Epic</a> on a much better way to present you the schedule during the conference, stay tuned.</p>
<p><strong>New Sponsors</strong></p>
<p><a href="http://heroku.com">Heroku</a> agreed to join us as the lead sponsor of the conference!</p>
<p>Finally, the big party on Friday will be covered by a secret sponsor that we will unveil in the next few days!</p>
]]></content:encoded>
      <dc:date>2013-03-07T10:26:00+01:00</dc:date>
    </item>
    <item>
      <title>Bug Tracker Now Public</title>
      <link>http://www.rubymotion.com/news/2013/02/21/bug-tracker-now-public.html</link>
      <description><![CDATA[We are pleased to inform that our bug tracker is now publicly available. Users of RubyMotion will now be able to see all known bugs and, after having created a personal account on the platform, also comment, vote and subscribe to individual bugs.
We started importing bugs to this new platform and while the process isn&#8217;t complete yet, we believe that we have already listed the most important bugs. At this moment bugs can only be added by team members, so we ask you to still use the support ticket system to report bugs.
We are quite excited about this move and we hope it will make the development of the toolchain more transparent to everyone.
The bug tracker is powered by YouTrack, yet another awesome product from our friends at JetBrains. 


]]></description>
      <pubDate>Thu, 21 Feb 2013 07:19:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2013/02/21/bug-tracker-now-public.html</guid>
      <content:encoded><![CDATA[<p>We are pleased to inform that <a href="http://hipbyte.myjetbrains.com/youtrack/issues/RM">our bug tracker</a> is now publicly available. Users of RubyMotion will now be able to see all known bugs and, after having created a personal account on the platform, also comment, vote and subscribe to individual bugs.</p>
<p><span>We started importing bugs to this new platform and while the process isn&#8217;t complete yet, we believe that we have already listed the most important bugs. </span><span>At this moment bugs can only be added by team members, so we ask you to still use the <a href="http://www.rubymotion.com/developer-center/guides/getting-started/#_support">support ticket system</a> to report bugs.</span></p>
<p><span>We are quite excited about this move and we hope it will make the development of the toolchain more transparent to everyone.</span></p>
<p><span>The bug tracker is powered by <a href="http://www.jetbrains.com/youtrack/index.jsp">YouTrack</a>, yet another awesome product from our friends at <a href="http://www.jetbrains.com/">JetBrains</a>. </span></p>
]]></content:encoded>
      <dc:date>2013-02-21T07:19:00+01:00</dc:date>
    </item>
    <item>
      <title>Colin T A Gray Joins The Rubymotion Team</title>
      <link>http://www.rubymotion.com/news/2013/02/20/colin-t-a-gray-joins-the-rubymotion-team.html</link>
      <description><![CDATA[
Colin is a software developer from Denver, CO and, as the author of both Teacup and SugarCube, a popular figure in the RubyMotion community. Colin is also very active on the Google group and our #rubymotion IRC channel on the freenode network.
Colin agreed to help us build an amazing community around RubyMotion. You will read more from him very soon on this blog and other channels!
Incidentally, if you are coming to our upcoming conference you will get to see Colin talking about a top-secret project he has been hacking on!


]]></description>
      <pubDate>Wed, 20 Feb 2013 15:55:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2013/02/20/colin-t-a-gray-joins-the-rubymotion-team.html</guid>
      <content:encoded><![CDATA[<p><img alt="Colin is always happy!" src="http://media.tumblr.com/9f7be7f499000967474507ee88da8f9c/tumblr_inline_mij3ajHWQU1qz4rgp.jpg"/></p>
<p><a href="https://twitter.com/colinta">Colin</a> is a software developer from Denver, CO and, as the author of both <a href="https://github.com/rubymotion/teacup">Teacup</a> and <a href="https://github.com/rubymotion/sugarcube">SugarCube</a>, a popular figure in the RubyMotion community. Colin is also very active on the Google group and our #rubymotion IRC channel on the freenode network.</p>
<p>Colin agreed to help us build an amazing community around RubyMotion. You will read more from him very soon on this blog and other channels!</p>
<p>Incidentally, if you are coming to our <a href="http://www.rubymotion.com/conference/">upcoming conference</a> you will get to see Colin talking about a <a href="http://rubygems.org/gems/kiln">top-secret project</a> he has been hacking on!</p>
]]></content:encoded>
      <dc:date>2013-02-20T15:55:00+01:00</dc:date>
    </item>
    <item>
      <title>Joffrey Jaffeux Joins The Rubymotion Team</title>
      <link>http://www.rubymotion.com/news/2013/02/20/joffrey-jaffeux-joins-the-rubymotion-team.html</link>
      <description><![CDATA[
Joffrey is a French software developer and the author of one of the most widely used iOS app in France, 02 Minutes d&#8217;Attente, which has been sitting in the Top 10 Free Apps category of the local App Store for a while. Of course, the app is entirely written in RubyMotion.
 Joffrey masters the toolchain very well and has agreed to help us by joining our support team on a part-time basis. If you are reporting support tickets you may get to talk to him eventually now!
Before you ask, that&#8217;s the best picture we have of Joffrey. By the way, did you know there were sharks behind him?


]]></description>
      <pubDate>Wed, 20 Feb 2013 11:49:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2013/02/20/joffrey-jaffeux-joins-the-rubymotion-team.html</guid>
      <content:encoded><![CDATA[<p><img alt="What if we tell you there were sharks behind him?" src="http://media.tumblr.com/fcc600790621144204f6556da9f842bd/tumblr_inline_mij3a9iez81qz4rgp.jpg"/></p>
<p><a href="https://twitter.com/joffreyjaffeux">Joffrey</a> is a French software developer and the author of one of the most widely used iOS app in France, <a href="https://itunes.apple.com/fr/app/02-minutes-dattente-par-jaime/id578169563?mt=8">02 Minutes d&#8217;Attente</a>, which has been sitting in the <em>Top 10 Free Apps</em> category of the local App Store for a while. <span>Of course, the app is entirely written in RubyMotion.</span></p>
<p><span> Joffrey masters the toolchain very well and has</span><span> agreed to help us by joining our support team on a part-time basis. If you are reporting support tickets you may get to talk to him eventually now!</span></p>
<p><span>Before you ask, that&#8217;s the best picture we have of Joffrey. By the way, did you know there were sharks behind him?</span></p>
]]></content:encoded>
      <dc:date>2013-02-20T11:49:00+01:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Inspect New Speakers Few Tickets</title>
      <link>http://www.rubymotion.com/news/2013/02/15/rubymotion-inspect-new-speakers-few-tickets.html</link>
      <description><![CDATA[In a bit more than a month we will be opening the doors to our first RubyMotion conference, 28-29th March in Brussels, Belgium.
We are so excited! Two entire days of 100% RubyMotion talks! 
New Speakers
We are announcing 4 new speakers!
Delisa Mason is a software developer living in Ohio and the creator of the RubyMotion plugin for Redcar, the ruby editor. She will talk about customizing an iOS development workflow using rubies all the way down.
Austin Seraphin is a blind programmer. In his talk, you will discover exactly how a blind person uses an iOS device and how RubyMotion makes writing accessible apps easier.
Michael Erasmus is a software developer living in South Africa and also one of the guys making the motioncasts.tv screencasts. In his talk he will cover mixing RubyMotion with CoffeeScript.
Juan Karam is an iOS developer working for Raku, a consultancy agency in Mexico. In his talk he will unveil the mysteries behind Core Animation and cocos2d and how you can leverage them in RubyMotion.
You can refer to the conference speakers page for the full list of speakers. We are not accepting new speakers proposals at this point.
We will be publishing the final schedule soon, stay tuned!
Few Tickets Remaining
At the time of this writing there are very few tickets left, so we highly recommend that you grab a ticket as soon as possible if you want to come to the conference. We will likely sold out in the next few days.
We are also selling one additional ticket to the training as one of the attendees sadly won&#8217;t be able to make it.


]]></description>
      <pubDate>Fri, 15 Feb 2013 11:43:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2013/02/15/rubymotion-inspect-new-speakers-few-tickets.html</guid>
      <content:encoded><![CDATA[<p>In a bit more than a month we will be opening the doors to our <a href="http://www.rubymotion.com/conference/">first RubyMotion conference</a>, 28-29th March in Brussels, Belgium.</p>
<p>We are so excited! Two entire days of 100% RubyMotion talks! </p>
<p><strong>New Speakers</strong></p>
<p>We are announcing 4 new speakers!</p>
<ul><li><em>Delisa Mason</em><span> is a software developer living in Ohio and the creator of the <a href="http://kattrali.github.com/redcar-rubymotion/">RubyMotion plugin for Redcar</a>, the ruby editor. She will talk about customizing an iOS development workflow using rubies all the way down.</span></li>
</ul><ul><li><span><em>Austin Seraphin</em> is a blind programmer. </span><span>In his talk, you will discover exactly how a blind person uses an iOS device and how RubyMotion makes <a href="http://behindthecurtain.us/2013/01/10/rubymotion-and-accessibility/">writing accessible apps</a> easier.</span></li>
</ul><ul><li><span><em>Michael Erasmus</em> is a software developer living in South Africa and also one of the guys making the <a href="http://motioncasts.tv">motioncasts.tv</a> screencasts. In his talk he will cover mixing RubyMotion with CoffeeScript.</span></li>
</ul><ul><li><em>Juan Karam</em> is an iOS developer working for <a href="http://raku.mx/">Raku</a>, a consultancy agency in Mexico. In his talk he will unveil the mysteries behind Core Animation and <a href="http://www.cocos2d-iphone.org/">cocos2d</a> and how you can leverage them in RubyMotion.</li>
</ul><p>You can refer to the <a href="http://www.rubymotion.com/conference/#speakers">conference speakers page</a> for the full list of speakers. We are not accepting new speakers proposals at this point.</p>
<p>We will be publishing the final schedule soon, stay tuned!</p>
<p><strong>Few Tickets Remaining</strong></p>
<p>At the time of this writing there are <em>very few</em> tickets left, so we highly recommend that you <a href="http://myupcoming.com/en/event/37754/rubymotion-inspect-2013/info">grab a ticket</a> as soon as possible if you want to come to the conference. We will likely sold out in the next few days.</p>
<p>We are also selling one additional ticket to the training as one of the attendees sadly won&#8217;t be able to make it.</p>
]]></content:encoded>
      <dc:date>2013-02-15T11:43:00+01:00</dc:date>
    </item>
    <item>
      <title>Scan Barcodes And Images With Moodstocks And</title>
      <link>http://www.rubymotion.com/news/2013/01/30/scan-barcodes-and-images-with-moodstocks-and.html</link>
      <description><![CDATA[Moodstocks is a company that provides an image recognition and barcode decoding API for mobile apps. Their product is really astonishing as you can see from this video.

They have been working on integrating their SDK with the RubyMotion toolchain and published their results:

RubyMotion is a revolutionary tool.  It not only offers developers a new way to build iOS applications, but also shows great experimental spirit.

Check out the demo app! Also, if you are looking for a higher-level wrapper, make sure to check Motionscan (which is a work-in-progress).


]]></description>
      <pubDate>Wed, 30 Jan 2013 07:32:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2013/01/30/scan-barcodes-and-images-with-moodstocks-and.html</guid>
      <content:encoded><![CDATA[<p><a href="http://www.moodstocks.com">Moodstocks</a> is a company that provides an image recognition and barcode decoding API for mobile apps. Their product is really astonishing as you can see from this video.</p>
<p><iframe frameborder="0" height="315" src="http://www.youtube.com/embed/4V6Nd2TS5n8" width="420"></iframe></p>
<p>They have been working on integrating their SDK with the RubyMotion toolchain and <a href="http://www.moodstocks.com/2013/01/30/image-recognition-in-rubymotion-with-the-moodstocks-sdk/">published their results</a>:</p>
<blockquote>
<p>RubyMotion is a revolutionary tool.  It not only offers developers a new way to build iOS applications, but also shows great experimental spirit.</p>
</blockquote>
<p>Check out the <a href="https://github.com/Moodstocks/moodstocks-rubymotion-demo-app">demo app</a>! Also, if you are looking for a higher-level wrapper, make sure to check <a href="https://github.com/jjaffeux/Motionscan">Motionscan</a> (which is a work-in-progress).</p>
]]></content:encoded>
      <dc:date>2013-01-30T07:32:00+01:00</dc:date>
    </item>
    <item>
      <title>Pixate Launches With Rubymotion Support</title>
      <link>http://www.rubymotion.com/news/2013/01/21/pixate-launches-with-rubymotion-support.html</link>
      <description><![CDATA[Pixate is a framework for iOS that lets you easily create and style beautiful user interfaces using CSS. Pixate was in private beta for the last weeks and is now publicly available.
We were so impressed by the work of the Pixate folks that we worked closely with them to create a RubyMotion-Pixate gem which nicely integrates the Pixate framework in RubyMotion projects. Check out how it works by watching this screencast made by Pixate co-Founder Paul Colton.



]]></description>
      <pubDate>Mon, 21 Jan 2013 15:30:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2013/01/21/pixate-launches-with-rubymotion-support.html</guid>
      <content:encoded><![CDATA[<p><a href="http://www.pixate.com/">Pixate</a> is a framework for iOS that lets you easily create and style beautiful user interfaces using CSS. Pixate was in private beta for the last weeks and is now publicly available.</p>
<p>We were so impressed by the work of the Pixate folks that we worked closely with them to create a <a href="https://github.com/Pixate/RubyMotion-Pixate">RubyMotion-Pixate</a> gem which nicely integrates the Pixate framework in RubyMotion projects. <span>Check out how it works by watching this screencast made by Pixate co-Founder Paul Colton.</span></p>
<p><iframe frameborder="0" height="315" src="http://www.youtube.com/embed/jlidbp-uhJ0" width="560"></iframe></p>
]]></content:encoded>
      <dc:date>2013-01-21T15:30:00+01:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Inspect New Speakers Early Bird</title>
      <link>http://www.rubymotion.com/news/2013/01/08/rubymotion-inspect-new-speakers-early-bird.html</link>
      <description><![CDATA[In case you have not heard about it, we are organizing our very first RubyMotion conference, the 28-29th March in Brussels, Belgium.
It will be a 2-day, one-track conference full of short, 100% RubyMotion talks. It will undoubtedly be awesome!
Please see our our previous post for more information about the conference.
Early-Bird Discount
The Early-Bird tickets have been going fast, so you better hurry if you still want to take advantage of the 20% discount on the ticket price.
We will be running the Early-Bird discount until January 20th.
New Speakers
We are announcing 4 more awesome speakers!
Mattt Thompson is the Mobile Lead at Heroku, and the creator &amp; maintainer of AFNetworking and other popular open-source projects, including Postgres.app &amp; Induction. He also writes about obscure &amp; overlooked parts of Cocoa on NSHipster. He will talk about how Ruby hackers built the new Objective-C Open Source community.
Matt Green is a software developer living in DC and a very early adopter of RubyMotion, as the author of Nitron and webstub. He will discuss how layering can simplify your development process, and show off the new RubyMotion gem he has been working on secretly!
Marin Usalj is a freelancer iOS developer living in San Francisco. He is one of the maintainers of BubbleWrap, one of the most used RubyMotion library, and he will talk about how using it to quickly building apps with networking, persistence and more.
Karl Krukow is the CTO of LessPainful, a Danish company that specializes in test automation for mobile. He is one of the core developers of Calabash, an automated test framework for iOS and Android, and he will talk about how it can be integrated with RubyMotion projects.
You can refer to the conference speakers page for the so far full list of speakers. As you can see, the schedule will be excellent!
We will be announcing more speakers soon. If you are interested in sending a talk proposal please do so relatively soon as we will be closing the form by January 20th.
New Sponsors
Since our last update, three more awesome companies decided to help us organizing the conference: Nedap, ProcessOne and Belighted. So exciting!
If your company wants to help us by sponsoring the conference, let us know as soon as possible.


]]></description>
      <pubDate>Tue, 08 Jan 2013 12:37:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2013/01/08/rubymotion-inspect-new-speakers-early-bird.html</guid>
      <content:encoded><![CDATA[<p>In case you have not heard about it, we are organizing our very first <a href="http://www.rubymotion.com/conference/">RubyMotion conference</a>, the 28-29th March in Brussels, Belgium.</p>
<p>It will be a 2-day, one-track conference full of short, 100% RubyMotion talks. It will undoubtedly be awesome!</p>
<p>Please see our <a href="http://blog.rubymotion.com/2012/12/04/announcing-inspect-2013-the-rubymotion.html-conference">our previous post</a> for more information about the conference.</p>
<p><strong>Early-Bird Discount</strong></p>
<p class="p1">The <a href="http://myupcoming.com/en/event/37754/rubymotion-inspect-2013/info">Early-Bird tickets</a> have been going fast, so you better hurry if you still want to take advantage of the 20% discount on the ticket price.</p>
<p class="p1">We will be running the Early-Bird discount until January 20th.</p>
<p><strong>New Speakers</strong></p>
<p>We are announcing 4 more awesome speakers!</p>
<ul><li><em>Mattt Thompson</em> is the Mobile Lead at <a href="http://heroku.com">Heroku</a>, and the creator &amp; maintainer of <a href="https://github.com/AFNetworking/AFNetworking">AFNetworking</a> and other popular open-source projects, including <a href="http://postgresapp.com/">Postgres.app</a> &amp; <a href="https://github.com/Induction/Induction">Induction</a>. He also writes about obscure &amp; overlooked parts of Cocoa on <a href="http://nshipster.com/">NSHipster</a>. He will talk about how Ruby hackers built the new Objective-C Open Source community.</li>
</ul><ul><li><em>Matt Green</em> is a software developer living in DC and a very early adopter of RubyMotion, as the author of <a href="https://github.com/mattgreen/nitron">Nitron</a> and <a href="https://github.com/mattgreen/webstub">webstub</a>. He will discuss how layering can simplify your development process, and show off the new RubyMotion gem he has been working on secretly!</li>
</ul><ul><li><em>Marin Usalj</em> is a freelancer iOS developer living in San Francisco. He is one of the maintainers of <a href="https://github.com/rubymotion/BubbleWrap">BubbleWrap</a>, one of the most used RubyMotion library, and he will talk about how using it to quickly building apps with networking, persistence and more.</li>
</ul><ul><li><em>Karl Krukow</em> is the CTO of <a href="https://www.lesspainful.com/">LessPainful</a>, a Danish company that specializes in test automation for mobile. He is one of the core developers of <a href="https://github.com/calabash">Calabash</a>, an automated test framework for iOS and Android, and he will talk about how it can be integrated with RubyMotion projects.</li>
</ul><p>You can refer to the <a href="http://www.rubymotion.com/conference/#speakers">conference speakers</a> page for the so far full list of speakers. As you can see, the schedule will be excellent!</p>
<p>We will be announcing more speakers soon. If you are interested in sending a talk proposal please do so relatively soon as we will be closing the form by January 20th.</p>
<p><strong>New Sponsors</strong></p>
<p>Since our last update, three more awesome companies decided to help us organizing the conference: <a href="http://nedap.com/">Nedap</a>, <a href="http://www.process-one.net/en/">ProcessOne</a> and <a href="http://belighted.be/">Belighted</a>. So exciting!</p>
<p>If your company wants to help us by sponsoring the conference, <a href="mailto:info@hipbyte.com">let us know</a> as soon as possible.</p>
]]></content:encoded>
      <dc:date>2013-01-08T12:37:00+01:00</dc:date>
    </item>
    <item>
      <title>First Rubymotion Training Mission Accomplished</title>
      <link>http://www.rubymotion.com/news/2013/01/03/first-rubymotion-training-mission-accomplished.html</link>
      <description><![CDATA[Happy new year folks! 
We delivered our very first RubyMotion training in late December of last year in spicy Gurgaon (Delhi), India. What a great way to finish an awesome year.
We trained during 5 days about 15 software engineers from McKinsey &amp; Company IT, ThoughtWorks and Tata Consultancy Services to the RubyMotion platform and iOS development APIs.






Laurent and Norberto are amazing instructors. Their easy manner and depth of knowledge helped them adjust to the specific needs of the people in the room. The exercises were rich and enlightening, and the course was very interesting and informative. Overall, five days of training was definitely a worthwhile investment!
- Abhishek Nalwaya, Tech Lead at McKinsey &amp; Company IT






Check out the pictures!



If you are interested in setting up an in-house RubyMotion training in your company offices, contact us. If you are a small company or an individual developer, you will be glad to know that we will also announce public trainings in different locations around the globe very soon, stay tuned! 


]]></description>
      <pubDate>Thu, 03 Jan 2013 12:53:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2013/01/03/first-rubymotion-training-mission-accomplished.html</guid>
      <content:encoded><![CDATA[<p>Happy new year folks! </p>
<p>We delivered our very first <a href="http://www.rubymotion.com/support/training/">RubyMotion training</a> in late December of last year in spicy Gurgaon (Delhi), India. What a great way to finish an awesome year.</p>
<p>We trained during 5 days about 15 software engineers from <a href="http://www.mckinsey.com/">McKinsey &amp; Company IT</a>, <a href="http://www.thoughtworks.com/">ThoughtWorks</a> and <a href="http://www.tcs.com/">Tata Consultancy Services</a> to the RubyMotion platform and iOS development APIs.</p>
<blockquote>
<div>
<div>
<div>
<div>
<div>
<p class="p1">Laurent and Norberto are amazing instructors. Their easy manner and depth of knowledge helped them adjust to the specific needs of the people in the room. The exercises were rich and enlightening, and the course was very interesting and informative. Overall, five days of training was definitely a worthwhile investment!</p>
<p class="p1">- Abhishek Nalwaya, Tech Lead at McKinsey &amp; Company IT</p>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<p class="p1">Check out the pictures!</p>
<p class="p1"><img alt="image" src="http://media.tumblr.com/315679b2522fe26e3ae40bda0870fc3b/tumblr_inline_mg29tmcimx1roo9mt.png"/></p>
<p class="p1"><img alt="image" src="http://media.tumblr.com/ef31d862237d29550697536db4b1f9ae/tumblr_inline_mg29dwnsrh1roo9mt.png"/></p>
<p class="p1"><img alt="image" src="http://media.tumblr.com/a838f94a0bad27b1d1b538985a62e2a2/tumblr_inline_mg29ecMjBZ1roo9mt.png"/></p>
<p class="p1">If you are interested in setting up an in-house <a href="http://www.rubymotion.com/support/training/">RubyMotion training</a> in your company offices, <a href="mailto:info@hipbyte.com">contact us</a>. If you are a small company or an individual developer, you will be glad to know that we will also announce public trainings in different locations around the globe very soon, stay tuned! </p>
]]></content:encoded>
      <dc:date>2013-01-03T12:53:00+01:00</dc:date>
    </item>
    <item>
      <title>Rubymotion In The Cloud</title>
      <link>http://www.rubymotion.com/news/2012/12/26/rubymotion-in-the-cloud.html</link>
      <description><![CDATA[The awesome folks at Thunderbolt Labs have self-published a short book about RubyMotion: RubyMotion in the Cloud.

This is a 40-page PDF that teaches you how to integrate both AFNetworking and RestKit with a RubyMotion project and build a client/server REST architecture.
The book is full of code snippets and we recommend that you grab a copy if you need any help connecting a RubyMotion app to a server API.


]]></description>
      <pubDate>Wed, 26 Dec 2012 10:41:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2012/12/26/rubymotion-in-the-cloud.html</guid>
      <content:encoded><![CDATA[<p>The awesome folks at <a href="http://thunderboltlabs.com">Thunderbolt Labs</a> have self-published a short book about RubyMotion: <a href="http://thunderboltlabs.com/knowledge/rubymotion_in_the_cloud">RubyMotion in the Cloud</a>.</p>
<p><a href="http://thunderboltlabs.com/knowledge/rubymotion_in_the_cloud"><img alt="image" src="http://media.tumblr.com/781c827689951560b06f124b4306a62b/tumblr_inline_mfnaa6VV751roo9mt.png"/></a></p>
<p>This is a 40-page PDF that teaches you how to integrate both <a href="https://github.com/AFNetworking/AFNetworking">AFNetworking</a> and <a href="https://github.com/RestKit/RestKit">RestKit</a> with a RubyMotion project and build a client/server REST architecture.</p>
<p>The book is full of code snippets and we recommend that you <a href="http://thunderboltlabs.com/knowledge/rubymotion_in_the_cloud">grab a copy</a> if you need any help connecting a RubyMotion app to a server API.</p>
]]></content:encoded>
      <dc:date>2012-12-26T10:41:00+01:00</dc:date>
    </item>
    <item>
      <title>The Pragmatic Bookshelf Publishes A Rubymotion</title>
      <link>http://www.rubymotion.com/news/2012/12/12/the-pragmatic-bookshelf-publishes-a-rubymotion.html</link>
      <description><![CDATA[The very first RubyMotion book, published by The Pragmatic Bookshelf, no less, is now available in both eBook and paper format. 
The author of this book is not just anybody. Clay Allsopp has been a very active member of the RubyMotion community, writing an excellent tutorial and having worked on several wrappers. Clay is also working on Propeller, a RubyMotion-based product that lets you build mobile apps simply with drag-and-drop.
Clay will be speaking at the upcoming RubyMotion #inspect conference in Brussels, 28-29 March 2013, which you should really attend. Hurry up, the early-bird tickets won&#8217;t last long!
The book features a foreword by Laurent, the author of RubyMotion.

It is safe to say that, if you have been interested in RubyMotion but never really had the chance to start learning the platform, you should grab a copy of this book right away.
We are thrilled about the release of this book. In addition to the training program and the ongoing conference, the RubyMotion ecosystem is now quickly maturing and we can already be very confident about the future of the platform.


]]></description>
      <pubDate>Wed, 12 Dec 2012 07:06:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2012/12/12/the-pragmatic-bookshelf-publishes-a-rubymotion.html</guid>
      <content:encoded><![CDATA[<p>The very first <a href="http://pragprog.com/book/carubym/rubymotion">RubyMotion book</a>, published by The Pragmatic Bookshelf, no less, is now available in both eBook and paper format. </p>
<p>The author of this book is not just anybody. <a href="http://clayallsopp.com/">Clay Allsopp</a> has been a very active member of the RubyMotion community, writing an <a href="http://rubymotion-tutorial.com">excellent tutorial</a> and having worked on <a href="http://rubymotion-wrappers.com">several wrappers</a>. Clay is also working on <a href="http://usepropeller.com/">Propeller</a>, a RubyMotion-based product that lets you build mobile apps simply with drag-and-drop.</p>
<p>Clay will be speaking at the upcoming <a href="http://www.rubymotion.com/conference">RubyMotion #inspect conference</a> in Brussels, 28-29 March 2013, which you should really attend. Hurry up, the early-bird tickets won&#8217;t last long!</p>
<p>The book features a foreword by <a href="https://twitter.com/lrz">Laurent</a>, the author of RubyMotion.</p>
<p><a href="http://pragprog.com/book/carubym/rubymotion"><img alt="image" src="http://media.tumblr.com/tumblr_mex2jzrxi61roo9mt.jpg"/></a></p>
<p>It is safe to say that, if you have been interested in RubyMotion but never really had the chance to start learning the platform, you should <a href="http://pragprog.com/book/carubym/rubymotion">grab a copy of this book</a> right away.</p>
<p>We are thrilled about the release of this book. In addition to the <a href="http://www.rubymotion.com/support/training/">training program</a> and the <a href="http://www.rubymotion.com/conference">ongoing conference</a>, the RubyMotion ecosystem is now quickly maturing and we can already be very confident about the future of the platform.</p>
]]></content:encoded>
      <dc:date>2012-12-12T07:06:00+01:00</dc:date>
    </item>
    <item>
      <title>Announcing Inspect 2013 The Rubymotion</title>
      <link>http://www.rubymotion.com/news/2012/12/04/announcing-inspect-2013-the-rubymotion.html</link>
      <description><![CDATA[We are super excited to announce the first official RubyMotion conference  to be held in Brussels, Belgium on the 28th and 29th March, 2013.
Two days. Single track. 100% RubyMotion. A limited number of early birds tickets are now on sale with a 20% discount!
A 100% RubyMotion event
RubyMotion has been around for about 8 months but the community around it has been growing so fast we believe it now deserves its own event. And this event is called #inspect.
We want #inspect to be the place where RubyMotion enthusiasts can finally meet face-to-face to chat and learn what’s happening in the community. Quality time for attendees to connect and hack together will also be scheduled in the program. 
The program
The conference will be spread over two days and feature a single track that will include several short talks by some awesome speakers. 
We pre-selected 10 speakers for this event. These folks may not be familiar to you, but we assure you they know what they&#8217;re talking about.
However, we need more speakers! If you have an idea for a RubyMotion talk please let us know by filling out the form on the conference website.
We will also be giving a RubyMotion training the three days before the start of the conference. It is a shorter version of our training program that has been specifically tailored for the conference. We conveniently offer a single training+conference ticket that will provide admission to both the training and the conference. 
The location
We wanted the inaugural edition of #inspect to be special, which is why we decided to organize it in Belgium, the birthplace of RubyMotion. 
Brussels is the capital of Belgium and the de-facto capital of the European Union. It is located right in the heart of Europe. Brussels has an international airport featuring direct-flights from major cities in Europe, the US, and Asia.
The venue we selected is, by itself, a splendid location. We booked a classical house right on Brussels&#8217; main square, known as the Grand-Place. The entire area is a UNESCO World Heritage Site and often described as one of the most beautiful squares in the world.
We will be serving Belgian food and beverages at the conference venue. This will be a bit different than your traditional conference sandwiches, we promise. 
Finally, an awesome after-party is planned on Thursday evening, and for those interested, we will be visiting a  local gueuze brewery on Saturday.
Come with your family! Brussels is a great city and there are many things to be seen. And we should have good weather.
The sponsors
RubyMotion #inspect is presented by HipByte, the company behind RubyMotion, as well as a community of volunteers. As you may already know, organizing a conference can be expensive.
We are looking for a small number of sponsors to share in the support of the event. This is a great opportunity to show your commitment to the RubyMotion community and also promote your products or services. We need your help to make this event as awesome as it should be. Contact us!
We are super excited to unveil JetBrains, Cyrus Innovation and The Pragmatic Studio as our first sponsors! 


]]></description>
      <pubDate>Tue, 04 Dec 2012 07:24:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2012/12/04/announcing-inspect-2013-the-rubymotion.html</guid>
      <content:encoded><![CDATA[<p>We are super excited to announce the first official <a href="http://www.rubymotion.com/conference">RubyMotion conference</a>  to be held in Brussels, Belgium on the 28th and 29th March, 2013.</p>
<p>Two days. Single track. 100% RubyMotion. A limited number of <a href="http://myupcoming.com/en/event/37754/rubymotion-inspect-2013/info">early birds tickets</a> are now on sale with a 20% discount!</p>
<p><strong>A 100% RubyMotion event</strong></p>
<p>RubyMotion has been around for about 8 months but the community around it has been growing so fast we believe it now deserves its own event. And this event is called <a href="http://www.rubymotion.com/conference/">#inspect</a>.</p>
<p>We want #inspect to be the place where RubyMotion enthusiasts can finally meet face-to-face to chat and learn what’s happening in the community. Quality time for attendees to connect and hack together will also be scheduled in the program. </p>
<p><strong>The program</strong></p>
<p>The conference will be spread over two days and feature a single track that will include several short talks by some awesome speakers. </p>
<p>We pre-selected <a href="http://www.rubymotion.com/conference/#speakers">10 speakers</a> for this event. These folks may not be familiar to you, but we assure you they know what they&#8217;re talking about.</p>
<p>However,<em> we need more speakers!</em> If you have an idea for a RubyMotion talk please let us know by filling out the form on the conference website.</p>
<p class="p1">We will also be giving a RubyMotion training the three days before the start of the conference. It is a shorter version of our <a href="http://www.rubymotion.com/support/training/">training program</a> that has been specifically tailored for the conference. We conveniently offer a <a href="http://myupcoming.com/en/event/37754/rubymotion-inspect-2013/info">single training+conference ticket</a> that will provide admission to both the training and the conference. </p>
<p><strong>The location</strong></p>
<p>We wanted the inaugural edition of #inspect to be special, which is why we decided to organize it in Belgium, the birthplace of RubyMotion. </p>
<p>Brussels is the capital of Belgium and the de-facto capital of the European Union. It is located right in the heart of Europe. Brussels has an <a href="http://www.brusselsairport.be/en/#">international airport</a> featuring <br/>direct-flights from major cities in Europe, the US, and Asia.</p>
<p class="p1">The venue we selected is, by itself, a splendid location. We booked a classical house right on Brussels&#8217; main square, known as the <a href="http://fotopedia.com/wiki/Grand_Place">Grand-Place</a>. The entire area is a UNESCO World Heritage Site and often described as one of the most beautiful squares in the world.</p>
<p>We will be serving Belgian food and beverages at the conference venue. This will be a bit different than your traditional conference sandwiches, we promise. </p>
<p>Finally, an awesome after-party is planned on Thursday evening, and for those interested, we will be visiting a  <a href="http://www.cantillon.be/">local gueuze brewery</a> on Saturday.</p>
<p>Come with your family! Brussels is a great city and there are <a href="http://visitbrussels.be/">many things to be seen</a>. And we should have good weather.</p>
<p><strong>The sponsors</strong></p>
<p>RubyMotion #inspect is presented by HipByte, the company behind RubyMotion, as well as a community of volunteers. As you may already know, organizing a conference can be expensive.</p>
<p>We are looking for a small number of sponsors to share in the support of the event. This is a great opportunity to show your commitment to the RubyMotion community and also promote your products or services. We need your help to make this event as awesome as it should be. <a href="mailto:info@hipbyte.com">Contact us!</a></p>
<p>We are super excited to unveil <a href="http://jetbrains.com">JetBrains</a>, <a href="http://www.cyrusinnovation.com/">Cyrus Innovation</a> and <a href="http://pragmaticstudio.com/">The Pragmatic Studio</a> as our first sponsors! </p>
]]></content:encoded>
      <dc:date>2012-12-04T07:24:00+01:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Api Reference Smart File Dependencies</title>
      <link>http://www.rubymotion.com/news/2012/11/16/rubymotion-api-reference-smart-file-dependencies.html</link>
      <description><![CDATA[Time for another significant RubyMotion release! RubyMotion 1.28 is now available featuring a couple interesting new features as well as its traditional set of bug fixes.
RubyMotion API Reference
As RubyMotion compiles down to iOS and uses the exact same APIs as Objective-C, a RubyMotion developer has to discover and learn the official APIs. This is often done by browsing Apple&#8217;s official documentation on developer.apple.com. However, users have been complaining that it was not easy enough and that the APIs are still described using the Objective-C syntax.
Well, this used to be a problem, but not anymore. We are now delivering a complete RubyMotion APIs reference in our online developer center.
The documentation has been generated using a modified version of yard, an excellent alternative to RDoc, and should cover the basic iOS frameworks and their APIs. We also cover C-based APIs such as structures, functions, enumerations and constants, as well as Objective-C protocols. Finally, builtin RubyMotion APIs such as the Dispatch module or the Pointer class are also documented.

Command-line Documentation Browser
The 1.28 release extends the motion command line tool with a new ri command, which works similarly to the official Ruby ri command. You can use that command to quickly query the documentation of a given class or method from the comfort of your terminal.
$ motion ri UIButton
-------------------------------------------- Class: UIButton &lt; UIControl

]]></description>
      <pubDate>Fri, 16 Nov 2012 10:42:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2012/11/16/rubymotion-api-reference-smart-file-dependencies.html</guid>
      <content:encoded><![CDATA[<p>Time for another significant RubyMotion release! RubyMotion 1.28 is now available featuring a couple interesting new features as well as its traditional set of bug fixes.</p>
<p><strong>RubyMotion API Reference</strong></p>
<p>As RubyMotion compiles down to iOS and uses the exact same APIs as Objective-C, a RubyMotion developer has to discover and learn the official APIs. This is often done by browsing Apple&#8217;s official documentation on <a href="http://developer.apple.com">developer.apple.com</a>. However, users have been complaining that it was not easy enough and that the APIs are still described using the Objective-C syntax.</p>
<p>Well, this used to be a problem, but not anymore. We are now delivering a complete <a href="http://www.rubymotion.com/developer-center/api/index.html">RubyMotion APIs reference</a> in our online developer center.</p>
<p>The documentation has been generated using a modified version of <a href="http://yardoc.org/">yard</a>, an excellent alternative to RDoc, and should cover the basic iOS frameworks and their APIs. We also cover C-based APIs such as structures, functions, enumerations and constants, as well as Objective-C protocols. Finally, builtin RubyMotion APIs such as the Dispatch module or the Pointer class are also documented.</p>
<p><a href="http://www.rubymotion.com/developer-center/api/"><img src="http://media.tumblr.com/tumblr_mdl7mnQuPX1roo9mt.png"/></a></p>
<p><strong>Command-line Documentation Browser</strong></p>
<p>The 1.28 release extends the <em>motion</em> command line tool with a new <em>ri</em> command, which works similarly to the official Ruby <em>ri</em> command. You can use that command to quickly query the documentation of a given class or method from the comfort of your terminal.</p>
<pre class="highlight">$ motion ri UIButton
-------------------------------------------- Class: UIButton &lt; UIControl

    An instance of the UIButton class  implements a button on the touch
    screen. A button intercepts touch events and sends an action message
    to a target object when tapped. Methods for setting the target and
    action are inherited from UIControl. This class provides methods for
    setting the title, image, and other appearance properties of a
    button. By using these accessors, you can specify a different
    appearance for each button state. 
[...]
</pre>
<p><strong>Dash.app Docset</strong></p>
<p>For those who prefer an UI to read API references, <a href="http://kapeli.com/dash/">Dash.app</a> is an awesome documentation browser for your Mac. We personally use it on a daily basis, we highly recommend it and obviously we had to generate a docset for our API reference.</p>
<p><img src="http://media.tumblr.com/tumblr_mdl7k8JnDd1roo9mt.png"/></p>
<p>The great deal about Dash is that it lets you query the API reference extremely easily. Queries are so fast you will not believe it. Get the <a href="http://rubymotion.com/files/RubyMotion.docset.zip">RubyMotion Docset</a> here!</p>
<p><strong>Smart File Dependencies</strong></p>
<p>If you have been programming with RubyMotion long enough you know that it is different than traditional implementations of Ruby in the sense that all the project files must be passed to the compiler at build time and that the order can be important, if for example you define a class in one file and subclass it in another one.</p>
<p>The build system will compile files using the regular filesystem order and exposs the <em>files_dependencies</em> method that you can use to explicitly set a dependency between two files.</p>
<pre class="highlight">Motion::Project::App.setup do |app|
  # ...
  app.files_dependencies 'app/bar.rb' =&gt; 'app/foo.rb'
end
</pre>
<p>Clearly, this has always been a temporary solution. In RubyMotion 1.28, the build system has been improved to automatically detect dependencies between files for you, so that in most cases, you won&#8217;t have to use <em>files_dependencies.</em></p>
<p>What the build system does is that it will scan the source code for specific tokens that could be interpreted as a symbol definition or usage, then accordingly build a map of dependencies. </p>
<p>This is a fairly experimental feature and we expect bugs around, so we proactively added the <em>detect_dependencies</em> variable that you can set to <em>false</em> in your Rakefile to disable the feature, in case it causes a problem. Let us know if you do so!</p>
]]></content:encoded>
      <dc:date>2012-11-16T10:42:00+01:00</dc:date>
    </item>
    <item>
      <title>Announcing Rubymotion Trainings</title>
      <link>http://www.rubymotion.com/news/2012/10/30/announcing-rubymotion-trainings.html</link>
      <description><![CDATA[We are thrilled to announce that we now offer a full course on RubyMotion.
The training program has been tailored for Ruby developers with no experience with iOS. The course should teach you everything you need to know about RubyMotion and iOS so that you can start developing full-fledged iPhone and iPad apps in Ruby.
We have not scheduled a public training yet, but if you are interested, please fill out this form and we will get back to you once we have more information. If you have a company or other organization that is interested in a RubyMotion course, we can also provide customized on-site training, just contact us.


]]></description>
      <pubDate>Tue, 30 Oct 2012 12:22:00 +0100</pubDate>
      <guid>http://www.rubymotion.com/news/2012/10/30/announcing-rubymotion-trainings.html</guid>
      <content:encoded><![CDATA[<p>We are thrilled to announce that we now offer a <a href="http://www.rubymotion.com/support/training/">full course on RubyMotion</a>.</p>
<p>The training program has been tailored for Ruby developers with no experience with iOS. The course should teach you everything you need to know about RubyMotion and iOS so that you can start developing full-fledged iPhone and iPad apps in Ruby.</p>
<p>We have not scheduled a public training yet, but if you are interested, please <a href="https://docs.google.com/spreadsheet/formResponse?formkey=dEt0ZUJrNUIycXRYZkpNaVNZMVpUbVE6MQ&amp;ifq">fill out this form</a> and we will get back to you once we have more information. If you have a company or other organization that is interested in a RubyMotion course, we can also provide customized on-site training, just <a href="mailto:info@hipbyte.com">contact us</a>.</p>
]]></content:encoded>
      <dc:date>2012-10-30T12:22:00+01:00</dc:date>
    </item>
    <item>
      <title>Rubymine Gets Rubymotion Support</title>
      <link>http://www.rubymotion.com/news/2012/10/24/rubymine-gets-rubymotion-support.html</link>
      <description><![CDATA[We are super excited to report that RubyMotion support just landed in the RubyMine Early Access Program, codenamed Enoki. This is an awesome news!
RubyMine is a Ruby IDE developed by JetBrains. It offers many interesting features such as context-aware auto-completion, refactoring, code analysis, and many more.
We have been working with the great folks at JetBrains on this and while there are still bugs around, it is already quite usable and very convenient. Just check out the demo video!



]]></description>
      <pubDate>Wed, 24 Oct 2012 12:29:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2012/10/24/rubymine-gets-rubymotion-support.html</guid>
      <content:encoded><![CDATA[<p>We are super excited to report that <a href="http://blog.jetbrains.com/ruby/2012/10/rubymine-enoki-early-access-rubymotion-is-on-board/">RubyMotion support</a> just landed in the RubyMine Early Access Program, codenamed Enoki. This is an awesome news!</p>
<p><a href="http://www.jetbrains.com/ruby/">RubyMine</a> is a Ruby IDE developed by <a href="http://www.jetbrains.com/">JetBrains</a>. It offers many interesting features such as context-aware auto-completion, refactoring, code analysis, and many more.</p>
<p>We have been working with the great folks at JetBrains on this and while there are still bugs around, it is already quite usable and very convenient. Just check out the demo video!</p>
<p><a href="http://tv.jetbrains.net/videocontent/rubymotion-support"><img height="225" src="http://blog.jetbrains.com/ruby/files/2012/10/Screen-Shot-2012-10-24-at-17.51.52--300x225.png" width="300"/></a></p>
]]></content:encoded>
      <dc:date>2012-10-24T12:29:00+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Highlighted In Thoughtworks Technology</title>
      <link>http://www.rubymotion.com/news/2012/10/23/rubymotion-highlighted-in-thoughtworks-technology.html</link>
      <description><![CDATA[ThoughtWorks, a large IT consulting firm, recently published the latest edition of its Technology Radar, a document aimed at covering technologies that should be explored by developers.
RubyMotion is highlighted in the Languages &amp; Frameworks section in the Assess ring, which encompasses technologies worth exploring with the goal of understanding how it will affect your enterprise.

Introducing a Ruby compiler and toolchain for developing iOS applications, RubyMotion has unsurprisingly caused quite a stir in the ThoughtWorks development community. There continues to be a need to understand the underlying iOS APIs and some Objective-C when building applications, but there are clear benefits for those who find working with the Ruby language and tools more comfortable.


Not bad, given that RubyMotion has only been released 6 months ago!


]]></description>
      <pubDate>Tue, 23 Oct 2012 06:11:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2012/10/23/rubymotion-highlighted-in-thoughtworks-technology.html</guid>
      <content:encoded><![CDATA[<p><a href="http://www.thoughtworks.com/">ThoughtWorks</a>, a large IT consulting firm, recently published the latest edition of its <a href="http://www.thoughtworks.com/articles/technology-radar-october-2012">Technology Radar</a>, a document aimed at covering technologies that should be explored by developers.</p>
<p><a href="http://www.rubymotion.com">RubyMotion</a> is highlighted in the Languages &amp; Frameworks section in the <strong>Assess</strong> ring, which encompasses technologies <em>worth exploring with the goal of understanding how it will affect your enterprise.</em></p>
<blockquote>
<p>Introducing a Ruby compiler and toolchain for developing iOS applications, <strong>RubyMotion</strong> has unsurprisingly caused quite a stir in the ThoughtWorks development community. There continues to be a need to understand the underlying iOS APIs and some Objective-C when building applications, but there are clear benefits for those who find working with the Ruby language and tools more comfortable.</p>
</blockquote>
<p><a href="http://www.thoughtworks.com/articles/technology-radar-october-2012"><img src="http://media.tumblr.com/tumblr_mccca307OL1roo9mt.png"/></a></p>
<p>Not bad, given that RubyMotion has only been released 6 months ago!</p>
]]></content:encoded>
      <dc:date>2012-10-23T06:11:00+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Gets Ios 6 Iphone 5 Debugger</title>
      <link>http://www.rubymotion.com/news/2012/09/20/rubymotion-gets-ios-6-iphone-5-debugger.html</link>
      <description><![CDATA[We are glad to announce that RubyMotion 1.24 is available to all users. This is by far the biggest software update we have done so far, so let&#8217;s go through the most important changes.
iOS 6 SDK
This release adds support for the iOS 6 SDK.
Unlike some other mobile development platforms, RubyMotion is a pure native toolchain that can automatically support new SDKs, just like Apple&#8217;s Objective-C. Therefore, RubyMotion already supported the iOS 6 SDK the same day it was announced at WWDC 2012.
However, the support for iOS 6 wasn&#8217;t shipping as part of RubyMotion for legal reasons, as it was still under NDA. Until yesterday!
To program with the iOS 6 SDK you will need to download and install Xcode 4.5 from Apple&#8217;s developer center. There you will also find exhaustive documentation about the new frameworks and APIs of iOS 6. UICollectionView, a new UIKit class that can be used to easily create view layouts, is brand new in iOS 6. We could not resist porting one of the WWDC samples to RubyMotion: CircleLayout.
iPhone 5
You probably heard about the new iPhone 5 which was announced last week!
The iPhone 5 features a 4-inch retina display. The RubyMotion build system was improved so that you can specify the retina resolution the simulator should use, by providing different values for the retina option.
$ rake retina=4   # starts the 4-inch simulator (iPhone 5)
$ rake retina=3.5 # starts the 3.5-inch simulator (iPhone 4S and older)

If a true value is provided for the retina option, the build system will default to 4-inch in case the simulator target is 6.0, otherwise 3.5-inch.
On the technical side, the new iPhone 5 has a new processor architecture called armv7s. The RubyMotion compiler now supports this new architecture. Applications built for iOS 6 will contain code for both armv7 (iPhone 4S and older) and armv7s.
Debugger
This has been one of the most requested feature. As of 1.24, RubyMotion comes with debugging facilities based on GDB, the GNU project debugger. The RubyMotion compiler has also been improved to statically emit the appropriate DWARF debugging metadata for the Ruby language. 
The debugger lets you set source-level breakpoints, inspect contextual variables, backtrace frames, threads, and control the execution flow.
Debugging is supported on both the simulator and the device. You can start the debugger by setting the debug option to the appropriate rake tasks.
$ rake simulator debug=1
$ rake device debug=1

In the simulator target the debugger will replace the read-eval-print-loop interactive console. In the device target you will notice that the debugger will start right after the application has been installed and run the application. This is already a significant improvement over previous RubyMotion releases as you will see the application logs in your terminal window. 
$ rake device debug=1
(in /Users/lrz/src/RubyMotionSamples/Hello)
     Build ./build/iPhoneOS-6.0-Development
    Deploy ./build/iPhoneOS-6.0-Development/Hello.ipa
Switching to remote-macosx protocol
[...]
^C
Program received signal SIGSTOP, Stopped (signal).
0x3304eeb4 in mach_msg_trap ()
(gdb) break hello_view.rb:10
Breakpoint 1 at 0x26d84: file hello_view.rb, line 10.
(gdb) c
Continuing.

]]></description>
      <pubDate>Thu, 20 Sep 2012 07:33:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2012/09/20/rubymotion-gets-ios-6-iphone-5-debugger.html</guid>
      <content:encoded><![CDATA[<p>We are glad to announce that RubyMotion 1.24 is available to all users. This is by far the biggest software update we have done so far, so let&#8217;s go through the most important changes.</p>
<p><strong>iOS 6 SDK</strong></p>
<p>This release adds support for the iOS 6 SDK.</p>
<p>Unlike some other mobile development platforms, RubyMotion is a pure native toolchain that can automatically support new SDKs, just like Apple&#8217;s Objective-C. Therefore, RubyMotion already supported the iOS 6 SDK the <a href="https://groups.google.com/forum/#!msg/rubymotion/jEfedYwkx98/MHOC9MYIJiQJ">same day</a> it was announced at WWDC 2012.</p>
<p>However, the support for iOS 6 wasn&#8217;t shipping as part of RubyMotion for legal reasons, as it was still under NDA. Until yesterday!</p>
<p>To program with the iOS 6 SDK you will need to download and install Xcode 4.5 from <a href="http://developer.apple.com">Apple&#8217;s developer center</a>. There you will also find exhaustive documentation about the new frameworks and APIs of iOS 6. UICollectionView, a new UIKit class that can be used to easily create view layouts, is brand new in iOS 6. We could not resist porting one of the WWDC samples to RubyMotion: <a href="https://github.com/HipByte/RubyMotionSamples/tree/master/CircleLayout">CircleLayout</a>.</p>
<p><strong>iPhone 5</strong></p>
<p>You probably heard about the new iPhone 5 which was announced last week!</p>
<p>The iPhone 5 features a 4-inch retina display. The RubyMotion build system was improved so that you can specify the retina resolution the simulator should use, by providing different values for the retina option.</p>
<pre class="highlight">$ rake retina=4   # starts the 4-inch simulator (iPhone 5)
$ rake retina=3.5 # starts the 3.5-inch simulator (iPhone 4S and older)
</pre>
<p>If a true value is provided for the retina option, the build system will default to 4-inch in case the simulator target is 6.0, otherwise 3.5-inch.</p>
<p>On the technical side, the new iPhone 5 has a new processor architecture called armv7s. The RubyMotion compiler now supports this new architecture. Applications built for iOS 6 will contain code for both armv7 (iPhone 4S and older) and armv7s.</p>
<p><strong>Debugger</strong></p>
<p>This has been one of the most requested feature. As of 1.24, RubyMotion comes with debugging facilities based on <a href="http://www.gnu.org/software/gdb/">GDB</a>, the GNU project debugger. The RubyMotion compiler has also been improved to statically emit the appropriate <a href="http://www.dwarfstd.org/">DWARF</a> debugging metadata for the Ruby language. </p>
<p>The debugger lets you set source-level breakpoints, inspect contextual variables, backtrace frames, threads, and control the execution flow.</p>
<p>Debugging is supported on both the simulator and the device. You can start the debugger by setting the debug option to the appropriate rake tasks.</p>
<pre class="highlight">$ rake simulator debug=1
$ rake device debug=1
</pre>
<p>In the simulator target the debugger will replace the read-eval-print-loop interactive console. In the device target you will notice that the debugger will start right after the application has been installed and run the application. This is already a significant improvement over previous RubyMotion releases as you will see the application logs in your terminal window. </p>
<pre class="highlight">$ rake device debug=1
(in /Users/lrz/src/RubyMotionSamples/Hello)
     Build ./build/iPhoneOS-6.0-Development
    Deploy ./build/iPhoneOS-6.0-Development/Hello.ipa
Switching to remote-macosx protocol
[...]
^C
Program received signal SIGSTOP, Stopped (signal).
0x3304eeb4 in mach_msg_trap ()
(gdb) break hello_view.rb:10
Breakpoint 1 at 0x26d84: file hello_view.rb, line 10.
(gdb) c
Continuing.

Breakpoint 1, rb_scope__drawRect:__ (self=0x208495f0, rect=0x20851260)
    at hello_view.rb:10
10            bgcolor = UIColor.blackColor
Current language:  auto; currently minimal
(gdb) pro self
#&lt;HelloView:0x208495f0&gt;
(gdb) pro rect
#&lt;CGRect origin=#&lt;CGPoint x=0.0 y=0.0&gt; size=#&lt;CGSize width=320.0 height=480.0&gt;&gt;
(gdb) n
14          bgcolor.set
(gdb) n
15          UIBezierPath.bezierPathWithRect(frame).fill
(gdb) n
17          font = UIFont.systemFontOfSize(24)
(gdb) n
18          UIColor.whiteColor.set
(gdb) pro font
#&lt;UICFFont:0x2084c040&gt;
(gdb) n
19          text.drawAtPoint(CGPoint.new(10, 20), withFont:font)
(gdb) pro text
"Touched 1 times!"
(gdb) c
Continuing.
</pre>
<p>To know more about the new debugger check out the new <a href="http://www.rubymotion.com/developer-center/articles/debugging">Debugging RubyMotion Applications</a> article in our developer center.</p>
<p>The debugger is at this time quite rudimentary and will be significantly improved in the next updates. We also understand that GDB is not for everyone. We are however very excited about this new debugging facility and we see it as a first step towards a higher-level, friendlier debugger that will eventually be integrated into the existing read-eval-print-loop interactive console. </p>
<p><strong>Misc</strong></p>
<p>Module#define_method is now implemented as of RubyMotion 1.24. This method lets you dynamically define a new method and is often used in DSLs / meta-programming. Please note that, because of technical limitations of the static compiler, it is not possible yet to use #define_method to overwrite an existing Objective-C-level method.</p>
<p>The libdispatch&#8217;s dispatch_once() function is now exposed via the new Dispatch.once method. This method accepts a block that is guaranteed to be yielded exactly once in a thread-safe manner. dispatch_once() is often used in Objective-C programs to create thread-safe singleton objects and the same can be done in RubyMotion apps now.</p>
<pre class="highlight">class MyClass
  def self.instance
    Dispatch.once { @instance ||= new }
    @instance
  end
end
</pre>
<p>Last but not least, this update brings performance improvements in the String class and fixes several bugs in the other builtin classes. </p>
]]></content:encoded>
      <dc:date>2012-09-20T07:33:00+02:00</dc:date>
    </item>
    <item>
      <title>Shizuo Fujita Watson Joins The Rubymotion Team</title>
      <link>http://www.rubymotion.com/news/2012/09/05/shizuo-fujita-watson-joins-the-rubymotion-team.html</link>
      <description><![CDATA[RubyMotion was released to the world just over 5 months ago and, in the time since, development and support has been a single-person effort. The success of RubyMotion so far has only been possible thanks to the wonderful community that has grown up around this young project.
HipByte, the company behind RubyMotion, is deliberately 100% bootstrapped without outside funding. Thanks to the support of RubyMotion users and the licenses you have purchased, we are ready to start growing the team!
Today we are glad to announce our first full-time addition to the team: Shizuo Fujita, aka Watson.

Those of you familiar with MacRuby most likely know Watson already. He joined in 2010 the MacRuby project and is now its most active contributor. He is familiar with the entire MacRuby stack (compiler, VM, runtime, library) and has been using RubyMotion since the very first beta builds! He is also involved in RubyMotionJP, an effort to promote RubyMotion in Japan.
Watson lives in Tokyo, Japan and will be helping with the RubyMotion maintenance as well as working on exciting new features.
Follow him on Twitter and GitHub and check out his website (in Japanese)!


]]></description>
      <pubDate>Wed, 05 Sep 2012 06:52:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2012/09/05/shizuo-fujita-watson-joins-the-rubymotion-team.html</guid>
      <content:encoded><![CDATA[<p><a href="http://www.rubymotion.com">RubyMotion</a> was released to the world just over 5 months ago and, in the time since, development and support has been a <a href="http://twitter.com/lrz">single-person</a> effort. The success of RubyMotion so far has only been possible thanks to the wonderful community that has grown up around this young project.</p>
<p><a href="http://www.hipbyte.com">HipByte</a>, the company behind RubyMotion, is deliberately 100% bootstrapped without outside funding. Thanks to the support of RubyMotion users and the licenses you have purchased, we are ready to start growing the team!</p>
<p>Today we are glad to announce our first full-time addition to the team: Shizuo Fujita, aka <a href="https://twitter.com/watson1978">Watson</a>.</p>
<p><img align="left" src="http://media.tumblr.com/tumblr_m9vipmTuMw1roo9mt.png"/><img align="left" src="http://media.tumblr.com/tumblr_m9vipuN9cn1roo9mt.png"/></p>
<p>Those of you familiar with <a href="http://www.macruby.org">MacRuby</a> most likely know Watson already. He joined in 2010 the MacRuby project and is now its most active contributor. He is familiar with the entire MacRuby stack (compiler, VM, runtime, library) and has been using RubyMotion since the very first beta builds! He is also involved in <a href="http://rubymotion.jp/">RubyMotionJP</a>, an effort to promote RubyMotion in Japan.</p>
<p>Watson lives in Tokyo, Japan and will be helping with the RubyMotion maintenance as well as working on exciting new features.</p>
<p>Follow him on <a href="https://twitter.com/watson1978">Twitter</a> and <a href="https://github.com/Watson1978">GitHub</a> and check out his <a href="http://watson1978.github.com/">website</a> (in Japanese)!</p>
]]></content:encoded>
      <dc:date>2012-09-05T06:52:00+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Success Story Cabify</title>
      <link>http://www.rubymotion.com/news/2012/08/30/rubymotion-success-story-cabify.html</link>
      <description><![CDATA[We had the great pleasure to talk to Mark Villacampa about Cabify and their use of RubyMotion in production. Another great RubyMotion success story!

Hi Mark! Thanks for taking the time to talk to us. Could you introduce yourself?I’m a 20 year-old Electronic Engineering student from Madrid (Spain), who also happens to be a programmer. I’m currently on an internship as a software developer at Cabify and bootstrapping LEAPto3D, a company focused on 3D Printing which is going to launch very soon.What is Cabify exactly?Cabify offers a customer orientated urban transport service. You can request a high-end car with chauffeur from your mobile phone or website, at very affordable rates. You simply select the pick-up and drop-off points, have a great ride in a quality car, and only pay for the distance and time, seamlessly and securely using your credit card.You guys are using RubyMotion there in production. Could you tell us a bit more about your experience with RubyMotion as well as how RubyMotion is used at Cabify?I started learning Ruby on Rails about a year ago, and I enjoyed Ruby so much that I decided to use it for more than web applications. Shortly after that, I started using MacRuby.I was preparing to give a MacRuby talk at our local Madrid Ruby group last May, when RubyMotion was released. I thought ‘Why not add RubyMotion to the talk?’, so I bought a license, and I’ve been using RubyMotion ever since.Cabify is predominantly a Ruby and Rails shop, with a bit of Node.js on the side. After battling with iPhone development for the best part of a year they were starting to get really frustrated with the amount of effort required to get high quality apps.They contacted me shortly after my presentation to see if I would be interested in working with them over the summer to develop their driver application on iPhone using RubyMotion. This is the app that the drivers use to update their position and accept new hires. The idea was to test the waters and see if it worked out.My boss was blown away by the results :-) After just four weeks I had a working application with concise easy to read and maintain ruby code. They were so impressed in fact that they scrapped the new Objective-C rider app they were working on (the one customers use to request a car) and moved completely to RubyMotion. We hope to launch a new completely redesigned app in the next few weeks, as opposed to months!Why did you chose RubyMotion over another toolchain?While apprehensive at first to try something other than the Apple supported XCode, seeing RubyMotion in action and given the passion for Ruby in the development team, it was an easy decision!How was your workflow with RubyMotion? What code editor did you use? Did you get to use any 3rd-party library or gem?I use Sublime Text 2 as code editor, with the SublimeRubymotionBuilder and SublimeLinter configured to work with RubyMotion’s syntax.Adding 3rd party libraries to your app is easier than with XCode, where there is no standard way to do so.We’re using AFNetworking, QuickDialogs, SVProgressHUD, and of course, Teacup, a RubyMotion gem and DSL for styling views.What are your favorite features of RubyMotion? How do you see RubyMotion in the future?Being able to use my favorite programming language to develop applications for iOS!The REPL really impressed me the first time I used it. I think it can be extended to make it much more powerful. Also, I’m looking forward to on-device REPL and debugger.As opposed to XCode, RubyMotion’s build tools are open source, so you can modify them to fit your needs and even send pull-requests.I think people are going to release very innovative apps using RubyMotion. The flexibility of Ruby and the faster development time make RubyMotion a great platform for experimenting with new ways of creating iOS applications. At Cabify there is certainly no going back!
Thank you Mark!
If you are using RubyMotion in production and would like to participate to our success stories series, contact us! We would love to hear about what you are doing.


]]></description>
      <pubDate>Thu, 30 Aug 2012 07:00:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2012/08/30/rubymotion-success-story-cabify.html</guid>
      <content:encoded><![CDATA[<p>We had the great pleasure to talk to <a href="http://markvillacampa.com/">Mark Villacampa</a> about <a href="https://cabify.com/">Cabify</a> and their use of <a href="http://www.rubymotion.com">RubyMotion</a> in production. Another great RubyMotion success story!</p>
<p><iframe frameborder="0" height="300" src="http://player.vimeo.com/video/34069783" width="400"></iframe></p>
<p><strong>Hi Mark! Thanks for taking the time to talk to us. Could you introduce yourself?</strong><br/><br/>I’m a 20 year-old Electronic Engineering student from Madrid (Spain), who also happens to be a programmer. I’m currently on an internship as a software developer at <a href="https://cabify.com/">Cabify</a> and bootstrapping <a href="http://leapto3d.com">LEAPto3D</a>, a company focused on 3D Printing which is going to launch very soon.<br/><br/><strong>What is Cabify exactly?</strong><br/><br/><a href="https://cabify.com/">Cabify</a> offers a customer orientated urban transport service. You can request a high-end car with chauffeur from your mobile phone or website, at very affordable rates. You simply select the pick-up and drop-off points, have a great ride in a quality car, and only pay for the distance and time, seamlessly and securely using your credit card.<br/><br/><strong>You guys are using RubyMotion there in production. Could you tell us a bit more about your experience with RubyMotion as well as how RubyMotion is used at Cabify?</strong><br/><br/>I started learning <a href="http://rubyonrails.org/">Ruby on Rails</a> about a year ago, and I enjoyed Ruby so much that I decided to use it for more than web applications. Shortly after that, I started using <a href="http://macruby.org/">MacRuby</a>.<br/><br/>I was preparing to give a <a href="http://www.slideshare.net/markvilla/macruby-rubymotion-madridrb-may-2012-13154591">MacRuby talk</a> at our local <a href="http://madridrb.jottit.com/">Madrid Ruby group</a> last May, when <a href="http://www.rubymotion.com">RubyMotion</a> was released. I thought ‘Why not add RubyMotion to the talk?’, so I bought a license, and I’ve been using RubyMotion ever since.<br/><br/>Cabify is predominantly a Ruby and Rails shop, with a bit of <a href="http://nodejs.org/">Node.js</a> on the side. After battling with iPhone development for the best part of a year they were starting to get really frustrated with the amount of effort required to get high quality apps.<br/><br/>They contacted me shortly after my presentation to see if I would be interested in working with them over the summer to develop their driver application on iPhone using RubyMotion. This is the app that the drivers use to update their position and accept new hires. The idea was to test the waters and see if it worked out.<br/><br/>My boss was blown away by the results :-) After just four weeks I had a working application with concise easy to read and maintain ruby code. They were so impressed in fact that they scrapped the new Objective-C rider app they were working on (the one customers use to request a car) and moved completely to RubyMotion. We hope to launch a new completely redesigned app in the next few weeks, as opposed to months!<br/><br/><strong>Why did you chose RubyMotion over another toolchain?</strong><br/><br/>While apprehensive at first to try something other than the Apple supported XCode, seeing RubyMotion in action and given the passion for Ruby in the development team, it was an easy decision!<br/><br/><strong>How was your workflow with RubyMotion? What code editor did you use? Did you get to use any 3rd-party library or gem?</strong><br/><br/>I use <a href="http://www.sublimetext.com/2">Sublime Text 2</a> as code editor, with the <a href="https://github.com/haraken3/SublimeRubyMotionBuilder">SublimeRubymotionBuilder</a> and <a href="https://github.com/SublimeLinter/SublimeLinter">SublimeLinter</a> configured to work with RubyMotion’s syntax.<br/><br/>Adding 3rd party libraries to your app is easier than with XCode, where there is no standard way to do so.<br/><br/>We’re using <a href="https://github.com/AFNetworking/AFNetworking">AFNetworking</a>, <a href="https://github.com/escoz/QuickDialog">QuickDialogs</a>, <a href="https://github.com/samvermette/SVProgressHUD">SVProgressHUD</a>, and of course, <a href="https://github.com/rubymotion/teacup">Teacup</a>, a RubyMotion gem and DSL for styling views.<br/><br/><strong>What are your favorite features of RubyMotion? How do you see RubyMotion in the future?</strong><br/><br/>Being able to use my favorite programming language to develop applications for iOS!<br/><br/>The REPL really impressed me the first time I used it. I think it can be extended to make it much more powerful. Also, I’m looking forward to on-device REPL and debugger.<br/><br/>As opposed to XCode, RubyMotion’s build tools are <a href="https://github.com/HipByte/RubyMotion">open source</a>, so you can modify them to fit your needs and even send pull-requests.<br/><br/>I think people are going to release very innovative apps using RubyMotion. The flexibility of Ruby and the faster development time make RubyMotion a great platform for experimenting with new ways of creating iOS applications. At Cabify there is certainly no going back!</p>
<p><strong>Thank you Mark!</strong></p>
<p>If you are using RubyMotion in production and would like to participate to our success stories series, <a href="mailto:info@hipbyte.com">contact us!</a> We would love to hear about what you are doing.</p>
]]></content:encoded>
      <dc:date>2012-08-30T07:00:00+02:00</dc:date>
    </item>
    <item>
      <title>An Awesome Rubymotion Tutorial</title>
      <link>http://www.rubymotion.com/news/2012/07/31/an-awesome-rubymotion-tutorial.html</link>
      <description><![CDATA[Clay Allsopp generously contributed an awesome tutorial about RubyMotion.
Check it out here: http://rubymotion-tutorial.com
The tutorial will help you getting started with RubyMotion and introduce you to fundamental iOS programming concepts such as views, controllers, containers, tables, animations, models, and so on!
There is no doubt this is the best tutorial about RubyMotion available out there, so feel free to give it a try and spread the word about it!
For those interested about submitting feedback or contributions, the source code for the whole tutorial is available in the clayallsopp/rubymotion-tutorial GitHub repository.


]]></description>
      <pubDate>Tue, 31 Jul 2012 06:20:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2012/07/31/an-awesome-rubymotion-tutorial.html</guid>
      <content:encoded><![CDATA[<p><a href="http://clayallsopp.com/">Clay Allsopp</a> generously contributed an <a href="http://rubymotion-tutorial.com">awesome tutorial</a> about <a href="http://www.rubymotion.com">RubyMotion</a>.</p>
<p>Check it out here: <a href="http://rubymotion-tutorial.com/">http://rubymotion-tutorial.com</a></p>
<p>The tutorial will help you getting started with RubyMotion and introduce you to fundamental iOS programming concepts such as views, controllers, containers, tables, animations, models, and so on!</p>
<p>There is no doubt this is the best tutorial about RubyMotion available out there, so feel free to give it a try and spread the word about it!</p>
<p>For those interested about submitting feedback or contributions, the source code for the whole tutorial is available in the <a href="https://github.com/clayallsopp/rubymotion-tutorial">clayallsopp/rubymotion-tutorial</a> GitHub repository.</p>
]]></content:encoded>
      <dc:date>2012-07-31T06:20:00+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Success Story Everclip</title>
      <link>http://www.rubymotion.com/news/2012/07/24/rubymotion-success-story-everclip.html</link>
      <description><![CDATA[To bootstrap our success stories series we had the great pleasure to talk to Francis Chong who just released EverClip, the first commercial app written in RubyMotion.

Hi Francis! Thanks for taking the time to talk to us. Could you introduce yourself?
I&#8217;m the co-founder of Ignition Soft. We are a small team focused on crafting mobile apps. You just shipped EverClip, a pretty cool app for Evernote. The app got nice reviews and it is ranking #1 in various categories in the Japanese App Store. Congratulations! Could you tell us more about the app?
We want to save part of a web site, ebook, or images from various apps and store them permanently. We want to do that without switching back and forth between apps. We want to easily search and share this information.
Our solution is a pasteboard app that handles rich text (HTML) and posts it to Evernote.EverClip is built entirely in RubyMotion. How much time did it take you to build the app? How did you find the experience using RubyMotion?
The first version with a minimal feature set took a few days. It took 2 months to have a version we felt was ready for production.
RubyMotion is a new product, we treated it with care and selected a smaller, experimental project to write our first app with it. It worked surprisingly well.
At the same time, as we were working on our app, we found bugs in different areas: compiler, build tools, external tools or missing documentation. We could see the toolchain was being constantly improved, the bugs were being fixed, and the documentation was being improved.
I&#8217;m quite happy to hack and see a great project evolving. That said, if I&#8217;m not familiar with iOS and ruby, or if I am working on a client project that are having hard schedule, I will probably find this ride too exciting and distracting.You are an experienced iOS developer. How did RubyMotion compare to traditional tools (Xcode / Objective-C)?
At first, I found it not much different from Objective-C. You use the same APIs, but with a different tool and language. I often do the translation between Objective-C and Ruby. It is constantly evolving though, people build different wrappers, libraries and tools that make it feel more idiomatic ruby. I prefer the idiomatic ruby way, Ruby code can be much more concise and easy to read. Just check the BubbleWrap gem to see some samples.How was your workflow with RubyMotion? What code editor did you use? Did you get to use any 3rd-party library or gem in EverClip?
I use Sublime Text 2 with the RubyMotion plugin which is extremely handy. I use bundler to manage gems, and CocoaPods to manage Objective-C open source libraries. I create view controllers and initialize views using the SimpleView gem, and handle events or notifications with BubbleWrap.
I use many 3rd-party libraries. Without DTWebArchive (handle rich text format in Safari), WebContentView (display HTML content), QuickDialog (quick form drawing) and libtidy (HTML cleanup), EverClip would not exist. What are your favorite features of RubyMotion? How do you see RubyMotion in the future?
The toolchain. It is open source and easily extensible. I see many creative ways of using it, such as adding colors to the output of unit tests, or include gems/cocoapods in projects. I spend a night to hack a UIViewController generator that works with the ib gem, it is really easy with existing ruby tools and frameworks. The power for people to write or change their tool is really amazing and this is not going to (easily) happen if we are using XCode.
With more people writing production apps using RubyMotion, I can see people extracting the core of their app to create something like Rails for iOS app development. This may not be happening very soon, but the community around RubyMotion is very strong and active. Will you use RubyMotion for your next app?
I am not throwing away XCode yet, but I&#8217;m going to develop more RubyMotion apps in the future.
Thanks Francis!
If you are using RubyMotion in production and would like to participate to our success stories series, contact us! We would love to hear about what you are doing.


]]></description>
      <pubDate>Tue, 24 Jul 2012 09:27:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2012/07/24/rubymotion-success-story-everclip.html</guid>
      <content:encoded><![CDATA[<p>To bootstrap our success stories series we had the great pleasure to talk to Francis Chong who just released <a href="http://clip.ignition.hk/">EverClip</a>, the first commercial app written in <a href="http://www.rubymotion.com">RubyMotion</a>.</p>
<p><iframe frameborder="0" height="281" src="http://player.vimeo.com/video/44396882" width="500"></iframe></p>
<p><strong>Hi Francis! Thanks for taking the time to talk to us. Could you introduce yourself?</strong></p>
<p>I&#8217;m the co-founder of <a href="http://ignition.hk/lang-en/">Ignition Soft</a>. We are a small team focused on crafting mobile apps. <br/><br/><strong>You just shipped <a href="http://clip.ignition.hk/">EverClip</a>, a pretty cool app for <a href="http://evernote.com/">Evernote</a>. The app got nice reviews and it is ranking #1 in various categories in the Japanese App Store. Congratulations! Could you tell us more about the app?</strong></p>
<p>We want to save part of a web site, ebook, or images from various apps and store them permanently. We want to do that without switching back and forth between apps. We want to easily search and share this information.</p>
<p>Our solution is a pasteboard app that handles rich text (HTML) and posts it to Evernote.<br/><br/><strong>EverClip is built entirely in RubyMotion. How much time did it take you to build the app? How did you find the experience using RubyMotion?</strong></p>
<p>The first version with a minimal feature set took a few days. It took 2 months to have a version we felt was ready for production.</p>
<p>RubyMotion is a new product, we treated it with care and selected a smaller, experimental project to write our first app with it. It worked surprisingly well.</p>
<p>At the same time, as we were working on our app, we found bugs in different areas: compiler, build tools, external tools or missing documentation. We could see the toolchain was being constantly improved, the bugs were being fixed, and the documentation was being improved.</p>
<p>I&#8217;m quite happy to hack and see a great project evolving. That said, if I&#8217;m not familiar with iOS and ruby, or if I am working on a client project that are having hard schedule, I will probably find this ride too exciting and distracting.<br/><br/><strong>You are an experienced iOS developer. How did RubyMotion compare to traditional tools (Xcode / Objective-C)?</strong></p>
<p>At first, I found it not much different from Objective-C. You use the same APIs, but with a different tool and language. I often do the translation between Objective-C and Ruby. It is constantly evolving though, people build different wrappers, libraries and tools that make it feel more idiomatic ruby. I prefer the idiomatic ruby way, Ruby code can be much more concise and easy to read. Just check the <a href="http://bubblewrap.io/">BubbleWrap</a> gem to see some samples.<br/><br/><strong>How was your workflow with RubyMotion? What code editor did you use? Did you get to use any 3rd-party library or gem in EverClip?</strong></p>
<p>I use Sublime Text 2 with the <a href="https://github.com/haraken3/SublimeRubyMotionBuilder">RubyMotion plugin</a> which is extremely handy. I use <a href="http://gembundler.com/">bundler</a> to manage gems, and <a href="http://cocoapods.org/">CocoaPods</a> to manage Objective-C open source libraries. I create view controllers and initialize views using the <a href="https://github.com/seanho/SimpleView">SimpleView</a> gem, and handle events or notifications with <a href="http://bubblewrap.io/">BubbleWrap</a>.</p>
<p>I use many 3rd-party libraries. Without <a href="https://github.com/Cocoanetics/DTWebArchive">DTWebArchive</a> (handle rich text format in Safari), <a href="https://github.com/nicklockwood/WebContentView">WebContentView</a> (display HTML content), <a href="https://github.com/escoz/QuickDialog">QuickDialog</a> (quick form drawing) and <a href="http://tidy.sourceforge.net/">libtidy</a> (HTML cleanup), EverClip would not exist. <br/><br/><strong>What are your favorite features of RubyMotion? How do you see RubyMotion in the future?</strong></p>
<p>The toolchain. It is open source and easily extensible. I see many creative ways of using it, such as adding colors to the output of unit tests, or include gems/cocoapods in projects. I spend a night to hack a UIViewController generator that works with the <a href="https://github.com/yury/ib">ib gem</a>, it is really easy with existing ruby tools and frameworks. The power for people to write or change their tool is really amazing and this is not going to (easily) happen if we are using XCode.</p>
<p>With more people writing production apps using RubyMotion, I can see people extracting the core of their app to create something like Rails for iOS app development. This may not be happening very soon, but the community around RubyMotion is very strong and active. <br/><br/><strong>Will you use RubyMotion for your next app?</strong></p>
<p>I am not throwing away XCode yet, but I&#8217;m going to develop more RubyMotion apps in the future.</p>
<p><strong>Thanks Francis!</strong></p>
<hr><p>If you are using RubyMotion in production and would like to participate to our success stories series, <a href="mailto:info@hipbyte.com">contact us</a>! We would love to hear about what you are doing.</p>
]]></content:encoded>
      <dc:date>2012-07-24T09:27:00+02:00</dc:date>
    </item>
    <item>
      <title>Functional View And Controller Testing With</title>
      <link>http://www.rubymotion.com/news/2012/07/04/functional-view-and-controller-testing-with.html</link>
      <description><![CDATA[RubyMotion now features a brand-new testing layer that lets you write functional specifications for the views and controllers of your application.
This layer is added on top of the existing testing framework and leverages the functionality of Apple&#8217;s UIAutomation framework. This video gives a quick overview to get you started:

Compared to the traditional usage of UIAutomation the experience here can be slightly different, as you get to write your tests in Ruby instead of Javascript, have access to the actual objects and you don&#8217;t need to use the Instruments application to run the test suite.
describe "The Timer view controller" do
  tests TimerController

]]></description>
      <pubDate>Wed, 04 Jul 2012 09:13:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2012/07/04/functional-view-and-controller-testing-with.html</guid>
      <content:encoded><![CDATA[<p><a href="http://www.rubymotion.com">RubyMotion</a> now features a brand-new testing layer that lets you write functional specifications for the views and controllers of your application.</p>
<p>This layer is added on top of the existing <a href="http://www.rubymotion.com/developer-center/articles/testing">testing framework</a> and leverages the functionality of Apple&#8217;s <a href="http://developer.apple.com/library/ios/#documentation/DeveloperTools/Reference/UIAutomationRef/_index.html">UIAutomation</a> framework. This video gives a quick overview to get you started:</p>
<p><iframe frameborder="0" height="365" src="http://player.vimeo.com/video/45193144?title=0&amp;byline=0&amp;portrait=0" width="650"></iframe></p>
<p>Compared to the traditional usage of UIAutomation the experience here can be slightly different, as you get to write your tests in Ruby instead of Javascript, have access to the actual objects and you don&#8217;t need to use the Instruments application to run the test suite.</p>
<pre class="highlight">describe "The Timer view controller" do
  tests TimerController

  it "has a timer label" do
    view('Tap to start').should.not == nil
  end
end
</pre>
<p>This feature was engineered by our friends at <a href="http://www.fngtps.com/">Fingertips</a> and ships today in RubyMotion 1.15. You can learn more about the new APIs in the <a href="http://www.rubymotion.com/developer-center/articles/testing">Testing RubyMotion Apps</a> article in our <a href="http://www.rubymotion.com/developer-center">developer center</a>. The source code is also available in the <a href="https://github.com/HipByte/RubyMotion">HipByte/RubyMotion</a> repository on GitHub.</p>
]]></content:encoded>
      <dc:date>2012-07-04T09:13:00+02:00</dc:date>
    </item>
    <item>
      <title>Rubymotion Episode At The Changelog</title>
      <link>http://www.rubymotion.com/news/2012/07/03/rubymotion-episode-at-the-changelog.html</link>
      <description><![CDATA[A few weeks ago we had the great pleasure to participate to The Changelog, a popular podcast about software development technologies. We obviously talked about RubyMotion but also about MacRuby and its history, when we created the project back at Apple a few years ago.
We were told that this is one of their most popular episodes with over 40 thousand listens in just under a week! Check it out and let us know what you think!
If you like podcasts you can also listen to us on Ruby Rogues and iDeveloper Live. We had a lot of fun there too!


]]></description>
      <pubDate>Tue, 03 Jul 2012 10:18:47 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2012/07/03/rubymotion-episode-at-the-changelog.html</guid>
      <content:encoded><![CDATA[<p>A few weeks ago we had the great pleasure to participate to <a href="http://thechangelog.com/post/25928209107/episode-0-8-2-ruby-motion-macruby-and-more-with-laurent">The Changelog</a>, a popular podcast about software development technologies. We obviously talked about RubyMotion but also about <a href="http://www.macruby.org">MacRuby</a> and its history, when we created the project back at Apple a few years ago.</p>
<p>We were told that this is one of their most popular episodes with over 40 thousand listens in just under a week! <a href="http://thechangelog.com/post/25928209107/episode-0-8-2-ruby-motion-macruby-and-more-with-laurent">Check it out</a> and let us know what you think!</p>
<p>If you like podcasts you can also listen to us on <a href="http://rubyrogues.com/055-rr-rubymotion-with-laurent-sansonetti/">Ruby Rogues</a> and <a href="http://ideveloper.tv/blog/2012/05/ideveloperlive-episode-53/">iDeveloper Live</a>. We had a lot of fun there too!</p>
]]></content:encoded>
      <dc:date>2012-07-03T10:18:47+02:00</dc:date>
    </item>
    <item>
      <title>Upcoming Rubymotion Talks</title>
      <link>http://www.rubymotion.com/news/2012/06/28/upcoming-rubymotion-talks.html</link>
      <description><![CDATA[Ruby Lugdunum (June 22-23)

We had a lot of fun presenting RubyMotion last week at Ruby Lugdunum (aka RuLu) in sunny Lyon, France.
It was also our first opportunity to meet RubyMotion users and exchange great ideas! We would like to thank the organizers for setting up such a great event.
Cascadia Ruby (August 3-4)

We will be at Cascadia Ruby in Seattle, WA to talk about RubyMotion. We will also investigate if the coffee there is really as good as people say!
Lone Star Ruby Conf (August 9-11)

A few days after we will head straight to Austin, TX to present at Lone Star Ruby Conf. This will be our first time there too!
GOTO Aarhus (October 1-3)

We are super honored to have been invited to speak at GOTO Aarhus about RubyMotion, as part of the Modern Client App Architecture track.
Interested in attending? You can use the sana1000 promotion code during registration to save DKK 1000 (approximately £115 / €135 / $180).
ArrrCamp (October 4-5)

Ahoy! Come to beautiful Ghent, Belgium for ArrrCamp to learn more about RubyMotion and rum (and probably Belgian beers too!).
As some of you might already know, we are based in Belgium. Try to visit the country if it&#8217;s your first time here, Belgium has a lot to offer. Let us know if you need tips!
BubbleConf (October 12)

Last but not least, we will be speaking at BubbleConf in Amsterdam, Netherlands.
This event is special as we will not talk about RubyMotion from a technical point of view but more about the startup side of the project. We will attempt at covering our recent experience in bootstrapping a software company and launching a product, with the hope that other entrepreneurs can learn from our successes and mistakes.
BubbleConf is also the first conference co-organized by our really good friends at Phusion. There is no doubt this will be an epic event and we encourage you to grab a ticket.


]]></description>
      <pubDate>Thu, 28 Jun 2012 08:03:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2012/06/28/upcoming-rubymotion-talks.html</guid>
      <content:encoded><![CDATA[<p><strong>Ruby Lugdunum (June 22-23)</strong></p>
<p><strong><img src="http://media.tumblr.com/tumblr_m6bvnkmAS91roo9mt.png"/></strong></p>
<p>We had a lot of fun presenting <a href="http://www.rubymotion.com">RubyMotion</a> last week at<a href="http://rulu.eu"> Ruby Lugdunum</a> (aka RuLu) in sunny Lyon, France.</p>
<p>It was also our first opportunity to meet RubyMotion users and exchange great ideas! We would like to thank the organizers for setting up such a great event.</p>
<p><strong>Cascadia Ruby (August 3-4)</strong></p>
<p><strong><img src="http://media.tumblr.com/tumblr_m6bvox8YeC1roo9mt.png"/></strong></p>
<p>We will be at <a href="http://cascadiarubyconf.com/">Cascadia Ruby</a> in Seattle, WA to talk about RubyMotion. We will also investigate if the coffee there is really as good as people say!</p>
<p><strong>Lone Star Ruby Conf (August 9-11)</strong></p>
<p><strong><img height="99" src="http://media.tumblr.com/tumblr_m6bu8szV571roo9mt.png" width="100"/></strong></p>
<p>A few days after we will head straight to Austin, TX to present at <a href="http://lonestarrubyconf.com/">Lone Star Ruby Conf</a>. This will be our first time there too!</p>
<p><strong>GOTO Aarhus (October 1-3)</strong></p>
<p><strong><img src="http://media.tumblr.com/tumblr_m6bvqqZoiq1roo9mt.png"/></strong></p>
<p>We are super honored to have been invited to speak at <a href="http://gotocon.com/aarhus-2012/">GOTO Aarhus</a> about RubyMotion, as part of the <em>Modern Client App Architecture</em> track.</p>
<p>Interested in attending? You can use the <strong>sana1000</strong> promotion code during <a href="https://secure.trifork.com/aarhus-2012/registration/">registration</a> to save DKK 1000 (approximately £115 / €135 / $180).</p>
<p><strong>ArrrCamp (October 4-5)</strong></p>
<p><img src="http://media.tumblr.com/tumblr_m6bvrzZH8x1roo9mt.png"/></p>
<p>Ahoy! Come to beautiful Ghent, Belgium for <a href="http://arrrrcamp.be/">ArrrCamp</a> to learn more about RubyMotion and rum (and probably Belgian beers too!).</p>
<p>As some of you might already know, we are based in Belgium. Try to visit the country if it&#8217;s your first time here, Belgium has a lot to offer. Let us know if you need tips!</p>
<p><strong>BubbleConf (October 12)</strong></p>
<p><img src="http://media.tumblr.com/tumblr_m6bvugCIyQ1roo9mt.png"/></p>
<p>Last but not least, we will be speaking at <a href="http://www.bubbleconf.com/">BubbleConf</a> in Amsterdam, Netherlands.</p>
<p>This event is special as we will not talk about RubyMotion from a technical point of view but more about the <a href="http://blog.phusion.nl/2012/06/27/laurent-sansonetti-of-rubymotion-fame-to-speak-at-bubbleconf-2012/">startup side</a> of the project. We will attempt at covering our recent experience in bootstrapping a software company and launching a product, with the hope that other entrepreneurs can learn from our successes and mistakes.</p>
<p>BubbleConf is also the first conference co-organized by our really good friends at <a href="http://www.phusion.nl/">Phusion</a>. There is no doubt this will be an epic event and we encourage you to <a href="http://www.bubbleconf.com/tickets/new">grab a ticket</a>.</p>
]]></content:encoded>
      <dc:date>2012-06-28T08:03:00+02:00</dc:date>
    </item>
    <item>
      <title>Community Open Source Updates</title>
      <link>http://www.rubymotion.com/news/2012/06/01/community-open-source-updates.html</link>
      <description><![CDATA[Community
We are simply amazed by how quickly a community has formed around RubyMotion since the very first day it was released.
RubyMotion is about to turn one month old and there are already more than 100 projects on GitHub, including sample projects, DSL libraries and support for various text editors. A big Thank You to you guys!
Open Source
After much thought and deliberation, we decided to open parts of RubyMotion. We believe that this will make it even easier for the community to contribute to and extend the RubyMotion platform, leading to a better RubyMotion for everyone.
Today, we are opening the &#8220;lib&#8221; directory of RubyMotion, which contains the build system, project Rakefile, the configuration object and also the project vendoring system. Check out the HipByte/RubyMotion repository.
We are also releasing the Developer Center documentation under a Creative Commons license. It contains the guides and articles. We will be adding new articles soon. Check out the HipByte/RubyMotionDocumentation repository.
App Store
Since the last post there has been 3 more RubyMotion apps in the App Store!
Birdemia is a simple video game that features attacking birds. Explosions included. Made by Alexey Prohorenko. Source code available on GitHub.

Got my app out of the door with RubyMotion in just 2-3 hours. Went through approval very smoothly, no problems or concerns at all, so thumbs up for #rubymotion.

Greta Sans explores the Greta Sans typeface through an intuitive interface. The app includes HTML5 code. Made by Thijs van der Vossen.
ZAC is a sport app (Dutch only). Made by Dimitri Tischenko and Joachim Nolten.

The experience was great! Even for me, without any previous iOS or mac dev experience. Concept to App Store in ~3 days.

Updates &amp; Support
We are focusing on polishing the existing features as well as fixing the occasional minor bugs reported so far. Our objective right now is to make sure RubyMotion works greatly for every customer. We&#8217;ll introduce more features a bit later.
Having attracted so many customers so quickly, we are currently dealing with a few growing pains, particularly when it comes to scaling our in-house support platform. We are evaluating other support solutions at the moment. We apologize if you haven&#8217;t heard back from us in a while and invite you to send us an email directly at support@rubymotion.com.
Early Bird Discount
If you or someone you know wants to purchase RubyMotion and take advantage of the Early Bird Discount (25% off) you need to hurry up and buy it. The Early Bird Discount ends Monday, June 4th.


]]></description>
      <pubDate>Fri, 01 Jun 2012 11:41:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2012/06/01/community-open-source-updates.html</guid>
      <content:encoded><![CDATA[<p><strong>Community</strong></p>
<p>We are simply amazed by how quickly a community has formed around <a href="http://rubymotion.com">RubyMotion</a> since the very first day it was released.</p>
<p>RubyMotion is about to turn one month old and there are already <a href="http://rubymotionapps.com/">more than 100 projects</a> on GitHub, including sample projects, DSL libraries and support for various text editors. A big <em>Thank You</em> to you guys!</p>
<p><strong>Open Source</strong></p>
<p>After much thought and deliberation, we decided to open parts of RubyMotion. We believe that this will make it even easier for the community to contribute to and extend the RubyMotion platform, leading to a better RubyMotion for everyone.</p>
<p>Today, we are opening the &#8220;lib&#8221; directory of RubyMotion, which contains the build system, project Rakefile, the configuration object and also the project vendoring system. Check out the <a href="http://github.com/HipByte/RubyMotion">HipByte/RubyMotion</a> repository.</p>
<p>We are also releasing the Developer Center documentation under a Creative Commons license. It contains the guides and articles. We will be adding new articles soon. Check out the <a href="http://github.com/HipByte/RubyMotionDocumentation">HipByte/RubyMotionDocumentation</a> repository.</p>
<p><strong>App Store</strong></p>
<p>Since the last post there has been 3 more RubyMotion apps in the App Store!</p>
<p><a href="http://itunes.apple.com/be/app/birdemia/id525272295?mt=8">Birdemia</a> is a simple video game that features attacking birds. Explosions included. Made by <a href="https://twitter.com/#!/alexeypro/">Alexey Prohorenko</a>. Source code available on <a href="https://github.com/alexeypro/birdemia">GitHub</a>.<span></span></p>
<blockquote>
<p>Got my app out of the door with RubyMotion in just 2-3 hours. Went through approval very smoothly, no problems or concerns at all, so thumbs up for #rubymotion.</p>
</blockquote>
<p><a href="http://itunes.apple.com/app/greta-sans-type-system/id527718337">Greta Sans</a> explores the Greta Sans typeface through an intuitive interface. The app includes HTML5 code. Made by <a href="https://twitter.com/#!/thijs/">Thijs van der Vossen</a>.</p>
<p><a href="http://itunes.apple.com/us/app/zac/id529259065?mt=8">ZAC</a> is a sport app (Dutch only). Made by <a href="https://twitter.com/timidri">Dimitri Tischenko</a> and <a href="https://twitter.com/stiller">Joachim Nolten</a>.</p>
<blockquote>
<p>The experience was great! Even for me, without any previous iOS or mac dev experience. Concept to App Store in ~3 days.</p>
</blockquote>
<p><strong>Updates &amp; Support</strong></p>
<p>We are focusing on polishing the existing features as well as fixing the occasional minor bugs reported so far. Our objective right now is to make sure RubyMotion works greatly for every customer. We&#8217;ll introduce more features a bit later.</p>
<p>Having attracted so many customers so quickly, we are currently dealing with a few growing pains, particularly when it comes to scaling our in-house support platform. We are evaluating other support solutions at the moment. We apologize if you haven&#8217;t heard back from us in a while and invite you to send us an email directly at <a href="mailto:support@rubymotion.com" target="_blank">support@rubymotion.com</a>.</p>
<p><strong>Early Bird Discount</strong></p>
<p>If you or someone you know wants to purchase RubyMotion and take advantage of the Early Bird Discount (25% off) you need to <a href="https://sites.fastspring.com/hipbyte/instant/rubymotion">hurry up and buy it</a>. The Early Bird Discount ends Monday, June 4th.</p>
]]></content:encoded>
      <dc:date>2012-06-01T11:41:00+02:00</dc:date>
    </item>
    <item>
      <title>App Store Updates Newsletter</title>
      <link>http://www.rubymotion.com/news/2012/05/15/app-store-updates-newsletter.html</link>
      <description><![CDATA[An App in the App Store
Mustachio, a RubyMotion app, is now available in the App Store. The app is free and the source code is available on the HipByte/Mustachio repository on GitHub.
Mustachio is an improved version of the Mustache sample code. Improvements have been contributed by professional gesticulator Eloy Duran of Fingertips (these guys are amazing!).
As you can see this is a pretty basic app. Its sole purpose was to demonstrate that RubyMotion apps can be successfully delivered to the App Store. Okay, we also had a bit of fun writing and using it!
Software Update
RubyMotion 1.4 is available. Besides bug fixes, this update improves the build system to handle the compilation of Interface Builder Storyboard files and Core Data model files.
Due to the demand, it also adds support for the iOS 4.3 SDK and introduces a way to start the simulator in Retina mode.
We received a significant number of bug reports through support tickets. We will keep addressing them in further software updates.
Weekly Newsletter
RubyMotion Weekly is a free weekly email digest of RubyMotion news, tutorials and articles curated by Rob Zolkos.
Check it out if you want to keep up with everything RubyMotion-related!


]]></description>
      <pubDate>Tue, 15 May 2012 07:44:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2012/05/15/app-store-updates-newsletter.html</guid>
      <content:encoded><![CDATA[<p><strong>An App in the App Store</strong></p>
<p><a href="http://itunes.apple.com/us/app/mustachio/id525324802?mt=8">Mustachio</a>, a RubyMotion app, is now available in the App Store. The app is free and the source code is available on the <a href="https://github.com/HipByte/Mustachio">HipByte/Mustachio</a> repository on GitHub.</p>
<p>Mustachio is an improved version of the Mustache sample code. Improvements have been contributed by professional gesticulator <a href="https://twitter.com/#!/alloy">Eloy Duran</a> of <a href="http://www.fngtps.com/">Fingertips</a> (these guys are amazing!).</p>
<p>As you can see this is a pretty basic app. Its sole purpose was to demonstrate that RubyMotion apps can be successfully delivered to the App Store. Okay, we also had a bit of fun writing and using it!</p>
<p><strong>Software Update</strong></p>
<p>RubyMotion 1.4 is available. Besides bug fixes, this update improves the build system to handle the compilation of Interface Builder Storyboard files and Core Data model files.</p>
<p>Due to the demand, it also adds support for the iOS 4.3 SDK and introduces a way to start the simulator in Retina mode.</p>
<p>We received a significant number of bug reports through support tickets. We will keep addressing them in further software updates.</p>
<p><strong>Weekly Newsletter<br/></strong></p>
<p><a href="http://rubymotionweekly.com">RubyMotion Weekly</a> is a free weekly email digest of RubyMotion news, tutorials and articles curated by <a href="http://twitter.com/#%21/RobZolkos">Rob Zolkos</a>.</p>
<p>Check it out if you want to keep up with everything RubyMotion-related!</p>
]]></content:encoded>
      <dc:date>2012-05-15T07:44:00+02:00</dc:date>
    </item>
    <item>
      <title>What A Week</title>
      <link>http://www.rubymotion.com/news/2012/05/10/what-a-week.html</link>
      <description><![CDATA[It has been exactly a week since RubyMotion was released to the wild and so many things happened that we had to cover this in a blog post.We have been overwhelmed by the success of our launch and the wonderful community that has so immediately formed around RubyMotion.The CommunityAs of today there are about 55 RubyMotion-related repositories on GitHub, all contributed by RubyMotion users.There are code samples demonstrating a particular feature or framework; GLKit/OpenGL, Facebook, Parse, cocos2d and many more.Users have been working on abstractions for CoreData, UIKit and more.There is also preliminary support (including code-completion) for Redcar, TextMate and Vim.The folks at RailsFactory are doing a great job at tracking everything RubyMotion-related.Software UpdatesWe uploaded 3 software updates to deal with early bugs. A 4th one will be coming before the end of the week.Feature wise, RubyMotion is now able to handle Interface Builder resource files, a functionality that has often been requested.Educational LicensesWe have had many inquiries for educational licenses. We are extremely excited that students are being drawn to RubyMotion.If you sent us a request for an educational license, please accept our apologies for the late response. We will start contacting you early next week. Your emails have not been lost!Maintenance Renewal FeeAs specified in our website, RubyMotion comes with one year of free software updates and access to the support ticket system.After that year, customers who want to keep receiving updates or have support will need to renew the maintenance program.We had not specified what the yearly maintenance program will cost. The current plan is to have the maintenance program be priced at half the regular cost of the software license+support.  With the current (full) cost of $199 the fee for next year will be $99.Early Bird DiscountCurrently RubyMotion can be purchased at a 25% discount. We will keep the discount for 3 more weeks. We will communicate on twitter a few days before the discount ends.


]]></description>
      <pubDate>Thu, 10 May 2012 13:30:00 +0200</pubDate>
      <guid>http://www.rubymotion.com/news/2012/05/10/what-a-week.html</guid>
      <content:encoded><![CDATA[<p>It has been exactly a week since RubyMotion was released to the wild and so many things happened that we had to cover this in a blog post.<br/><br/>We have been overwhelmed by the success of our launch and the wonderful community that has so immediately formed around RubyMotion.<br/><br/><strong>The Community</strong><br/><br/>As of today there are about 55 RubyMotion-related repositories on GitHub, all contributed by RubyMotion users.<br/><br/>There are code samples demonstrating a particular feature or framework; <a href="https://github.com/ps2/MotionGL">GLKit/OpenGL</a>, <a href="https://github.com/aaronfeng/facebook-auth-ruby-motion-example">Facebook</a>, <a href="https://github.com/adelevie/ParseModel">Parse</a>, <a href="https://github.com/anydiem/cocosmotion">cocos2d</a> and many more.<br/><br/>Users have been working on abstractions for <a href="https://github.com/mattgreen/spry">CoreData</a>, <a href="http://malkomalko.github.com/motion-layouts/">UIKit</a> and more.<br/><br/>There is also preliminary support (including code-completion) for <a href="https://github.com/kattrali/redcar-rubymotion">Redcar</a>, <a href="https://github.com/libin/RubyMotion.tmbundle">TextMate</a> and <a href="https://gist.github.com/2652913">Vim</a>.<br/><br/>The folks at RailsFactory are doing a great job at tracking <a href="https://github.com/railsfactory/rubymotion-learn/blob/master/projects.md">everything RubyMotion-related</a>.<br/><br/><strong>Software Updates</strong><br/><br/>We uploaded 3 software updates to deal with early bugs. A 4th one will be coming before the end of the week.<br/><br/>Feature wise, RubyMotion is now able to handle Interface Builder resource files, a functionality that has often been requested.<br/><br/><strong>Educational Licenses</strong><br/><br/>We have had many inquiries for educational licenses. We are extremely excited that students are being drawn to RubyMotion.<br/><br/>If you sent us a request for an educational license, please accept our apologies for the late response. We will start contacting you early next week. Your emails have not been lost!<br/><br/><strong>Maintenance Renewal Fee</strong><br/><br/>As specified in our website, RubyMotion comes with one year of free software updates and access to the support ticket system.<br/><br/>After that year, customers who want to keep receiving updates or have support will need to renew the maintenance program.<br/><br/>We had not specified what the yearly maintenance program will cost. The current plan is to have the maintenance program be priced at half the regular cost of the software license+support.  With the current (full) cost of $199 the fee for next year will be $99.<br/><br/><strong>Early Bird Discount</strong><br/><br/>Currently RubyMotion can be purchased at a <a href="http://sites.fastspring.com/hipbyte/product/rubymotion">25% discount</a>. We will keep the discount for 3 more weeks. We will communicate on twitter a few days before the discount ends.</p>
]]></content:encoded>
      <dc:date>2012-05-10T13:30:00+02:00</dc:date>
    </item>
    <dc:date>2015-12-06T04:06:31+01:00</dc:date>
  </channel>
</rss>