2012-06-27 44 views
12

Chúng tôi muốn phát triển một ứng dụng cho điện thoại thông minh iOS và Android. Chúng tôi chủ yếu sử dụng các công nghệ của Microsoft để phát triển các ứng dụng của chúng tôi. Chúng tôi nghĩ rằng nếu chúng tôi sử dụng MonoTouch và Mono cho Android, chúng tôi sẽ chỉ phải duy trì một cơ sở mã với chỉ một lớp Giao diện người dùng khác nhau cho từng thiết bị.Tại sao nên sử dụng MonoTouch để phát triển iPhone?

Bởi vì hiện tại không ai trong nhóm nhỏ của chúng tôi từng phát triển một ứng dụng điện thoại thông minh và chúng tôi cần nó một cách nhanh chóng, chúng tôi muốn thuê ngoài nó. Chúng tôi đã hỏi các công ty khác liệu họ có suy nghĩ về MonoTouch hoặc Objective C để phát triển iPhone hay không. Hầu hết trong số họ nói, rằng sẽ chọn Objective C. Họ nói rằng Objective C cung cấp nhiều chức năng và khả năng hơn, nó nhanh hơn và cho MonoTouch có một cơ hội mà Apple sẽ không hỗ trợ nó nữa trong tương lai. Là tất cả những điều đó đúng hay có những lý do khác để thích Objective C? Tôi biết có những chủ đề khác như thế này, nhưng họ không trả lời câu hỏi của tôi, đặc biệt là câu hỏi liên quan đến hỗ trợ của Apple cho MonoTouch.

+0

bản sao có thể có của [Có phải MonoTouch là nền tảng khả thi để phát triển iPhone không?] (Http://stackoverflow.com/questions/1847274/is-monotouch-a-viable-platform-for-iphone-development) –

+2

Đó là 2,5 năm sau đó - Tôi nghĩ rằng đủ thứ đã thay đổi rằng một bộ câu trả lời mới sẽ không phải là một ý tưởng tồi. –

+12

Có vẻ như không có công ty nào bạn nói chuyện có bất kỳ trải nghiệm MonoTouch thực nào. –

Trả lời

40

ứng dụng. Chúng tôi nghĩ rằng nếu chúng tôi sẽ sử dụng MonoTouch và Mono cho Android, chúng tôi sẽ chỉ phải duy trì một cơ sở mã chỉ với một lớp giao diện người dùng khác nhau cho mỗi thiết bị .

đây là khả năng NẾU bạn cấu trúc đúng ứng dụng của mình. Nếu không: không.

Nếu bạn sử dụng Java + ObjC + C# (cho WP7/Win8 metro vv) thì đây không phải là một lựa chọn AT ALL

Bởi vì hiện nay không ai trong nhóm nhỏ của chúng tôi bao giờ phát triển một ứng dụng điện thoại thông minh và chúng tôi cần nó một cách nhanh chóng, chúng tôi muốn thuê ngoài nó. Chúng tôi đã hỏi các công ty khác xem họ có monoTouch perfer hoặc Objective C để phát triển iPhone hay không. Hầu hết trong số họ nói rằng sẽ chọn Objective C.

Nếu bạn đang gia công phần mềm đó, bạn nên dictate những gì bạn muốn nó viết bằng, chắc chắn? Nếu bạn cần phải hỗ trợ nó trong nhà, và bạn chỉ có các kỹ năng C#, thì MonoTouch vv có ý nghĩa hơn với bạn, những người trả tiền hóa đơn!

Họ nói rằng Objective C cung cấp nhiều tính năng và khả năng,

FUD, và cũng có thể không chính xác. Monotouch có sẵn API đầy đủ. Nếu nó không có ở đó, như Xamarin để ràng buộc nó (mà họ đã thực hiện thường xuyên trước)

nó nhanh hơn

Tôi rất muốn nhìn thấy điểm chuẩn. Có, về mặt kỹ thuật, nó có thể nhanh hơn trong một số trường hợp, nhưng trong sử dụng chung, MonoTouch giống nhau hoặc nhanh hơn.

Lỗi lập trình là nguyên nhân phổ biến hơn gây ra sự cố hiệu suất ứng dụng iOS. ví dụ như không nhận được những thứ ngoài thread UI (dễ dàng hơn trong MonoTouch hơn trong ObjC, tho khối đã giúp rất nhiều), hoặc mất quá lâu để có được ra khỏi FinishedLaunching (phương pháp "chính", nếu bạn sẽ, tho nó không thực sự ...)

Bộ sưu tập rác và những thứ như phân tích linq, xml/json, generics và bộ sưu tập cũng cực kỳ có giá trị và rất nhanh.

và cho MonoTouch có một cơ hội mà Apple sẽ không hỗ trợ nó nữa trong tương lai.

có, có cơ hội. Ngoài ra còn có một cơ hội mà Tim Cook sẽ chạy với hàng tỉ đô la của Apple và mua tất cả Hawaii (chứ không phải là mua "hòn đảo này" của Larry Ellison). Nhưng cơ hội bây giờ khá mỏng.

Tất cả những điều đó là đúng hay có lý do khác để thích Mục tiêu C? Tôi biết có những chủ đề khác như thế này, nhưng họ không trả lời câu hỏi của tôi, đặc biệt là câu hỏi liên quan đến hỗ trợ của của Apple đối với MonoTouch.

Apple không hỗ trợ MonoTouch. Xamarin làm, và họ làm điều đó đặc biệt tốt. Apple không hỗ trợ bất cứ điều gì ngoại trừ XCode, đó là sản phẩm của họ.

Apple DO cho phép Ứng dụng MonoTouch (có rất nhiều). Một cách khác để xem xét nó: thông thường, 95% trong số 100 trò chơi hàng đầu được viết bằng Unity3D, dựa trên cùng một kỹ thuật (biên dịch trước mã C# và nhúng một phiên bản cắt xén của khung Mono/.NET.).

Có nhiều lý do để thích ObjC đó sẽ là:

  • Bạn đã biết ObjC và CocoaTouch và thích nó.
  • Nhóm của bạn đã biết ObjC và CocoaTouch hoặc bạn có thể dễ dàng thuê những người làm (lưu ý: hiện tại, theo tôi biết, nhà phát triển iOS đắt tiền để thuê, nếu bạn có thể nhận được)
  • Bạn cần sử dụng phiên bản beta là ngày họ ra mắt. Hãy nhớ rằng bạn có thể sử dụng MonoTouch hiện tại và triển khai cho thiết bị iOS [REDACTED] của bạn với phiên bản beta trên đó. Bạn chỉ có thể không sử dụng những thứ mới trong YET iOS6 (Xamarin nói "khoảng 2 tuần" mà nên được về bây giờ ...). Cũng xin lưu ý rằng bạn không thể triển khai ứng dụng cho cửa hàng được xây dựng bằng SDK beta, ngay cả khi bạn không sử dụng bất kỳ nội dung nào trong đó. Bạn thậm chí không thể đề cập đến iOS [REDACTED] trong mô tả sản phẩm của mình (tôi đã thử)
  • bạn yêu thích [squareBrackets andTheOccasional: @ "những điều cú pháp lạ"];

Bây giờ, sẽ xây dựng nền tảng chéo, ứng dụng mã chia sẻ có dễ thực hiện không? TRƠI ƠI KHÔNG. Đó là một phần phát triển rất phức tạp cho một ứng dụng không tầm thường. Nhưng đó là một phần thú vị của phát triển phần mềm: nếu nó dễ dàng, nó sẽ là nhàm chán! Grab Greg Shackles book (http://www.amazon.com/dp/1449320236) để có được một ý tưởng về những gì cần thiết cho iOS + WinPhone + phát triển phong cách Android.

+1

Cảm ơn câu trả lời chi tiết của bạn. Tôi cũng bắt đầu đọc cuốn sách mà bạn đã đề cập và cho đến nay thật tuyệt vời khi có được cái nhìn tổng quan. – chrinetr

+0

Tuyệt vời, rất vui khi bạn thấy nó thú vị - Tôi đã 75% qua nó bây giờ, thật tốt khi thấy sự khác biệt về thuật ngữ giữa ba nền tảng. –

-2

Không có cơ thể nào có thể cho bạn biết chắc chắn những gì táo sẽ hỗ trợ và những gì nó sẽ không hỗ trợ trong tương lai, tuy nhiên trước đây có một số vấn đề với mono, và vì lịch sử có xu hướng lặp lại. của điều đó xảy ra một lần nữa

có nói rằng, lúc nào cũng đi với SDK phát triển ứng dụng bản địa và môi trường, nó sẽ được linh hoạt hơn, và nó sẽ được cập nhật theo thời gian thực, và hiệu suất sẽ luôn luôn được tốt hơn trong tự nhiên

+5

Khác với "không có gì cả nhưng ObjC" điều khi họ đã cố gắng để giết Flash, Apple chưa bao giờ có một vấn đề với các ứng dụng Mono. Ngay cả khi họ từ chối "ứng dụng không phải ObjC" chính thức, họ vẫn phê duyệt các ứng dụng MonoTouch (bao gồm cả tôi) –

8

Tôi đã thực sự sử dụng MonoTouch cho mọi ứng dụng tôi từng phát triển. Hiệu suất chưa bao giờ là một vấn đề, và tôi không thể tưởng tượng được nó tệ đến nhường nào khi sử dụng Objective-C. Tôi đã có 2 ứng dụng hàng đầu trong 10 cửa hàng ứng dụng ở Mỹ: "Vẽ A Stickman" và "Vẽ A Stickman: Tập 2" (đừng lo lắng, chúng tôi đang nghiên cứu thêm).

Nếu bạn biết C# và .Net lợi ích của bạn về năng suất sẽ lớn hơn so với những gì sẽ xảy ra khi cố gắng tìm hiểu Mục tiêu-C. Tôi là một nhà phát triển C# .Net (chỉ dành cho Windows) trước khi phát triển iOS và việc chuyển đổi sang MonoTouch thật tuyệt vời.

Nếu bạn thích Linq, phân tích cú pháp XML trong ít hơn 100 dòng, thu thập rác, generics, đa luồng đơn giản, và không có dấu ngoặc vuông lạ, MonoTouch là dành cho bạn.

11

Linh cảm của tôi là các công ty bạn đã nói chuyện đơn giản được sử dụng để sử dụng Objective-C. Đó là nơi kỹ năng của họ nằm, và đó là lý do lớn nhất tại sao họ không muốn đi chệch khỏi con đường của họ. Những lý do khác có thể được lập luận theo cả hai cách.

Đúng là không ai có thể dự đoán những gì Apple sẽ làm, nhưng có một rất khả năng nhỏ rằng Apple sẽ cấm các bộ công cụ của bên thứ ba & API như họ đã làm vào mùa hè năm 2010. Đó là chỉ một thời gian ngắn thời gian, và họ hoàn toàn đảo ngược quyết định đó. Trọng tâm hiện tại của họ là làm cho phát triển ứng dụng dễ dàng hơn, điều đó có nghĩa là giữ cho trường mở cho các phương pháp phát triển thay thế. Tôi nghĩ MonoTouch là an toàn.

Về tốc độ, C# thường tạo ra các tệp thực thi rất nhanh. Chúng có thể không phải là khá nhanh như Mục tiêu-C, nhưng tôi nghi ngờ bạn sẽ nhận thấy sự khác biệt. Tôi nhớ nhìn thấy một trang web ở đâu đó cho thấy C# hoạt động tốt hơn C/C++ trong một số thử nghiệm, nhưng đó là trong môi trường .NET, không phải Mono ... và tiếc là tôi không thể tìm thấy tham chiếu nữa. Tôi sẽ tiếp tục tìm kiếm. Nhưng điểm mấu chốt về tốc độ là tốc độ C# rất tốt. Nó không giống như BASIC vs C. Giống như Java/JIT vs C.

C# cung cấp cho bạn nhiều, nhiều (!) lợi thế so với Objective-C và chúng được liệt kê trong các câu trả lời Stack Overflow khác, vì vậy tôi đã thắng không lặp lại chúng ở đây. Bạn có thể tìm thấy chúng một cách dễ dàng đủ.

Tôi là một fan hâm mộ rõ ràng của MonoTouch, nhưng tôi phải nói một điều: Tôi nghĩ rằng đó là một sai lầm cho các công ty nghĩ rằng bởi vì họ thông thạo C# /. NET rằng họ sẽ dễ dàng có thể phát triển và/hoặc duy trì các ứng dụng iOS bằng MonoTouch. Nó chỉ là không đúng, bởi vì MonoTouch về cơ bản là một lớp C# trên CocoaTouch API, có nghĩa là bạn phải học cách Apple làm việc. Bạn có ứng dụng đại biểu và xem bộ điều khiển và tất cả các công cụ UIKit. Có một đường cong học tập thực sự ở đó. Nhưng nếu bạn thông thạo C#, MonoTouch sẽ là một trợ giúp lớn.

UPDATE:
Tôi tìm thấy bài viết trên C# tốc độ: Head-to-head benchmark: C++ vs .NET

+1

MonoTouch sử dụng biên soạn trước thời gian, do đó so sánh giữa Java (thường áp dụng) không có trong trường hợp này. Nó chạy lắp ráp ARM nguyên bản, từ trình tạo mã đơn, liên kết và được xây dựng với gcc hoặc llvm (giống như tất cả các ứng dụng xcode/objc) –

+0

Đúng, nhưng tôi đã so sánh tốc độ thực thi tổng thể, không phải kiến ​​trúc cơ bản. Cảm ơn mặc dù, làm rõ tốt. (TBH, so sánh Java của tôi cũng có thể thiếu sót: C# có lẽ nhanh hơn. Nhưng trong mọi trường hợp, nó có cùng thứ tự độ lớn.) –

3

Chúng tôi có một dòng ứng dụng doanh nghiệp sử dụng MS SQL làm kho dữ liệu và có WinForms và giao diện người dùng web. Nó tích hợp với các cửa sổ của chúng tôi điện thoại di động 6,5 và các ứng dụng máy tính bảng với các dịch vụ web. Tất cả C#.

Chúng tôi cam kết hoàn toàn với MonoTouch sau một số thử nghiệm trong Objective-C và HTML-5 (chúng tôi đã làm việc nguyên mẫu): chúng tôi sử dụng lại logic kinh doanh của mình và chúng tôi cảm thấy thoải mái khi phát triển mã mới trong C#.

Logic nghiệp vụ của chúng tôi liên tục được nâng cao và những cải tiến này ngay lập tức hiển thị với ứng dụng dành cho thiết bị di động - mà không phải lặp lại logic trong Objective-C hoặc C++.

Vấn đề chính của chúng tôi là tìm kiếm một lập trình viên C# người thoải mái với giao diện người dùng iPhone và iPad.

MonoTouch ổn định và chúng tôi đã gặp phải không có giới hạn (chúng tôi đang ràng buộc với cùng một API iOS mà Objective-C liên kết với). Trong quá trình học tập của chúng tôi, chúng tôi đã có câu hỏi, va chạm vào lỗi và đã có một số hiểu lầm - nhưng sự hỗ trợ từ Xamarin là tuyệt vời.

Hiệu suất không phải là vấn đề - ứng dụng của chúng tôi rất linh hoạt mặc dù nó hoạt động rất nhiều ở hậu trường.

6

Tôi sử dụng cả Objective-C và C# (MonoTouch & Droid) và tôi thực sự thích cả hai. Khi tôi mã hóa trong C#, có rất nhiều tính năng như LINQ mà tôi rất thích trong Obj-C, & khi tôi viết mã trong Obj-C có rất nhiều điều tôi muốn có trong C#, nhưng tôi thích ứng với bất cứ thứ gì tôi viết mã đủ nhanh. Re hiệu suất, tôi đã phát hiện không có sự khác biệt ở tất cả, ngay cả đối với công cụ đồ họa chuyên sâu, vì vậy tôi sẽ không sử dụng đó như là một lý do không sử dụng C#.

Tôi nghĩ nó hoàn toàn phù hợp với những gì bạn cảm thấy thoải mái, mặc dù với một dự án đa nền tảng được thiết kế tốt, bạn CÓ THỂ có mã lõi đa nền tảng nếu bạn sử dụng Mono, và bạn sẽ chỉ có để làm công cụ giao diện người dùng theo cách cụ thể - khi nói đến điều này, bạn cần phải biết công cụ gốc để giao diện người dùng của bạn hoạt động theo cách phù hợp với nền tảng và quen thuộc với người dùng.

+0

Tôi quan tâm đến các tính năng Mục tiêu-C mà bạn bỏ lỡ trong C#. Chăm sóc để xây dựng? –

Các vấn đề liên quan