Je suis en cours de développement Android / iPhone et nous avons passé 8 semaines avec Titanium (pas à temps plein) (la version était Titanium 1.4.2 et le temps était vers novembre 2010). Voici mon expérience.
Double ciblage iPhone Android
Même si les guides API affirment que la fonctionnalité est disponible à la fois pour Android et iPhone, ce n'est pas le cas. La plupart des choses ne fonctionnent tout simplement pas sur l'une des plates-formes. Certaines choses fonctionnent différemment.
Beaucoup de gens dans la classe ont fait des applications iPhone, et ils ne peuvent pas les faire fonctionner sur Android sans réécriture majeure. J'ai développé une application pour enfants simple appelée Animap (voir Android Market / Appstore en Suède) et j'ai commencé à développer sous Windows. Une fois que la cible Android fonctionnait, j'ai ouvert le projet sur OS X. Il ne montre aucun élément de construction pour iPhone, juste pour Android. Vous devez démarrer un projet à double cible sous OS X. (Ok, j'ai copié les fichiers appropriés dans un nouveau projet). Problème suivant - les animations ne fonctionnent pas sur iPhone (elles fonctionnent sur Android). Les événements de défilement ne fonctionnent pas de la même manière sur l'iPhone. (Par exemple, sur Android, vous obtenez l'événement Untouch lorsque l'utilisateur arrête de faire défiler et libère son doigt de l'écran, cela ne se produit pas sur l'iPhone).
Étant donné que cela n'est pas mentionné quelque part, vous devez essentiellement faire une programmation d'essai et d'erreur sur une première plate-forme, puis sur l'autre plate-forme. Par essais et erreurs, je veux dire qu'il faudra environ deux jours pour qu'une application aussi simple qu'Animap fonctionne sur l'autre plate-forme. Vous devrez également avoir if (android) puis ... ou if (iphone) ... partout dans votre code ...
Téléchargement et configuration
Vous devez suivre les instructions à la lettre. N'essayez pas d'utiliser Java 64 bits. Il ne compilera pas l'application de démonstration de KitchenSink 1.4.0. (1.3 fonctionne bien!) Vous devez placer les fichiers directement sur le lecteur C car les chemins d'accès longs empêcheront le programme externe de recevoir tous les paramètres de ligne de commande s'ils deviennent trop longs. (Bien pour les petits programmes cependant) 1/3 des fois, la chaîne d'outils s'arrête simplement et vous devez appuyer à nouveau sur «lancer». Ensuite, cela fonctionnera probablement ... très peu fiable. Le simulateur ne sera pas trouvé au démarrage et vous devez simplement tuer adb.exe avec Ctrl + Alt + Suppr et réessayer.
Connexion réseau
Sur un réseau wifi, vous perdez parfois la connexion en direct et Titanium se bloque sur vous (l'interface de compilation / déploiement) Si vous n'avez pas de connexion Internet fonctionnelle, elle ne démarre pas car elle ne peut pas vous connecter à leurs serveurs.
API
CSS, HTML et jQuery est un jeu d'enfant par rapport à cela. Titanium ressemble à n'importe quelle autre ancienne API GUI, et vous devez définir certaines propriétés pour chaque bouton / champ / etc. Il est trop facile de se tromper sur un champ, en se souvenant de toutes les propriétés qui doivent être définies? L'avez-vous épelé avec des majuscules au bon endroit? (car cela n'est pas détecté par le compilateur, mais sera considéré comme une erreur d'exécution si vous avez la chance de tester cette partie)
Dans Titanium, les choses se cassent simplement lorsque vous ajoutez une autre vue au-dessus d'un contrôle ou cliquez ailleurs dans l'interface graphique.
Documentation
Plusieurs pages d'API portent le symbole Android, mais ne renvoient une valeur nulle que lorsque vous essayez de créer le contrôle. Ils ne sont pas simplement disponibles sur la plateforme Android malgré les symboles. Parfois, Android est mentionné pour ne pas prendre en charge une méthode particulière, mais alors l'API entière est manquante.
Évier
L'application de démonstration. Ai-je mentionné qu'il ne se compile pas si vous le mettez dans votre dossier de projet Eclipse parce que le chemin devient trop long? Doit être placé sur votre lecteur C dans le dossier racine. J'utilise actuellement un lien symbolik (mklink / J ...)
Méthodes non documentées
Vous devez utiliser correctement les choses comme label.setText ('Hello World') pour changer une étiquette fiable mais cela n'est pas documenté du tout.
Débogage
Titanium.API.info ('Les impressions sont le seul moyen de déboguer');
Édition
Les API ne sont disponibles dans aucun bon format, vous ne pouvez donc pas obtenir de complétion de code ordinaire avec de l'aide, etc. dans Eclipse. Aptana s'il vous plaît, aidez-moi!
Matériel
Il semble que le compilateur / les outils ne soient pas multithread donc un ordinateur rapide avec un disque dur rapide est un must, car vous devez faire beaucoup d'essais et d'erreurs. Ai-je mentionné la mauvaise documentation? Vous devez tout essayer car vous ne pouvez pas lui faire confiance!
Quelques choses positives
- Open source
De projets précédents, je me suis promis de ne plus jamais utiliser la source fermée car vous ne pouvez pas simplement réparer les choses simplement en y consacrant des heures et de la main-d'œuvre. Important lorsque vous êtes en retard dans le projet et que vous devez livrer dans un délai difficile. C'est open source et j'ai pu voir pourquoi la chaîne d'outils se brise et le réparer aussi.
Base de données de bogues
C'est aussi ouvert. Vous pouvez simplement voir que vous n'êtes pas seul et faire une solution de contournement au lieu de 4 heures supplémentaires passées en essais et erreurs.
Communauté
- Semble être actif sur leurs forums.
Bugs
- Le titane 1.4 n'est pas threadsafe . Cela signifie que si vous utilisez des threads (utilisez la propriété url: dans un appel createWindow) et que des programmes tels que les threads fonctionnent et envoient des événements avec des données dans les deux sens, vous rencontrez beaucoup de choses très, très étranges - des gestionnaires perdus, perdus fenêtres, trop d'événements, trop peu d'événements, etc. etc. Tout cela dépend du timing, mettre les lignes de code dans un ordre différent peut planter ou soigner votre application. L'ajout d'une fenêtre dans un autre fichier.js interrompt l'exécution de votre app.js ... Cela supprime également les infrastructures de données internes dans Titanium, car elles peuvent parfois mettre à jour les infrastructures de données internes en parallèle, écrasant une valeur qui vient d'être modifiée avec autre chose.
Une grande partie des problèmes que j'ai rencontrés avec Titanium vient de mon expérience des systèmes en temps réel comme OSE qui prennent en charge des centaines de threads, d'événements et de messages. Cela est censé fonctionner dans Titanium 1.4, mais cela ne le fait tout simplement pas de manière fiable.
Javascript (qui est nouveau pour moi) meurt en silence sur les erreurs d'exécution. Cela signifie également que les petits bogues courants, comme la faute d'orthographe d'un nom de variable ou la lecture d'un pointeur nul, ne se bloquent pas quand il le faut pour que vous puissiez le déboguer. Au lieu de cela, certaines parties de votre programme cessent de fonctionner, par exemple un gestionnaire d'événements, parce que vous avez égaré / mal tapé un caractère.
Ensuite, nous avons des bogues plus simples dans Titanium, comme certains paramètres qui ne fonctionnent pas dans les fonctions (ce qui est assez courant sur la plate-forme Android au moins).
Vitesse du cycle de débogage d'essai et d'erreur Après avoir exécuté Titnium Developer sur plusieurs ordinateurs, j'ai remarqué que le goulot d'étranglement est le disque dur. Un disque SSD sur un ordinateur portable rend le cycle de construction environ 3 à 5 fois plus rapide que sur un disque à 4200 tr / min. Sur un ordinateur de bureau, le fait d'avoir deux disques en RAID 1 (mode entrelacement) rend la construction environ 25% plus rapide que sur un seul disque avec un processeur un peu plus rapide et bat également l'ordinateur portable du disque SSD.
Résumé
- D'après les commentaires de ce fil, il semble y avoir une lutte pour le nombre de plateformes pour lesquelles un outil comme celui-ci peut fournir des applications. Le nombre d'API semble être le principal argument de vente.
Cela transparaît beaucoup lorsque vous commencez à l'utiliser. Si vous regardez le bugtracker ouvert, vous voyez que le nombre de bogues continue d'augmenter plus rapidement que le nombre de bogues corrigés. C'est généralement un signe que les développeurs continuent d'ajouter plus de fonctionnalités, plutôt que de se concentrer sur la réduction du nombre de bogues.
En tant que consultant essayant de fournir des applications plutôt simples aux multiplates-formes pour un client - je ne suis pas sûr que cela soit en fait plus rapide que de faire du développement d'applications natives sur deux plateformes. Cela est dû au fait que lorsque vous êtes à la vitesse, vous êtes rapide avec Titanium, mais soudain, vous regardez en bas et vous vous retrouvez dans un trou si profond que vous ne savez pas combien d'heures doivent être consacrées à une solution de contournement. Vous ne pouvez tout simplement PAS promettre une certaine fonctionnalité pour un certain délai / temps / coût.
À propos de moi: J'utilise Python depuis deux ans avec wxPython. (cette interface graphique est incohérente, mais ne se casse jamais comme ça. Il se peut que ce soit moi qui n'ait pas compris le modèle de thread utilisé par Javascript et Titanium, mais je ne suis pas seul selon leurs forums de discussion ouverts, les objets GUI utilisent soudainement le mauvais contexte / pas de mise à jour .. ???) avant cela, j'ai une formation en programmation C et ASM pour les appareils mobiles.
[edit - ajouté une partie avec des bugs et ne pas être thread-safe] [Edit - ayant maintenant travaillé avec elle pendant un mois +, principalement sur PC mais aussi sur OS X aussi. Ajout d'une double cible pour iPhone et Android. Ajout de la vitesse du cycle de débogage d'essai et d'erreur.]