So sánh giữa Corona, Phonegap, Titanium


310

Tôi là một nhà phát triển web và tôi muốn chuyển các sản phẩm web của mình sang iPhone. Một trong những sản phẩm giống như Google Maps: hiển thị bản đồ trên màn hình điện thoại, bạn có thể kéo hoặc thay đổi kích thước bản đồ và xem một số thông tin mà chúng tôi thêm vào bản đồ.

Tôi biết có một số công nghệ cho phép bạn sử dụng HTML, CSS và Javascript để phát triển ứng dụng iPhone gốc. Tôi đã xác định một vài:

Có khác, sản phẩm tương tự? Sự khác biệt giữa chúng là gì? Nên chọn cái nào?


1
Ngoài ra còn có Adobe FLEX, có thể tạo các ứng dụng cho iPhone kể từ tháng 6 năm 2011. adobe.com/products/flex
neoneye

1
Kiểm tra nó ra. Dude ở đây là một so sánh điểm. savagelook.com/blog/port portfolio / từ
Hikmat Khan

Câu trả lời:


368

Tôi đã đăng ký với stackoverflow chỉ với mục đích bình luận về câu trả lời được bình chọn nhiều nhất trên đầu trang. Điều tệ hại là stackoverflow không cho phép thành viên mới đăng bình luận. Vì vậy, tôi phải làm cho nhận xét này giống như một câu trả lời.

Câu trả lời của Rory Blyth chứa một số điểm hợp lệ về hai khung di động javascript. Tuy nhiên, điểm chính của anh ta là không chính xác. Sự thật là Titanium và PhoneGap giống nhau hơn là khác nhau. Cả hai đều phơi bày các chức năng của điện thoại di động thông qua một bộ API javascript và logic của ứng dụng (html, css, javascript) chạy bên trong một điều khiển WebView gốc.

  1. PhoneGap không chỉ là một trình bao bọc riêng của ứng dụng web. Thông qua API javascript của PhoneGap, "ứng dụng web" có quyền truy cập vào các chức năng của điện thoại di động như Định vị địa lý, Camera gia tốc, Danh bạ, Cơ sở dữ liệu, Hệ thống tệp, v.v. Về cơ bản, mọi chức năng mà SDK điện thoại di động cung cấp đều có thể được "bắc cầu" thế giới javascript. Mặt khác, một ứng dụng web bình thường chạy trên trình duyệt web di động không có quyền truy cập vào hầu hết các chức năng này (bảo mật là lý do chính). Do đó, ứng dụng PhoneGap là một ứng dụng di động hơn là ứng dụng web. Bạn chắc chắn có thể sử dụng PhoneGap để bọc một ứng dụng web hoàn toàn không sử dụng bất kỳ API PhoneGap nào, nhưng đó không phải là những gì PhoneGap được tạo ra.

  2. Titanium KHÔNG biên dịch mã html, css hoặc javascript của bạn thành "bit gốc". Chúng được đóng gói dưới dạng tài nguyên cho gói thực thi, giống như một tệp hình ảnh nhúng. Khi ứng dụng chạy, các tài nguyên này được tải vào điều khiển UIWebView và chạy ở đó (tất nhiên là javascript, không phải bit gốc). Không có thứ gọi là trình biên dịch javascript-to -igen-code (hoặc to-object-c). Điều này cũng được thực hiện theo cách tương tự trong PhoneGap. Từ quan điểm kiến ​​trúc, hai khung này rất giống nhau.

Bây giờ, họ có khác nhau không? Đúng. Đầu tiên, Titanium dường như có nhiều tính năng phong phú hơn PhoneGap bằng cách kết nối nhiều chức năng điện thoại di động hơn với javascript. Đáng chú ý nhất, PhoneGap không hiển thị nhiều (nếu có) các thành phần UI gốc cho javascript. Mặt khác, Titanium có API UI toàn diện có thể được gọi trong javascript để tạo và kiểm soát tất cả các loại điều khiển UI gốc. Sử dụng các API UI này, một ứng dụng Titanium có thể trông "bản địa" hơn ứng dụng PhoneGap. Thứ hai, PhoneGap hỗ trợ nhiều nền tảng điện thoại di động hơn Titanium. API PhoneGap chung chung hơn và có thể được sử dụng trên các nền tảng khác nhau như iPhone, Android, Blackberry, Symbian, v.v. Titanium hiện chủ yếu nhắm mục tiêu đến iPhone và Android. Một số API của nó là nền tảng cụ thể (như API UI của iPhone).

Vì vậy, nếu mối quan tâm của bạn đối với ứng dụng của bạn là làm cho nó trông "bản địa" hơn, Titanium là một lựa chọn tốt hơn. Nếu bạn muốn có thể "chuyển" ứng dụng của mình sang nền tảng khác dễ dàng hơn, PhoneGap sẽ tốt hơn.

Cập nhật ngày 13 tháng 8 năm 2010: Liên kết đến câu trả lời của nhân viên Titanium cho câu hỏi của Mickey.

Cập nhật 12/04/2010: Tôi quyết định cung cấp cho bài đăng này một đánh giá hàng năm để giữ thông tin hiện tại. Nhiều thứ đã thay đổi trong một năm khiến một số thông tin trong bài đăng ban đầu trở nên lỗi thời.

Sự thay đổi lớn nhất đến từ Titanium. Đầu năm nay, Appcelerator đã phát hành Titanium 1.0, đã khởi hành mạnh mẽ từ các phiên bản trước đó từ quan điểm kiến ​​trúc. Trong 1.0, điều khiển UIWebView không còn được sử dụng. Thay vào đó, bạn gọi API Titanium cho bất kỳ chức năng UI nào. Thay đổi này có nghĩa là một vài điều:

  1. Giao diện người dùng ứng dụng của bạn trở nên hoàn toàn tự nhiên. Không có thêm giao diện người dùng web trong ứng dụng của bạn vì API Titanium gốc chiếm quyền kiểm soát tất cả các nhu cầu UI của bạn. Titanium xứng đáng nhận được rất nhiều tín dụng bằng cách tiên phong trên biên giới "Giao diện người dùng đa nền tảng". Nó cung cấp cho các lập trình viên thích giao diện của UI gốc nhưng không thích ngôn ngữ lập trình chính thức thay thế.

  2. Bạn sẽ không thể sử dụng HTML hoặc CSS trong ứng dụng của mình vì chế độ xem web không còn nữa. (Lưu ý: bạn vẫn có thể tạo chế độ xem web bằng Titanium. Nhưng có một số tính năng Titanium mà bạn có thể tận dụng trong chế độ xem web.) Câu hỏi thường gặp về Titan: Điều gì đã xảy ra với HTML & CSS?

  3. Bạn sẽ không thể sử dụng các thư viện JS phổ biến như JQuery, giả sử sự tồn tại của một đối tượng DOM. Bạn tiếp tục sử dụng JavaScript làm ngôn ngữ mã hóa của bạn. Nhưng đó là khá nhiều công nghệ web duy nhất bạn có thể sử dụng nếu bạn đến với Titanium 1.0 với tư cách là một lập trình viên web.

Video Titanium: Có gì mới trong Titanium 1.0.

Bây giờ, Titanium 1.0 có biên dịch JavaScript của bạn thành "bit gốc" không? Không. Appcelerator cuối cùng đã giải quyết được vấn đề này với blog của nhà phát triển này: Dự án Hướng dẫn Titanium: Môi trường JS. Chúng tôi lập trình viên là những người chân chính hơn những người trong bộ phận Marketing, phải không? :-)

Chuyển sang PhoneGap. Không có nhiều điều mới để nói về PhoneGap. Nhận thức của tôi là sự phát triển PhoneGap không hoạt động cho đến khi IBM nhảy lên tàu vào cuối năm nay. Một số người thậm chí còn lập luận rằng IBM đang đóng góp nhiều mã cho PhoneGap hơn Nitobi. Điều đó đúng hay không, thật tốt khi biết rằng PhoneGap đang được phát triển tích cực.

PhoneGap tiếp tục dựa trên các công nghệ web, cụ thể là HTML, CSS và JavaScript. Có vẻ như PhoneGap không có bất kỳ kế hoạch nào để kết nối các tính năng UI gốc với JavaScript như Titanium đang làm. Mặc dù giao diện người dùng web vẫn chậm hơn so với giao diện người dùng gốc về hiệu suất và giao diện gốc, khoảng cách như vậy đang nhanh chóng bị đóng lại. Có hai xu hướng trong công nghệ web đảm bảo tính năng sáng cho giao diện người dùng web di động về hiệu suất:

  1. Công cụ JavaScript chuyển từ trình thông dịch sang máy ảo. JavaScript là JIT được biên dịch thành mã gốc để thực thi nhanh hơn. Công cụ Safari JS: SquirrelFish Extreme

  2. Kết xuất trang web chuyển từ dựa vào CPU sang sử dụng tăng tốc GPU. Các tác vụ chuyên sâu về đồ họa như chuyển trang và hoạt hình 3D trở nên mượt mà hơn rất nhiều với sự trợ giúp của khả năng tăng tốc phần cứng. Kết hợp tăng tốc GPU trong Chrome

Những cải tiến như vậy có nguồn gốc từ trình duyệt máy tính để bàn đang được chuyển đến trình duyệt di động một cách nhanh chóng. Trên thực tế, kể từ iOS 3.2 và Android 2.0, điều khiển xem web trên thiết bị di động đã trở nên hiệu quả hơn và thân thiện hơn với HTML5. Tương lai của web di động hứa hẹn sẽ thu hút một đứa trẻ lớn đến thị trấn: JQuery gần đây đã công bố khung web di động của mình. Với JQuery Mobile cung cấp các tiện ích UI và PhoneGap cung cấp các tính năng điện thoại, cả hai kết hợp lại tạo ra một nền tảng web di động hoàn hảo theo ý kiến ​​của tôi.

Tôi cũng nên đề cập đến Sencha Touch như một khung tiện ích UI web di động khác. Sencha Touch phiên bản 1.0 gần đây đã được phát hành theo mô hình cấp phép kép bao gồm GPLv3. Sencha Touch hoạt động tốt với PhoneGap giống như JQuery Mobile.

Nếu bạn là một lập trình viên của GWT (như tôi), bạn có thể muốn kiểm tra GWT Mobile , một dự án nguồn mở để tạo các ứng dụng web di động với GWT. Nó bao gồm một trình bao bọc PhoneGap GWT cho phép sử dụng PhoneGap trong GWT.


10
Ừm ... bạn nói rằng "PhoneGap không chỉ là một trình bao bọc riêng của ứng dụng web." Bạn tiếp tục thảo luận về quyền truy cập mà nó cung cấp cho bạn với chức năng thiết bị gốc. Tôi nghĩ rằng tôi đã trình bày điều này khi tôi viết: "Những gì PhoneGap cung cấp vượt ra ngoài đó là cầu nối giữa JavaScript và API thiết bị gốc. Vì vậy, bạn viết JavaScript với API PhoneGap và PhoneGap sau đó thực hiện cuộc gọi gốc tương ứng phù hợp. khác với việc triển khai một ứng dụng web cũ đơn giản. " Nếu bạn đăng ký chỉ để bác bỏ tuyên bố của tôi, bạn nên đọc toàn bộ nó. Tôi biết bài viết của tôi dài, nhưng ... vẫn còn.
Rory Blyth

5
Tôi có thể đã rõ ràng hơn, nhưng các chi tiết về API rất phức tạp vì nó đã thay đổi theo thời gian từ thiết bị này sang thiết bị khác bạn có thể làm (nó đã được cải thiện rất nhiều, nhưng ma trận tính năng cho các nền tảng khác nhau đã trải qua một vài lần sửa đổi). Tôi đã viết về một trong những khác biệt chính và những gì tôi viết là chính xác - thực tế, nó phù hợp với những gì bạn đã viết. Bạn chỉ cần đi sâu vào chi tiết hơn về API nào bạn có thể truy cập.
Rory Blyth

9
Đối với Titanium và "bit gốc", tôi đoán rằng lỗi của tôi là đọc nó trên trang web của họ - ngay trên trang nhất cho Appcelerator: "chúng chạy rất tốt vì chúng tôi biên dịch Titanium thành mã gốc để đạt hiệu suất cao nhất". Có lẽ bạn nên viết thư cho họ để cho họ biết họ đã sai. Hãy xem thử: tinyurl.com/yzlzvk5
Rory Blyth

6
Để biết thêm thông tin, hãy xem Câu hỏi thường gặp về Titanium - chủ đề đầu tiên, "Những ứng dụng web di động hoặc ứng dụng di động gốc" này có bao gồm vấn đề ngắn gọn không. Tôi muốn đăng lại một trích dẫn ở đây, nhưng tôi nghĩ rằng bạn muốn nhận nó trực tiếp từ công ty, vì họ tin rằng, các cơ quan có thẩm quyền về sản phẩm của họ: tinyurl.com/ya9topg
Rory Blyth

4
Dennis, cảm ơn vì câu trả lời tuyệt vời. Bạn vẫn đang phát triển với Titanium? Bạn có thể nhận xét rằng 1.7 đã hạ cánh?
PaulM

193

Từ những gì tôi đã thu thập được, đây là một số khác biệt giữa hai:

  • PhoneGap về cơ bản tạo ra các trình bao bọc riêng cho các ứng dụng web . Nó tạo ra một dự án AnyYourPl PlatformIs, bạn xây dựng nó và triển khai. Nếu chúng ta đang nói về iPhone (đó là nơi tôi dành thời gian của mình), thì nó có vẻ không khác mấy so với việc tạo một trình khởi chạy ứng dụng web (một phím tắt có biểu tượng Springboard của riêng nó, vì vậy bạn có thể khởi chạy nó như ( như ) một ứng dụng gốc). Bản thân "ứng dụng" vẫn là html / js / v.v., và chạy bên trong một điều khiển trình duyệt được lưu trữ. Những gì PhoneGap cung cấp ngoài đó là cầu nối giữa JavaScript và API thiết bị gốc. Vì vậy, bạn viết JavaScript dựa trên API PhoneGap và PhoneGap sau đó thực hiện cuộc gọi gốc tương ứng phù hợp. Trong khía cạnh đó, nó khác nhau từ việc triển khai một ứng dụng web cũ đồng bằng.

  • Nguồn titan được biên dịch xuống các bit gốc. Đó là, html / js / của bạn. không chỉ đơn giản là được gắn vào một dự án và sau đó được lưu trữ trong một điều khiển trình duyệt web - chúng được chuyển thành các ứng dụng gốc. Điều đó có nghĩa là, ví dụ, giao diện ứng dụng của bạn sẽ bao gồm các thành phần UI gốc . Có nhiều cách để có được giao diện bản địa mà không cần có ứng dụng gốc, nhưng ... ờ ... thật là một cơn ác mộng thường xảy ra.

Hai cái giống nhau ở chỗ bạn viết tất cả nội dung của mình bằng các công nghệ web điển hình (html / js / css / blah blah blah) và bạn có quyền truy cập vào chức năng gốc thông qua API JavaScript tùy chỉnh.

Nhưng, một lần nữa, các ứng dụng PhoneGap (PhonGapps? Tôi không biết ... đó có phải là một tên ngu ngốc không? Nói dễ hơn - tôi biết nhiều như vậy) bắt đầu cuộc sống của họ dưới dạng các ứng dụng web và kết thúc cuộc sống của họ dưới dạng các ứng dụng web. Trên iPhone, html / js / v.v. chỉ được thực thi bên trong điều khiển UIWebView và API JavaScript của PhoneGap mà các cuộc gọi js của bạn được chuyển đến API gốc.

Ứng dụng Titanium trở thành ứng dụng gốc - chúng chỉ được phát triển bằng công nghệ phát triển web.

Điều này thực sự có nghĩa là gì?

  1. Một ứng dụng Titanium sẽ trông giống như một ứng dụng "thực" bởi vì, cuối cùng, nó một ứng dụng "thực".

  2. Ứng dụng PhoneGap sẽ trông giống như một ứng dụng web được lưu trữ trong điều khiển trình duyệt bởi vì, cuối cùng, đó một ứng dụng web được lưu trữ trong điều khiển trình duyệt.

Đó là phù hợp với bạn?

  • Nếu bạn muốn viết ứng dụng gốc bằng kỹ năng phát triển web, Titanium là lựa chọn tốt nhất của bạn.

  • Nếu bạn muốn viết một ứng dụng bằng các kỹ năng phát triển web mà bạn có thể triển khai thực tế cho nhiều nền tảng (iPhone, Android, Blackberry và bất kỳ thứ gì khác mà họ quyết định đưa vào) và nếu bạn muốn truy cập vào một tập hợp con các tính năng nền tảng gốc (GPS, gia tốc kế, v.v.) thông qua API JavaScript hợp nhất, PhoneGap có lẽ là thứ bạn muốn.

Bạn có thể hỏi: Tại sao tôi muốn viết PhoneGapp (tôi đã quyết định sử dụng tên này) thay vì một ứng dụng web được lưu trữ trên web? Tôi vẫn không thể truy cập một số tính năng của thiết bị gốc theo cách đó, nhưng cũng có sự tiện lợi khi triển khai web thực sự thay vì buộc người dùng tải xuống ứng dụng "gốc" của tôi và cài đặt nó?

Câu trả lời là: Bởi vì bạn có thể gửi PhoneGapp của mình lên App Store và tính phí cho nó. Bạn cũng nhận được biểu tượng trình khởi chạy đó, khiến người dùng khó quên ứng dụng của bạn hơn (tôi rất có thể quên dấu trang hơn là biểu tượng ứng dụng).

Bạn chắc chắn có thể tính phí truy cập vào ứng dụng web được lưu trữ trên web của mình, nhưng có bao nhiêu người thực sự sẽ trải qua quá trình để làm điều đó? Với App Store, tôi chọn một ứng dụng, nhấn nút "Mua", nhập mật khẩu và tôi đã hoàn thành. Nó cài đặt. Vài giây sau, tôi đang sử dụng nó. Nếu tôi phải sử dụng giao diện giao dịch web di động một lần của người khác, điều đó có nghĩa là phải khai thác tên, địa chỉ, số điện thoại, số CC và những thứ khác mà tôi không muốn khai thác, tôi gần như chắc chắn sẽ không t đi qua với nó Ngoài ra, tôi tin tưởng Apple - Tôi tin rằng Steve Jobs sẽ không đăng nhập thông tin của tôi và sau đó tính phí một loạt các đăng ký tạp chí nghịch ngợm cho CC của tôi để đá.

Dù sao, ngoại trừ thực tế là có liên quan đến công nghệ phát triển web, PhoneGap và Titanium rất khác nhau - đến mức chỉ có thể so sánh bề ngoài.

Tôi ghét các ứng dụng web, bởi và nếu bạn đọc các bài đánh giá iTunes App Store, người dùng khá giỏi trong việc phát hiện ra chúng. Tôi sẽ không đặt tên bất kỳ tên nào, nhưng tôi có một vài "ứng dụng" trên điện thoại trông giống như rác, và đó là vì chúng là các ứng dụng web được lưu trữ bên trong các phiên bản UIWebView. Nếu tôi muốn sử dụng một ứng dụng web, tôi sẽ mở Safari và, bạn biết đấy, điều hướng đến một ứng dụng. Tôi đã mua một chiếc iPhone vì tôi muốn những thứ đó là iPhone-y. Tôi không gặp vấn đề gì khi sử dụng một ứng dụng web Google hấp dẫn trong Safari, nhưng tôi cảm thấy bị lừa nếu Google chỉ lấy một dấu trang trên Springboard bằng cách trình bày một ứng dụng web như một ứng dụng gốc.

Phải đi bây giờ. Bạn gái của tôi có cái nhìn mà bạn có thể ngừng sử dụng cái máy tính đó trong ba giây.


22
Vấn đề với câu trả lời là chủ yếu là SAI. Xem câu trả lời của DennisJZH dưới đây.
jbwiv

9
@jbwiv - Vấn đề với nhận xét của bạn là chủ yếu dựa trên câu trả lời của DennisJZH, chủ yếu là SAI. Xem câu trả lời của tôi dưới đây. Để tránh nhầm lẫn thêm, tôi đề nghị cả hai hãy xem tài liệu chính thức cho các sản phẩm và cũng đọc bài viết của tôi đầy đủ . Cảm ơn rât nhiều.
Rory Blyth

15
@Matthew - Ồ, gf chắc chắn có quyền ưu tiên :) Về cơ bản những câu hỏi này không liên quan vì thay đổi xảy ra (nếu tôi hiểu nhầm ý của bạn, tôi xin lỗi), thực tế là mọi người muốn có câu trả lời cho các vấn đề tồn tại ngay bây giờ. Chúng ta có thể lập luận rằng không có vấn đề nào trong số này vì Trái đất sẽ được nấu chín trong tương lai bởi Mặt trời khi nó đốt cháy nhiên liệu và mở rộng, phá hủy hành tinh của chúng ta, nhưng ... điều này cho chúng ta phải làm gì đó trong khi chờ đợi.
Rory Blyth

2
@Matthew - Ngoài ra, người này sẵn sàng thử những điều mới. Nó có thể không phải là cách bạn thích, nhưng nó vẫn còn mới. Bạn vẫn phải tìm hiểu về phát triển iPhone (đọc tài liệu về hướng dẫn giao diện người dùng, v.v.) Không có lý do chính đáng nào để cố gắng từ chối ai đó cố gắng hoàn thành điều gì đó chỉ vì bạn không thấy giá trị của nó. Ví dụ, tôi ghét nấm, nhưng đừng cố ngăn người khác ăn chúng. Tôi hiểu rằng họ thích nấm giống như cách tôi yêu nghệ tây và tôi biết tôi không muốn bất cứ ai cố gắng lấy nghệ tây ra khỏi tôi chỉ vì họ không thích nó.
Rory Blyth

1
Vâng, nhưng nếu bạn là một phù thủy công nghệ web thực thụ, tôi chắc chắn sẽ không ai có thể nhận ra "ứng dụng web" của bạn không thực sự là một ứng dụng gốc. Trong trường hợp rõ ràng ứng dụng là "ứng dụng web" được bọc trong UIWebView, thì điều đó có nghĩa là người sáng tạo đã không dành thời gian hoặc quan tâm đủ để làm cho nó có chất lượng đủ cao.
trusktr

62

Tôi đang tham gia một khóa học về phát triển Android / iPhone và chúng tôi đã dành 8 tuần với Titanium (không phải toàn thời gian) (Phiên bản là Titanium 1.4.2 và thời gian là vào khoảng tháng 11 năm 2010). Đây là kinh nghiệm của tôi.

iPhone Android nhắm mục tiêu kép

Mặc dù các hướng dẫn API tuyên bố rằng chức năng có sẵn cho cả Android và iPhone, nhưng đây không phải là trường hợp. Phần lớn những thứ đơn giản là không hoạt động trên một trong những nền tảng. Một số thứ hoạt động khác nhau.

Rất nhiều người trong lớp đã thực hiện các ứng dụng iPhone và họ không thể làm cho chúng hoạt động trên Android mà không cần viết lại. Tôi đã phát triển một ứng dụng dành cho trẻ em đơn giản có tên Animap (xem android market / Appstore ở Thụy Điển) và bắt đầu phát triển dưới Windows. Khi mục tiêu Android hoạt động, tôi đã mở dự án trên OS X. Nó không hiển thị bất kỳ công cụ xây dựng nào cho iPhone, chỉ dành cho Android. Bạn cần bắt đầu một dự án mục tiêu kép trong OS X. (Ok, tôi đã sao chép các tệp có liên quan sang một dự án mới). Vấn đề tiếp theo - hoạt hình không hoạt động trên iPhone (chúng hoạt động trên Android). Các sự kiện cuộn không hoạt động giống nhau trên iPhone. (tức là trên Android, bạn nhận được sự kiện chưa chạm tới khi người dùng dừng cuộn và nhả ngón tay khỏi màn hình, điều này không xảy ra trên iPhone).

Vì điều này không được đề cập ở đâu đó, về cơ bản bạn cần phải thực hiện thử nghiệm và lập trình lỗi trên nền tảng đầu tiên, sau đó trên nền tảng khác. Bằng cách dùng thử và lỗi, tôi có nghĩa là sẽ mất khoảng hai ngày để có được một Ứng dụng đơn giản như Animap hoạt động trên nền tảng khác. Bạn cũng sẽ cần phải có if (android) thì ... hoặc if (iphone) ... trên toàn bộ mã của bạn ...

Tải xuống và thiết lập

Bạn phải làm theo hướng dẫn của bức thư. Đừng cố sử dụng java 64 bit. Nó sẽ không biên dịch ứng dụng demo KitchenSink 1.4.0. (1.3 hoạt động OK!) Bạn phải đặt các tệp trực tiếp vào ổ C vì tên đường dẫn dài sẽ làm cho chương trình bên ngoài không nhận được tất cả các tham số dòng lệnh nếu chúng dài. (Tốt cho các chương trình nhỏ) 1/3 số lần, chuỗi công cụ chỉ dừng lại và bạn phải nhấn 'khởi chạy lại. Sau đó, nó có thể sẽ làm việc ... rất không đáng tin cậy. Trình giả lập sẽ không được tìm thấy khi khởi động và sau đó bạn chỉ cần tắt adb.exe bằng Ctrl + Alt + Delete và thử lại.

Kết nối mạng

Trên mạng wifi, đôi khi bạn mất kết nối trực tiếp và Titanium gặp sự cố (giao diện biên dịch / triển khai) Nếu bạn không có kết nối internet đang hoạt động, nó sẽ không khởi động vì nó không thể đăng nhập bạn vào máy chủ của họ.

API

CSS, HTML và jQuery dễ dàng so với điều này. Titanium giống với bất kỳ API GUI cũ nào khác và bạn cần đặt một số thuộc tính cho mỗi nút / trường / v.v. Nhận sai một lĩnh vực chỉ là để dễ dàng, ghi nhớ tất cả các thuộc tính cần phải được đặt? Bạn đã đánh vần nó bằng chữ in hoa đúng chỗ? (vì trình biên dịch này không bị bắt bởi trình biên dịch, nhưng sẽ được coi là lỗi thời gian chạy nếu bạn may mắn kiểm tra phần đó)

Trong Titanium, mọi thứ chỉ đơn giản bị phá vỡ khi bạn thêm một chế độ xem khác trên đầu điều khiển hoặc nhấp vào một nơi khác trong GUI.

Tài liệu

Một số trang API mang biểu tượng Android, nhưng sẽ chỉ trả về null khi bạn cố gắng tạo điều khiển. Chúng không chỉ đơn giản là có sẵn trên nền tảng Android bất chấp các biểu tượng. Đôi khi Android được đề cập để không hỗ trợ một phương thức cụ thể, nhưng sau đó toàn bộ API bị thiếu.

Bồn rửa chén

Ứng dụng demo. Tôi đã đề cập đến nó không biên dịch nếu bạn đặt nó trong thư mục dự án Eclipse của bạn vì đường dẫn quá dài? Phải được đặt trên ổ C của bạn trong thư mục gốc. Tôi hiện đang sử dụng một liên kết Symbolik (mklink / J ...)

Phương pháp không có giấy tờ

Bạn phải sử dụng những thứ như nhãn.setText ('Hello World') để thay đổi nhãn đáng tin cậy nhưng điều này hoàn toàn không được ghi lại.

Gỡ lỗi

Titanium.API.info ('Bản in là cách duy nhất để gỡ lỗi');

Chỉnh sửa

Các API không có sẵn ở bất kỳ định dạng tốt nào, do đó bạn không thể hoàn thành mã thông thường với sự trợ giúp, v.v. trong Eclipse. Aptana hãy giúp đỡ!

Phần cứng

Có vẻ như trình biên dịch / công cụ không đa luồng nên một máy tính nhanh với ổ cứng nhanh là điều bắt buộc, vì bạn phải thực hiện nhiều thử nghiệm & lỗi. Tôi đã đề cập đến các tài liệu nghèo? Bạn phải thử mọi thứ ở đó vì bạn không thể tin tưởng được!

Một số điều tích cực

  • Mã nguồn mở
  • Từ các dự án trước đây, tôi đã tự hứa sẽ không bao giờ sử dụng nguồn đóng nữa vì bạn không thể sửa chữa mọi thứ chỉ bằng cách ném hàng giờ và nhân lực vào nó. Quan trọng khi bạn trễ dự án và cần giao hàng cho một thời hạn khó khăn. Đây là nguồn mở và tôi đã có thể thấy lý do tại sao chuỗi công cụ bị hỏng và thực sự cũng sửa nó.

  • Cơ sở dữ liệu

  • Nó cũng mở. Bạn có thể chỉ cần thấy rằng bạn không đơn độc và thực hiện một cách giải quyết thay vì 4 giờ khác dành cho bản dùng thử & lỗi.

  • cộng đồng

  • Có vẻ là hoạt động trên diễn đàn của họ.

Lỗi

  • Titanium 1.4 không an toàn . Điều đó có nghĩa là nếu bạn sử dụng các luồng (sử dụng url: property trong lệnh gọiWindow) và chương trình như các luồng đang hoạt động và gửi các sự kiện với dữ liệu qua lại, bạn gặp rất nhiều thứ rất lạ - xử lý bị mất, bị mất cửa sổ, quá nhiều sự kiện, quá ít sự kiện, v.v ... Điều này hoàn toàn phụ thuộc vào thời gian, việc đặt các hàng mã theo thứ tự khác nhau có thể làm hỏng hoặc chữa lành ứng dụng của bạn. Việc thêm một cửa sổ trong một file.js khác sẽ phá vỡ sự thực thi app.js của bạn ... Điều này cũng làm hỏng các cơ sở dữ liệu nội bộ trong Titanium, vì đôi khi chúng có thể cập nhật các cơ sở dữ liệu nội bộ theo paralell, ghi đè một giá trị vừa thay đổi bằng một thứ khác.

Phần lớn các vấn đề tôi gặp phải với Titanium xuất phát từ nền tảng của tôi trên các hệ thống thời gian thực như OSE, người hỗ trợ hàng trăm chủ đề, sự kiện và thông điệp truyền qua. Điều này được cho là hoạt động trong Titanium 1.4 nhưng đơn giản là nó không làm điều đó một cách đáng tin cậy.

  • Javascript (mới đối với tôi) chết lặng vì lỗi thời gian chạy. Điều này cũng có nghĩa là các lỗi nhỏ và phổ biến, như viết sai tên biến hoặc đọc trong một con trỏ null không gặp sự cố khi cần để bạn có thể gỡ lỗi. Thay vào đó, các phần trong chương trình của bạn chỉ dừng hoạt động, ví dụ như một trình xử lý sự kiện, vì bạn đã đặt sai / đặt sai một ký tự.

  • Sau đó, chúng ta có nhiều lỗi đơn giản hơn trong Titanium, như một số tham số không hoạt động trong các chức năng (ít nhất là khá phổ biến trên nền tảng Android).

  • Tốc độ chu kỳ gỡ lỗi Thử và Lỗi Khi chạy Titnium Developer trên một số máy tính, tôi nhận thấy nút cổ chai là ổ cứng. Ổ SSD trên máy tính xách tay giúp chu trình xây dựng nhanh hơn khoảng 3-5 lần so với ổ 4200 vòng / phút. Trên máy tính để bàn, việc có các ổ đĩa kép trong RAID 1 (chế độ phân loại) giúp việc xây dựng nhanh hơn khoảng 25% so với trên một ổ đĩa có CPU nhanh hơn một chút và nó cũng đánh bại máy tính xách tay ổ SSD.

Tóm lược

  • Từ các bình luận trong chủ đề này, dường như có một cuộc chiến về số lượng nền tảng mà một công cụ như thế này có thể cung cấp cho ứng dụng. Số lượng API dường như là điểm bán hàng quan trọng.

Điều này tỏa sáng rất nhiều khi bạn bắt đầu sử dụng nó. Nếu bạn nhìn vào bugtracker mở, bạn sẽ thấy rằng số lượng lỗi tiếp tục tăng nhanh hơn số lượng lỗi cố định. Đây thường là một dấu hiệu cho thấy các nhà phát triển tiếp tục bổ sung thêm chức năng, thay vì tập trung vào việc giảm số lượng lỗi.

Là một nhà tư vấn đang cố gắng cung cấp các ứng dụng khá đơn giản cho nhiều nền tảng cho khách hàng - tôi không chắc điều này thực sự nhanh hơn so với việc phát triển ứng dụng gốc trên hai nền tảng. Điều này là do thực tế là khi bạn tăng tốc, bạn rất nhanh với Titanium, nhưng rồi đột nhiên bạn nhìn xuống và thấy mình ở một lỗ sâu đến mức bạn không biết phải mất bao nhiêu giờ cho một cách giải quyết. Bạn chỉ có thể KHÔNG hứa hẹn một chức năng nhất định cho một thời hạn / thời gian / chi phí nhất định.

Về bản thân: Tôi đã sử dụng Python được hai năm với wxPython. (GUI đó không nhất quán, nhưng không bao giờ bị hỏng như thế này. Có thể tôi chưa hiểu mô hình luồng được sử dụng bởi Javascript và Titanium, nhưng tôi không đơn độc theo các diễn đàn thảo luận mở của họ, các đối tượng GUI đột nhiên sử dụng sai ngữ cảnh / không cập nhật .. ???) trước đó tôi có nền tảng về lập trình C và ASM cho thiết bị di động.

[chỉnh sửa - thêm một phần có lỗi và không an toàn cho chuỗi] [Chỉnh sửa - hiện đã làm việc với nó được một tháng +, chủ yếu trên PC nhưng một số trên OS X cũng vậy. Đã thêm mục tiêu kép iPhone và Android. Đã thêm tốc độ chu kỳ gỡ lỗi dùng thử và lỗi.]


1
Với bản phát hành Titanium 1.4, giờ đây tôi đã xem xét các tệp .apk được phân phối từ Titanium và chúng đơn giản là không tốt lắm. Chúng hoạt động, nhưng thư mục xây dựng hoàn chỉnh là loại được nén lại với nhau trong đó. Điều đó có nghĩa là các lỗi xây dựng nhỏ như sao chép màn hình giật gân sang ba vị trí khác nhau trong quá trình xây dựng đột nhiên tiêu tốn, vì tôi có một hình ảnh màn hình lớn, khoảng 1 meg dung lượng lưu trữ trong điện thoại. Và đó chỉ là một biến thể rất đơn giản của hello-world. Mã nguồn javascript cũng được sao chép vào các bản dựng và vào các tệp .apk và do đó được phân phối cho tất cả khách hàng.
dùng288299

Phiên bản 1.5 hiện đã được phát hành và được cho là viết lại chính cho nền tảng Android. Tôi sẽ không kiểm tra điều này vì tôi cần học phát triển Android bản địa ngay bây giờ.
dùng288299

Phiên bản 1.5 hiện đã được phát hành và được cho là viết lại chính cho nền tảng Android. Tôi sẽ không kiểm tra điều này vì chúng tôi đã chuyển sang học phát triển Android gốc ngay bây giờ. Như chúng ta ngày nay đã được dạy về vòng đời của Android gốc, tôi tin rằng các vấn đề tôi gặp phải với một số cửa sổ mất nội dung biến đổi lần thứ hai chúng được hiển thị là do Titanium không lưu trạng thái trước trạng thái onPause () của vòng đời. developer.android.com/guide/topics/fundamentals.html#l Motorcycle . Gọi Titanium.Map.MapView. Leather () và sau đó hiển thị () có thể chỉ đơn giản là giết các biến cục bộ của bạn cho bản đồ
user288299

1
Chỉ cần chơi với 1.7, mô tả của bạn là rất đúng. Nền tảng này rất thành công và bỏ lỡ, với hiệu suất khủng khiếp và vô số giờ làm việc xung quanh tìm kiếm. Nếu bạn có tài nguyên khi bắt đầu một dự án, hãy xây dựng nguồn gốc cho từng nền tảng.
Jonathon Kresner

25

SDK SDK (Ansca Mobile) sử dụng Lua làm ngôn ngữ mã hóa. Xem lua.org để biết thêm về Lua.

Mặc dù chúng tôi dự định bổ sung thêm các yếu tố tích hợp web và giao diện người dùng gốc, trọng tâm của chúng tôi sẽ có xu hướng tập trung vào các ứng dụng chuyên sâu về đồ họa, như phát triển trò chơi, trái ngược với các công nghệ dựa trên web. Nói cách khác, chúng tôi không hình dung mọi người viết ứng dụng hoàn toàn bằng Javascript / HTML / CSS.


Bạn có bất kỳ kế hoạch hoặc quy mô thời gian cho kịch bản UI gốc. Tôi đã làm khá nhiều với Lua và tôi thực sự muốn yêu Corona. Đối với trò chơi không phát triển, Titan có vẻ hơi đi trước.
uroc

4
Xin chào, uroc. Chúng tôi đã có các tính năng UI gốc đến phiên bản 1.1 (ETA vào cuối tuần này!) Và nhiều hơn nữa sẽ sớm được theo dõi. Tuy nhiên, ý thức về Titanium của tôi là họ đã làm rất tốt khi phơi bày một số lượng lớn các yếu tố UI gốc, trong khi chúng tôi sẽ tập trung vào các yếu tố UI quan trọng nhất trong khi đẩy nhiều nỗ lực kỹ thuật hơn vào các tính năng hoạt hình và kết xuất. Lý do là (i) đã có những sản phẩm tốt cho các ứng dụng chỉ dành cho UI, (ii) UI là phần thân thiện nhất của Cacao (nói một cách tương đối!), Nhưng (iii) bất cứ điều gì liên quan đến hoạt hình OpenGL đều là điểm đau trên iPhone chốc lát.
Evan Kirchhoff

Có vẻ như Corona phù hợp để phát triển game thay vì ứng dụng, phải không?
anticafe

18

Tôi đã làm việc với Titanium hơn một tuần nay và cảm thấy như tôi có cảm giác tốt về điểm yếu của nó.

1) Nếu bạn hy vọng bạn sử dụng cùng một mã trên nhiều nền tảng thì chúc may mắn! Bạn sẽ thấy một cái gì đó như backgroundGradient và ngạc nhiên cho đến khi bạn phát hiện ra phiên bản Android không hỗ trợ nó. Sau đó phải quay lại sử dụng hình ảnh gradient, cũng có thể sử dụng nó cho cả hai phiên bản để làm cho mã dễ dàng hơn phải không?

2) Rất nhiều hành vi kỳ lạ, trên sdk Titanium android, bạn cần hiểu cửa sổ "nặng" là gì để nút quay lại hoạt động hoặc theo dõi sự kiện định hướng tốt hơn. Đây không phải là nền tảng Android thực sự như thế nào, đó chỉ là cách Titanium cố gắng làm cho API của họ hoạt động.

3) Bạn bị ném trong bóng tối, Mọi thứ sẽ sụp đổ và bạn phải bắt đầu nhận xét mã và sau đó khi bạn tìm thấy nó, không bao giờ sử dụng nó. Có một số lỗi rõ ràng nhất định, như định hướng và phần trăm trên Android đã là một vấn đề trong hơn sáu tháng.

4) Lỗi .... có rất nhiều lỗi và chúng sẽ được báo cáo, ngồi xung quanh trong nhiều tháng, được sửa trong vài ngày. Tôi ngạc nhiên khi họ thậm chí đang lên kế hoạch phát hành một sdk di động màu đen khi có quá nhiều vấn đề khác với Android.

5) Titanium Titanium so với Titanium Android javascript engine hoàn toàn khác nhau. Trên phiên bản Android, bạn có thể tải xuống các tệp javascript từ xa, bao gồm và sử dụng các thư viện như mootools, jquery, v.v. Tôi đã ở trên thiên đường khi tôi phát hiện ra điều này bởi vì tôi không phải tiếp tục biên dịch ứng dụng Android của mình. Quá trình cài đặt apk android mất quá nhiều thời gian! Iphone không có điều đó là có thể, phiên bản iphone có công cụ javascript nhanh hơn nhiều.

Nếu bạn tránh xa nhiều bộ phận UI gốc, thay vào đó, hãy sử dụng setInterval để phát hiện thay đổi hướng, dán hình ảnh gradient, quên nút quay lại, xây dựng hình động của riêng bạn, quên tiêu đề cửa sổ, thanh công cụ và bảng điều khiển. Bạn thực sự có thể tạo ra một api hoạt động trên cả hai thứ không yêu cầu viết lại nhiều. Nhưng tại thời điểm đó, nó chậm chạp như một ứng dụng web.

Vì vậy, nó có giá trị nó? Sau tất cả nỗi đau, giá trị của nó mỗi phút. Bạn có thể trừu tượng hóa logic và chỉ cần xây dựng giao diện người dùng khác nhau cho từng thay vì nếu khác ở mọi nơi. Titanium cho phép bạn tạo ra các ứng dụng chất lỏng, cảm giác đó nhanh chóng. Bạn mất khả năng bố trí mạnh mẽ của từng nền tảng nhưng nếu bạn nghĩ đơn giản, mọi thứ có thể được thực hiện dưới một ngôn ngữ duy nhất.

Tại sao không phải là một ứng dụng web? Trên thị trường điện thoại Android cấp nhập cảnh, nó rất chậm để tạo ra một webview và tiêu tốn rất nhiều bộ nhớ mà bạn có thể đang sử dụng để thực hiện logic phức tạp hơn.




8

Làm cho các widget HTML5 trông giống như các widget của iphone là một chuyện, nhưng làm cho chúng hoạt động tốt như nhau lại là một vấn đề khác. Hiệu suất của hoạt hình html5 (ngay cả Chuyển tiếp Chế độ xem đơn giản), cuộn danh sách dài, phản ứng với cử chỉ cảm thấy dính và giật. Một người dùng iPhone sẽ nhận thấy sự khác biệt.

Cũng có một số khác biệt trong các loại cử chỉ được hỗ trợ bởi các thiết bị khác nhau dẫn đến các vấn đề về mã cụ thể và khả năng sử dụng của nền tảng.

Tôi đoán tôi sẽ ở lại với các ứng dụng gốc bây giờ.


7

Rhomobile Rhodes ( http://rhomobile.com/products/rhodes ) rất giống với cách tiếp cận với PhoneGap, nhưng là khung duy nhất có:

  1. một mẫu Trình điều khiển Chế độ xem Mô hình (như hầu hết các khung web cung cấp)
  2. một người quản lý quan hệ đối tượng
  3. hỗ trợ cho tất cả các điện thoại thông minh phổ biến (bao gồm cả Windows Phone 7)
  4. một dịch vụ phát triển được lưu trữ (không chỉ là bản dựng được lưu trữ): http://rhohub.com
  5. trình gỡ lỗi đầy đủ và trình giả lập không có SDK trong RhoStudio IDE
  6. hỗ trợ dữ liệu ngoại tuyến được đồng bộ hóa

6

Đối với bất kỳ ai quan tâm đến Titanium tôi phải nói rằng họ không có tài liệu rất tốt, một số lớp, thuộc tính, phương thức bị thiếu. Nhưng rất nhiều thứ được "ghi lại" trong ứng dụng mẫu của họ là KitchenSink để nó không tệ.


5

Sự hiểu biết của tôi về PhoneGap là họ cung cấp API Javascript cho phần lớn API của iPhone.

Titanium có vẻ dễ dàng hơn cho một nền tảng phát triển web. Đây là một tệp XML đơn giản để tạo một ứng dụng TabView cơ bản và sau đó mọi thứ trong khu vực nội dung được kiểm soát bởi HTML / JS. Tôi cũng biết rằng Titanium cung cấp một số quyền truy cập javascript vào một số khung (đặc biệt là quyền truy cập vào thông tin vị trí, ID điện thoại, v.v.).

CẬP NHẬT: Titanium đã thêm API Maps trong phiên bản 0.8 của khung.


Theo "Titanium có vẻ dễ dàng hơn cho một nền tảng phát triển web." tuyên bố. Bạn có nghĩa là dễ dàng hơn bản địa phải không? Vì PhoneGap dường như phù hợp với người có nền tảng phát triển web hơn Titanium ...
Serhiy

4

Bạn nên tìm hiểu mục tiêu c và chương trình ứng dụng gốc. Đừng dựa vào những điều bạn nghĩ sẽ giúp cuộc sống dễ dàng hơn. Apple đã đảm bảo cách dễ nhất là sử dụng các công cụ và ngôn ngữ bản địa của họ. Đối với 100 dòng javascript của bạn, tôi có thể làm tương tự trong 3 dòng mã hoặc không có mã nào tùy thuộc vào yếu tố. Xem một số hướng dẫn - nếu bạn hiểu javascript thì mục tiêu c không khó. Cách giải quyết là khốn khổ và apple có thể rút phích cắm cho bạn bất cứ lúc nào họ muốn.


3
Apple có thể rút phích cắm ... đó là điều tôi quan tâm
Mickey Shine

6
Trích dẫn: "Apple đã đảm bảo cách dễ nhất là sử dụng các công cụ và ngôn ngữ bản địa của họ." Họ thực sự không có. Nếu họ muốn làm điều đó, họ sẽ cung cấp hỗ trợ Python. Sẽ có bộ sưu tập rác (một mình sẽ giảm tần suất sự cố - hầu hết các ứng dụng trên iPhone đều được viết một cách khủng khiếp). Tôi đào ObjC, và, giống như bạn, tôi thích sử dụng nó hơn js, nhưng đó không phải là câu hỏi của op. Ngoài ra, MonoTouch giúp phát triển dễ dàng hơn bất kỳ tùy chọn nào trong số này. Tôi có thể tạo một tài sản trong một dòng; có được một tham chiếu đến thư mục Tài liệu với một dòng ... và cứ thế. Bit của Apple có thể được cải thiện rất nhiều.
Rory Blyth

6
Một giải pháp tốt sẽ là Apple cung cấp giải pháp thay thế ObjC của riêng họ. Một cái gì đó cho các ứng dụng không cần mức độ kiểm soát mà ObjC cung cấp cho bạn. Đặc biệt là đối với các ứng dụng doanh nghiệp nơi các nhà phát triển nên tập trung vào chức năng thay vì thuộc tính đếm tham chiếu và thuộc tính. Hoặc ít nhất là tự động hóa hầu hết điều đó với Xcode và trình biên dịch. Đưa cho tôi một công tắc cho phép thực hiện một số giả định nhất định và có thể bỏ qua mã mà nhà phát triển chọn (như: giữ lại và @synthesize các thuộc tính đối tượng của tôi theo mặc định - và, như ObjC 2.0 "thực", tạo các địa phương sao lưu của tôi cho tôi). V.v.
Rory Blyth

2
Về cơ bản những gì bạn đang nói là, hãy để chúng tôi viết ứng dụng IPhone bằng C #. :)
Justin

3

Trong số các giải pháp bạn đã đề cập, không có giải pháp nào trong số chúng xuất hiện để cung cấp cho bạn quyền truy cập trực tiếp vào khung MapKit được giới thiệu trong OS 3.0.

Vì các tiện ích HTML của Google Maps không tốt bằng MapKit (ví dụ: xem Google Latitude), bạn có thể tốt nhất là phát triển ứng dụng Cacao cảm ứng gốc hoặc chọn giải pháp bạn có thể mở rộng để thêm tích hợp MapKit. PhoneGap có thể mở rộng theo cách này (theo mặc định là nguồn mở) và một số giải pháp khác cũng có thể như vậy.

chỉnh sửa: Titanium hiện đã hỗ trợ cho MapKit


Cảm ơn bạn. Nhưng có sự khác biệt thiết yếu nào giữa PhoneGap và Titanium không?
Mickey Shine

1
MapKit đã có sẵn trong Titanium từ khá lâu.
jhaynie

@jhaynie: Cảm ơn. Tôi đã sửa đổi câu trả lời này để phản ánh rằng Titanium hiện có hỗ trợ (nó đã không được viết vào tháng 9)
rpetrich

1

Tôi đã thử corona. Nó là tốt cho đến khi tôi phát hiện ra nó không hỗ trợ truyền phát âm thanh mp3. Vì vậy, tôi dừng lại ở đó. Tôi nghĩ rằng nếu tôi thực sự muốn trở thành một nhà phát triển ứng dụng iphone, tôi nên học obj c. Tất cả tôi muốn tạo một ứng dụng có danh sách các đài phát thanh và bạn nhấp vào chúng, nó bắt đầu phát.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.