Je vais prendre un cours dans Android/iPhone de développement et nous avons passé 8 semaines avec du Titane (pas à plein temps) (Version Titane 1.4.2 et le temps était autour de novembre 2010). Voici mon expérience.
iPhone Android dual cibler
Même si l'API guides de prétendre que la fonctionnalité est disponible pour Android et iPhone, ce n'est pas le cas. Beaucoup de choses n'ont tout simplement pas travailler sur l'une des plates-formes. Certaines choses fonctionnent différemment.
Beaucoup de personnes dans la classe a fait des applications de l'iPhone, et ils ne peuvent pas le faire fonctionner sur Android, sans grandes réécrit. J'ai développé un outil simple pour enfants app appelé Animap (voir l'android market / Appstore en Suède) et a commencé à développer sous Windows. Une fois le Android cible a été de travail, j'ai ouvert le projet sur OS X. Il ne présente pas de construire des trucs pour iPhone, seulement pour Android. Vous devez commencer un double projet cible sous OS X. (Ok, j'ai copié les fichiers concernés dans un nouveau projet). Problème suivant: - les animations ne fonctionne pas sur iPhone (ils travaillent sur Android). Les événements de défilement ne fonctionne pas de la même chose sur l'iPhone. (j'.e sur Android vous obtenez le untouched cas lorsque l'utilisateur cesse de défiler et de communiqués de leur doigt de l'écran, ce n'est pas le cas sur les iPhone).
Puisque ce n'est pas mentionné quelque part, vous essentiellement besoin de faire l'essai et l'erreur de programmation sur la première plate-forme, puis sur l'autre plate-forme. Par essais et erreurs, je veux dire, il faut environ deux jours pour obtenir une Application simple comme Animap de travail sur l'autre plate-forme. Vous aurez également besoin d'avoir si (android) alors... ou si(iphone)... partout dans votre code...
Le téléchargement et l'installation
Vous devez suivre les instructions à la lettre.
N'essayez pas d'utiliser java 64 bits. Il ne sera pas compiler le KitchenSink 1.4.0 démo de l'application. (1.3 fonctionne bien!)
Vous devez mettre les fichiers directement sur le disque C tant de chemins d'accès sera de rendre le programme externe ne reçoit pas tous les paramètres de ligne de commande si ils arrivent à la longue. (Fine pour les petits programmes)
1/3 de l'époque, la chaîne s'arrête tout simplement et vous devez appuyer sur 'lancer' de nouveau. Alors il sera probablement de travail... très peu fiable.
Le simulateur sera introuvable au démarrage, puis vous devez simplement tuer de adb.exe avec Ctrl+Alt+Suppr, puis réessayez.
Connexion réseau
Sur un wifi-réseau-vous parfois perd la connexion en direct et en Titane se bloque sur vous (la compilation/déploiement de l'interface)
Si vous ne disposez pas d'une connexion internet, il ne démarre pas comme il ne peut pas vous connecter à leurs serveurs.
API
CSS, HTML et jQuery est un jeu d'enfant par rapport à cela. Titane ressemble à aucune autre vieux GUI API, et vous avez besoin de définir des propriétés pour chaque bouton/champ/etc. L'obtention d'un champ de mal, c'est juste pour facile, se souvenant de toutes les propriétés que doit être réglé? Avez-vous épeler avec des lettres majuscules au bon endroit? (tant que ce n'est pas interceptée par le compilateur, mais sera considéré comme une erreur d'exécution si vous avez la chance de tester cette partie)
En Titane choses simplement pause lorsque vous ajoutez un autre point de vue sur le haut d'un contrôle ou cliquez ailleurs dans l'interface graphique.
La Documentation
Plusieurs pages API porter le Android symbole, mais ne renvoie null lorsque vous essayez de créer le contrôle. Ils ne sont pas disponibles sur la plate-forme Android, malgré les symboles. Parfois, Android est fait mention à ne pas appuyer une méthode particulière, mais alors l'ensemble de l'API est manquant.
KitchenSink
La démo de l'application. Ai-je mentionné qu'il ne compile pas si vous le mettez dans votre projet Eclipse dossier, car le chemin est trop long? Doit être mis sur votre disque C dans le dossier racine. J'utilise actuellement un symbolik lien (mklink /J ...)
Sans-papiers, les méthodes de
Vous devez sans doute utiliser des choses comme étiquette.setText ("Hello World') pour modifier un label fiable mais ce n'est pas documenté.
Débogage
Titanium.API.info('Impressions sont la seule façon de debug');
L'édition
Les Api ne sont pas disponibles dans tout bon format de sorte que vous ne pouvez pas obtenir de l'ordinaire de l'achèvement de code avec l'aide etc. dans Eclipse. Aptana s'il vous plaît aider!
Matériel
Il semble que le compilateur/outils ne sont pas une application multithread un ordinateur rapide avec une vitesse de disque dur, vous devez faire beaucoup d'essais et d'erreur. Ai-je mentionné les pauvres de la documentation? Vous devez essayer tout ce qui est là-bas que vous ne pouvez pas faire confiance!
Des choses positives
- Open Source
De précédents projets, je me suis promis de ne plus jamais l'utiliser à code source fermé à nouveau que vous ne pouvez simplement pas arranger les choses juste en jetant des heures et de la main-d'œuvre. Important lorsque vous êtes en retard dans le projet et besoin de fournir pour une dure limite. C'est open source et j'ai été en mesure de voir pourquoi l'outil de rupture de la chaîne et en fait le fixer ainsi.
Bugdatabase
Il est également ouvert. Vous pouvez tout simplement voir que vous n'êtes pas seul et faire une solution de contournement au lieu de 4 heures passées sur des essais et des erreurs.
La communauté
- Semble être actif sur leurs forums.
Bugs
-
Titanium 1.4 n'est pas thread-safe. Cela signifie que si vous faites usage de threads (utilisez l'url: bien, dans un appel de createWindow) et du programme comme les threads de travail et d'envoyer des événements avec des données en arrière et en avant de vous lancer dans un grand nombre de très, très étrange de trucs perdu gestionnaires, perdu windows, trop d'événements, trop peu d'événements, etc. etc. C'est tout dépend du moment, de placer les lignes de code dans un ordre différent risque de plantage ou de guérir votre application. Ajout d'une fenêtre à une autre file.js les pauses de votre app.js l'exécution... Présente également des ordures de structures de données internes en Titane, car parfois ils peuvent mettre à jour des structures de données internes en parallèle, l'écrasement d'une juste valeur modifiée avec quelque chose d'autre.
Beaucoup de les problèmes que j'ai eu avec le Titane vient de mon arrière-plan en temps réel sur des systèmes comme celui qui OSE soutenir des centaines de threads, des événements et de la transmission de message. Cela est censé fonctionner en Titane 1.4 mais il n'a tout simplement pas le faire de manière fiable.
Javascript (ce qui est nouveau pour moi) meurt en silence sur des erreurs d'exécution. Cela signifie également que les petites et les bugs communs, comme les fautes d'orthographe dans un nom de variable ou de la lecture dans un pointeur null ne se bloque pas quand il le faut afin que vous pouvez déboguer. Au lieu des parties de votre programme juste arrêter de travailler, par exemple un gestionnaire d'événements, parce que vous avez égaré/misstyped un personnage.
Ensuite, nous avons de plus simple, les bugs en Titane, à l'instar de certains paramètres qui ne sont pas de travail dans les fonctions (ce qui est assez fréquent sur la plate-forme Android au moins).
D'essai et d'Erreur de débogage de la vitesse de cycle
L'exécution de la Titnium Développeur 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 production d'environ 3 à 5 fois plus rapide que sur un 4200 tr / min en voiture. Sur un bureau, d'avoir une double disques en RAID 1 (entrelacement mode) permet la construction d'environ 25 pour cent plus rapide que sur un seul disque dur avec un peu plus rapide CPU, et il bat aussi le disque SSD portable.
Résumé
- À partir des commentaires dans ce fil, il semble y avoir un combat pour le nombre de plates-formes d'un outil comme celui-ci peut fournir de l'application. Le nombre d'API semble être la clé de vente-point.
Cela transparaît très bien lorsque vous commencez à l'utiliser. Si vous regardez le ouvert le bugtracker vous voyez que le nombre de bugs continue à augmenter plus vite que le nombre de bugs corrigés. C'est habituellement un signe que les développeurs de continuer à ajouter plus de fonctionnalités, plutôt que de se concentrer sur l'obtention d'un certain nombre de bugs vers le bas.
En tant que consultant en tentant de mettre plutôt des applications simples à multiplatforms pour un client, je ne suis pas sûr que c'est effectivement plus rapide que de faire de l'application native de développement sur deux plates-formes. Cela est dû au fait que, quand vous êtes à vitesse rapide avec du Titane, mais soudain, vous regardez en bas et de trouver vous-même dans un trou si profond que vous ne savez pas combien d'heures doit être dépensé pour une solution de contournement. Vous pouvez tout simplement PAS la promesse d'un certain nombre de fonctionnalités pour une certaine date/temps/coût.
À propos de moi: Été utilisation de Python pour deux ans avec wxPython. (GUI est inconsitent, mais ne brise jamais comme ça. Il sera peut-être moi qui n'ai pas compris le modèle de thread utilisé par Javascript et de Titane, mais je ne suis pas la seule fonction de leur ouvrir des forums de discussion, les objets graphiques sont soudainement en utilisant le mauvais contexte/pas de mise à jour..???) avant que j'ai une formation en C et ASM de programmation pour les appareils mobiles.
[edit - ajout de la partie avec des bugs et ne pas être thread-safe]
[Edit - maintenant, pour avoir travaillé avec elle pendant un mois,+, la plupart du temps sur PC, mais sur certains OS X ainsi. Ajouté iPhone et Android double de mieux les cibler. Ajout de l'Essai et de l'Erreur de débogage de la vitesse de cycle.]