Android / iPhone geliştirmede bir ders alıyorum ve Titanium (tam zamanlı değil) ile 8 hafta geçirdik (Versiyon Titanium 1.4.2 ve zaman Kasım 2010 civarındaydı). İşte benim deneyimim.
iPhone Android ikili hedefleme
API kılavuzları, işlevselliğin hem Android hem de iPhone için kullanılabilir olduğunu iddia etse de, durum böyle değildir. Çoğu şey platformlardan birinde çalışmaz. Bazı şeyler farklı çalışır.
Sınıftaki birçok insan iPhone uygulamaları yaptı ve büyük yeniden yazma olmadan Android'de çalıştıramazlar. Animap adında basit bir çocuk uygulaması geliştirdim (bkz. Android market / İsveç'te Appstore) ve Windows altında geliştirmeye başladım. Android hedefi çalıştıktan sonra projeyi OS X'te açtım. İPhone için, sadece Android için herhangi bir yapı öğesi göstermiyor. OS X altında çift hedefli bir proje başlatmanız gerekiyor. (Tamam, ilgili dosyaları yeni bir projeye kopyaladım). Sonraki sorun - animasyonlar iPhone'da çalışmıyor (Android'de çalışıyor). Kaydırma olayları iPhone'da aynı şekilde çalışmaz. (yani Android'de, kullanıcı kaydırmayı bıraktığında ve parmağını ekrandan serbest bıraktığında dokunulmayan olayı alırsınız, bu iPhone'da olmaz).
Bu bir yerde belirtilmediğinden, önce bir platformda, sonra diğer platformda deneme yanılma programlaması yapmanız gerekir. Deneme yanılma yoluyla, diğer platformda Animap gibi basit bir Uygulama almanın yaklaşık iki gün süreceğini kastediyorum. Ayrıca (android) sonra ... veya if (iphone) ... kodunuzun her yerine sahip olmanız gerekir ...
İndirme ve kurulum
Mektubun talimatlarını izlemelisiniz. Java 64 bit kullanmaya çalışmayın. KitchenSink 1.4.0 demo uygulamasını derlemeyecektir. (1.3 çalışıyor TAMAM!) Uzun yol adları, harici programın uzun sürerse tüm komut satırı parametrelerini almamasını sağlayacağından, dosyaları doğrudan C sürücüsüne koymalısınız. (Küçük programlar için iyi olsa da) 1/3 kez, araç zinciri durur ve tekrar 'başlat' tuşuna basmanız gerekir. O zaman muhtemelen işe yarayacak ... çok güvenilmez. Simülatör başlangıçta bulunmaz ve daha sonra adb.exe'yi Ctrl + Alt + Delete ile öldürmeniz ve tekrar denemeniz yeterlidir.
Ağ bağlantısı
Bir wifi ağında bazen canlı bağlantıyı kaybedersiniz ve Titanyum çöker (derleme / dağıtma arayüzü) Çalışan bir internet bağlantınız yoksa, sunucularına giriş yapamadığınız için başlamaz.
API
CSS, HTML ve jQuery buna kıyasla çok kolay. Titanyum diğer eski GUI API'lerine benzer ve her düğme / alan / vb. İçin bazı özellikler ayarlamanız gerekir. Bir alanı yanlış anlamak, ayarlanması gereken tüm özellikleri hatırlayarak kolay mıdır? Doğru yerde büyük harflerle heceledin mi? (bu derleyici tarafından yakalanmadığı için, ancak bu bölümü test etme şansınız varsa bir çalışma zamanı hatası olarak görülecektir)
Titanyum'da, bir kontrolün üstüne başka bir görünüm eklediğinizde veya GUI'de başka bir yere tıkladığınızda işler kırılır.
belgeleme
Birkaç API sayfası Android sembolünü taşır, ancak yalnızca denetimi oluşturmaya çalıştığınızda boş değer döndürür. Sembollere rağmen sadece Android platformunda mevcut değiller. Bazen Android'in belirli bir yöntemi desteklemediğinden söz edilir, ancak daha sonra tüm API eksiktir.
Mutfak lavabosu
Demo uygulaması. Yol çok uzun olduğu için Eclipse proje klasörünüze koyarsanız derlemediğinden bahsetmiş miydim? Kök klasördeki C sürücünüze konulmalıdır. Şu anda bir sembolik bağlantı kullanıyorum (mklink / J ...)
Belgelenmemiş yöntemler
Güvenilir bir etiketi değiştirmek için işleri label.setText ('Merhaba Dünya') olarak kullanmanız gerekir, ancak bu hiç bir şekilde belgelenmemiştir.
Hata ayıklama
Titanium.API.info ('Çıktılar hata ayıklamanın tek yoludur');
düzenleme
API'ler herhangi bir iyi biçimde mevcut değildir, bu nedenle Eclipse'de yardım vb. İle normal kod tamamlama alamazsınız. Aptana lütfen yardım edin!
Donanım
Derleyici / araçlar çok iş parçacıklı değildir, bu yüzden hızlı bir sabit sürücüye sahip hızlı bir bilgisayar bir çok deneme yanılma yapmanız gerektiği için bir zorunluluktur. Kötü belgelere değindim mi? Güvenemediğiniz için her şeyi denemelisiniz!
Bazı olumlu şeyler
- Açık kaynak
Önceki projelerden, kendimi bir daha asla kapalı kaynağı kullanmayacağına söz verdim çünkü işleri sadece saatlerce atıp insan gücü ile düzeltemezsiniz. Projeye geç kaldığınızda ve zor bir süre için teslim etmeniz gerektiğinde önemlidir. Bu açık kaynak kodlu ve neden alet zincirinin kırıldığını görebildim ve gerçekten de düzelttim.
Bugdatabase
Aynı zamanda açık. Sadece yalnız olmadığını görebilir ve deneme yanılma için harcanan 4 saat yerine geçici bir çözüm yapabilirsiniz.
Topluluk
- Forumlarında aktif görünüyor.
Hatalar
- Titanyum 1.4 iş parçacığı için güvenli değildir . Bu, iş parçacıklarından yararlanırsanız (bir createWindow çağrısında url: özelliğini kullanırsanız) ve iş parçacıkları çalışıyor gibi programlanır ve çok fazla ve çok garip şeyler - kayıp işleyiciler, kaybolmuş çok sayıda veriyle olayları ileri geri gönderirsiniz pencereler, çok fazla olay, çok az olay, vb. Bu işlemlerin tümü zamanlamaya bağlıdır, kod satırlarını farklı sıraya koymak uygulamanızı çökertebilir veya iyileştirebilir. Başka bir file.js'ye pencere eklemek app.js yürütmenizi bozar ... Bu aynı zamanda Titanium'daki dahili veri yapılarını çöpe atar, çünkü bazen paralell'deki dahili veri yapılarını güncelleyebilir, sadece değiştirilen bir değerin üzerine başka bir şey yazabilirler.
Titanyum ile ilgili yaşadığım sorunların çoğu, OSE gibi yüzlerce iş parçacığı, olay ve mesaj geçişini destekleyen gerçek zamanlı sistemlerdeki geçmişimden geliyor. Bunun Titanium 1.4'te çalışması gerekiyor, ancak güvenilir bir şekilde yapmıyor.
Javascript (benim için yeni) çalışma zamanı hatalarında sessizce ölüyor. Bu ayrıca, değişken bir adın yanlış yazılması veya bir boş göstericide okunması gibi küçük ve yaygın hataların hata ayıklayabilmeniz için çökmediği anlamına gelir. Bunun yerine, programınızın bazı bölümleri çalışmayı durdurur, örneğin bir olay işleyicisi, çünkü bir karakteri yanlış yerleştirdiniz / yanlış yazdınız.
Sonra, fonksiyonlarda çalışmayan bazı parametreler gibi (en azından Android platformunda oldukça yaygın olan) Titanyum'da daha basit hatalarımız var.
Deneme ve Hata hata ayıklama döngüsü hızı Titnium Developer'ı birkaç bilgisayarda çalıştırdıktan sonra, darboğazın sabit sürücü olduğunu fark ettim. Dizüstü bilgisayardaki bir SSD sürücüsü, derleme döngüsünü 4200 rpm sürücüden yaklaşık 3-5 kat daha hızlı hale getirir. Masaüstünde, RAID 1'de (çizgi modu) çift sürücüye sahip olmak, yapıyı biraz daha hızlı bir CPU'ya sahip tek bir sürücüden yaklaşık yüzde 25 daha hızlı hale getirir ve ayrıca SSD sürücü dizüstü bilgisayarı yener.
özet
- Bu konudaki yorumlardan, bunun gibi bir aracın uygulamaların sunabileceği platform sayısı için bir mücadele olduğu görülüyor. API sayısı anahtar satış noktası gibi görünmektedir.
Kullanmaya başladığınızda bu çok parlıyor. Açık hata izleyiciye bakarsanız, hata sayısının sabit hata sayısından daha hızlı arttığını görürsünüz. Bu genellikle geliştiricilerin hata sayısını azaltmaya odaklanmak yerine daha fazla işlevsellik eklemeye devam ettiklerinin bir işaretidir.
Bir müşteri için çoklu platformlara oldukça basit uygulamalar sunmaya çalışan bir danışman olarak, bunun aslında iki platformda yerel uygulama geliştirme yapmaktan daha hızlı olduğundan emin değilim. Bunun nedeni, hıza ulaştığınızda Titanyum ile hızlı olmanızdır, ancak aniden aşağıya bakıp kendinizi çok derin bir delikte bulursunuz ve geçici bir çözüm için kaç saat harcanması gerektiğini bilmezsiniz. Belirli bir son tarih / zaman / maliyet için belirli bir işleve söz veremezsiniz.
Kendim hakkında: wxPython ile iki yıldır Python kullanıyorum. (GUI tutarsız, ancak asla böyle kırılmaz. Javascript ve Titanyum tarafından kullanılan diş açma modelini anlamamış olabilirim, ancak açık tartışma forumlarına göre yalnız değilim, GUI nesneleri aniden yanlış bağlam kullanıyor / güncellenmiyor .. ???) daha önce mobil cihazlar için C ve ASM programlama bir arka plan var.
[edit - hata ile bölüm eklendi ve iş parçacığı güvenli değil] [Düzenle - şimdi onunla bir ay boyunca + çoğunlukla PC'de ama bazıları OS X üzerinde çalıştı. İPhone ve Android çift hedefleme eklendi. Deneme ve Hata hata ayıklama döngüsü hızı eklendi.]