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