Porównanie Corona, Phonegap, Titanium

310

Jestem programistą i chcę przenieść moje produkty internetowe na iPhone'a. Jeden z produktów jest podobny do Google Maps: pokaż mapę na ekranie telefonu, możesz przeciągnąć lub zmienić rozmiar mapy i wyświetlić niektóre informacje, które dodajemy do mapy.

Wiem, że istnieją pewne technologie, które pozwalają używać HTML, CSS i JavaScript do tworzenia natywnych aplikacji na iPhone'a. Zidentyfikowałem kilka:

Czy są inne podobne produkty? Jakie są między nimi różnice? który powinienem wybrać?

Mickey Shine
źródło
1
Istnieje również Adobe FLEX, który może generować aplikacje na iPhone'a od czerwca 2011 r. Adobe.com/products/flex
neoneye
1
Sprawdź to. Koleś tutaj jest do punktu porównania. savagelook.com/blog/portfolio/…
Hikmat Khan

Odpowiedzi:

368

Zarejestrowałem się w Stackoverflow wyłącznie w celu skomentowania najczęściej głosowanej odpowiedzi na górze. Złą rzeczą jest to, że stackoverflow nie pozwala nowym członkom na publikowanie komentarzy. Więc muszę sprawić, aby ten komentarz bardziej przypominał odpowiedź.

Odpowiedź Rory'ego Blytha zawiera kilka ważnych uwag na temat dwóch mobilnych ram frameworkowych javascript. Jednak jego kluczowe punkty są błędne. Prawda jest taka, że ​​Titanium i PhoneGap są bardziej podobne niż różne. Oba udostępniają funkcje telefonu komórkowego za pośrednictwem zestawu interfejsów API javascript, a logika aplikacji (html, css, javascript) działa w natywnej kontrolce WebView.

  1. PhoneGap to nie tylko natywne opakowanie aplikacji internetowej. Poprzez interfejsy API javascript PhoneGap „aplikacja internetowa” ma dostęp do funkcji telefonu komórkowego, takich jak geolokalizacja, kamera akcelerometru, kontakty, baza danych, system plików itp. Zasadniczo dowolną funkcję, którą zapewnia zestaw SDK telefonu komórkowego, można „połączyć” z świat javascript. Z drugiej strony normalna aplikacja internetowa działająca w mobilnej przeglądarce internetowej nie ma dostępu do większości tych funkcji (bezpieczeństwo jest głównym powodem). Dlatego aplikacja PhoneGap jest bardziej aplikacją mobilną niż aplikacją internetową. Z pewnością można użyć PhoneGap do zawinięcia aplikacji internetowej, która w ogóle nie korzysta z interfejsów API PhoneGap, ale nie po to została stworzona.

  2. Titanium NIE kompiluje kodu HTML, CSS ani javascript w „natywne bity”. Są one pakowane jako zasoby do pakietu wykonywalnego, podobnie jak osadzony plik obrazu. Po uruchomieniu aplikacji zasoby te są ładowane do kontrolki UIWebView i tam uruchamiane (oczywiście jako javascript, a nie natywne bity). Nie ma czegoś takiego jak kompilator javascript-to-native-code (lub to-object-c). Odbywa się to również w PhoneGap. Z architektonicznego punktu widzenia te dwie ramy są bardzo podobne.

Czy oni się różnią? Tak. Po pierwsze, Titanium wydaje się być bardziej bogaty w funkcje niż PhoneGap, łącząc więcej funkcji telefonu komórkowego z javascript. Najbardziej zauważalne jest to, że PhoneGap nie udostępnia wielu (jeśli w ogóle) natywnych składników interfejsu użytkownika javascript. Z drugiej strony Titanium ma kompleksowe interfejsy API interfejsu użytkownika, które można wywoływać w javascript, aby tworzyć i kontrolować wszelkiego rodzaju natywne formanty interfejsu użytkownika. Wykorzystując te interfejsy API interfejsu użytkownika, aplikacja Titanium może wyglądać bardziej „natywnie” niż aplikacja PhoneGap. Po drugie, PhoneGap obsługuje więcej platform telefonów komórkowych niż Titanium. Interfejsy API PhoneGap są bardziej ogólne i mogą być używane na różnych platformach, takich jak iPhone, Android, Blackberry, Symbian itp. Tytan jest przede wszystkim ukierunkowany na iPhone'a i Androida. Niektóre z jego interfejsów API są specyficzne dla platformy (jak interfejsy API iPhone'a).

Jeśli więc zależy Ci na tym, aby aplikacja była bardziej „natywna”, Titanium jest lepszym wyborem. Jeśli chcesz łatwiej „przenieść” aplikację na inną platformę, PhoneGap będzie lepszy.

Zaktualizowano 8/13/2010: Link do odpowiedzi pracownika Titanium na pytanie Mickeya.

Zaktualizowano 12/04/2010: Postanowiłem nadać temu postowi roczną recenzję, aby informacje były aktualne. Wiele rzeczy zmieniło się w ciągu roku, przez co niektóre informacje z pierwszego postu stały się nieaktualne.

Największa zmiana nastąpiła z Titanium. Na początku tego roku Appcelerator wydał Titanium 1.0, który drastycznie odszedł od poprzednich wersji z architektonicznego punktu widzenia. W wersji 1.0 kontrolka UIWebView nie jest już używana. Zamiast tego wywołujesz interfejsy API Titanium dla dowolnych funkcji interfejsu użytkownika. Ta zmiana oznacza kilka rzeczy:

  1. Interfejs aplikacji staje się całkowicie natywny. W Twojej aplikacji nie ma już interfejsu internetowego, ponieważ natywne interfejsy API Titanium przejmują kontrolę nad wszystkimi Twoimi potrzebami. Tytan zasługuje na duże uznanie, ponieważ jest pionierem w dziedzinie „Native Cross-Platform Native UI”. Daje to programistom, którzy preferują wygląd natywnego interfejsu użytkownika, ale nie lubią oficjalnego języka programowania jako alternatywy.

  2. Nie możesz używać HTML ani CSS w swojej aplikacji, ponieważ widok sieci zniknął. (Uwaga: nadal możesz tworzyć widok strony internetowej w Titanium. Ale jest kilka funkcji Titanium, z których możesz skorzystać w widoku strony internetowej.) Titanium Pytania i odpowiedzi: Co się stało z HTML i CSS?

  3. Nie będziesz mógł używać popularnych bibliotek JS, takich jak JQuery, które zakładają istnienie obiektu DOM. Nadal używasz JavaScript jako języka kodowania. Ale to właściwie jedyna technologia internetowa, z której możesz skorzystać, jeśli przyjdziesz do Titanium 1.0 jako programista.

Tytanowe wideo: Co nowego w Titanium 1.0.

Teraz, czy Titanium 1.0 kompiluje JavaScript w „natywne bity”? Nie. Appcelerator wreszcie wyjaśnił ten problem dzięki blogowi dla programistów: Titanium Guides Project: JS Environment. My, programiści, jesteśmy bardziej autentycznymi ludźmi niż ci z działu marketingu, prawda? :-)

Przejdź do PhoneGap. Nie ma wielu nowych rzeczy do powiedzenia na temat PhoneGap. Uważam, że rozwój PhoneGap nie był bardzo aktywny, dopóki IBM nie wszedł na pokład jeszcze w tym roku. Niektórzy twierdzili nawet, że IBM wnosi więcej kodu do PhoneGap niż Nitobi. To prawda, czy nie, dobrze jest wiedzieć, że PhoneGap jest aktywnie rozwijany.

PhoneGap nadal opiera się na technologiach internetowych, a mianowicie HTML, CSS i JavaScript. Wygląda na to, że PhoneGap nie planuje łączenia natywnych funkcji interfejsu użytkownika z JavaScript, tak jak robi to Titanium. Podczas gdy interfejs sieciowy wciąż pozostaje w tyle za natywnym interfejsem użytkownika pod względem wydajności oraz natywnego wyglądu i sposobu działania, luka ta jest szybko zamykana. Istnieją dwa trendy w technologiach internetowych, które zapewniają jasne funkcje interfejsu użytkownika mobilnego Internetu pod względem wydajności:

  1. Silnik JavaScript przenoszący się z interpretera na maszynę wirtualną. JavaScript jest skompilowany w JIT w natywnym kodzie w celu szybszego wykonania. Silnik Safari JS: SquirrelFish Extreme

  2. Renderowanie stron internetowych przechodzi od polegania na procesorze do korzystania z akceleracji GPU. Zadania wymagające intensywnej grafiki, takie jak przejście strony i animacja 3D, stają się znacznie płynniejsze dzięki akceleracji sprzętowej. GPU Accelerated Compositing w Chrome

Takie ulepszenia pochodzące z przeglądarek komputerowych są szybko dostarczane do przeglądarek mobilnych. W rzeczywistości, od iOS 3.2 i Androida 2.0, kontrola mobilnego widoku internetowego stała się znacznie bardziej wydajna i przyjazna dla HTML5. Przyszłość mobilnej sieci jest tak obiecująca, że ​​przyciągnęła duże dziecko do miasta: JQuery ogłosiło niedawno swoją platformę mobilną. Dzięki JQuery Mobile udostępniającym gadżety interfejsu użytkownika oraz PhoneGap zapewniającym funkcje telefonu, oba razem tworzą idealną mobilną platformę internetową.

Powinienem również wspomnieć o Sencha Touch jako innym frameworku interfejsu mobilnego interfejsu użytkownika. Wersja Sencha Touch 1.0 została niedawno wydana w ramach modelu podwójnej licencji, który obejmuje GPLv3. Sencha Touch działa dobrze z PhoneGap, podobnie jak JQuery Mobile.

Jeśli jesteś programistą GWT (tak jak ja), możesz wypróbować GWT Mobile , projekt open source do tworzenia mobilnych aplikacji internetowych za pomocą GWT. Zawiera otokę PhoneGap GWT, która umożliwia korzystanie z PhoneGap w GWT.

DennisJZH
źródło
10
Um ... mówisz, że „PhoneGap to nie tylko natywne opakowanie aplikacji internetowej”. Następnie omawiasz dostęp, jaki daje ci natywna funkcjonalność urządzenia. Myślę, że opisałem to, pisząc: „To, co zapewnia PhoneGap, to pomost między JavaScript i interfejsami API urządzeń natywnych. Więc piszesz JavaScript przeciwko interfejsom API PhoneGap, a następnie PhoneGap wykonuje odpowiednie odpowiednie wywołanie rodzime. Pod tym względem jest to różni się od wdrażania zwykłej starej aplikacji internetowej ”. Jeśli zarejestrowałeś się tylko po to, by obalić moje oświadczenie, powinieneś przeczytać je w całości. Wiem, że moje posty są długie, ale ... nadal.
Rory Blyth,
5
Mógłbym być bardziej przejrzysty, ale szczegóły na temat interfejsów API są skomplikowane, ponieważ zmieniały się w czasie od urządzenia do urządzenia, co możesz zrobić (zostało znacznie ulepszone, ale matryca funkcji dla różnych platform przeszła sporo zmian). Napisałem o jednej z kluczowych różnic, a to, co napisałem, jest poprawne - w rzeczywistości jest zgodne z tym, co napisałeś. Po prostu wdałeś się w bardziej szczegółowe informacje na temat dostępnych interfejsów API.
Rory Blyth,
9
Jeśli chodzi o Titanium i „natywne bity”, wydaje mi się, że mój błąd polegał na przeczytaniu tego na ich stronie - bezpośrednio na pierwszej stronie Appceleratora: „działają świetnie, ponieważ kompilujemy Titanium do kodu natywnego w celu uzyskania najwyższej wydajności”. Być może powinieneś do nich napisać, aby poinformować ich, że się mylą. Sprawdź to: tinyurl.com/yzlzvk5
Rory Blyth
6
Aby uzyskać więcej informacji, zapoznaj się z często zadawanymi pytaniami Titanium - „Czy te mobilne aplikacje internetowe lub natywne aplikacje mobilne” obejmują zwięźle ten problem. Chciałbym ponownie opublikować cytat tutaj, ale myślę, że wolałbyś dostać go bezpośrednio od firmy, ponieważ są one, jak sądzę, autorytetami w sprawie ich produktu: tinyurl.com/ya9topg
Rory Blyth
4
Dennis, dzięki za świetną odpowiedź. Nadal pracujesz z Titanium? Czy możesz teraz skomentować, że wylądował 1.7?
PaulM
193

Z tego, co zebrałem, oto kilka różnic między nimi:

  • PhoneGap generuje natywne opakowania dla aplikacji internetowych . Wyrzuca projekt WhthingYourPlatformIs, budujesz go i wdrażasz. Jeśli mówimy o iPhonie (gdzie spędzam czas), nie wydaje się to niczym innym niż tworzenie programu uruchamiającego aplikacje internetowe (skrót, który ma własną ikonę Springboard, dzięki czemu można go uruchomić tak ( jak ) natywna aplikacja). Sama „aplikacja” nadal jest html / js / etc. I działa w kontrolowanym oknie przeglądarki. Poza tym PhoneGap stanowi pomost między JavaScript i API natywnych urządzeń. Więc piszesz JavaScript przeciwko interfejsom API PhoneGap, a następnie PhoneGap wykonuje odpowiednie odpowiednie połączenie natywne. W związku z tym, że jest inna od wdrażania zwykły starą aplikację.

  • Źródło tytanu jest kompilowane do natywnych bitów. To znaczy, twój html / js / etc. nie są po prostu dołączane do projektu, a następnie hostowane wewnątrz kontrolki przeglądarki internetowej - są przekształcane w aplikacje natywne. Oznacza to na przykład, że interfejs aplikacji będzie się składał z natywnych składników interfejsu użytkownika. Istnieją sposoby na uzyskanie natywnego wyglądu bez posiadania natywnej aplikacji, ale ... cóż ... co to zwykle koszmar.

Oba są podobne pod tym względem, że piszesz wszystkie swoje rzeczy przy użyciu typowych technologii internetowych (html / js / css / bla bla bla bla) i że masz dostęp do natywnej funkcjonalności poprzez niestandardowe interfejsy API JavaScript.

Ale znowu aplikacje PhoneGap (PhonGapps? Nie wiem ... czy to głupia nazwa? Łatwiej powiedzieć - wiem tyle) zaczynają swoje życie jako aplikacje internetowe, a kończą jako aplikacje internetowe. Na iPhonie Twój html / js / etc. jest właśnie wykonywany w kontrolce UIWebView, a API API PhoneGap JavaScript, które wywołuje twoje js, są kierowane do natywnych API.

Aplikacje Titanium stają się aplikacjami natywnymi - zostały opracowane przy użyciu technologii web dev.

Co to właściwie znaczy ?

  1. Aplikacja Titanium będzie wyglądać jak „prawdziwa” aplikacja, ponieważ ostatecznie jest to „prawdziwa” aplikacja.

  2. Aplikacja PhoneGap będzie wyglądać jak aplikacja internetowa hostowana w kontrolce przeglądarki, ponieważ ostatecznie jest to aplikacja internetowa hostowana w kontrolce przeglądarki.

Który jest dla ciebie odpowiedni?

  • Jeśli chcesz pisać natywne aplikacje przy użyciu umiejętności tworzenia stron internetowych, Titanium jest najlepszym wyborem.

  • Jeśli chcesz napisać aplikację wykorzystującą umiejętności tworzenia stron internetowych, którą możesz realistycznie wdrożyć na wiele platform (iPhone, Android, Blackberry i cokolwiek innego, co zdecydują się dołączyć) i jeśli chcesz uzyskać dostęp do podzbioru funkcji platformy natywnej (GPS, akcelerometr itp.) poprzez zunifikowany interfejs API JavaScript, PhoneGap jest prawdopodobnie tym, czego chcesz.

Być może pytasz: dlaczego miałbym chcieć napisać aplikację PhoneGapp (postanowiłem użyć nazwy) zamiast aplikacji internetowej, która jest hostowana w Internecie? Czy nadal nie mogę uzyskać dostępu do niektórych funkcji urządzenia natywnego w ten sposób, ale mam też wygodę prawdziwego wdrożenia internetowego zamiast zmuszania użytkownika do pobrania mojej „natywnej” aplikacji i zainstalowania jej?

Odpowiedź brzmi: ponieważ możesz przesłać aplikację PhoneGapp do App Store i pobierać za nią opłatę. Dostajesz także tę ikonę uruchamiania, która utrudnia użytkownikowi zapomnienie o Twojej aplikacji (znacznie bardziej prawdopodobne jest, że zapomnę o zakładce niż o ikonie aplikacji).

Z pewnością możesz pobierać opłaty za dostęp do aplikacji internetowej, ale ile osób naprawdę przejdzie przez ten proces? W App Store wybieram aplikację, stukam przycisk „Kup”, wpisuję hasło i gotowe. Instaluje się. Kilka sekund później używam go. Gdybym musiał skorzystać z jednorazowego interfejsu do mobilnej transakcji internetowej innej osoby, co prawdopodobnie oznacza konieczność wybicia mojego imienia i nazwiska, adresu, numeru telefonu, numeru CC i innych rzeczy, których nie chcę wybierać, prawie na pewno nie zrobiłbym tego. przejść przez to. Ufam też Apple - jestem pewien, że Steve Jobs nie będzie logował moich informacji, a następnie pobierał za moje kopie kilka niegrzecznych subskrypcji czasopism za kopnięcia.

W każdym razie, z wyjątkiem faktu, że zaangażowana jest technologia web dev, PhoneGap i Titanium różnią się bardzo - do tego stopnia, że ​​są tylko pozornie porównywalne.

Nawiasem mówiąc, nie znoszę aplikacji internetowych, a jeśli czytasz recenzje iTunes App Store, użytkownicy są całkiem dobrzy w ich wykrywaniu. Nie będę wymieniać żadnych nazw, ale mam w telefonie kilka „aplikacji”, które wyglądają i działają jak śmieci, a to dlatego, że są to aplikacje internetowe hostowane w instancjach UIWebView. Gdybym chciał skorzystać z aplikacji internetowej, otworzyłbym Safari i, wiesz, nawigację do jednej. Kupiłem iPhone'a, ponieważ chcę rzeczy, które są iPhone-y. Nie mam problemu z użyciem, powiedzmy, niesamowitej aplikacji internetowej Google w Safari, ale poczułbym się oszukany, gdyby Google po prostu wrzucił zakładkę do Springboard, prezentując aplikację internetową jako natywną.

Muszę już iść. Moja dziewczyna ma na twarzy ten wyglądający jak proszę, przestań używać tego komputera na trzy sekundy.

Rory Blyth
źródło
22
Problem z odpowiedzią polega na tym, że jest to w większości NIEPRAWIDŁOWE. Zobacz odpowiedź DennisJZH poniżej.
jbwiv
9
@jbwiv - Problem z twoim komentarzem polega na tym, że opiera się on głównie na odpowiedzi DennisJZH, która jest w większości NIEPRAWIDŁOWA. Zobacz moje odpowiedzi poniżej. Aby uniknąć dalszych nieporozumień, sugeruję, abyście oboje przejrzeli oficjalną dokumentację produktów i przeczytali w pełni mój post . Dziękuję Ci bardzo.
Rory Blyth,
15
@Matthew - Och, gf zdecydowanie ma priorytet :) Co do tych pytań, które są nieistotne w zasadzie dlatego, że zachodzą zmiany (jeśli źle zrozumiałem twoje znaczenie, przepraszam), faktem jest, że ludzie chcą odpowiedzi na istniejące problemy. Moglibyśmy argumentować, że nic z tego nie ma znaczenia, ponieważ Ziemia w przyszłości zostanie po prostu ugotowana przez Słońce, ponieważ pali się ono i rozszerza, niszcząc naszą planetę, ale ... daje nam to coś do zrobienia, czekając.
Rory Blyth,
2
@Matthew - Także ta osoba jest gotów spróbować nowych rzeczy. Może nie tak, jak wolisz, ale wciąż jest nowy. Nadal musisz się dowiedzieć o rozwoju iPhone'a (przeczytaj dokumentację na temat wytycznych dla interfejsu użytkownika itp.). Nie ma uzasadnionego powodu, aby próbować odwieść kogoś od próby osiągnięcia czegoś tylko dlatego, że nie widzisz w tym wartości. Na przykład nienawidzę grzybów, ale nie próbuj powstrzymywać innych przed jedzeniem. Rozumiem, że lubią grzyby w taki sam sposób, jak kocham szafran i wiem, że nie chcę, aby ktokolwiek próbował mi odebrać szafran tylko dlatego, że mu się nie podoba.
Rory Blyth,
1
Tak, ale jeśli jesteś prawdziwym kreatorem technologii internetowej, jestem pewien, że nikt nie będzie w stanie zrozumieć, że twoja „aplikacja internetowa” nie jest tak naprawdę aplikacją natywną. W przypadkach, gdy oczywiste jest, że aplikacja jest „aplikacją internetową” zawartą w UIWebView, oznacza to, że twórca nie poświęcił czasu lub nie dbał o to, aby była wystarczająco wysokiej jakości.
trusktr
62

Biorę udział w kursie poświęconym rozwojowi Androida / iPhone'a i spędziliśmy 8 tygodni z Titanium (nie na pełny etat) (wersja to Titanium 1.4.2, a czas około listopada 2010). Oto moje doświadczenie.

Podwójne celowanie w telefonie iPhone Android

Chociaż przewodniki API twierdzą, że funkcja jest dostępna zarówno dla Androida, jak i iPhone'a, tak nie jest. Wiele rzeczy po prostu nie działa na jednej z platform. Niektóre rzeczy działają inaczej.

Wiele osób w klasie zrobiło aplikacje na iPhone'a i nie mogą zmusić ich do pracy na Androidzie bez większych zmian. Opracowałem prostą aplikację dla dzieci o nazwie Animap (patrz Android Market / Appstore w Szwecji) i zacząłem programować pod Windows. Gdy cel systemu Android działał, otworzyłem projekt na OS X. Nie pokazuje on żadnych kompilacji dla iPhone'a, tylko dla Androida. Musisz uruchomić projekt podwójnego celu w OS X. (Ok, skopiowałem odpowiednie pliki do nowego projektu). Kolejny problem - animacje nie działają na iPhonie (działają na Androidzie). Przewijanie zdarzeń nie działa tak samo na iPhonie. (tzn. na Androidzie pojawia się zdarzenie retusz, gdy użytkownik przestaje przewijać i uwalnia palec z ekranu, nie dzieje się tak na iPhonie).

Ponieważ gdzieś nie wspomniano o tym, po prostu musisz wykonać programowanie prób i błędów na pierwszej platformie, a następnie na drugiej platformie. Przez próbę i błąd mam na myśli, że zajmie to około dwóch dni, aby uzyskać tak prostą aplikację jak Animap działającą na innej platformie. Będziesz także musiał mieć, jeśli (Android) to ... lub jeśli (iPhone) ... cały kod ...

Pobierz i skonfiguruj

Musisz postępować zgodnie z instrukcjami do listu. Nie próbuj używać Java 64-bitowego. Nie skompiluje aplikacji demonstracyjnej KitchenSink 1.4.0. (1.3 działa OK!) Musisz umieścić pliki bezpośrednio na dysku C, ponieważ długie ścieżki spowodują, że program zewnętrzny nie otrzyma wszystkich parametrów wiersza poleceń, jeśli będą zbyt długie. (W porządku dla małych programów) 1/3 razy łańcuch narzędzi po prostu zatrzymuje się i musisz ponownie nacisnąć „uruchom”. Wtedy to prawdopodobnie zadziała ... bardzo zawodnie. Symulator nie zostanie znaleziony przy uruchomieniu, a następnie musisz po prostu zabić adb.exe za pomocą Ctrl + Alt + Delete i spróbuj ponownie.

Połączenie internetowe

W sieci Wi-Fi czasami tracisz połączenie na żywo, a Titanium ulega awarii (interfejs kompilacji / wdrażania). Jeśli nie masz działającego połączenia internetowego, nie uruchomi się, ponieważ nie może zalogować się do swoich serwerów.

API

W porównaniu z tym CSS, HTML i jQuery to pestka. Titanium przypomina każdy inny stary interfejs GUI API i musisz ustawić pewne właściwości dla każdego przycisku / pola / etc. Złe ustawienie pola jest łatwe, pamiętając wszystkie właściwości, które należy ustawić? Czy przeliterowałeś go wielkimi literami we właściwym miejscu? (ponieważ kompilator nie przechwytuje tego, ale będzie wyświetlany jako błąd czasu wykonywania, jeśli masz szczęście przetestować tę część)

W Titanium rzeczy po prostu psują się, gdy dodasz inny widok na kontrolce lub klikniesz gdzie indziej w GUI.

Dokumentacja

Kilka stron interfejsu API nosi symbol Androida, ale zwróci wartość null tylko podczas próby utworzenia formantu. Mimo symboli nie są one po prostu dostępne na platformie Android. Czasami Android wspomina, że ​​nie obsługuje określonej metody, ale brakuje całego API.

Zlew kuchenny

Aplikacja demo. Czy wspominałem, że nie kompiluje się, jeśli umieścisz go w folderze projektu Eclipse, ponieważ ścieżka staje się zbyt długa? Musi być umieszczony na dysku C w folderze głównym. Obecnie używam linku symbolik (mklink / J ...)

Nieudokumentowane metody

Musisz prawdopodobnie użyć rzeczy jako label.setText („Hello World”), aby zmienić wiarygodną etykietę, ale nie jest to w ogóle udokumentowane.

Debugowanie

Titanium.API.info („Wydruki są jedynym sposobem debugowania”);

Redagowanie

Interfejsy API nie są dostępne w żadnym dobrym formacie, więc nie można uzyskać zwykłego uzupełniania kodu z pomocą itp. W środowisku Eclipse. Aptana, pomóż mi!

Sprzęt komputerowy

Wydaje się, że kompilator / narzędzia nie są wielowątkowe, więc szybki komputer z szybkim dyskiem twardym jest koniecznością, ponieważ musisz wykonać wiele prób i błędów. Czy wspomniałem o złej dokumentacji? Musisz wypróbować wszystko, bo nie możesz temu ufać!

Niektóre pozytywne rzeczy

  • Otwarte źródło
  • Z poprzednich projektów obiecałem sobie, że nigdy więcej nie użyję zamkniętego źródła, ponieważ nie można po prostu naprawić rzeczy, poświęcając na to wiele godzin i siły roboczej. Ważne, gdy spóźniasz się z projektem i musisz dotrzymać trudnego terminu. Jest to oprogramowanie typu open source i udało mi się zrozumieć, dlaczego łańcuch narzędzi się zrywa, a także go naprawić.

  • Baza danych błędów

  • Jest również otwarty. Możesz po prostu zobaczyć, że nie jesteś sam i zrobić obejście zamiast kolejnych 4 godzin spędzonych na próbach i błędach.

  • Społeczność

  • Wydaje się być aktywny na swoich forach.

Błędy

  • Tytan 1.4 nie jest bezpieczny dla wątków . Oznacza to, że jeśli korzystasz z wątków (użyj właściwości url: w wywołaniu createWindow) i program taki jak wątki działa i wysyła zdarzenia z danymi tam iz powrotem, napotykasz wiele bardzo, bardzo dziwnych rzeczy - utracone programy obsługi, utracone Windows, zbyt wiele zdarzeń, zbyt mało zdarzeń itp. Wszystko to zależy od czasu, umieszczenie wierszy kodu w innej kolejności może spowodować awarię lub uzdrowienie aplikacji. Dodanie okna w innym pliku.js przerywa wykonanie aplikacji app.js ... Spowoduje to również zniszczenie wewnętrznych struktur danych w Titanium, ponieważ czasami mogą one aktualizować wewnętrzne struktury danych równolegle, zastępując właśnie zmienioną wartość czymś innym.

Wiele problemów, jakie miałem z Titanium, pochodzi z mojego doświadczenia w systemach czasu rzeczywistego, takich jak OSE, które obsługują setki wątków, zdarzeń i przekazywania wiadomości. Ma to działać w Titanium 1.4, ale po prostu nie robi tego niezawodnie.

  • JavaScript (który jest dla mnie nowy) umiera cicho po błędach środowiska wykonawczego. Oznacza to również, że małe i typowe błędy, takie jak błędna pisownia nazwy zmiennej lub odczytanie wskaźnika zerowego, nie ulegają awarii, kiedy powinny, więc można ją debugować. Zamiast tego niektóre części twojego programu po prostu przestają działać, na przykład moduł obsługi zdarzeń, ponieważ zgubiłeś / popełniłeś błąd.

  • Następnie mamy bardziej proste błędy w Titanium, takie jak niektóre parametry, które nie działają w funkcjach (co jest dość powszechne przynajmniej na platformie Android).

  • Szybkość cyklu debugowania prób i błędów Po uruchomieniu Titnium Developer na kilku komputerach zauważyłem, że wąskim gardłem jest dysk twardy. Dysk SSD na laptopie sprawia, że ​​cykl kompilacji jest około 3-5 razy szybszy niż na dysku 4200 rpm. Na komputerze stacjonarnym posiadanie podwójnych dysków w trybie RAID 1 (tryb stripowania) sprawia, że ​​kompilacja jest o około 25 procent szybsza niż na pojedynczym dysku z nieco szybszym procesorem, a także pokonuje laptop z dyskiem SSD.

Podsumowanie

  • Z komentarzy w tym wątku wynika, że ​​istnieje walka o liczbę platform, dla których takie narzędzie może dostarczyć aplikacje. Liczba API wydaje się być kluczową zaletą.

Świeci to bardzo, gdy zaczniesz go używać. Jeśli spojrzysz na otwarty program do śledzenia błędów, zobaczysz, że liczba błędów rośnie szybciej niż liczba naprawionych błędów. Zazwyczaj jest to znak, że programiści dodają więcej funkcji, zamiast koncentrować się na zmniejszaniu liczby błędów.

Jako konsultant próbujący dostarczyć raczej proste aplikacje do wieloplatformowych aplikacji dla klienta - nie jestem pewien, czy jest to rzeczywiście szybsze niż tworzenie aplikacji natywnych na dwóch platformach. Wynika to z faktu, że kiedy osiągasz prędkość, jesteś szybki z Tytanem, ale nagle spoglądasz w dół i znajdujesz się w tak głębokiej dziurze, że nie wiesz, ile godzin trzeba poświęcić na obejście tego problemu. Po prostu NIE możesz obiecać określonej funkcjonalności w określonym terminie / czasie / koszcie.

O sobie: Używam Pythona od dwóch lat z wxPython. (że GUI jest niespójne, ale nigdy się tak nie psuje. Być może to ja nie zrozumiałem modelu wątków używanego przez Javascript i Titanium, ale nie jestem sam według ich otwartych forów dyskusyjnych, obiekty GUI nagle używają niewłaściwego kontekstu / nie aktualizuję .. ???) wcześniej mam doświadczenie w programowaniu C i ASM dla urządzeń mobilnych.

[edytuj - dodano część z błędami i nie jest bezpieczny dla wątków] [Edytuj - teraz pracowałem z nim przez miesiąc +, głównie na PC, ale także na OS X. Dodano podwójne celowanie w telefonie iPhone i systemie Android. Dodano szybkość cyklu debugowania prób i błędów.]

użytkownik 288299
źródło
1
W wersji 1.4 Titanium przeglądałem teraz pliki .apk dostarczane z Titanium i są one po prostu niezbyt dobre. Działają, ale kompletny katalog kompilacji jest tam trochę spakowany. Oznacza to, że drobne wady kompilacji, takie jak kopiowanie ekranu powitalnego do trzech różnych lokalizacji podczas kompilacji, nagle zużywają się, ponieważ mam duży obraz ekranu powitalnego, około 1 megabajta pamięci w telefonie. Dotyczy to tylko bardzo prostego wariantu hello-world. Kod źródłowy javascript jest również kopiowany do kompilacji i plików .kk, a tym samym dostarczany do wszystkich klientów.
user288299,
Wydanie 1.5 zostało już wydane i mówi się, że jest poważnym przepisem dla platformy Android. Nie przetestuję tego, ponieważ muszę teraz nauczyć się programowania na Androida.
user288299,
Wydanie 1.5 zostało już wydane i mówi się, że jest poważnym przepisem dla platformy Android. Nie będę tego testować, ponieważ przeszliśmy teraz do nauki rodzimego programowania Androida. Ponieważ dzisiaj uczono nas o cyklu życia natywnego Androida, uważam, że problemy, które miałem z niektórymi oknami tracącymi zmienną zawartość przy drugim wyświetleniu, były spowodowane tym, że Titanium nie zapisał stanu przed stanem onPause () cyklu życia. developer.android.com/guide/topics/fundamentals.html#lcycles . Wywołanie Titanium.Map.MapView.hide () i później show () może po prostu zabić zmienne lokalne dla mapy
288299,
1
Po prostu grałem z 1.7, twój opis jest taki właściwy. Ta platforma jest bardzo popularna, ma straszną wydajność i niezliczone godziny pracy nad wyszukiwaniem. Jeśli masz zasoby na początku projektu, zbuduj natywną dla każdej platformy.
Jonathon Kresner,
25

Corona SDK (Ansca Mobile) używa Lua jako języka kodowania. Zobacz lua.org, aby uzyskać więcej informacji na temat Lua.

Chociaż planujemy dodać dalszą integrację z Internetem i elementy natywnego interfejsu użytkownika, skupimy się na aplikacjach intensywnie korzystających z grafiki, takich jak tworzenie gier, a nie na technologiach internetowych. Innymi słowy, nie wyobrażamy sobie ludzi piszących aplikacje Corona w całości w JavaScript / HTML / CSS.

Evan Kirchhoff
źródło
Czy masz jakiś plan lub harmonogram czasowy dla skryptów natywnego interfejsu użytkownika? Sporo zrobiłem z Luą i naprawdę chcę kochać Corona. W przypadku gier niezwiązanych z grą Titanium wydaje się nieco naprzód.
uroc
4
Cześć, Uroc. Mamy natywne funkcje interfejsu użytkownika dostępne w wersji 1.1 (ETA jeszcze w tym tygodniu!), A wkrótce kolejne. Jednak mam wrażenie, że Titanium wykonał dobrą robotę, ujawniając dużą liczbę natywnych elementów interfejsu użytkownika, podczas gdy my skupimy się na najważniejszych elementach interfejsu użytkownika, wkładając jednocześnie więcej wysiłku inżynierii w funkcje animacji i renderowania. Powodem jest to, że (i) istnieją już dobre produkty dla aplikacji tylko w interfejsie użytkownika, (ii) interfejs użytkownika jest najbardziej przyjazną częścią kakao (relatywnie mówiąc!), Ale (iii) wszystko, co wiąże się z animacją OpenGL, jest bolesne dla iPhone'a na za chwilę.
Evan Kirchhoff
wydaje się, że Corona nadaje się do tworzenia gier zamiast aplikacji, prawda?
anticafe
18

Pracuję z Titanium od ponad tygodnia i mam wrażenie, że dobrze oceniam jego słabość.

1) Jeśli masz nadzieję, że użyjesz tego samego kodu na wielu platformach, powodzenia! Zobaczysz coś takiego jak backgroundGradient i będziesz zaskoczony, dopóki nie dowiesz się, że wersja na Androida go nie obsługuje. Następnie musisz wrócić do korzystania z obrazu gradientowego, czy równie dobrze można go użyć w obu wersjach, aby ułatwić kod, prawda?

2) Wiele dziwnych zachowań, na sdk Titanium Android musisz zrozumieć, czym jest „ciężkie” okno, aby uruchomić przycisk Wstecz lub jeszcze lepiej śledzić zdarzenia orientacji. Nie tak naprawdę jest platforma Android, po prostu Titanium próbuje sprawić, by ich API działało.

3) Twój wyrzucony w ciemność, Rzeczy ulegnie awarii i musisz zacząć komentować kod, a następnie, gdy go znajdziesz, nigdy go nie używaj. Istnieją pewne oczywiste błędy, takie jak orientacja i procenty na Androidzie, które były problemem od ponad sześciu miesięcy.

4) Błędy .... jest wiele błędów i będą zgłaszane, siedzą przez miesiące, zostaną naprawione za kilka dni. Dziwię się, że planują nawet wypuszczenie sdk na telefony komórkowe z czarnymi jagodami, gdy istnieje wiele innych problemów z Androidem.

5) Titanium Iphone w porównaniu z silnikami javascript Titanium Android są zupełnie inne. W wersji na Androida możesz pobierać zdalne pliki javascript, dołączać i używać bibliotek takich jak mootools, jquery i tak dalej. Byłem w niebie, kiedy się o tym dowiedziałem, ponieważ nie musiałem ciągle kompilować aplikacji na Androida. Proces instalacji aplikacji na Androida trwa tak długo! Iphone nic z tego nie jest możliwe, również wersja na iPhone'a ma znacznie szybszy silnik javascript.

Jeśli trzymasz się z dala od wielu natywnych części interfejsu użytkownika, tj. Zamiast tego użyj setInterval do wykrywania zmian orientacji, pozostawania przy obrazach gradientowych, zapomnienia o przycisku Wstecz, tworzenia własnych animacji, zapomnienia nagłówka okna, pasków narzędzi i pulpitu nawigacyjnego. Naprawdę możesz stworzyć interfejs API działający na obu, który nie wymaga dużo przepisywania. Ale w tym momencie jest tak samo powolny jak aplikacja internetowa.

Więc czy warto? Po całym bólu jest to warte każdej minuty. Możesz wyodrębnić logikę i po prostu zbudować inny interfejs dla każdego, a nie wszędzie, gdzie indziej. Tytan umożliwia szybkie i płynne aplikacje. Tracisz potężne możliwości układu na każdej platformie, ale jeśli uważasz, że jest to proste, wszystko można zrobić w jednym języku.

Dlaczego nie aplikacja internetowa? Na rynku podstawowym telefony z Androidem są strasznie wolne, aby generować przeglądanie stron internetowych i zużywają dużo pamięci, której można użyć do bardziej złożonej logiki.

Joseph Montanez
źródło
9

natywny mapkit jest obsługiwany w Titanium

jhaynie
źródło
8

Tworzenie widżetów HTML5, które wyglądają jak widżety iPhone, to jedno, ale sprawienie, by działały równie dobrze, to zupełnie inna sprawa. Wydajność animacji HTML5 (nawet zwykłe Przejścia widoków), przewijanie długich list, reagowanie na gesty są lepkie i nierówne. Użytkownik iPhone'a zauważy różnicę.

Istnieją również pewne różnice w rodzajach gestów obsługiwanych przez różne urządzenia, co powoduje również problemy z kodem specyficznym dla platformy i problemami z użytecznością.

Chyba pozostanę przy natywnych aplikacjach.

użytkownik158678
źródło
7

Rhomobile Rhodes ( http://rhomobile.com/products/rhodes ) jest bardzo podobny w podejściu do PhoneGap, ale jest jedynym szkieletem z:

  1. wzorzec kontrolera widoku modelu (jak zapewnia większość frameworków internetowych)
  2. Object Relational Manager
  3. obsługa wszystkich popularnych smartfonów (w tym Windows Phone 7)
  4. hostowana usługa programistyczna (nie tylko kompilacja hostowana): http://rhohub.com
  5. pełny debugger i emulator bez SDK w RhoStudio IDE
  6. obsługa zsynchronizowanych danych offline
Adam Blum
źródło
6

Dla wszystkich zainteresowanych Titanium muszę powiedzieć, że nie mają bardzo dobrej dokumentacji, brakuje niektórych klas, właściwości i metod. Ale wiele jest „udokumentowanych” w ich przykładowej aplikacji KitchenSink, więc nie jest tak źle.

gyozo kudor
źródło
5

Rozumiem, że PhoneGap zapewnia interfejs API JavaScript do większości interfejsów API iPhone'a.

Tytan wydaje się łatwiejszy dla programistów internetowych. Jest to prosty plik XML do utworzenia podstawowej aplikacji TabView, a następnie wszystko w obszarze zawartości jest kontrolowane przez HTML / JS. Wiem również, że Titanium zapewnia pewien dostęp do javascript do niektórych frameworków (szczególnie dostęp do informacji o lokalizacji, identyfikatora telefonu itp.).

AKTUALIZACJA: Titanium dodał Maps API w wersji 0.8 swojego frameworka.

Jackson Miller
źródło
Zgodnie z „Titanium wydaje się łatwiejsze dla programistów stron internetowych”. komunikat. Masz na myśli łatwiejsze niż rodzime prawda? Ponieważ PhoneGap wydaje się być bardziej zgodny z kimś z programistą niż Titanium ...
Serhiy
4

Powinieneś nauczyć się celowych aplikacji n i programować. Nie polegaj na tych rzeczach, które według ciebie ułatwią życie. Apple upewniło się, że najłatwiejszym sposobem jest użycie rodzimych narzędzi i języka. Dla twoich 100 wierszy javascript mogę zrobić to samo w 3 liniach kodu lub w ogóle bez kodu, w zależności od elementu. Obejrzyj kilka samouczków - jeśli rozumiesz javascript, cel c nie jest trudny. Rozwiązania są nieszczęśliwe, a Apple może pociągnąć za sobą wtyczkę w dowolnym momencie.

TouchGameDev
źródło
3
Apple może wyciągnąć wtyczkę ... o to mi chodzi
Mickey Shine,
6
Cytat: „Firma Apple upewniła się, że najłatwiejszym sposobem jest użycie rodzimych narzędzi i języka”. Naprawdę nie. Gdyby chcieli to zrobić, zapewniliby, powiedzmy, wsparcie dla Pythona. Odbyłoby się wyrzucanie elementów bezużytecznych (co samo zmniejszyłoby częstotliwość awarii - większość aplikacji na iPhone'a jest strasznie napisana). Kopie ObjC i, podobnie jak ty, wolałbym go używać niż js, ale to nie było pytanie op. Ponadto MonoTouch ułatwia programowanie niż jakakolwiek z tych opcji. Mogę utworzyć właściwość w jednym wierszu; uzyskaj odniesienie do folderu Dokument w jednym wierszu ... i tak dalej. Bity Apple można znacznie poprawić.
Rory Blyth,
6
Dobrym rozwiązaniem byłoby zapewnienie przez Apple własnej alternatywy ObjC. Coś dla aplikacji, które nie potrzebują poziomu kontroli, jaki daje Ci ObjC. Zwłaszcza dla aplikacji korporacyjnych, w których deweloperzy powinni skupiać się na funkcjonalności, a nie na liczeniu referencji i atrybutach właściwości. Lub przynajmniej zautomatyzuj większość z nich za pomocą Xcode i kompilatora. Daj mi przełącznik, który pozwala na dokonanie pewnych założeń i które można pominąć w kodzie, w którym programista wybiera (jak: domyślnie zachowaj i @syntezuj moje właściwości obiektu - i, podobnie jak „prawdziwy” ObjC 2.0, utwórz moje lokalne bazy danych dla mnie). Itd.
Rory Blyth,
2
Zasadniczo, mówisz, napiszmy aplikacje na iPhone'a w C #. :)
Justin
3

Z wymienionych przez ciebie rozwiązań żadne z nich nie zapewnia bezpośredniego dostępu do frameworku MapKit wprowadzonego w OS 3.0.

Ponieważ widżety HTML Google Maps nie są tak dobre jak MapKit (patrz przykład Współrzędnych Google), prawdopodobnie najlepiej jest opracować natywną aplikację Cocoa lub wybrać rozwiązanie, które można rozszerzyć, aby dodać integrację MapKit. PhoneGap jest rozszerzalny w ten sposób (jest to oprogramowanie typu open source, więc jest domyślnie), a niektóre inne rozwiązania mogą być również.

edycja: Titanium obsługuje teraz MapKit

rpetrich
źródło
Dziękuję Ci. Ale czy jest jakaś istotna różnica między PhoneGap a Titanium?
Mickey Shine,
1
MapKit jest dostępny natywnie w Titanium od dłuższego czasu.
jhaynie
@jhaynie: Dzięki. Poprawiłem tę odpowiedź, aby odzwierciedlić, że Titanium ma teraz wsparcie (nie miało jej, kiedy zostało napisane we wrześniu)
rpetrich
1

Próbowałem koronę. To było dobre, dopóki nie odkryłem, że nie obsługuje przesyłania strumieniowego audio MP3. Więc zatrzymałem się właśnie tam. Myślę, że jeśli naprawdę chcę zostać programistą aplikacji na iPhone'a, powinienem nauczyć się obj. Wszystko, co chciałem zrobić, to aplikacja, która ma listę stacji radiowych, a ty je klikniesz, zaczniesz grać.

Netmastan
źródło
2
Corona obsługuje odtwarzanie plików MP3 ( developer.anscamobile.com/reference/index/mediaplaysound )
Luc Stepniewski