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?
c#
objective-c
mono
xamarin.ios
jamesaharvey
sumber
sumber
Jawaban:
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 :)
sumber
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 #.
sumber
Jadi, jawaban saya untuk pertanyaan serupa sebelumnya adalah belajar Objective-C. (Juga, jangan lupa tentang dukungan debugging)
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?
sumber
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.
sumber
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.
sumber
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.
sumber
Secara pribadi saya pikir Anda akan memiliki waktu yang lebih baik hanya belajar Objective-C.
Pendeknya:
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.
sumber
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.
sumber
Tiga kata: Linq to SQL
Ya itu sepadan dengan $.
sumber
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?
sumber
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?
sumber
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.
sumber
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.
sumber
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.
sumber