« HE:labs
HE:labs

Rubymotion - Desenvolvimento de apps nativos para iOS com Ruby

Postado por Francisco Martins em 09/10/2013

Há quase dois anos, comecei a me interessar pelo desenvolvimento de aplicativos mobile. Na época, comecei com Android, mas graças à influência de alguém que considero um mentor, acabei despertando o interesse pelo desenvolvimento para iOS e me focando nisso.

No início, minha maior dificuldade era me adaptar ao Objective-c, mas depois de alguns meses, consegui superar essa dificuldade e me familiarizei com a plataforma. No fim, a linguagem já não era mais um problema, mas eu ainda não era tão produtivo quanto gostaria, principalmente em situações atípicas.

Pouco antes de optar por focar em apps nativos, pesquisei sobre alternativas, como Phonegap, Sencha Touch e vi até o Delphi para iOS graças a alguns colegas de trabalho que estavam interessados em começar também. A princípio, eu era radicalmente contra esse tipo de abordagem. Para mim, não fazia sentido sacrificar o conforto que o usuário teria ao usar um app notoriamente mais performático só para facilitar a vida do desenvolvedor. Quer desenvolver para Android? Aprenda java. Para iOS? Objective-c. Simples assim.

Hoje eu não tenho mais uma opinião tão radical. Até fiz experimentos com Phonegap depois de assistir um Café com Dev com o Diego Dukão (veja o post sobre). Webapps são notoriamente menos performáticos, mas também são bem mais baratos porque são mais fáceis de se fazer e consomem menos tempo. Então, penso que há casos em que podem ser uma alternativa válida.

Há alguns meses, ouvi falar do RubyMotion e mês passado, na Rubyconf, conheci o Laurent Sansonetti - ex funcionário da Apple e criador do framework. Fiquei surpreso com o poder da ferramenta. Ela não só torna possível desenvolver apps nativos para iOS com Ruby, como também fornece uma série de facilidades para o desenvolvedor, como por exemplo o BubbleWrap - coleção de helpers e wrappers que abstraem o Cocoa Touch e AppKit com a proposta de deixar as coisas mais "ruby-like". Em teoria, pelo menos, parece unir o melhor dos dois mundos: a performance do app nativo com a produtividade do Ruby. Yay!

Comprei a licença (199 dólares) e comecei a fazer experimentos. Tem valido a pena.

O trabalho com Rubymotion é baseado no terminal, então, pra quem já usa Rails, é bem tranquilo. Para criar um projeto, por exemplo:

1 $ motion create projeto

E para executar no simulador:

1 $ rake

Se quiser rodar direto no dispositivo (necessário ter uma licença ios developer):

1 $ rake device

O código gerado é o mais simples possível. De importante temos um AppDelegate limpo, um Gemfile (é possível criar gems pro iOS e já têm umas bem legais) e um Rakefile onde você vai colocar algumas configurações do aplicativo. Temos também um arquivo exemplo de testes e uma ferramenta de BDD embutida.

O terminal interativo é bem legal. É quase ao "rails console", com a diferença de que tudo feito nele afeta o app no simulador. Vamos fazer um "Hello World" via terminal pra mostrar como funciona. Nele, abra o projeto recém criado e execute:

1 $ rake

O simulador do iOS vai abrir com uma tela preta.

image

Volte ao terminal e execute:

1 $ alert = UIAlertView.alloc.init
2 $ alert.message = "Hello World"
3 $ alert.addButtonWithTitle "Ok"
4 $ alert.show

E um alerta é exibido. :)

image

Agora, para o mesmo exemplo usando o BubbleWrap, adicione a gem "bubble-wrap" no gem file e execute o "bundle install".

1 gem 'bubble-wrap'

Depois, no rakefile adicione:

1 require 'bubble-wrap/core'

Agora execute o projeto:

1 $ rake

E no terminal, execute:

1 $ App.alert "Hello World II"

image

Fácil, não? Achei bem maneiro alterar o app no terminal interativo sem precisar compilar de novo.

Estou trabalhando em um projeto pessoal com Rubymotion e nos próximos dias pretendo contar mais sobre a experiência e mostrar alguns exemplos.

Outra coisa bacana é que o RubyMotion possibilitou a crição de gems como a ProMotion, que tem uma sintaxe bem mais legal - dica do Pedro Nascimento. Meu desafio seguinte será experimentar essa gem ou similar para formar minha opinião a respeito.

E aí, já conhecia o RubyMotion?

Compartilhe

Sabia que nosso blog agora está no Medium? Confira Aqui!