Comparativo das IDEs Visual Studio / Eclipse/XCode para o Desenvolvimento de Aplicações Móveis

Essa semana nosso blog falará sobre as IDEs (Integrated Development Enviroment) para o desenvolvimento para smartphones. Vamos comparar o Visual Studio 2010 (VS2010) da Microsoft tanto para o desenvolvimento de aplicações Windows Mobile (WMobile) quanto de Windows Phone (WPhone), o Eclipse para desenvolvimento Android e XCode para IPhone.

Vale salientar que o objetivo não é comparar as IDEs de forma genérica, mas sim compará-las no desenvolvimento de APLICAÇÕES MÓVEIS.

Para facilitar o comparativo, dividimos a avaliação das IDEs em 7 tópicos:

1-Construtor de interface: Facilidade de construir as interfaces e associar código a ela;

2-Controle de versão: Opções de controle de versão e a eficiência deles integrados na ferramenta;

3-Editor de código: Avalia a facilidade de navegação entre os objetos e componentes, teclas de atalho, autocompletar, etc;

4-Compilador: Gerenciamento das referências e mensagens de compilação;

5-Depurador: Eficiência na depuração;

6-Emuladores: Avaliação dos emuladores/simuladores de cada IDE;

7-Organização dos projetos: Descreve como a IDE trabalha com diversos projetos.

Construtor de interface

O WMobile é o único que mantém o desenvolvimento da interface no estilo “form like”/drag&drop introduzido no início da década de 90 pelo MS Visual Basic. No WPhone é possível arrastar os componentes porém o ajuste é manual – “web like”.

Nesse tópico de construção de interface, o Android é parecido com WPhone com a diferença que a associação de código a eventos é manual e o preview do eclipse geralmente não reflete a realidade.

Já no XCode a construção da interface gráfica é fácil e otimizada. No entanto, a ferramenta da Apple peca na complexidade de associar os objetos visuais ao código.

Controle de versão

A Microsoft oferece uma excelente ferramenta de controle de versão para o VS2010 que é o TFS (Team Foundation Server). Porém, como quase tudo no mundo MS, é uma ferramenta paga. Na Mobiltec não utilizamos o VS com plugins de SVN, mas segundo relatos, não me pareceu que a convivência entre as duas ferramentas seja muito harmônica.

O destaque NEGATIVO nessa seção é sem dúvida o XCode! Simplesmente não funciona o SVN client nativo da ferramenta. Perde a conexão; updates de fontes não funcionam – e pior – não geram nenhum alerta de erro, causando perda de código.

Editor de código

            A melhor IDE para edição de código é o Eclipse. Possui teclas de atalho mais fáceis e intuitivas que o VS. Sugestão de autocomplete de variáveis contextualizada por tipo, refactoring e outras facilidades.

O XCode se destaca pela análise sintática e semântica em tempo de digitação e pelo autocomplete disponível para código javascript.

Compilador

No Eclipse o gerenciamento das referências pode ser feito da forma clássica do java ou pelo Maven. Nos dois casos o gerenciamento é mais complexo e “chato” quando comparado ao VS2010. Já o XCode está ainda mais aquém nesse ponto. É necessário colocar o caminho dos headers, da mesma forma como é feito há 20 anos nos códigos C. O compilador do XCode só gera warnings e permite executar a aplicação mesmo com erros de nome de métodos, por exemplo. Essa característica é controversa entre nossos desenvolvedores, uns acham uma vantagem outros não.

 

Depurador

O Eclipse tem uma distinção entre rodar e depurar. Esse detalhe muitas vezes atrapalha. O desenvolvedor está testando a aplicação e decide colocar um breakpoint e nesse momento repara que executou no modo “rodar” e não “depurar” – stop and run. Também tem algumas variáveis que não são resolvidas pelo watch.

O depurador do XCode só é menos vergonhoso que o controle de versão. Utilza o GDB que é ruim. Freqüentemente ocorre erro no depurador sem mostrar nenhuma exceção. Watch tem problemas e existem breakpoints fantasmas ou highlander, aquele break que excluímos, mas o depurador insiste em continuar parando ali.

Emuladores

            O emulador do WPhone, a partir do SDK 7.1 ficou bastante pesado, sendo que alguns componentes não rodam em máquinas sem uma boa interface gráfica. O emulador do Android é lento a partir das versões 3.0 e 4.0 do Android. O XCode tem um simulador, que é diferente do emulador, pois gera código nativo para hardware que será testado. O problema dessa abordagem é que o teste no simulador fica pouco fiel a realidade principalmente com relação ao desempenho. Já ocorreu na Mobiltec, do desenvolvedor só descobrir que uma determinada funcionalidade estava lenta quando foi testar no dispositivo, no simulador estava ok. Para conseguir rodar a aplicação no dispositivo, além de ter a disponibilidade do dispositivo, é necessário pagar a licença anual de desenvolvedor da Apple de US$ 99,00.

Organização de projetos

O XCode se destaca por conseguir alterar o contexto entre projetos nas mesmas janelas já abertas. Não necessita abrir uma nova instância do XCode. Já o Eclipse vai ficando pesado à medida que vai adicionando novos projetos ao Workspace. O VS trabalha com conceito de solução e projeto, é possível ter mais de uma solução para o mesmo projeto.

Abaixo segue uma tabela sumarizada com as características de cada ferramenta:

 

Visual Studio 2010 for winmobile Visual Studio 2010 for winphone Java Eclipse for Android Xcode for iphone
Construtor de Interface “Form like”, drag & drop manual (“web like”) manual (web like); preview não é preciso; associação de eventos manual; Construção da interface fácil e otimizada; associação de objetos visuais ao código é manual e complexa
Controle de versão TFS 2010 TFS 2010 SVN/CVS/gitHub SVN (builtin) – sincronização de fontes não funciona; updates não  atualiza e não gera erro
Editor não  tem a opção de intelisense para javascript nativo; algumas teclas de atalho são complexas: atalho para comentário (ctrl +K+C) não  tem a opção de intelisense para javascript nativo;algumas teclas de atalho são complexas: atalho para comentário (ctrl +K+C) tecla atalho para abrir um recurso;
Import automático de pacotes;
Atalho para definição: ctrl+click mais eficiente que F12 do VS;
sugestão no preenchimento de parâmetros;
Tem a opção de intelisense para javascript; detecta erros em tempo de digitação;
Compilador gerência eficiente e simples das dependências e referências gerência eficiente e simples das dependências e referências Gerenciamento das dependências pode ser feita da forma clássica ou pelo Maven; Gerenciamento é mais complexo e chato que o VS2010 Gerenciamento de referências complexo; necessário colocar o caminho dos headers; mesmo conceito de aplicações C++; em tempo de compilação não gera erro; somente warnings;
Depurador simples e eficiente simples e eficiente distinção entre rodar e depurar; watch das variáveis não é muito eficiente GDB – muito ruim. Dá erro e não diz o que aconteceu; watch não funciona; breakpoints fantasmas
Emuladores eficiente Pesado a partir do SDK 7.1; Dependência de uma boa placa gráfica; pesado, principalmente nas versões mais recentes (3.0 e 4.0) mais eficiente por ser um simulador, mas é menos fiel a realidade do HW destino; para rodar no aparelho precisa pagar a licença anual de US$ 99,00
Organização dos projetos Organização em solução e projetos é mais versátil Organização em solução e projetos é mais versátil Organização de projetos em workspace. Workspace com muitos projetos  tornam-se pesados. fácil de trabalhar com múltiplos projetos. Altera o contexto dos projetos na mesma instância do XCode

 

 

Abaixo uma tabela de classificação das IDEs feita por mim, com base nas opiniões coletadas com a equipe de desenvolvedores da Mobiltec.

1º Lugar

2º Lugar

3º Lugar

Construtor de Interface

VS2010- WMobile

VS2010- WPhone

Eclipse

Controle de versão

Eclipse

VS2010

*

Editor

Eclipse

VS2010

XCode

Compilador

VS2010

Eclipse

XCode

Depurador

VS2010

Eclipse

XCode

Emuladores

VS2010- WMobile

Eclipse

VS2010- WPhone

Organização dos projetos

XCode

VS2010

Eclipse

* XCode não merece o 3º lugar neste tópico

Conclusões:

Precisa? Cada um que tire as suas.

Abraço.

Escrito por Ricardo Silveira

Serialização XML em Dispositivos Móveis (Android)

Durante a realização de um projeto na Mobiltec, nos deparamos com o seguinte desafio: serializar (XML) um objeto em .NET e deserializar o mesmo objeto em um dispositivo Android (Java). No .NET Framework (C#) a operação de serialização é bem trivial, basta executar o seguinte código exemplo:

System.Xml.XmlSerializer xmlSr = new XmlSerializer(typeof(Model));
Model model = new Model();
xmlSr.Serialize(stream, model);

O processo de deserialização é igualmente fácil:

Model udtModel = (Model)xmlSr.Deserialize(stream);

Por exemplo, a seguinte classe Model

using System.Collections.Generic;
public class Model
{
     public bool IsValid { get; set; }
     public int Identifier { get; set; }
     public string SomeText { get; set; }
}

irá gerar esse XML:

<?xml version="1.0" encoding="utf-8"?>
<Model xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <IsValid>false</IsValid>
  <Identifier>134</Identifier>
  <SomeText>text</SomeText>
</Model>

Algumas observações importantes na serialização de objetos em .NET:

  • Não é necessário nenhuma preparação inicial do objeto a ser serializado (Model)
  • Não é necessário marcar a classe como serializável (modificador [Serializable])
  • Todos os atributos que serão serializados devem ser públicos (a classe Model inclusive), senão o método Serialize gera uma exceção (“XMLSerializationTest.Model é inacessível por causa do seu nível de proteção. Apenas tipos públicos podem ser processados.”)

No Android não temos nada que o próprio Framework do Java tenha que seja tão simples quanto o .NET, apenas o básico de leitura de XML está presente. Entretanto, em outros projetos desenvolvidos na Mobiltec utilizando a linguagem Java (mais especificamente J2EE), observamos que existiam algumas bibliotecas que auxiliam na serialização de objetos, similar ao .NET, como o JAXB. Conforme vimos no post sobre desenvolvimento em Android, não é qualquer código em Java que irá funcionar no Android. A bibliteca JAXB poderia ser utilizada, porém estávamos em busca de algo mais leve e encontramos a excelente biblioteca Simple. O jar da biblioteca JAXB tem aproximadamente 10,4 Mb, já a biblioteca Simple tem apenas 360 Kb. Para deserializar o XML gerado anteriormente, utilizando a biblioteca Simple, basta gerar o seguinte código:

import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;

Serializer serializer = new Persister();
Model model = serializer.read(Model.class, source);

Observações importantes da biblioteca Simple:

  • Os atributos da classe são utilizados para serializar/deserializar o objeto
  • Ao recriar a classe Model em Java, esta deve ter atributos com o mesmo nome das propriedades do .NET para que a correspondência possa ser feita
  • O Simple é case sensitive, ou seja, a seguinte classe deve ser definida para que a importação exemplificada neste post funcione:
    import org.simpleframework.xml.Default;
    
    @Default
    public class Model {
    
    	private boolean IsValid;
    	private int Identifier;
    	private String SomeText;
    
            //metodos get/set omitidos
    }

Com este dois exemplos observamos uma certa dependência entre as classes Model definidas. Como uma dica de utilização podemos realizar algumas marcações nas duas classes de forma a padronizar o XML gerado, facilitando a importação em qualquer outra plataforma. Em .NET podemos fazer o seguinte com a classe Model:

[XmlRootAttribute("model")]
public class Model
{
    [XmlElement("valid")]
    public bool IsValid { get; set; }

    [XmlElement("identifier")]
    public int Identifier { get; set; }

    [XmlElement("someText")]
    public string SomeText { get; set; }
}

A biblioteca Simple também permite as mesmas marcações:

@Root(name="model")
public class Model {

	@Element(name="valid")
	private boolean valid;

	@Element(name="identifier")
	private int identifier;

	@Element(name="someText")
	private String someText;

        //metodos get/set omitidos propositalmente
}

Era isso por hoje e aguardem em breve mais um post com mais dicas sobre serialização utilizando a biblioteca Simple. Caso tenha ficado curioso sobre a utilização do JAXB, este site mostra uma comparação entre Simple e o JAXB.

Escrito por Paulo Sérgio Morandi

O Despertar do MDM (Mobile Device Management) no Brasil

Mesmo com certo atraso devido às restrições de importações até então existentes, entre o final da década de 80 e o início da década de 90, os escritórios das empresas brasileiras começaram a serem inundados por PC’s desktops, inicialmente isolados e depois conectados através de redes locais. Logo se criou um grande problema, cuja solução não foi simples e demandou muito tempo e investimentos: a necessidade de gerenciamento desses equipamentos. Num primeiro momento cada usuário fazia o que bem entendia com o seu PC: instalava e desinstalava softwares (muitas vezes piratas); não havia proteção dos programas nem dos dados armazenados; utilizava programas muitas vezes desatualizados; ocorria contaminação por vírus de toda a rede por culpa de um usuário ter instalado um programa pirata; ocorriam perdas de trabalhos por falta de uma política de backup adequada; etc. Logo esse problema foi ainda agravado com o surgimento dos primeiros laptops, que agregaram a esse contexto a dimensão da mobilidade, porém com as severas limitações da tecnologia de comunicação então disponível. Enfim, tudo era permitido e possível de acontecer nessas redes. Essa insegurança, adicionada ao custo elevado dos equipamentos, ajudava a inibir e retardar o avanço dos processos de automação em muitas empresas, principalmente nas médias e pequenas.

Esse quadro começou a mudar quando as empresas passaram a dispor de sistemas, inicialmente complexos e caros, para fazer o gerenciamento e proteção de suas redes de PC’s desktops e notebooks. Além de uma variedade de softwares especializados, também passaram a surgir no mercado muitas empresas oferecendo esse gerenciamento como serviço, o que facilitou bastante a adoção dessa tecnologia por todo tipo e porte de organização.

Agora, estamos perante a um novo desafio, com as mesmas características, porém bem mais complexo. Os mesmos problemas que tivemos no passado, quando da popularização dos desktops, passaram agora a existir com a atual explosão da demanda dos smartphones e tablets.  O agravante é que hoje esses dispositivos móveis, embora pequenos, são bem mais poderosos que os PC’s de então e, portanto, capazes de gerar grandes estragos nas políticas de segurança das empresas.  O problema é ainda agravado pelo fato de que quase todos os funcionários carregam no bolso (…ou na bolsa) um ou mais dispositivos de sua propriedade, ou fornecido pela empresa, capazes de conectarem-se nas redes corporativas onde quer que estejam, através de redes Wi-Fi ou 3G (e…logo teremos a 4G, ainda muito mais rápida e eficiente).  Os recursos desses equipamentos permitem ao usuário transportar imensas quantidades de dados e executar programas muito complexos, totalmente fora do controle das suas organizações. Num primeiro momento o problema não era crítico porque as empresas só permitiam o acesso às suas redes dos dispositivos de sua propriedade, utilizados pelos seus funcionários para atividades específicas de automação ou para a recepção ou transmissão de emails. Entretanto, a popularização dos smartphones está forçando a quebra dessas restrições, tanto que já existe até um nome para isso: BYOD, que significa: “Bring Your Own Device”, ou seja, que estimula os funcionários a utilizarem seus próprios dispositivos pessoais também para as suas atividades profissionais.  O argumento é de que o indivíduo não mais precisará carregar dois dispositivos, um para seu uso pessoal e outro para uso profissional. A recente disseminação do uso de tablets reforça ainda mais esse argumento, pois, tratando-se de um equipamento bem maior, faria ainda menos sentido carregar mais de um.

A solução para esses problemas é a adoção pelas empresas da tecnologia chamada de MDM, ou Mobile Device Management. Os sistemas de MDM permitem às empresas fazerem, em tempo real, a completa gestão dos dispositivos que fazem acesso à sua rede e aos seus dados corporativos, assim como permite também manter a proteção desses dados quando armazenados nos dispositivos. Utilizando um sistema MDM, as empresas terão condições de se assegurar que seus dados estarão protegidos em qualquer situação, mesmo no caso de extravio ou roubo do dispositivo, assim como estabelecer restrições de uso e acesso, particularmente quando o dispositivo for de sua propriedade.

As principais funcionalidades de um sistema MDM são:

- Monitoramento dos programas e processos em execução;

- Instalação, desinstalação e atualização de programas “over the air”;

- Controle do uso de bateria e memória;

- Controle da localização e rota percorrida pelo dispositivo num período de tempo;

- Controle do acesso e exigência de senhas;

- Operação remota e atualização ou remoção de arquivos;

- Controle e segurança de dados armazenados;

Agora, que o problema se tornou visível e o risco latente, as empresas brasileiras passaram realmente a se preocupar com os aspectos de gerenciamento e perceberam de que precisam adotar algum sistema de gestão dos dispositivos móveis próprios, ou dos funcionários, que acessam os seus dados, sob pena de perderem o controle sobre os mesmos. A variedade de sistemas operacionais e a multiplicidade de aplicações disponíveis para os mesmos tornam a gestão ainda mais complexa e necessária.

A MOBILTEC antecipou-se à necessidade do mercado nacional e investiu no desenvolvimento do M3 – MDM, que atende a todos os requisitos dos produtos similares ofertados no mercado internacional. O M3-MDM gerencia dispositivos que operam com Windows, Windows mobile, Android e iOS e, além disso, oferece também as funcionalidades próprias de um “mobile middleware”, e muito importantes para as empresas, tais como: sincronização de arquivos de dados, integração com sistemas corporativos, gerenciamento  de arquivos transmitidos e recebidos, gerenciamento das atividades desenvolvidas pelos usuários, obtenção de logs, traces, etc.

Escrito por Roni Silveira – Presidente da Mobiltec