Estou fazendo um curso de desenvolvimento para Android / iPhone e passamos 8 semanas com Titanium (não em tempo integral) (a versão era Titanium 1.4.2 e o tempo era em novembro de 2010). Aqui está a minha experiência.
segmentação dupla para iPhone Android
Embora os guias da API afirmem que a funcionalidade está disponível para Android e iPhone, esse não é o caso. Muitas das coisas simplesmente não funcionam em uma das plataformas. Algumas coisas funcionam de maneira diferente.
Muitas pessoas da classe fizeram aplicativos para iPhone e não conseguem fazê-los funcionar no Android sem grandes reescritas. Desenvolvi um aplicativo simples para crianças chamado Animap (consulte Android Market / Appstore na Suécia) e comecei a desenvolver no Windows. Quando o destino do Android estava funcionando, abri o projeto no OS X. Ele não mostra nenhum material de compilação para o iPhone, apenas para o Android. Você precisa iniciar um projeto de destino duplo no OS X. (Ok, copiei os arquivos relevantes para um novo projeto). Próximo problema - as animações não funcionam no iPhone (elas funcionam no Android). Os eventos de rolagem não funcionam da mesma forma no iPhone. (ou seja, no Android, você obtém o evento untouch quando o usuário para de rolar e libera o dedo da tela, isso não acontece no iPhone).
Como isso não é mencionado em algum lugar, você basicamente precisa executar a programação de tentativa e erro na primeira plataforma e depois na outra plataforma. Por tentativa e erro, quero dizer que levará cerca de dois dias para que um aplicativo tão simples como o Animap funcione na outra plataforma. Você também precisará ter if (android) then ... ou if (iphone) ... em todo o código ...
Download e configuração
Você deve seguir as instruções da carta. Não tente usar java de 64 bits. Ele não compila o aplicativo de demonstração KitchenSink 1.4.0. (1.3 funciona bem!) Você deve colocar os arquivos diretamente na unidade C, desde que os nomes de caminho façam com que o programa externo não receba todos os parâmetros da linha de comando se eles chegarem muito tempo. (Bom para programas pequenos) 1/3 das vezes, a cadeia de ferramentas simplesmente para e você deve pressionar 'launch' novamente. Então provavelmente funcionará ... muito pouco confiável. O simulador não será encontrado na inicialização e, em seguida, você deve simplesmente eliminar o adb.exe com Ctrl + Alt + Delete e tentar novamente.
Conexão de rede
Em uma rede wifi, você às vezes perde a conexão ao vivo e o Titanium trava em você (a interface de compilação / implantação). Se você não tem uma conexão de internet em funcionamento, ela não será iniciada, pois não poderá fazer o logon nos servidores deles.
API
CSS, HTML e jQuery é muito fácil em comparação com isso. O Titanium se parece com qualquer outra API da GUI antiga e você precisa definir algumas propriedades para cada botão / campo / etc. Errar um campo é fácil, lembrando-se de todas as propriedades que precisam ser definidas? Você o escreveu com letras maiúsculas no lugar certo? (como isso não é detectado pelo compilador, mas será visto como um erro de tempo de execução se você tiver sorte de testar essa parte)
No Titanium, as coisas simplesmente quebram quando você adiciona outra exibição em cima de um controle ou clica em outro lugar na GUI.
Documentação
Várias páginas da API carregam o símbolo do Android, mas retornarão um valor nulo quando você tentar criar o controle. Eles não estão simplesmente disponíveis na plataforma Android, apesar dos símbolos. Às vezes, o Android é mencionado para não oferecer suporte a um método específico, mas a API inteira está ausente.
Pia da cozinha
O aplicativo de demonstração. Eu mencionei que ele não será compilado se você o colocar na pasta do projeto Eclipse porque o caminho é muito longo? Deve ser colocado na sua unidade C na pasta raiz. Atualmente, uso um link simbólico (mklink / J ...)
Métodos não documentados
Você deve usar as coisas como label.setText ('Hello World') para alterar um rótulo como confiável, mas isso não está documentado.
Depuração
Titanium.API.info ('As impressões são a única maneira de depurar');
Edição
As APIs não estão disponíveis em nenhum formato bom, portanto, você não pode obter a conclusão normal do código com ajuda, etc. no Eclipse. Aptana por favor me ajude!
Hardware
Parece que o compilador / ferramentas não são multithread, portanto, um computador rápido com um disco rígido rápido é obrigatório, pois você deve executar várias tentativas e erros. Eu mencionei a documentação pobre? Você deve experimentar tudo lá, pois não pode confiar!
Algumas coisas positivas
- Código aberto
De projetos anteriores, prometi a mim mesmo nunca mais usar código fechado novamente, pois você não pode simplesmente consertar as coisas apenas jogando horas e mão de obra nele. Importante quando você está atrasado no projeto e precisa cumprir um prazo final. Este é um código aberto e eu pude ver por que a cadeia de ferramentas quebra e também a corrige.
Bugdatabase
Também está aberto. Você pode simplesmente ver que não está sozinho e fazer uma solução alternativa em vez de outras 4 horas gastas em tentativa e erro.
Comunidade
- Parece estar ativo em seus fóruns.
Insetos
- O Titanium 1.4 não é seguro para threads . Isso significa que, se você usar os threads (use a propriedade url: em uma chamada createWindow) e programar como os threads estão funcionando e enviar eventos com dados para frente e para trás, você encontrará muitas coisas muito, muito estranhas - manipuladores perdidos, perdidos janelas, muitos eventos, poucos eventos etc. etc. Isso tudo depende do tempo, colocar as linhas de código em ordem diferente pode travar ou curar seu aplicativo. A adição de uma janela em outro file.js interrompe a execução do app.js ... Isso também prejudica as estruturas de dados internas no Titanium, pois às vezes elas podem atualizar as estruturas de dados internas em paralelo, substituindo um valor alterado por outra.
Muitos dos problemas que tive com o Titanium vêm da minha experiência em sistemas em tempo real como o OSE, que oferecem suporte a centenas de threads, eventos e passagem de mensagens. Isso deve funcionar no Titanium 1.4, mas simplesmente não é confiável.
Javascript (que é novo para mim) morre silenciosamente devido a erros de tempo de execução. Isso também significa que erros pequenos e comuns, como digitar incorretamente o nome de uma variável ou ler um ponteiro nulo, não travam quando necessário, para que você possa depurá-lo. Em vez disso, partes do seu programa simplesmente param de funcionar, por exemplo, um manipulador de eventos, porque você perdeu / digitou um caractere.
Temos então bugs mais simples no Titanium, como alguns parâmetros que não funcionam nas funções (o que é bastante comum na plataforma Android).
Velocidade do ciclo de depuração de tentativa e erro Depois de executar o Titnium Developer em vários computadores, notei que o gargalo é o disco rígido. Uma unidade SSD em um laptop torna o ciclo de construção cerca de 3-5 vezes mais rápido do que em uma unidade de 4200 rpm. Em uma área de trabalho, ter unidades duplas no RAID 1 (modo de distribuição) torna a compilação cerca de 25% mais rápida do que em uma única unidade com uma CPU um pouco mais rápida e também supera o laptop da unidade SSD.
Resumo
- A partir dos comentários neste tópico, parece haver uma briga pelo número de plataformas pelas quais uma ferramenta como essa pode fornecer aplicativos. O número de API parece ser o principal ponto de venda.
Isso brilha muito quando você começa a usá-lo. Se você olhar para o rastreador de erros aberto, verá que o número de bugs continua aumentando mais rapidamente do que o número de bugs corrigidos. Isso geralmente é um sinal de que os desenvolvedores continuam adicionando mais funcionalidades, em vez de se concentrar em diminuir o número de bugs.
Como consultor tentando entregar aplicativos bastante simples para multiplataformas para um cliente - não tenho certeza se isso é realmente mais rápido do que o desenvolvimento de aplicativos nativos em duas plataformas. Isso se deve ao fato de que, quando você está em alta velocidade, é rápido com o Titanium, mas de repente você olha para baixo e se encontra em um buraco tão profundo que não sabe quantas horas devem ser gastas para uma solução alternativa. Você simplesmente não pode prometer uma certa funcionalidade por um determinado prazo / tempo / custo.
Sobre mim: Uso Python há dois anos com wxPython. (essa GUI é inconsitente, mas nunca quebra assim. Pode ser que eu não tenha entendido o modelo de encadeamento usado por Javascript e Titanium, mas não estou sozinho de acordo com os fóruns de discussão abertos, os objetos da GUI estão subitamente usando o contexto errado / não atualizando .. ???) antes disso, eu tenho experiência em programação C e ASM para dispositivos móveis.
[edit - parte adicionada com bugs e não sendo seguro para threads] [edit - agora tendo trabalhado com isso por mais de um mês, principalmente no PC, mas alguns no OS X também. Adicionado direcionamento duplo para iPhone e Android. Adicionada velocidade do ciclo de depuração de tentativa e erro.]