Corona, Phonegap, Titanyum karşılaştırması


310

Bir web geliştiricisiyim ve web ürünlerimi iPhone'a taşımak istiyorum. Ürünlerden biri Google Haritalar gibidir: Haritayı telefon ekranında göster, haritayı sürükleyebilir veya yeniden boyutlandırabilir ve haritaya eklediğimiz bazı bilgileri görüntüleyebilirsiniz.

Yerel iPhone uygulamaları geliştirmek için HTML, CSS ve Javascript kullanmanızı sağlayan bazı teknolojiler olduğunu biliyorum. Birkaç tane tanımladım:

Başka benzer ürünler var mı? Aralarındaki farklar nelerdir? Hangisini seçmeliyim?


1
İPhone, Haziran 2011 itibarıyla uygulamaları üretebilir Adobe FLEX da vardır adobe.com/products/flex
neoneye

1
Bunu kontrol et. Dostum burada bir noktaya karşılaştırma. savagelook.com/blog/portfolio/…
Hikmat Khan

Yanıtlar:


368

Sadece en çok oy alan cevap hakkında yorum yapmak amacıyla stackoverflow'a kaydoldum. Kötü olan şey, stackoverflow'un yeni üyelerin yorum göndermesine izin vermemesidir. Bu yorumu daha çok bir cevaba benzetmeliyim.

Rory Blyth'in cevabı, iki javascript mobil çerçevesi hakkında bazı geçerli noktalar içeriyor. Ancak, kilit noktaları yanlış. Gerçek şu ki, Titanyum ve PhoneGap farklı olanlardan daha benzer. Her ikisi de bir javascript API'leri aracılığıyla cep telefonu işlevlerini ortaya çıkarır ve uygulamanın mantığı (html, css, javascript) yerel bir WebView denetiminde çalışır.

  1. PhoneGap yalnızca bir web uygulamasının yerel sarıcısı değildir. PhoneGap javascript API'leri aracılığıyla, "web uygulaması" Coğrafi Konum, İvmeölçer Kamera, Kişiler, Veritabanı, Dosya sistemi vb. Gibi cep telefonu işlevlerine erişebilir. javascript dünyası. Öte yandan, mobil web tarayıcısında çalışan normal bir web uygulamasının bu işlevlerin çoğuna erişimi yoktur (güvenlik birincil nedendir). Bu nedenle, bir PhoneGap uygulaması bir web uygulamasından çok bir mobil uygulamadır. PhoneGap'i kesinlikle herhangi bir PhoneGap API'sı kullanmayan bir web uygulamasını sarmak için kullanabilirsiniz, ancak PhoneGap bunun için yaratılmamıştır.

  2. Titanium, html, css veya javascript kodunuzu "yerel bitler" halinde derlemez. Bunlar, gömülü bir görüntü dosyası gibi, yürütülebilir pakete kaynak olarak paketlenir. Uygulama çalıştığında, bu kaynaklar bir UIWebView denetimine yüklenir ve orada çalıştırılır (tabii ki yerel bitler değil, javascript olarak). Bir javascript-to-native-kod (veya-obj-c) derleyicisi diye bir şey yoktur. Bu, PhoneGap'te de aynı şekilde yapılır. Mimari açıdan, bu iki çerçeve birbirine çok benzer.

Şimdi, onlar farklı mı? Evet. İlk olarak, daha fazla cep telefonu işlevini javascript'e bağlayarak Titanium, PhoneGap'tan daha zengin özelliklere sahip görünüyor. En dikkat çekici olanı, PhoneGap'ın çok sayıda (varsa) yerel UI bileşenini javascript'e maruz bırakmamasıdır. Titanyum ise, her türlü yerel UI kontrolünü oluşturmak ve kontrol etmek için javascript'te çağrılabilen kapsamlı bir UI API'lerine sahiptir. Bu UI API'lerini kullanarak bir Titanyum uygulaması, bir PhoneGap uygulamasından daha "doğal" görünebilir. İkincisi, PhoneGap, Titanium'dan daha fazla cep telefonu platformunu destekliyor. PhoneGap API'leri daha geneldir ve iPhone, Android, Blackberry, Symbian gibi farklı platformlarda kullanılabilir. Titanium en azından şimdilik iPhone ve Android'i hedefliyor. Bazı API'ları platforma özeldir (iPhone UI API'leri gibi).

Yani, uygulamanız için endişeniz daha "yerli" görünümlü hale getirmek ise, Titanyum daha iyi bir seçimdir. Uygulamanızı başka bir platforma daha kolay "bağlayabilmek" istiyorsanız, PhoneGap daha iyi olacaktır.

Güncelleme 8/13/2010: Bir Titanium çalışanının Mickey'nin sorusuna verdiği cevaba bağlantı.

Updated 12/04/2010: Bu yazı bilgilerini güncel tutmak için bir yıllık inceleme vermeye karar verdim. Bir yılda birçok şey, ilk gönderideki bazı bilgileri modası geçmiş yapan değişikliklere sahiptir.

En büyük değişiklik Titanyum'dan geldi. Bu yılın başlarında Appcelerator, önceki sürümlerinden mimari açıdan büyük ölçüde ayrılan Titanium 1.0'ı piyasaya sürdü. 1.0'da UIWebView denetimi artık kullanımda değil. Bunun yerine, herhangi bir UI işlevi için Titanium API'lerini çağırırsınız. Bu değişiklik birkaç şey ifade ediyor:

  1. Uygulama kullanıcı arayüzünüz tamamen yerel hale gelir. Yerel Titanyum API'ları tüm kullanıcı arayüzü ihtiyaçlarınızı kontrol altına aldığından uygulamanızda artık web kullanıcı arayüzü yok. Titanyum, "Çapraz Platform Yerel Kullanıcı Arayüzü" sınırında öncülük ederek çok fazla krediyi hak ediyor. Yerel kullanıcı arayüzünün görünümünü ve hissini tercih eden, ancak resmi programlama dilinden hoşlanmayan programcılara bir alternatif verir.

  2. Web görünümü gittikçe uygulamanızda HTML veya CSS kullanamazsınız. (Not: Yine de Titanyum'da web görünümü oluşturabilirsiniz. Ancak web görünümünde yararlanabileceğiniz birkaç Titanyum özelliği vardır.) Titanyum S ve C: HTML ve CSS'ye ne oldu?

  3. Bir DOM nesnesinin varlığını kabul eden JQuery gibi popüler JS kitaplıklarını kullanamazsınız. Kodlama diliniz olarak JavaScript kullanmaya devam edersiniz. Ancak bu, Titanium 1.0'a bir web programcısı olarak gelirseniz kullanabileceğiniz tek web teknolojisi.

Titanyum videosu: Titanyum 1.0'daki yenilikler.

Şimdi, Titanium 1.0 JavaScript'inizi "yerel bitler" olarak derliyor mu? Hayır. Appcelerator sonunda bu geliştirici blogu ile bu konuda temiz geldi: Titanium Guides Project: JS Environment. Biz programcılar Pazarlama departmanındaki insanlardan daha gerçek insanlarız, değil mi? :-)

PhoneGap'e geçin. PhoneGap hakkında söylenecek çok şey yok. Benim algılarım, IBM bu yıl devreye girene kadar PhoneGap geliştirmenin çok aktif olmadığı yönündedir. Hatta bazı insanlar IBM'in PhoneGap'e Nitobi'den daha fazla kod kattığını iddia ediyorlardı. Bu doğru ya da değil, PhoneGap'ın aktif olarak geliştirildiğini bilmek iyidir.

PhoneGap, HTML, CSS ve JavaScript gibi web teknolojilerine dayandırılmaya devam ediyor. PhoneGap'ın, Titanium'un yaptığı gibi yerel UI özelliklerini JavaScript'e köprüleme planı yok gibi görünmüyor. Web kullanıcı arayüzü hala performans ve yerel görünüm ve his konusunda yerel kullanıcı arayüzünün gerisinde kalsa da, bu boşluk hızla kapanmaktadır. Web teknolojilerinde, mobil web kullanıcı arayüzüne performans açısından parlak özellik sağlayan iki eğilim vardır:

  1. Yorumlayıcıdan sanal makineye geçen JavaScript motoru. JavaScript, daha hızlı yürütülmesi için yerel koda derlenmiş JIT'dir. Safari JS motoru: SquirrelFish Extreme

  2. Web sayfası oluşturma, CPU'ya güvenmekten GPU hızlandırmayı kullanmaya geçiyor. Sayfa geçişi ve 3D animasyon gibi grafik yoğun görevler, donanım hızlandırma sayesinde çok daha pürüzsüz hale gelir. Chrome'da GPU ile Hızlandırılmış Birleştirme

Masaüstü tarayıcılardan kaynaklanan bu tür iyileştirmeler mobil tarayıcılara hızlı bir şekilde iletilmektedir. Aslında, iOS 3.2 ve Android 2.0'dan beri, mobil web görünümü kontrolü çok daha performanslı ve HTML5 dostu hale geldi. Mobil web'in geleceği o kadar umut vericidir ki, şehre büyük bir çocuk çekmiştir: JQuery kısa süre önce mobil web çerçevesini duyurdu. JQuery Mobile, UI gadget'ları ve PhoneGap ile telefon özellikleri sağladığında, ikisi birlikte mükemmel bir mobil web platformu oluşturuyor.

Sencha Touch'ı başka bir mobil web UI gadget çerçevesi olarak da belirtmeliyim . Sencha Touch sürüm 1.0 yakın zamanda GPLv3 içeren çift lisanslama modeli altında piyasaya sürüldü. Sencha Touch, JQuery Mobile'ın yaptığı gibi PhoneGap ile iyi çalışır.

Bir GWT programcısıysanız (benim gibi), GWT ile mobil web uygulamaları oluşturmak için açık kaynaklı bir proje olan GWT Mobile'a göz atmak isteyebilirsiniz . GWT'de PhoneGap kullanımını sağlayan bir PhoneGap GWT sarmalayıcısı içerir.


10
Um ... diyorsun ki "PhoneGap sadece bir web uygulamasının yerli sarıcısı değil." Yerel cihaz işlevselliğine sağladığı erişimi tartışmaya devam edersiniz. Ben yazarken bu kapsama düşünüyorum: "Bunun dışında ne PhoneGap sağlar JavaScript ve yerel cihaz API'ları arasında bir köprüdür. Yani, sen PhoneGap API karşı JavaScript yazın ve PhoneGap sonra uygun karşılık gelen yerel çağrı yapar. Bu bakımdan, eski bir web uygulamasını dağıtmaktan farklı. " Sadece beyanımı reddetmek için kaydolduysan, onu bütünüyle okumuş olmalısın. Gönderilerimin uzun olduğunu biliyorum, ama ... yine de.
Rory Blyth

5
Daha net olabilirdim, ancak hangi API'lerin karmaşık olduğu ayrıntıları, zamanla cihazdan cihaza ne yapabileceğinizi değiştirdi (çok geliştirildi, ancak farklı platformlar için özellik matrisi birkaç revizyondan geçti). Temel farklılıklardan biri hakkında yazdım ve yazdıklarım doğrudur - aslında yazdıklarınızla uyumludur. Hangi API'lara erişebileceğiniz hakkında daha ayrıntılı bilgi girdiniz.
Rory Blyth

9
Titanyum ve "yerel bitler" konusunda, sanırım hatam bunu sitelerinde okumaktı - Appcelerator'ın ön sayfasında: "harika çalışıyorlar çünkü Titanyum'u en yüksek performans için yerel koda derliyoruz." Belki de yanıldıklarını bildirmek için onlara yazmalısınız. Şuna
Rory Blyth

6
Daha fazla bilgi için, ilk konu olan "Bu mobil web uygulamaları mı yoksa yerel mobil uygulamalar mı?" Başlıklı Titanyum SSS konusuna kısa bir süre içinde yer veriliyor. Burada bir teklif gönderirim, ancak doğrudan şirketten almayı tercih edersiniz, sanırım, ürünlerine dair yetkililer: tinyurl.com/ya9topg
Rory Blyth

4
Dennis, harika cevap için teşekkürler. Hala Titanyum ile mi gelişiyorsunuz? 1.7 'nin indiğini söyleyebilir misiniz?
PaulM

193

Topladığımdan, ikisi arasında bazı farklılıklar var:

  • PhoneGap temel olarak hala web uygulamaları için yerel sarmalayıcılar oluşturur . Bir WhateverYourPlatformIs projesi tükürüyor, inşa ediyor ve konuşlandırıyorsunuz. İPhone'dan bahsediyorsak (zamanımı harcadığım yer), bir web uygulaması başlatıcısı oluşturmaktan çok farklı görünmüyor (kendi Springboard simgesini alan bir kısayol, böylece başlatabilirsiniz ( gibi ) yerel bir uygulama). "Uygulamanın" kendisi hala html / js / etc'dir ve barındırılan bir tarayıcı denetimi içinde çalışır. PhoneGap'in bunun ötesinde sağladığı şey, JavaScript ve yerel cihaz API'ları arasında bir köprüdür. Böylece, PhoneGap API'lerine karşı JavaScript yazarsınız ve PhoneGap uygun ilgili yerel çağrıyı yapar. Bu bakımdan, bu ise bir düz eski web uygulaması dağıtmak farklıdır.

  • Titanyum kaynağı doğal bitlere kadar derlenir. Yani, html / js / etc. sadece bir projeye bağlı değildir ve daha sonra bir web tarayıcısı kontrolünde barındırılır - yerel uygulamalara dönüştürülürler. Bu, örneğin uygulamanızın arayüzünün yerel kullanıcı arayüzü bileşenlerinden oluşacağı anlamına gelir . Yerel bir uygulamaya sahip olmadan doğal bir görünüm ve his elde etmenin yolları vardır, ama ... iyi ... genellikle ortaya çıkan bir kabus.

Her ikisi de tipik web teknolojilerini (html / js / css / blah blah blah) kullanarak tüm öğelerinizi yazmanız ve özel JavaScript API'leri aracılığıyla yerel işlevlere erişmeniz açısından benzerdir.

Ama yine de, PhoneGap uygulamaları (PhonGapps? Bilmiyorum ... bu aptal bir isim mi? Söylemesi daha kolay - çok şey biliyorum) web uygulamaları olarak hayatlarına başlıyor ve web uygulamaları olarak hayatlarını sonlandırıyor. İPhone'da html / js / vb. sadece bir UIWebView denetimi içinde yürütülür ve js çağrılarınızın yerel API'lara yönlendirildiği PhoneGap JavaScript API'leri.

Titanyum uygulamaları yerel uygulamalar haline gelir - sadece web geliştirici teknolojisi kullanılarak geliştirilirler.

Bu aslında ne anlama geliyor ?

  1. Bir Titanyum uygulaması olacaktır bakmak , sonuçta bunun nedeni bir "gerçek" uygulaması gibi olan bir "gerçek" uygulaması.

  2. Bir PhoneGap uygulaması, sonuçta bunun nedeni bir web uygulaması bir tarayıcı denetiminde barındırılan gibi görünecektir olan bir web uygulaması bir tarayıcı denetiminde barındırılan.

Hangisi sizin için doğru?

  • Web geliştirme becerilerini kullanarak yerel uygulamalar yazmak istiyorsanız, Titanium en iyi seçenektir.

  • Birden fazla platforma gerçekçi bir şekilde dağıtabileceğiniz web geliştirme becerilerini kullanarak bir uygulama yazmak istiyorsanız (iPhone, Android, Blackberry ve dahil etmeye karar verdikleri diğer her şey) ve yerel platform özelliklerinin bir alt kümesine (GPS, ivmeölçer vb.) birleştirilmiş bir JavaScript API'sı aracılığıyla, PhoneGap muhtemelen istediğiniz şeydir.

Soruyor olabilirsiniz: Neden web'de barındırılan bir web uygulaması yerine bir PhoneGapp (adı kullanmaya karar verdim) yazmak isteyeyim? Bazı yerel cihaz özelliklerine bu şekilde erişemiyorum, ancak kullanıcıyı "yerel" uygulamamı indirmeye ve yüklemeye zorlamak yerine gerçek web dağıtımı kolaylığına sahip değil miyim?

Cevap: Çünkü PhoneGapp'ınızı App Store'a gönderebilir ve ücretlendirebilirsiniz. Ayrıca, kullanıcının uygulamanızı unutmasını zorlaştıran başlatıcı simgesini de alırsınız (Bir yer işaretini uygulama simgesinden çok unutmam daha olasıdır).

Web'de barındırılan web uygulamanıza erişim için kesinlikle ücret ödeyebilirsiniz, ancak bunu yapmak için gerçekten kaç kişi bu süreçten geçecek? App Store ile bir uygulama seçiyorum, "Satın Al" düğmesine dokunuyorum, bir şifre giriyorum ve işim bitti. Yükler. Birkaç saniye sonra kullanıyorum. Başka birinin tek seferlik mobil web işlem arayüzünü kullanmak zorunda kalsaydım, muhtemelen adımı, adresimi, telefon numaramı, CC numaramı ve çıkmak istemediğim diğer şeyleri kullanmak zorunda kaldım, neredeyse kesinlikle istemezdim. onunla geçmeyin. Ayrıca, Apple'a güveniyorum - Steve Jobs'ın bilgilerimi kaydetmeyeceğinden ve daha sonra tekmeler için CC'ye bir sürü yaramaz dergi aboneliği talep etmeyeceğinden eminim.

Her neyse, web dev teknolojisinin dahil olması dışında, PhoneGap ve Titanyum çok farklıdır - sadece yüzeysel olarak karşılaştırılabilir olma noktasına kadar.

Web uygulamalarından tarafından nefret ediyorum ve iTunes App Store incelemelerini okursanız, kullanıcılar bunları tespit etmede oldukça iyidir. Hiçbir adı adlandırmayacağım, ancak telefonumda çöp gibi görünen ve çalışan birkaç "uygulama" var ve bunun nedeni UIWebView örneklerinde barındırılan web uygulamaları olmaları. Bir web uygulaması kullanmak istersem, Safari'yi açardım ve bilirsiniz, bir uygulamaya gidin. Bir iPhone aldım çünkü iPhone-y olan şeyleri istiyorum. Safari'de şık bir Google web uygulaması kullanmayla ilgili bir sorunum yok, ancak Google bir web uygulamasını yerel bir uygulama olarak sunarak Springboard'a bir yer işareti koyarsa aldatıldım.

Şimdi gitmem lazım. Kız arkadaşımın yüzünde üç saniye boyunca bu bilgisayarı kullanmayı bırakabilir misin?


22
Cevap ile ilgili sorun çoğunlukla YANLIŞ olmasıdır. Aşağıdaki DennisJZH'nin cevabına bakınız.
jbwiv

9
@jbwiv - Yorumunuzla ilgili sorun çoğunlukla DennisJZH'nin çoğunlukla YANLIŞ olan cevabına dayanıyor olması. Aşağıdaki yanıtlarıma bakın. Daha fazla karışıklığı önlemek için, hem ürünlerin resmi belgelerine göz atmanızı hem de yazımı tam olarak okumanızı öneririm . Çok teşekkür ederim.
Rory Blyth

15
@Matthew - Ah, gf kesinlikle önceliğe sahip :) Bu soruların temelde alakasız olması nedeniyle, değişim gerçekleşiyor (eğer anlamınızı yanlış anlarsam, özür dilerim), gerçek şu ki, insanlar şu anda var olan sorunlara cevap istemektedirler. Dünya'nın yakıtı yaktığı ve genişlediği, gezegenimizi yok ettiği için gelecekte Güneş tarafından pişirileceğinden, bunların hiçbirinin önemli olmadığını iddia edebiliriz, ama ... bu, beklerken bize bir şeyler veriyor.
Rory Blyth

2
@Matthew - Ayrıca, bu kişi ise yeni şeyler denemek için istekli. Tercih ettiğiniz yol olmayabilir, ancak yine de yeni. Hala iPhone geliştirme hakkında bilgi edinmeniz gerekiyor (kullanıcı arayüzü yönergelerindeki dokümanları okuyun, vb.) Birini bir şey yapmaya çalışmaktan alıkoymanın sadece içindeki değeri görmediğiniz için mantıklı bir nedeni yoktur. Örneğin, mantarlardan nefret ediyorum, ama diğer insanların onları yemesini engellemeye çalışmayın. Safranı sevdiğim gibi mantarları da sevdiklerini anlıyorum ve safranı benden kimsenin uzaklaştırmaya çalışmasını istemediğimi biliyorum.
Rory Blyth

1
Evet, ancak gerçek bir web teknolojisi sihirbazsanız, hiç kimsenin "web uygulamanızı" gerçekten yerel bir uygulama olmadığını fark edemeyeceğinden eminim. Bir uygulamanın UIWebView içine sarılmış bir "web uygulaması" olduğu aşikar olduğu durumlarda, bu, içerik oluşturucunun zaman ayırmadığı veya yeterince yüksek kalitede olmasını sağlayacak kadar özen gösterdiği anlamına gelir.
trusktr

62

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.]


1
Titanium'un 1.4 sürümü ile şimdi Titanium'dan teslim edilen .apk dosyalarını inceledim ve çok iyi değiller. Çalışırlar, ancak tüm derleme dizini bir araya getirilir. Bu, derleme sırasında açılış ekranını üç farklı konuma kopyalamak gibi küçük yapı kusurlarının, telefonda büyük bir açılış ekranı görüntüsüne sahip olduğum için, telefonda yaklaşık 1 meg depolama alanı aniden tükettiği anlamına gelir. Ve bu sadece merhaba dünyanın çok basit bir varyantı içindir. Javascript kaynak kodu da builds ve .apk dosyalarına kopyalanır ve böylece tüm müşterilere teslim edilir.
user288299

Sürüm 1.5 çıktı ve Android platformu için büyük bir yeniden yazma olduğu söyleniyor. Şimdi yerel Android geliştirmeyi öğrenmek zorunda olduğum için bunu test etmeyeceğim.
user288299

Sürüm 1.5 çıktı ve Android platformu için büyük bir yeniden yazma olduğu söyleniyor. Şimdi yerel Android geliştirmeyi öğrenmeye devam ettiğimiz için bunu test etmeyeceğim. Bugün yerli Android'de yaşam döngüsü hakkında bilgi verildiği için, değişken içerik kaybeden bazı pencerelerde yaşadığım sorunların ikinci kez görüntülendiğinde Titanyum'un durumu yaşam döngüsünün onPause () durumundan önce kurtarmamasından kaynaklandığına inanıyorum. developer.android.com/guide/topics/fundamentals.html#lcycles . Titanium.Map.MapView.hide () ve daha sonra show ()
yöntemini çağırmak

1
Sadece 1.7 ile oynandı, açıklamanız çok doğru. Bu platform, korkunç performans ve arama yapmak için sayısız saat çalışmasıyla çok hit ve özlüyor. Bir projenin başlangıcında kaynaklarınız varsa, her platform için yerel oluşturun.
Jonathon Kresner

25

Corona SDK (Ansca Mobile) kodlama dili olarak Lua'yı kullanıyor. Lua hakkında daha fazla bilgi için lua.org adresine bakın.

Daha fazla web entegrasyonu ve yerel kullanıcı arayüzü öğeleri eklemeyi planlarken, odak noktamız web tabanlı teknolojilerin aksine oyun geliştirme gibi grafik yoğun uygulamalar üzerinde olma eğilimindedir. Başka bir deyişle, Corona uygulamalarını tamamen Javascript / HTML / CSS'de yazmayı öngörmüyoruz.


Yerel kullanıcı arayüzü komut dosyası oluşturma için herhangi bir planınız veya zaman ölçeğiniz var mı? Lua ile biraz yaptım ve gerçekten Corona'yı sevmek istiyorum. Oyun dışı gelişim için Titanyum biraz ileride görünüyor.
uroc

4
Merhaba uroc. 1.1 sürümüne (bu hafta ETA!) Ve kısa süre sonra izlenecek daha fazla yerel UI özelliğine sahibiz. Bununla birlikte, Titanyum hissim, çok sayıda yerel UI öğesini ortaya çıkarmak için iyi bir iş çıkardıkları, oysa daha fazla mühendislik çabasını animasyon ve oluşturma özelliklerine iterken en kritik UI öğelerine odaklanacağız. Bunun nedeni, (i) yalnızca UI'ye özel uygulamalar için zaten iyi ürünler olması, (ii) UI, Kakaonun en arkadaşça parçasıdır (nispeten konuşma!), Ancak (iii) OpenGL animasyonunu içeren her şey, iPhone'daki bir acı noktasıdır. an.
Evan Kirchhoff

Corona yerine oyun geliştirmek için uygundur gibi görünüyor, değil mi?
Kasım'da Anticafe

18

Titanyum ile bir haftadır çalışıyorum ve zayıflığı hakkında iyi hissediyorum.

1) Birden fazla platformda aynı kodu kullanmanızı umuyorsanız iyi şanslar! BackgroundGradient gibi bir şey göreceksiniz ve android sürümünün desteklemediğini görene kadar şaşıracaksınız. Sonra bir degrade görüntü kullanmaya geri dönmek zorunda, hem de kodu daha kolay hale getirmek için her iki sürüm için de kullanabilirsiniz?

2) Çok garip davranışlar, Titanyum android sdk üzerinde sadece "geri" çalışmak için geri düğmesi, hatta daha iyi yönlendirme olay izleme almak için "ağır" bir pencere ne olduğunu anlamak gerekir. Android platformu gerçekten böyle değil, Titanium API'lerini çalıştırmaya çalışıyor.

3) karanlıkta atılan, işler çökecek ve kod yorum yapmaya başlamak zorunda ve sonra onu bulduğunuzda, asla kullanmayın. Altı aydan fazla bir süredir android üzerinde yönelim ve yüzdeler gibi bazı belirgin hatalar var.

4) Hatalar .... hataların bir sürü vardır ve rapor edilecek, aylarca oturup, birkaç gün içinde sabit olsun. Android ile ilgili diğer birçok sorun olduğunda bile siyah dut mobil sdk yayınlamayı planladıklarına şaşırdım.

5) Titanyum Iphone ve Titanyum Android javascript motorları tamamen farklıdır. Android sürümünde uzak javascript dosyalarını indirebilir, mootools, jquery ve benzeri kütüphaneleri dahil edebilir ve kullanabilirsiniz. Bunu öğrendiğimde cennetteydim çünkü android uygulamamı derlemeye devam etmek zorunda kalmadım. Android apk kurulum işlemi çok uzun sürüyor! Iphone bunların hiçbiri mümkün değil, ayrıca iphone sürümü çok daha hızlı bir javascript motoruna sahip.

Yerel UI parçalarının çoğundan uzak durursanız, bunun yerine, yön değişikliklerini algılamak, degrade görüntülere yapışmak, geri düğmesini unutmak, kendi animasyonlarınızı oluşturmak, pencere başlığını, araç çubuklarını ve gösterge tablosunu unutmak için setInterval kullanın. Gerçekten çok fazla yeniden yazma gerektirmeyen her ikisi üzerinde çalışan bir api yapabilirsiniz. Ama bu noktada bir webapp kadar halsiz.

Buna değer mi? Sonuçta acı, her dakika değer. Mantığı soyutlayabilir ve her yerde farklı arayüzler oluşturabilirsiniz. Titanyum, hızlı hissettiren sıvı uygulamaları yapmanızı sağlar. Her platformun güçlü düzen yeteneklerini kaybedersiniz, ancak basit düşünüyorsanız, işler tek bir dil altında yapılabilir.

Neden bir web uygulaması olmasın? Giriş seviyesi pazar android telefonlarda bir webview oluşturmak için onun korkunç yavaş ve daha karmaşık mantık yapmak için kullanıyor olabilir bellek çok tüketir.




8

HTML5 widget'larını iphone widget'larına benzetmek bir şeydir, ancak aynı şekilde iyi performans göstermelerini sağlamak da başka bir konudur. Html5 animasyonlarının performansı (düz Görünüm Geçişleri bile), uzun listelerde kaydırma, jestlere yanıt verme yapışkan ve sarsıntılı hissediyor. Bir iPhone kullanıcısı farkı fark edecektir.

Ayrıca, platforma özel kod ve kullanılabilirlik sorunlarıyla sonuçlanan farklı cihazlar tarafından desteklenen jest türlerinde de bazı farklılıklar vardır.

Şimdilik yerel uygulamalarla kalacağım sanırım.


7

Rhomobile Rhodes ( http://rhomobile.com/products/rhodes ), PhoneGap yaklaşımına çok benzer, ancak aşağıdakilere sahip tek çerçeve:

  1. Model Görünümü Denetleyici deseni (çoğu web çerçevesinin sağladığı gibi)
  2. Nesne İlişkisel Yöneticisi
  3. tüm popüler akıllı telefonlar için destek (Windows Phone 7 dahil)
  4. barındırılan bir geliştirme hizmeti (sadece barındırılan yapı değil): http://rhohub.com
  5. RhoStudio IDE'de tam bir hata ayıklayıcı ve SDK'sız emülatör
  6. senkronize çevrimdışı veri desteği

6

Titanyum ile ilgilenen herkes için çok iyi bir belgelere sahip olmadığını söylemeliyim ki bazı sınıflar, özellikler, yöntemler eksik. Ama bir sürü örnek app KitchenSink "belgelenmiştir" bu yüzden bu kötü değil.


5

PhoneGap anlayışım, iPhone API'larının çoğuna Javascript API'leri sağlamalarıdır.

Titanyum bir web geliştirici arka planı için daha kolay görünüyor. Temel bir TabView uygulaması oluşturmak basit bir XML dosyasıdır ve daha sonra içerik alanındaki her şey HTML / JS tarafından kontrol edilir. Titanium'un bazı çerçevelere (özellikle konum bilgilerine, telefon kimliğine vb. Erişim) bazı javascript erişimi sağladığını da biliyorum.

GÜNCELLEME: Titanium, Google Haritalar API'sını çerçevelerinin 0.8 sürümüne ekledi.


"Titanyum bir web geliştirici arka plan için daha kolay görünüyor." Beyan. Yerelden daha kolay demek istiyorsun değil mi? PhoneGap, web geliştirici geçmişi olan biriyle Titanyumdan daha uyumlu görünüyor gibi ...
Serhiy

4

Hedef c'yi öğrenmeli ve yerel uygulamaları programlamalısınız. Hayatı kolaylaştıracağını düşündüğünüz bu şeylere güvenmeyin. Apple, en kolay yolun yerel araçlarını ve dilini kullanmasını sağladı. 100 javascript satırınız için, öğeye bağlı olarak 3 kod satırında ya da hiç kodda aynı şeyi yapabilirim. Bazı öğreticiler izleyin - javascript anlıyorsanız o zaman objektif c zor değildir. Geçici çözümler perişan ve elma istediğiniz zaman fişi çekebilir.


3
Apple fişi çekebilir ... bu benim ilgilendiğim
Mickey Shine

6
Alıntı: "Apple yerel araçlarını ve dilini en kolay şekilde kullandığından emin oldu." Gerçekten bilmiyorlardı. Bunu yapmak isteselerdi, diyelim ki Python desteği sağlayacaklardı. Çöp toplama olurdu (tek başına çökme sıklığını azaltacaktır - çoğu iPhone uygulaması korkunç bir şekilde yazılmıştır). ObjC'yi kazıyorum ve sizin gibi js'den daha çok kullanmayı tercih ederim, ama bu op'un sorusu değildi. Ayrıca MonoTouch, geliştirmeyi bu seçeneklerden herhangi birinden daha kolay hale getirir. Bir satırda bir özellik oluşturabilirim; bir satırla Belge klasörüne referans alın ... vb. Apple'ın bitleri büyük ölçüde geliştirilebilir.
Rory Blyth

6
Apple'ın kendi ObjC alternatiflerini sunması iyi bir çözüm olabilir. ObjC'nin kontrol seviyesine ihtiyaç duymayan uygulamalar için bir şey size verir. Özellikle geliştiricilerin referans sayma ve özellik özelliklerinden ziyade işlevselliğe odaklanması gereken kurumsal uygulamalar için. Ya da en azından Xcode ve derleyici ile bunların çoğunu otomatikleştirin. Bana belirli varsayımların yapılmasına izin veren ve geliştiricinin seçtiği kodda atlanabilen bir anahtar ver (varsayılan olarak nesne özelliklerimi koru ve synthesize et - ve "gerçek" ObjC 2.0 gibi destek yerellerimi oluştur benim için). Vb
Rory Blyth

2
Temel olarak söylediğiniz şey, C # 'da IPhone uygulamaları yazalım. :)
Justin

3

Bahsettiğiniz çözümlerin hiçbiri, OS 3.0'da tanıtılan MapKit çerçevesine doğrudan erişmenizi sağlamaz.

Google Haritalar HTML widget'ları MapKit kadar iyi olmadığından (bir örnek için Google Latitude'a bakın), muhtemelen en iyi şekilde yerel bir Cocoa touch uygulaması geliştirmekten veya MapKit entegrasyonu eklemek için genişletebileceğiniz bir çözüm seçmekten çekinmeyin. PhoneGap bu şekilde genişletilebilir (varsayılan olarak açık kaynaktır) ve diğer bazı çözümler de olabilir.

edit: Titanium artık MapKit'i destekliyor


Teşekkür ederim. Ancak PhoneGap ve Titanyum arasında önemli bir fark var mı?
Mickey Shine

1
MapKit uzun süredir yerel olarak Titanyum'da mevcut.
jhaynie

@jhaynie: Teşekkürler. Bu cevabı, Titanyum'un artık desteğe sahip olduğunu yansıtacak şekilde revize ettim (Eylül ayında yazılmadı)
rpetrich

1

Korona denedim. Mp3 ses akışını desteklemediğini fark edene kadar iyiydi. Ben de orada durdum. Ben gerçekten bir iphone uygulaması geliştirici olmak istiyorum obj c öğrenmek gerektiğini düşünüyorum. Tüm radyo istasyonları listesi olan bir uygulama yapmak istedim ve onlara tıklayın oynamaya başlar.


2
Corona, MP3 dosyalarını çalmayı destekler ( developer.anscamobile.com/reference/index/mediaplaysound )
Luc Stepniewski
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.