Bagaimana cara memutuskan antara MonoTouch dan Objective-C? [Tutup]

273

Setelah duduk melalui sesi hari ini di Mono di acara .Net lokal, penggunaan MonoTouch 'disentuh' sebagai alternatif untuk pengembangan iPhone. Menjadi sangat nyaman di C # dan. Net, sepertinya ini pilihan yang menarik, meskipun ada beberapa keunikan dari tumpukan Mono. Namun, karena MonoTouch berharga $ 400, saya agak bingung apakah ini cara untuk pengembangan iPhone.

Adakah yang punya pengalaman mengembangkan MonoTouch dan Objective-C, dan jika demikian, apakah berkembang dengan MonoTouch yang jauh lebih sederhana dan lebih cepat daripada mempelajari Objective-C, dan pada gilirannya bernilai $ 400?

jamesaharvey
sumber
13
Saya pikir banyak komentar tentang MonoTouch yang tidak dapat berjalan di iOS sudah tidak berlaku lagi karena Apple mengurangi pembatasan dev tool-nya. Lihat: apple.com/pr/library/2010/09/09statement.html
sivabudh

Jawaban:

520

Saya sudah melihat pertanyaan ini (dan variasi di atasnya) banyak akhir-akhir ini. Yang mengejutkan saya adalah seberapa sering orang merespons, tetapi seberapa sedikit yang menjawab .

Saya memiliki preferensi saya (saya menikmati kedua tumpukan), tetapi di sinilah sebagian besar "jawaban" mulai salah. Seharusnya bukan tentang apa yang saya inginkan (atau apa yang orang lain inginkan).

Begini cara saya menentukan nilai MonoTouch - saya tidak bisa bersikap objektif, tapi saya pikir ini cukup bebas zealotry:

  • Apakah ini untuk kesenangan atau bisnis? Jika Anda ingin masuk dalam konsultasi di bidang ini, Anda bisa mendapatkan $ 399 Anda kembali dengan sangat cepat.

  • Apakah Anda ingin mempelajari platform dalam-luar, atau "hanya" ingin menulis aplikasi untuk itu?

  • Apakah Anda suka. Cukup bersih sehingga menggunakan dev dev yang berbeda akan membuat Anda senang? Sekali lagi, saya suka kedua tumpukan (Apple dan Mono), tetapi bagi saya MonoTouch membuat pengalaman yang jauh lebih menyenangkan. Saya belum berhenti menggunakan alat Apple, tapi itu terutama karena saya benar-benar menikmati kedua tumpukan . Saya suka iPhone, dan saya suka Net. Kalau begitu, bagi saya, MonoTouch adalah orang yang tidak punya otak.

  • Apakah Anda merasa nyaman bekerja dengan C? Maksud saya bukan Objective-C, tetapi C - itu penting karena Objective-C adalah C. Ini adalah versi OO yang bagus, mewah, ramah, tetapi jika pointer memberi Anda heebie-jeebies, MonoTouch adalah teman Anda. Dan jangan dengarkan para penentang yang mengira Anda seorang pengecut jika itu terjadi bahwa Anda tidak suka pointer (atau C, dll.). Saya biasa berjalan berkeliling dengan salinan Referensi Saku IBM ROM BIOS, dan ketika saya sedang menulis perakitan dan memaksa komputer saya ke mode video lucu dan menulis bit rendering font saya sendiri untuk mereka dan sistem windowing (diakui trashy), saya tidak Saya pikir para pengembang QuickBasic tidak ada. Saya dulupengembang QuickBasic (selain yang lainnya). Jangan pernah menyerah pada macho culun. Jika Anda tidak suka C, dan jika Anda tidak suka pointer, dan jika Anda ingin tinggal sejauh mungkin dari manajemen memori manual (dan, agar adil, sama sekali tidak buruk di ObjC), lalu. .. MonoTouch. Dan jangan ambil tanggung jawab untuk itu.

  • Apakah Anda ingin menargetkan pengguna atau bisnis? Tidak masalah bagi saya, tetapi masih ada orang di Edge, dan faktanya adalah: Anda dapat membuat paket unduhan yang jauh lebih kecil jika Anda menggunakan tumpukan Apple. Saya telah bermain-main dengan MonoTouch, dan saya memiliki aplikasi kecil yang bagus yang, setelah dikompresi, turun menjadi sekitar 2,7 MB (ketika mengirimkan aplikasi Anda untuk distribusi, Anda menandainya - ketika aplikasi diunduh dari toko, mereka ' kembali zip - jadi ketika mencari tahu apakah aplikasi Anda akan masuk di bawah batas OTA 10MB, ritsleting pengisap pertama - Anda AKAN akan terkejut dengan MonoTouch). Namun, selain MT kebahagiaan, setengah meg vs hampir tiga (misalnya) adalah sesuatu yang mungkin penting bagi Anda jika Anda menargetkan pengguna akhir. Jika Anda memikirkan pekerjaan perusahaan, beberapa MB tidak akan berarti apa-apa. Dan, hanya untuk menjadi jelas - saya akan mengirimkan aplikasi berbasis MT ke toko segera, dan saya tidak punya masalah apa pun dengan ukurannya. Sama sekali tidak mengganggu saya. Tetapi jika itu adalah sesuatu yang perlu diperhatikanAnda , maka tumpukan Apple memenangkan yang ini.

  • Melakukan pekerjaan XML? MonoTouch. Titik.

  • Manipulasi string? Manipulasi tanggal? Jutaan hal kecil lain yang telah kita terbiasa dengan .Net-AND-the-kitchen-sink framework? MonoTouch.

  • Layanan web? MonoTouch.

  • Secara sintaksis, keduanya memiliki kelebihan. Objective-C cenderung lebih verbose di mana Anda harus menulisnya . Anda akan menemukan diri Anda menulis kode dengan C # Anda tidak perlu menulis dengan ObjC, tetapi berjalan dua arah. Topik khusus ini bisa mengisi buku. Saya lebih suka sintaksis C #, tetapi setelah melupakan reaksi awal-ini-yang-lain-duniawi saya terhadap Objective-C, saya telah belajar untuk menikmatinya sedikit. Saya mengolok-oloknya sedikit dalam pembicaraan ( ini aneh bagi para devs yang terbiasa dengan C # / Java / etc.), Tetapi kenyataannya adalah bahwa saya memiliki tempat berbentuk Objective-C di hati saya yang membuat saya bahagia.

  • Apakah Anda berencana menggunakan Interface Builder? Karena, bahkan dalam versi awal ini, saya menemukan diri saya melakukan jauh lebih sedikit pekerjaan untuk membangun UI saya dengan IB dan kemudian menggunakannya dalam kode. Rasanya seluruh langkah hilang dari cara Objective-C / IB dalam melakukan sesuatu, dan saya cukup yakin itu karena seluruh langkah hilang dari cara Objective-C / IB dalam melakukan sesuatu. Sejauh ini, dan saya pikir saya belum cukup menguji, tetapi sejauh ini , MonoTouch adalah pemenang di sini untuk seberapa banyak pekerjaan yang harus Anda lakukan.

  • Apakah Anda pikir belajar bahasa dan platform baru itu menyenangkan? Jika demikian, iPhone memiliki banyak hal untuk ditawarkan, dan tumpukan Apple kemungkinan akan membuat Anda keluar dari zona nyaman Anda - yang, bagi beberapa pengembang, menyenangkan (Hai - saya salah satu dari pengembang tersebut - saya bercanda tentang hal itu dan memberikan Apel waktu yang sulit, tetapi saya sudah banyak belajar pengembangan iPhone menyenangkan melalui alat Apple).

Ada banyak hal yang perlu dipertimbangkan. Nilai sangat abstrak. Jika kita berbicara tentang biaya dan apakah itu layak, jawabannya turun ke butir pertama saya: jika ini untuk bisnis, dan jika Anda bisa mendapatkan pekerjaan, Anda akan mendapatkan uang Anda kembali.

Jadi ... itu seobjektif mungkin. Ini adalah daftar singkat dari apa yang mungkin Anda tanyakan pada diri sendiri, tetapi ini adalah titik awal.

Secara pribadi (mari kita jatuhkan objektivitas sejenak), saya suka dan gunakan keduanya. Dan saya senang saya mempelajari tumpukan Apple terlebih dahulu. Lebih mudah bagi saya untuk bangun dan berlari dengan MonoTouch ketika saya sudah tahu jalan saya di dunia Apple. Seperti yang orang lain katakan, Anda masih akan bekerja dengan CocoaTouch - itu hanya akan berada di lingkungan yang di-net-kan.

Tetapi ada lebih dari itu. Orang-orang yang belum pernah menggunakan MonoTouch cenderung berhenti di sana - "Ini pembungkus bla bla bla" - itu bukan MonoTouch.

MonoTouch memberi Anda akses ke apa yang ditawarkan CocoaTouch dan juga memberi Anda akses ke apa (sebagian dari) .Net yang ditawarkan, IDE yang membuat beberapa orang merasa lebih nyaman (saya salah satunya), integrasi yang lebih baik dengan Interface Builder , dan meskipun Anda tidak bisa sepenuhnya melupakan manajemen memori, Anda mendapatkan kelonggaran yang bagus.

Jika Anda tidak yakin, ambil tumpukan Apple (gratis), dan ambil tumpukan eval MonoTouch (gratis). Sampai Anda bergabung dengan program pengembang Apple, keduanya hanya akan berjalan melawan simulator, tetapi itu cukup untuk membantu Anda mengetahui apakah Anda jauh lebih suka satu sama lain, dan mungkin apakah MonoTouch, bagi Anda, bernilai $ 399.

Dan jangan dengarkan para fanatik - mereka cenderung bukan yang menggunakan teknologi yang mereka lawan :)

Rory Blyth
sumber
50
Wow, Rory, terima kasih telah meluangkan waktu untuk menjawab pertanyaan saya dengan sangat rinci. Dari apa yang saya tahu Anda adalah satu-satunya yang telah menggunakan kedua opsi, yaitu dari siapa saya mencari jawaban. Saya pasti akan mencoba keduanya dari sana. BTW, saya mendengar Anda di podcast SO terbaru, kan? Barang bagus. Terima kasih lagi!
jamesaharvey
17
Terima kasih atas komentarnya :) Saya merasa frustrasi dengan beberapa orang brengsek yang membenci yang saya lihat. Berkali-kali pertanyaan tersebut ditanggapi dengan "Anda orang bodoh idiot untuk meritus sistem opurating lebih dulu !! ??" Yang tidak membantu dan menghina. MonoTouch memiliki titik-titik kasar, tetapi orang-orang itu memiliki rekam jejak jenius. MT telah maju dengan cepat dan lebih cantik setiap hari. Saya terus mengatakan: beri mereka beberapa bulan. Mereka bersikap bijaksana tentang fitur, tapi saya pikir kita akan melihat hal - hal besar . Saya suka tumpukan Apple, tapi aku punya playground lain sekarang - itu hal yang baik dan aku pusing :)
Rory Blyth
4
@Stephan - Mungkin tidak benar untuk mengatakan apa yang "hilang" - Saya bisa menyelesaikan pekerjaan dengan Cocoa. Ini lebih lanjut tentang API. Jauh lebih mudah untuk bekerja dengan string, tanggal, XML, dll., Dengan .Net. Tidak tahu jika Anda terbiasa dengan cara .Net melakukan hal-hal ini, serta sejauh mana dukungan MonoTouch untuk mereka - jika Anda belum melihatnya, Anda harus - hanya untuk memeriksanya. Saya tidak bermaksud mengatakan bahwa ada hal-hal yang tidak dapat Anda lakukan dengan Kakao, tetapi ada banyak hal yang jauh lebih mudah dilakukan dengan .Net. Parsing lebih mudah dilakukan - matematika tanggal lebih mudah dilakukan - dll
Rory Blyth
3
Juga ada masalah penggunaan kembali kode Anda sendiri di iPhone / iPad dengan MT. Kami memiliki beberapa kode kripto, dan kode logika bisnis, yang berjalan di server dan rekan-rekan desktop kami, yang kami bisa kompilasi ulang dengan MT dan digunakan di aplikasi klien iOS kami. Itu mungkin penting untuk beberapa proyek.
Monoman
2
Juga patut dipertimbangkan adalah kenyataan bahwa, meskipun biaya lisensi $ 400, ada juga berlangganan pemeliharaan yang harus Anda perbarui (untuk alasan yang jelas) setiap tahun - $ 250. Ini mungkin harga yang wajar, tetapi masih layak dipertimbangkan.
Amc_rtty
62

Ada banyak kabar angin dalam posting ini dari para pengembang yang belum mencoba MonoTouch dan Objective-C. Tampaknya sebagian besar menjadi pengembang Objective-C yang belum pernah mencoba MonoTouch.

Saya jelas-jelas bias, tetapi Anda dapat memeriksa apa yang telah dilakukan komunitas MonoTouch:

http://xamarin.com

Di sana Anda akan menemukan beberapa artikel dari pengembang yang telah dikembangkan di Objective-C dan C #.

miguel.de.icaza
sumber
29
@NSResponder - Sudahkah Anda menggunakan MonoTouch? Ini adalah rilis v1.x, praktis baru, dan sudah luar biasa. Cobalah sebelum berkomentar. Ada perubahan besar (integrasi Interface Builder-nya jauh lebih baik daripada Xcode), dan ada sedikit perubahan (bandingkan cara ObjC / Cocoa untuk mendapatkan folder dokumen pengguna dibandingkan dengan MT, misalnya). Saya masih menggunakan tumpukan Apple untuk beberapa hal, tetapi MT cantik dan penuh potensi. Serius - coba saja. Atau lihat bagaimana Cocoa API telah diikat - Anda tidak harus menggunakannya - hanya jangan buang pekerjaan tanpa mempelajarinya .
Rory Blyth
Iya! Juga, beberapa fitur C # 5.0 yang baru membuat pengkodean menjadi lebih menyenangkan dibandingkan dengan objektif-c.
harsimranb
39

Jadi, jawaban saya untuk pertanyaan serupa sebelumnya adalah belajar Objective-C. (Juga, jangan lupa tentang dukungan debugging)

Ini mungkin akan menyinggung beberapa tetapi jujur, jika Anda akan melakukan pengembangan serius, Anda harus belajar Objective-C. Tidak mengetahui Objective-C dalam pengembangan iPhone hanya akan menjadi penghalang. Anda tidak akan dapat memahami banyak contoh; Anda harus berurusan dengan kebiasaan Mono sedangkan jika Anda memiliki pengetahuan tentang Objective-C Anda bisa mendapatkan lebih banyak dari dokumentasi platform.

Secara pribadi, saya tidak mengerti posisi yang mengatakan meningkatkan jumlah informasi yang Anda butuhkan dalam menggunakan Mono daripada bahasa asli platform. Sepertinya agak kontraproduktif bagi saya. Saya pikir jika ini adalah proposisi yang sangat mahal (belajar bahasa baru) maka mungkin ada gunanya meluangkan waktu untuk konsep pemrograman dasar sehingga belajar bahasa baru adalah proposisi yang cukup murah.

Pengguna lain juga menulis ini:


Monotouch lebih mudah bagi Anda sekarang. Tapi lebih sulit nanti.

Misalnya, apa yang terjadi ketika benih baru keluar yang perlu Anda uji coba tetapi hancurkan MonoTouch karena suatu alasan?

Dengan tetap menggunakan Mono, setiap kali Anda mencari sumber daya untuk kerangka kerja, Anda harus menerjemahkan secara mental bagaimana Anda akan menggunakannya dengan Mono. Biner aplikasi Anda akan lebih besar, waktu pengembangan Anda tidak lebih cepat setelah beberapa bulan ke dalam Objective-C, dan pengembang aplikasi lainnya akan memiliki lebih banyak keuntungan daripada Anda karena mereka menggunakan platform asli.

Pertimbangan lain adalah Anda ingin menggunakan C # karena Anda lebih terbiasa dengan bahasa daripada Objective-C. Tetapi sebagian besar kurva pembelajaran untuk iPhone bukanlah Objective-C, melainkan kerangka kerja - yang harus Anda hubungi dengan C # juga.

Untuk platform apa pun, Anda harus menggunakan platform yang secara langsung mengekspresikan filosofi desain platform itu - pada iPhone, yaitu Objective-C. Pikirkan hal ini dari sudut sebaliknya, jika pengembang Linux terbiasa memprogram di GTK ingin menulis aplikasi Windows, akankah Anda dengan serius menyarankan mereka tidak menggunakan C # dan tetap menggunakan GTK karena itu "lebih mudah" bagi mereka untuk melakukannya?


BobbyShaftoe
sumber
12
Anda, mungkin tidak sengaja, salah mengartikan MT. Sama sekali tidak - tidak jauh - mirip dengan menggunakan GTK untuk menulis aplikasi Win. Binding MT sangat setia kepada CocoaTouch. Mereka sebenarnya telah memperbaiki beberapa konvensi CT API. Tapi Anda tidak menulis aplikasi Anda menggunakan, katakanlah, abstraksi berbasis Windows Forms atas CT. MT dengan MonoDevelop memiliki integrasi yang lebih baik dengan IB daripada Xcode (jika Anda menginginkannya), dan Anda sering dapat melakukan hal yang sama dalam setengah kode atau kurang. Ukuran biner sedang ditingkatkan, dan alat-alat (generator mengikat, dll.) Lebih baik setiap saat. Aplikasi MT adalah aplikasi asli.
Rory Blyth
7
Untuk memberikan contoh daripada mengharapkan Anda untuk mengambil pendapat MT-fanboy saya sendiri, saya dapat melakukan hal-hal seperti (dan ini hanya sebagian kecil keuntungan): Buat properti dengan satu baris; ambil referensi ke folder Dokumen tanpa spelunking array konyol (aplikasi memiliki satu folder dokumen, selalu di tempat yang sama - mengapa semua pekerjaan tambahan untuk "menemukannya"?); gunakan .Net framework di mana Cocoa stinks (NSDate, anyone?); menggunakan keterampilan komoditas untuk aplikasi perusahaan; gunakan bit XML modern yang tepat (Saya suka ketika Cocoa diam-diam tersedak karakter dan hanya berhenti - tidak ada crash - hanya berhenti )
Rory Blyth
8
Tidak mengatakan saya akan menggunakannya untuk semuanya. Saya suka ObjC dan masih menggunakannya. Dan, jika kinerja adalah masalah, saya memiliki kontrol lebih terperinci atas apa yang terjadi. Tapi ... ada saatnya MT akan lebih masuk akal, dan saya pikir itu akan menjadikan iPhone pilihan yang layak untuk pengembangan usaha. Lempar batu ke udara dan Anda akan mencapai. Net dev. Sebagian besar perusahaan tidak memiliki pengembang ObjC internal. Dan untuk pekerjaan perusahaan, mereka tidak harus melakukannya. MT jauh lebih mudah untuk bekerja dengan layanan web dan DB. Anda benar-benar dapat menulis banyak jenis aplikasi dengan MT dengan setengah kode yang diperlukan di ObjC.
Rory Blyth
8
Akhirnya (saya bisa melanjutkan, tapi saya pikir saya sedang membuat mt point), perubahan yang "mematahkan" MonoTouch mungkin sama saja dengan memecah aplikasi ObjC. Setelah aplikasi Anda ada di toko, itu adalah aplikasi iPhone asli (sebagaimana mestinya). Panggilan pada akhirnya tidak berbeda - runtime yang sama dengan aplikasi yang dibangun dengan tumpukan Apple. Jika aplikasi MT Anda rusak karena perubahan ke lingkungan runtime, aplikasi akan dibangun dengan ObjC. Dan tim MT telah mengatasi hal ini, merilis pembaruan dan perbaikan bug dengan cepat. Binding MT memetakan cukup dekat untuk CT bahwa kemungkinan masalah nyata rendah. Aight - Saya akan diam sekarang :)
Rory Blyth
27

Menggunakan Mono bukan penopang. Ada banyak hal yang ditambahkannya ke iPhone OS. LINQ, WCF, kode yang dapat dibagi antara aplikasi Silverlight, halaman ASP.NET, aplikasi WPF, aplikasi Windows Form, dan ada juga mono untuk Android dan itu akan bekerja untuk Windows Mobile juga.

Jadi, Anda dapat menghabiskan banyak waktu menulis Objective-C (Anda akan melihat dari banyak penelitian di mana kode sampel yang sama persis dalam C # secara signifikan lebih sedikit untuk menulis daripada OC) dan kemudian DUPLICATE semuanya untuk platform lain. Bagi saya, saya memilih MonoTouch karena Cloud App yang saya tulis akan memiliki banyak antarmuka, iPhone hanya satu dari mereka. Memiliki streaming data WCF dari cloud ke aplikasi MonoTouch sangat sederhana. Saya memiliki perpustakaan inti yang dibagikan di antara berbagai platform dan kemudian hanya perlu menulis lapisan presentasi sederhana untuk penyebaran iPhone / WinMobile / Android / SilverLight / WPF / ASP.NET. Menciptakan itu semua di Objective-C akan menjadi besar buang-buang waktu baik untuk dev dan pemeliharaan awal sebagai produk terus bergerak maju karena semua fungsi harus direplikasi daripada digunakan kembali.

Orang-orang yang menghina MonoTouch atau menyindir bahwa pengguna memerlukan kruk tidak memiliki gambaran besar tentang apa artinya memiliki kerangka .NET di ujung jari Anda dan mungkin tidak mengerti pemisahan logika yang tepat dari presentasi yang dilakukan dengan cara yang dapat digunakan kembali di seluruh platform dan perangkat.

Objective-C menarik dan sangat berbeda dari banyak bahasa umum. Saya suka tantangan dan mempelajari pendekatan yang berbeda ... tetapi tidak ketika melakukan hal itu menghambat kemajuan saya atau membuat pengkodean ulang yang tidak perlu. Ada beberapa hal yang sangat hebat tentang kerangka kerja iPhone SDK, tetapi semua kehebatan didukung sepenuhnya dengan MonoTouch dan memotong semua manajemen memori manual, mengurangi jumlah kode yang diperlukan untuk melakukan tugas yang sama, memungkinkan saya untuk menggunakan kembali perangkat saya, dan membiarkan opsi saya terbuka untuk dapat pindah ke perangkat dan platform lain.

Paul
sumber
19

Saya beralih. Monotouch, biarkan saya menulis aplikasi setidaknya 3-4 kali lebih cepat (4 aplikasi per bulan dibandingkan dengan yang lama 1 saya di Obj C)

Kurang banyak mengetik.

Hanya pengalaman saya saja.

Ian Vink
sumber
2
"4 aplikasi per bulan" - Ketika kuantitas lebih penting seperti kualitas. MT seperti McDonalds. Tetapi Anda mendapatkan makanan yang lebih baik di XCode-Restaurant.
netshark1000
2
Hasilnya meskipun berbicara secara berbeda, Rdio dan iCircuit adalah aplikasi MT yang didemokan oleh Steve Jobs. C # dan MT menghilangkan pekerjaan plumbing yang memaksa-C memaksa Anda untuk melakukannya.
Ian Vink
17

Jika ini adalah satu-satunya aplikasi iPhone yang akan Anda kembangkan, dan Anda juga tidak tertarik untuk mengembangkan aplikasi Mac, maka MonoTouch mungkin sepadan dengan biayanya.

Jika Anda berpikir Anda akan pernah mengembangkan lebih banyak aplikasi iPhone, atau ingin melakukan pengembangan asli Mac, mungkin perlu untuk mempelajari Objective-C dan kerangka kerja terkait. Plus, jika Anda adalah tipe programmer yang senang belajar hal-hal baru, itu adalah paradigma baru yang menyenangkan untuk dipelajari.

phoebus
sumber
6
Jika ini adalah satu-satunya aplikasi iPhone yang akan Anda kembangkan, $ 99 / thn juga tidak sepadan.
Dinah
Anda dapat menggunakan alat C # develppment yang sama untuk membangun aplikasi Mac. Bahkan Anda dapat berbagi kode antara aplikasi iPhone C # dan Mac C #. MonoTouch sekarang disebut Xamarin
Ian Vink
9

Secara pribadi saya pikir Anda akan memiliki waktu yang lebih baik hanya belajar Objective-C.

Pendeknya:

  • "Learning Objective-C" bukanlah hal yang menakutkan seperti yang Anda bayangkan, Anda bahkan dapat menikmatinya setelah beberapa minggu pertama
  • Anda sudah terbiasa dengan sintaks "gaya C" dengan banyak * & () {}; dimana mana
  • Apple telah melakukan pekerjaan yang sangat baik dalam mendokumentasikan berbagai hal
  • Anda akan berinteraksi dengan iPhone seperti yang dimaksudkan Apple, yang berarti Anda akan mendapatkan manfaat langsung dari sumbernya tidak melalui beberapa filter.

Saya telah menemukan bahwa proyek-proyek seperti Unity dan MonoTouch seharusnya "menghemat waktu Anda" tetapi pada akhirnya Anda perlu mempelajari bahasa spesifik domain mereka dan harus kadang-kadang melakukan hal-hal sampingan. Semua itu mungkin akan membawa Anda selama belajar bahasa yang Anda hindari belajar (dalam waktu kalender). Pada akhirnya Anda tidak menghemat waktu dan Anda sangat dekat dengan beberapa produk.

EDIT: Saya tidak pernah bermaksud menyiratkan sesuatu yang negatif tentang. NET Saya kebetulan penggemar itu. Maksud saya adalah bahwa menambahkan lebih banyak lapisan kompleksitas hanya karena Anda belum nyaman dengan notasi bracket unik yang tidak benar-benar masuk akal bagi saya.

Pembaruan 2019: 7 tahun kemudian. Saya masih merasakan hal yang sama jika tidak lebih dari itu. Tentu, 'bahasa khusus domain' mungkin istilah yang salah untuk digunakan, tetapi saya masih percaya bahwa jauh lebih baik untuk menulis secara langsung untuk platform yang Anda gunakan untuk bekerja dan hindari lapisan kompatibilitas dan abstraksi sebanyak mungkin. Jika Anda khawatir tentang penggunaan kembali dan pengerjaan ulang kode, umumnya fungsi apa pun yang perlu dilakukan aplikasi lintas platform mungkin dapat diselesaikan dengan teknologi web modern.

slf
sumber
12
Pertama, C # bukan "bahasa khusus domain" - jauh dari itu. Ini adalah keterampilan komoditas. Itu bagian dari nilai MonoTouch. Dapat dikatakan (tidak adil dan tidak akurat) bahwa ObjC adalah DSL di mana sebagian besar pengembang (laboratorium keuangan luar negeri dan ruang bawah tanah) hanya akan menggunakannya untuk pengembangan OS X atau iPhone. Tapi ternyata tidak. Seperti C #, ini adalah bahasa serbaguna yang pada dasarnya ada untuk membiarkan Anda fokus pada kerangka kerja daripada bahasa itu sendiri (saya pikir kami setuju di sana). Namun perlu diingat bahwa kode ObjC Anda akan terputus dengan pembaruan Apple. Itu bukan masalah khusus MT.
Rory Blyth
3
MT bahkan dapat menyelamatkan Anda dalam beberapa kasus karena ada lapisan abstraksi ini. Apple memodifikasi API? Nah, aplikasi ObjC Anda dan aplikasi MT setara Anda (mari berpura-pura ada) akan rusak. Orang-orang MT bisa merilis solusi sementara untuk memodifikasi bagaimana MonoTouch API menangani panggilan di belakang layar. Kode MT Anda tidak perlu diubah - Anda hanya bisa membangun kembali terhadap rilis MT sementara. Ya: ini adalah perbaikan kotor yang dengan mudah dapat menyebabkan masalah, tetapi penghentian sementara API MT dengan benar akan memberi devs waktu untuk menangani perubahan dengan mulus dan membeli waktu untuk perbaikan nyata .
Rory Blyth
4
Plus, baru seperti MT, itu hanya jauh lebih mudah untuk membuat binding Anda sendiri jika perlu (MT 1.2). Anda tidak benar-benar tergantung pada peeps MT untuk melakukan semua pekerjaan itu (meskipun mereka sedang melakukan pekerjaan itu), dan tidak pernah ada. Mereka memiliki cara yang sangat sederhana untuk membuat binding. Mereka cukup mengekspos runtime ObjC dengan kerangka MT sehingga Anda tidak terkunci dalam cara mereka melakukan sesuatu. Saya telah menerapkan bindings hanya untuk melihat apakah saya menyukai cara saya yang lebih baik. Anda dapat mengabaikan kerangka MT dan mengirim dan menerima pesan "secara manual" jika Anda mau, dan itu membutuhkan sedikit kode. Mereka orang pintar. Percaya mereka :)
Rory Blyth
2
Saya pikir slf tidak menyadari fakta bahwa Monotouch hanya C # (dengan GC) yang mengikat langsung ke pustaka ObjC + pustaka .NET opsional. Jadi Anda masih menggunakan API yang disediakan oleh apel. Tetapi dengan sintaksis yang rapi dan pengumpulan sampah.
basarat
4

Untuk menambah apa yang telah dikatakan orang lain (baik!): Perasaan saya adalah pada dasarnya Anda menggandakan jumlah bug yang harus Anda khawatirkan, menambahkan yang di MonoTouch ke yang sudah ada di iPhone OS. Memperbarui untuk versi OS baru akan lebih menyakitkan daripada biasanya. Yuck, semuanya.

Satu-satunya kasus yang menarik yang dapat saya lihat untuk MonoTouch adalah organisasi yang memiliki banyak dan banyak programer C # dan kode C # yang harus mereka manfaatkan pada iPhone. (Jenis toko yang bahkan tidak akan berkedip $ 3500.)

Tetapi bagi siapa pun yang memulai dari awal, saya benar-benar tidak dapat melihatnya sebagai sesuatu yang berharga atau bijaksana.

Sixten Otto
sumber
-1: Apa yang Anda maksud dengan "lebih banyak bug"? Apakah ada ketidakcocokan impedansi mencolok antara Mono dan Objective-C?
Jim G.
4

Tiga kata: Linq to SQL

Ya itu sepadan dengan $.

Bryan
sumber
4
Dengan Pengikatan Nilai-Kunci dan Data Inti Objective-C Anda mendapatkan sesuatu yang sangat mirip dengan Linq-to-SQL. Tidak sama. Mungkin tidak sekuat - tetapi mencakup banyak bidang yang sama. Perhatikan bahwa Core-Data saat ini tidak didukung oleh MonoTouch
philsquared
Apakah Linq to SQL bahkan relevan untuk aplikasi iPhone? Ia bekerja dengan SQLite?
bpapa
1
Dan Anda ingin pengguna Anda berbagi data melalui jaringan. Apa yang Anda lakukan dengan SQL lite?
Bryan
"MonoTouch didasarkan pada profil API .NET 2.0 dan Silverlight 2 hibrid" Apakah LINQ mendukung objek?
Chris S
2

Sesuatu yang ingin saya tambahkan, meskipun ada jawaban yang diterima - siapa yang mengatakan bahwa Apple tidak akan hanya menolak aplikasi yang memiliki tanda dibangun dengan Mono Touch?

bapa
sumber
Mereka tentu harus, dan mereka juga harus menolak aplikasi Flash, tetapi ketentuan App Store mereka tidak melarang menggunakannya.
NSResponder
3
@ bpapa - itu masalah yang benar-benar valid, tetapi: 1) Tidak ada alasan untuk menolak aplikasi (pengguna tidak peduli dengan apa aplikasi mereka ditulis - mereka peduli dengan aplikasi itu sendiri), dan 2) MonoTouch memiliki banyak potensi untuk pengembangan perusahaan , dan selama Anda memiliki akun pengembang perusahaan, Apple tidak dapat menghentikan Anda dari mendistribusikan aplikasi Anda. Juga, Apple menerima game yang dibangun dengan Unity. Pada akhirnya, MT mengikuti aturan. Proses Apple kadang-kadang tampak acak, tetapi ... MT mengikuti aturan: |
Rory Blyth
1
@ bpapa - Tidak tahu bagaimana saya melewatkan komentar ini begitu lama, tetapi: 1) Banyak aplikasi ObjC "rusak" karena menggunakan API ("pribadi") yang tidak berdokumen - FB, seperti yang Anda perhatikan, menjadi salah satu dari mereka, namun FB masih hidup dan tersedia untuk diunduh, 2) Masalah Unity dengan cepat diatasi, dan Unity kembali ke sana. - Sejauh Apple ingin Anda menggunakan barang-barang mereka sendiri, saya tidak akan tidak setuju, tetapi keinginan dan kebutuhan sangat berbeda. Sedangkan untuk aplikasi perusahaan: Anda dapat menggunakan aplikasi perusahaan MT. Mereka hanya binari asli. Saya tidak melihat masalahnya, saya juga tidak mengerti mengapa Anda begitu anti-MT.
Rory Blyth
1
Saya harus menambahkan bahwa ini bukan karena saya "membenci" sintaks ObjC, tetapi saya lebih suka C #. Saya juga lebih suka. Net framework's Cara daripada Cocoa. Manipulasi string, pemrosesan XML, apa pun yang melibatkan tanggal, dll. - Saya akan menggunakan binding MT CocoaTouch untuk pekerjaan UI, tetapi untuk sebagian besar tugas lainnya, bagian dari kerangka .Net yang dikirimkan bersama MT membuat hidup jauh lebih mudah. Saya bisa terus dan terus (seperti preferensi saya untuk menemukan bug tertentu pada waktu kompilasi ). Saya mengkritik tumpukan Apple, tetapi saya tidak menyukainya. Mungkin untuk menyukai MT dan ObjC / etc.
Rory Blyth
1
Apple telah berubah pikiran dan sekarang menerima aplikasi dalam bahasa / kerangka kerja apa pun, dan menetapkan daftar kriteria yang lebih 'obyektif' untuk menerima aplikasi di toko.
Monoman
2

Saya akan menginvestasikan waktu di Objective-C terutama karena semua bantuan yang Anda dapat dapatkan dari situs-situs seperti ini. Salah satu kekuatan Objective-C adalah Anda dapat menggunakan kode C dan C ++, dan ada banyak proyek di luar sana yang diuji dengan baik. .

Hal lain adalah kode Anda (bahasa pilihan) akan didukung oleh apel. Apa itu iOS 5.x misalnya menghapus dukungan untuk solusi pihak ketiga seperti MonoTouch? Apa yang akan Anda beri tahu pelanggan Anda?

Mungkin lebih baik menggunakan solusi platform independen seperti HTML5 jika Anda belum siap untuk pindah ke Objective-C?

Konrad77
sumber
Saya menemukan argumen bahwa dengan menggunakan MonoTouch Anda terkunci ke vendor yang mungkin dihentikan Apple untuk memungkinkan / mendukung sangat kuat. Anda dapat akhirnya berinvestasi dalam platform yang berada di bawah kekuasaan Apple yang memiliki platform pengembangan sendiri ...
jl.
2

Saya telah menggunakan MonoTouch selama beberapa bulan sekarang, saya porting aplikasi setengah jadi saya dari ObjectiveC sehingga saya dapat mendukung Android di beberapa titik di masa depan.

Inilah pengalaman saya:

Bit buruk:

  • Studio Xamarin. Pengembang Indie seperti saya terpaksa menggunakan Xamarin Studio. Semakin baik setiap minggu, para pengembang sangat aktif di forum mengidentifikasi dan memperbaiki bug, tetapi masih sangat lambat, sering hang, memiliki banyak bug dan debugging juga sangat lambat.

  • Membangun kali. Membangun aplikasi besar saya (yang ditautkan) untuk melakukan debug pada suatu perangkat dapat memakan waktu beberapa menit, ini dibandingkan dengan XCode yang segera menyebar. Membangun untuk simulator (tidak terhubung) sedikit lebih cepat.

  • Masalah MonoTouch. Saya mengalami masalah kebocoran memori yang disebabkan oleh penanganan acara, dan harus melakukan beberapa solusi yang cukup buruk untuk mencegah kebocoran, seperti memasang dan melepaskan acara saat memasuki dan meninggalkan tampilan. Pengembang Xamarin secara aktif mencari masalah seperti ini.

  • Perpustakaan pihak ke-3. Saya telah menghabiskan cukup banyak waktu mengonversi / mengikat pustaka ObjectiveC untuk digunakan di aplikasi saya, meskipun ini semakin baik dengan perangkat lunak otomatis seperti Objective Sharpie.

  • Binari yang lebih besar. Ini tidak terlalu mengganggu saya, tetapi saya pikir saya akan menyebutkannya. IMO beberapa Mb tambahan tidak ada artinya hari ini.

Bit yang baik:

  • Multi-platform. Teman saya dengan senang hati membuat versi Android aplikasi saya dari basis kode inti saya, kami sedang mengembangkan secara paralel dan berkomitmen untuk repositori Git jarak jauh di Dropbox, itu berjalan dengan baik.

  • .Bersih. Bekerja di C # .Net jauh lebih bagus daripada Objective C IMO.

  • MonoTouch. Hampir semua yang ada di iOS dicerminkan di .Net dan cukup mudah untuk membuat semuanya berfungsi.

  • Xamarin. Anda dapat melihat bahwa orang-orang ini benar-benar bekerja untuk meningkatkan segalanya, membuat pengembangan lebih lancar dan lebih mudah.

Saya pasti merekomendasikan Xamarin untuk pengembangan lintas platform, terutama jika Anda memiliki uang untuk menggunakan edisi Bisnis atau Perusahaan yang bekerja dengan Visual Studio.

Jika Anda hanya membuat aplikasi iPhone yang tidak akan pernah diperlukan di platform lain, dan Anda adalah pengembang Indie, saya akan tetap menggunakan XCode dan Objective C untuk saat ini.

danfordham
sumber
Pembaruan cepat pada jawaban saya di atas. Sejak pindah ke Mac yang lebih cepat, saya menemukan waktu build menjadi jauh lebih cepat, ini masih belum instan seperti XCode tetapi tidak masalah.
danfordham
1

Sebagai seseorang yang berpengalaman dengan C # dan juga Objective-C, saya akan mengatakan bagi kebanyakan orang Xamarin bernilai baik.

C # adalah bahasa yang dirancang sangat bagus dan C # API juga dirancang dengan baik. Tentu saja Cocoa Touch API (termasuk UIKit) juga memiliki desain yang hebat, namun bahasa ini dapat ditingkatkan dengan beberapa cara. Saat menulis dalam C # Anda kemungkinan akan lebih produktif dibandingkan dengan menulis kode yang sama di Objective-C. Ini karena beberapa alasan, tetapi beberapa alasan adalah:

  • C # memiliki tipe inferensi . Ketik inferensi membuat penulisan kode lebih cepat, karena Anda tidak harus "tahu" jenis di sisi kiri dari suatu tugas. Ini juga membuat refactoring lebih mudah dan lebih hemat.

  • C # memiliki generik , yang akan mengurangi kesalahan dibandingkan dengan kode Objective-C yang setara (meskipun ada beberapa solusi di Objective-C, dalam kebanyakan situasi pengembang akan menghindarinya).

  • Baru-baru ini Xamarin menambahkan dukungan untuk Async / Await , yang membuat penulisan kode asinkron sangat mudah.

  • Anda dapat menggunakan kembali bagian dari basis kode di iOS, Android dan Windows Phone.

  • MonoTouch sebagian besar mengimplementasikan API CocoaTouch dengan cara yang sangat mudah. Misalnya: jika Anda memiliki pengalaman dengan CocoaTouch, Anda akan tahu di mana menemukan kelas untuk kontrol di MonoTouch (MonoTouch.UIKit berisi kelas untuk UIButton, UIView, UINavigationController, dll ..., demikian juga MonoTouch.Foundation mendapat kelas untuk NSString, NSData, dll ...).

  • Xamarin akan memberi pengguna pengalaman asli, tidak seperti solusi seperti PhoneGap atau Titanium.

Sekarang Objective-C memiliki beberapa kelebihan dibandingkan C #, tetapi dalam kebanyakan situasi menulis aplikasi dalam C # umumnya akan menghasilkan waktu pengembangan dan kode yang lebih sedikit dan lebih sedikit pekerjaan untuk mem-port aplikasi yang sama ke platform lain. Satu pengecualian penting mungkin adalah game berkinerja tinggi yang mengandalkan OpenGL.

Wolfgang Schreurs
sumber
-35

Biaya perpustakaan MonoTouch sepenuhnya tidak penting. Alasan Anda tidak harus menggunakan Mono untuk aplikasi iPhone Anda, adalah karena itu adalah penopang. Jika Anda tidak perlu repot untuk mempelajari alat asli, maka saya tidak punya alasan untuk percaya bahwa produk Anda layak diunduh.

Sunting: 4/14/2010 Aplikasi yang ditulis dengan MonoTouch tidak memenuhi syarat untuk iTunes Store. Ini sudah seharusnya. Apple melihat banyak port dangkal di Mac, menggunakan cross-platform toolkit seperti Qt, atau Adobe sendiri menerapkan kembali sebagian dari toolbox System 7, dan panjang dan pendeknya adalah mereka tidak cukup baik.

NSResponder
sumber
14
Pangsa pasar untuk Mac OS X sangat kecil dan karena itu iPhone adalah satu-satunya alasan kuat untuk mempertimbangkan mengganggu dengan X-Code dan ObjC. Keduanya hebat 15+ tahun yang lalu ketika itu adalah Project Builder dan melakukan komplikasi dan pengepakan lintas platform tetapi terus terang - sebagai seseorang yang menggunakan berbagai platform - dengan alat dan bahasa yang lebih baik di luar sana sekarang, tidak mengherankan jika pengembang ingin memanfaatkan kesamaan basis kode dan gunakan alat pengembangan alternatif. Itu tidak menyiratkan bahwa kreasi mereka akan di bawah par.
Iain Collins
37
Saya tidak tahu, bung ... Saya pikir Objective-C dan CocoaTouch adalah penopang. Jika Anda tidak menulis rakitan, saya akan merasa seperti Anda tidak terlalu peduli, dan saya tidak akan mengunduh aplikasi Anda (karena hal pertama yang dilakukan pengguna, tentu saja, adalah memeriksa alat apa yang digunakan untuk membangun aplikasi simulasi perut kembung yang mereka unduh).
Rory Blyth
3
Andrew, kamu tidak tahu dari mana kamu berbicara. Objective-C tidak ada terpencil; itu adalah tulang punggung lingkungan pengembangan asli untuk Mac, iPhone, dan iPad.
NSResponder
5
Jadi Anda memilih satu contoh sederhana dari sesuatu yang telah dibangun Apple ke dalam kerangka kerja, dan mengklaim keunggulan, sementara dengan mudah mengabaikan bagian-bagian kerangka kerja yang jauh lebih clunkier daripada yang setara dengan C #? Bukankah itu semacam argumen yang konyol?
Andrew Rollings
8
Saya beralih ke MonoTouch dan telah menerbitkan 47 aplikasi sejauh ini di 4.0 juga. Saya melakukannya penuh waktu. Bekerja dengan sangat baik, cepat. Saya dulu menulis di Objective C tetapi menemukan C # dengan Linq lebih cepat dengan kode yang jauh lebih sedikit untuk ditulis.
Ian Vink