Ainda a propósito do Codebits 2010, estava sentado numa mesa com o Pedro Cavaco, que estava a participar na competição de programação com um jogo para smartphones: Android e iPhone.
Estávamos a conversar sobre isso e eu não estava a ver uma forma fácil de fazer isso para duas plataformas ao mesmo tempo, o que se devia apenas a nunca ter tomado muita atenção a essa área...
O Pedro estava a usar uma ferramenta que compila para as duas plataformas ao mesmo tempo, usando a linguagem Lua. Posteriormente, não consegui encontrar essa framework, mas encontrei várias outras para o mesmo efeito.
A maior parte delas suporta apenas duas plataformas (Android e iPhone) e através do uso de um componente web view. Qualquer um dos factores isolados já é mau, mas seria suportável. Em conjunto, não serve para mim.
Acabei por ficar com, apenas, duas das frameworks que encontrei, a Rhomobile Rhodes e a Appcelerator Titanium, para testar.
A Rhodes suporta um conjunto muito alargado de dispositivos móveis: Android, iPhone, Blackberry, Windows Mobile, Symbian e até dispositivos J2ME (dumb phones normais), em certas condições.
A linguagem usada é Ruby, o que também me deixou ligeiramente desconfortável (nunca programei, sequer, um Hello, World nela), com as views em HTML, CSS e Javascript. A vantagem de suporte para tantos dispositivos acabou por suplantar o inconveniente de aprender uma linguagem nova.
No entanto, acabei por descobrir que, e apesar da Rhomobile publicitar aplicações nativas, é usado um web view para as views e incluído um mini-interpretador Ruby. Isto não é verdadeiramente nativo.
Acabei por não ter que aprender Ruby, porque a seguinte demonstração foi feita apenas criando uma nova aplicação. Este foi outro ponto que me desiludiu - não existe uma interface gráfica para o Rhodes. Todas as operações, desde a criação de uma nova aplicação até à compilação da mesma, são feitas por linha de comandos. Não é que seja difícil; só não é prático.
A Titanium apenas suporta Android e iPhone, estando o suporte para Blackberry em fase beta. Além disso, suporta também os três sistemas desktop, Windows, Linux e MacOS, o que é sempre um bónus bem-vindo, apesar da existência do Qt.
A linguagem usada do lado mobile é Javascript, o que é óptimo, com suporte a HTML5 e CSS3 para a apresentação. No entanto, o uso de apresentação declarativa é quase nulo, porquanto a Titanium disponibiliza a sua API específica para componentes nativos invocados através de Javascript. Isto pode levar a crer que é mais outra como a Rhodes, em que tudo corre dentro de uma web view, mas não é: a Titanium transforma o código em verdadeiras aplicações nativas, usando os respectivos SDKs. Como é lógico, não invalida que se use mesmo uma web view para aceder à web ou para outro objectivo específico.
Apesar de também não disponibilizar um IDE, ao menos as operações relacionadas com a framework – criar novas aplicações, mudar configurações gerais, testar nos simuladores – são feitas numa interface própria (o Titanium Developer). Como ambiente de desenvolvimento, acabei por usar o meu fiel Netbeans.
Vou acabar por usar a Appcelerator Titanium para as minhas pequenas experiências. O uso de linguagens com as quais estou à vontade, o processo de trabalho mais linear, o pequeno bónus do desktop (onde posso usar, entre outras, a linguagem PHP) e o look’n’feel verdadeiramente nativo venceram o combate. A falta do Windows Mobile é um ligeiro incómodo, suplantado pelo já citado Qt, e o Blackberry, que acaba por ser mais preocupante, está a caminho.